chrome-devtools-frontend 1.0.1040337 → 1.0.1070764

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 (1002) hide show
  1. package/AUTHORS +4 -1
  2. package/README.md +4 -10
  3. package/config/gni/devtools_grd_files.gni +41 -25
  4. package/config/gni/devtools_image_files.gni +4 -0
  5. package/docs/README.md +81 -0
  6. package/{ARCHITECTURE.md → docs/architecture_of_devtools.md} +5 -6
  7. package/docs/{images/architecture-lazy-loading-features.png → architecture_of_devtools_lazy_loading_features.png} +0 -0
  8. package/docs/{images/module-visibility-rules.png → architecture_of_devtools_module_visibility_rules.png} +0 -0
  9. package/docs/design_guidelines.md +3 -1
  10. package/docs/{images/DevToolsDesignGuidelines.png → design_guidelines.png} +0 -0
  11. package/docs/l10n.md +293 -0
  12. package/docs/navbar.md +13 -0
  13. package/docs/third_party_guidelines.md +78 -0
  14. package/docs/workflows.md +6 -1
  15. package/extension-api/ExtensionAPI.d.ts +1 -0
  16. package/front_end/Images/src/edit-icon.svg +3 -0
  17. package/front_end/Images/src/frame-embedded-icon.svg +61 -0
  18. package/front_end/Images/src/frame-icon.svg +54 -0
  19. package/front_end/Images/src/trash_bin_material_icon.svg +1 -0
  20. package/front_end/Images/src/triangle-expanded.svg +1 -1
  21. package/front_end/Tests.js +0 -25
  22. package/front_end/core/common/ResourceType.ts +7 -1
  23. package/front_end/core/common/Revealer.ts +3 -0
  24. package/front_end/core/common/common.ts +2 -0
  25. package/front_end/core/dom_extension/DOMExtension.ts +1 -138
  26. package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -0
  27. package/front_end/core/host/ResourceLoader.ts +15 -5
  28. package/front_end/core/host/UserMetrics.ts +43 -10
  29. package/front_end/core/i18n/locales/af.json +194 -110
  30. package/front_end/core/i18n/locales/am.json +205 -121
  31. package/front_end/core/i18n/locales/ar.json +196 -112
  32. package/front_end/core/i18n/locales/as.json +195 -111
  33. package/front_end/core/i18n/locales/az.json +196 -112
  34. package/front_end/core/i18n/locales/be.json +193 -109
  35. package/front_end/core/i18n/locales/bg.json +193 -109
  36. package/front_end/core/i18n/locales/bn.json +197 -113
  37. package/front_end/core/i18n/locales/bs.json +194 -110
  38. package/front_end/core/i18n/locales/ca.json +197 -113
  39. package/front_end/core/i18n/locales/cs.json +192 -108
  40. package/front_end/core/i18n/locales/cy.json +193 -109
  41. package/front_end/core/i18n/locales/da.json +194 -110
  42. package/front_end/core/i18n/locales/de.json +199 -115
  43. package/front_end/core/i18n/locales/el.json +191 -107
  44. package/front_end/core/i18n/locales/en-GB.json +193 -109
  45. package/front_end/core/i18n/locales/en-US.json +323 -233
  46. package/front_end/core/i18n/locales/en-XL.json +323 -233
  47. package/front_end/core/i18n/locales/es-419.json +195 -111
  48. package/front_end/core/i18n/locales/es.json +192 -108
  49. package/front_end/core/i18n/locales/et.json +195 -111
  50. package/front_end/core/i18n/locales/eu.json +197 -113
  51. package/front_end/core/i18n/locales/fa.json +243 -159
  52. package/front_end/core/i18n/locales/fi.json +192 -108
  53. package/front_end/core/i18n/locales/fil.json +193 -109
  54. package/front_end/core/i18n/locales/fr-CA.json +198 -114
  55. package/front_end/core/i18n/locales/fr.json +220 -136
  56. package/front_end/core/i18n/locales/gl.json +196 -112
  57. package/front_end/core/i18n/locales/gu.json +196 -112
  58. package/front_end/core/i18n/locales/he.json +201 -117
  59. package/front_end/core/i18n/locales/hi.json +200 -116
  60. package/front_end/core/i18n/locales/hr.json +192 -108
  61. package/front_end/core/i18n/locales/hu.json +195 -111
  62. package/front_end/core/i18n/locales/hy.json +193 -109
  63. package/front_end/core/i18n/locales/id.json +198 -114
  64. package/front_end/core/i18n/locales/is.json +193 -109
  65. package/front_end/core/i18n/locales/it.json +194 -110
  66. package/front_end/core/i18n/locales/ja.json +192 -108
  67. package/front_end/core/i18n/locales/ka.json +194 -110
  68. package/front_end/core/i18n/locales/kk.json +194 -110
  69. package/front_end/core/i18n/locales/km.json +196 -112
  70. package/front_end/core/i18n/locales/kn.json +193 -109
  71. package/front_end/core/i18n/locales/ko.json +196 -112
  72. package/front_end/core/i18n/locales/ky.json +196 -112
  73. package/front_end/core/i18n/locales/lo.json +196 -112
  74. package/front_end/core/i18n/locales/lt.json +192 -108
  75. package/front_end/core/i18n/locales/lv.json +194 -110
  76. package/front_end/core/i18n/locales/mk.json +194 -110
  77. package/front_end/core/i18n/locales/ml.json +194 -110
  78. package/front_end/core/i18n/locales/mn.json +194 -110
  79. package/front_end/core/i18n/locales/mr.json +193 -109
  80. package/front_end/core/i18n/locales/ms.json +193 -109
  81. package/front_end/core/i18n/locales/my.json +198 -114
  82. package/front_end/core/i18n/locales/ne.json +197 -113
  83. package/front_end/core/i18n/locales/nl.json +193 -109
  84. package/front_end/core/i18n/locales/no.json +195 -111
  85. package/front_end/core/i18n/locales/or.json +197 -113
  86. package/front_end/core/i18n/locales/pa.json +195 -111
  87. package/front_end/core/i18n/locales/pl.json +195 -111
  88. package/front_end/core/i18n/locales/pt-PT.json +195 -111
  89. package/front_end/core/i18n/locales/pt.json +194 -110
  90. package/front_end/core/i18n/locales/ro.json +189 -105
  91. package/front_end/core/i18n/locales/ru.json +191 -107
  92. package/front_end/core/i18n/locales/si.json +194 -110
  93. package/front_end/core/i18n/locales/sk.json +192 -108
  94. package/front_end/core/i18n/locales/sl.json +193 -109
  95. package/front_end/core/i18n/locales/sq.json +193 -109
  96. package/front_end/core/i18n/locales/sr-Latn.json +192 -108
  97. package/front_end/core/i18n/locales/sr.json +192 -108
  98. package/front_end/core/i18n/locales/sv.json +191 -107
  99. package/front_end/core/i18n/locales/sw.json +195 -111
  100. package/front_end/core/i18n/locales/ta.json +193 -109
  101. package/front_end/core/i18n/locales/te.json +198 -114
  102. package/front_end/core/i18n/locales/th.json +194 -110
  103. package/front_end/core/i18n/locales/tr.json +192 -108
  104. package/front_end/core/i18n/locales/uk.json +192 -108
  105. package/front_end/core/i18n/locales/ur.json +194 -110
  106. package/front_end/core/i18n/locales/uz.json +190 -106
  107. package/front_end/core/i18n/locales/vi.json +195 -111
  108. package/front_end/core/i18n/locales/zh-HK.json +193 -109
  109. package/front_end/core/i18n/locales/zh-TW.json +195 -111
  110. package/front_end/core/i18n/locales/zh.json +194 -110
  111. package/front_end/core/i18n/locales/zu.json +193 -109
  112. package/front_end/core/platform/dom-utilities.ts +107 -0
  113. package/front_end/core/platform/keyboard-utilities.ts +8 -0
  114. package/front_end/core/platform/string-utilities.ts +10 -0
  115. package/front_end/core/root/Runtime.ts +0 -2
  116. package/front_end/core/sdk/CPUProfileDataModel.ts +11 -4
  117. package/front_end/core/sdk/CPUThrottlingManager.ts +1 -1
  118. package/front_end/core/sdk/CSSMatchedStyles.ts +11 -12
  119. package/front_end/core/sdk/ChildTargetManager.ts +1 -1
  120. package/front_end/core/sdk/ConsoleModel.ts +3 -3
  121. package/front_end/core/sdk/DOMModel.ts +0 -1
  122. package/front_end/core/sdk/DebuggerModel.ts +4 -36
  123. package/front_end/core/sdk/FrameManager.ts +12 -33
  124. package/front_end/core/sdk/NetworkManager.ts +50 -16
  125. package/front_end/core/sdk/NetworkRequest.ts +49 -0
  126. package/front_end/core/sdk/ProfileTreeModel.ts +19 -6
  127. package/front_end/core/sdk/ResourceTreeModel.ts +31 -32
  128. package/front_end/core/sdk/RuntimeModel.ts +1 -1
  129. package/front_end/core/sdk/ScreenCaptureModel.ts +27 -3
  130. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +3 -0
  131. package/front_end/core/sdk/SourceMap.ts +14 -8
  132. package/front_end/core/sdk/SourceMapManager.ts +8 -6
  133. package/front_end/core/sdk/Target.ts +3 -3
  134. package/front_end/core/sdk/TargetManager.ts +12 -1
  135. package/front_end/core/sdk/sdk-legacy.ts +3 -0
  136. package/front_end/core/sdk/sdk-meta.ts +21 -0
  137. package/front_end/devtools_compatibility.js +17 -13
  138. package/front_end/entrypoints/formatter_worker/FormatterActions.ts +0 -3
  139. package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -53
  140. package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +1 -0
  141. package/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.ts +0 -9
  142. package/front_end/entrypoints/formatter_worker/formatter_worker.ts +0 -4
  143. package/front_end/entrypoints/inspector_main/InspectorMain.ts +5 -3
  144. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +35 -0
  145. package/front_end/entrypoints/js_app/js_app.ts +1 -0
  146. package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +17 -9
  147. package/front_end/entrypoints/main/ExecutionContextSelector.ts +1 -1
  148. package/front_end/entrypoints/main/MainImpl.ts +31 -38
  149. package/front_end/entrypoints/main/main-meta.ts +0 -2
  150. package/front_end/entrypoints/node_app/node_app.ts +2 -1
  151. package/front_end/entrypoints/shell/shell.ts +1 -2
  152. package/front_end/generated/ARIAProperties.js +8 -0
  153. package/front_end/generated/InspectorBackendCommands.js +32 -23
  154. package/front_end/generated/SupportedCSSProperties.js +97 -48
  155. package/front_end/generated/protocol-mapping.d.ts +67 -34
  156. package/front_end/generated/protocol-proxy-api.d.ts +52 -29
  157. package/front_end/generated/protocol.ts +344 -89
  158. package/front_end/legacy/legacy-defs.d.ts +1 -3
  159. package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
  160. package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +10 -18
  161. package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +3 -3
  162. package/front_end/legacy_test_runner/test_runner/TestRunner.js +24 -0
  163. package/front_end/legacy_test_runner/test_runner/test_runner.js +15 -13
  164. package/front_end/models/bindings/BreakpointManager.ts +38 -21
  165. package/front_end/models/bindings/CSSWorkspaceBinding.ts +19 -18
  166. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +4 -0
  167. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +32 -37
  168. package/front_end/models/bindings/FileUtils.ts +3 -3
  169. package/front_end/models/bindings/IgnoreListManager.ts +14 -3
  170. package/front_end/models/bindings/ResourceMapping.ts +5 -28
  171. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -13
  172. package/front_end/models/bindings/ResourceUtils.ts +1 -2
  173. package/front_end/models/emulation/DeviceModeModel.ts +11 -13
  174. package/front_end/models/extensions/ExtensionAPI.ts +22 -5
  175. package/front_end/models/extensions/ExtensionServer.ts +31 -14
  176. package/front_end/models/formatter/FormatterWorkerPool.ts +0 -31
  177. package/front_end/models/har/HARFormat.ts +68 -5
  178. package/front_end/models/har/Importer.ts +3 -5
  179. package/front_end/models/har/Log.ts +3 -0
  180. package/front_end/models/issues_manager/AttributionReportingIssue.ts +24 -1
  181. package/front_end/models/issues_manager/DeprecationIssue.ts +113 -33
  182. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +0 -10
  183. package/front_end/models/issues_manager/IssuesManager.ts +3 -12
  184. package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +5 -6
  185. package/front_end/models/issues_manager/descriptions/arPermissionPolicyNotDelegated.md +11 -0
  186. package/front_end/models/javascript_metadata/NativeFunctions.js +121 -97
  187. package/front_end/models/logs/NetworkLog.ts +11 -11
  188. package/front_end/models/persistence/IsolatedFileSystemManager.ts +5 -1
  189. package/front_end/models/persistence/NetworkPersistenceManager.ts +13 -5
  190. package/front_end/models/persistence/PersistenceImpl.ts +2 -1
  191. package/front_end/models/source_map_scopes/NamesResolver.ts +99 -56
  192. package/front_end/models/text_utils/TextUtils.ts +18 -34
  193. package/front_end/models/text_utils/text_utils-legacy.ts +0 -3
  194. package/front_end/models/timeline_model/TimelineModel.ts +2 -2
  195. package/front_end/models/timeline_model/timeline_model-legacy.ts +0 -9
  196. package/front_end/models/timeline_model/timeline_model.ts +0 -3
  197. package/front_end/models/workspace/UISourceCode.ts +12 -6
  198. package/front_end/panels/accessibility/ARIAAttributesView.ts +2 -1
  199. package/front_end/panels/application/AppManifestView.ts +15 -7
  200. package/front_end/panels/application/ApplicationPanelCacheSection.ts +2 -1
  201. package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -9
  202. package/front_end/panels/application/DOMStorageModel.ts +16 -18
  203. package/front_end/panels/application/IndexedDBModel.ts +97 -134
  204. package/front_end/panels/application/IndexedDBViews.ts +1 -3
  205. package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
  206. package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
  207. package/front_end/panels/application/ReportingApiTreeElement.ts +2 -1
  208. package/front_end/panels/application/ReportingApiView.ts +5 -4
  209. package/front_end/panels/application/StorageView.ts +30 -26
  210. package/front_end/panels/application/TrustTokensTreeElement.ts +5 -4
  211. package/front_end/panels/application/application.ts +6 -0
  212. package/front_end/panels/application/components/BackForwardCacheStrings.ts +6 -1
  213. package/front_end/panels/application/components/BackForwardCacheView.ts +149 -92
  214. package/front_end/panels/application/components/FrameDetailsView.ts +66 -7
  215. package/front_end/panels/application/components/OriginTrialTreeView.ts +0 -5
  216. package/front_end/panels/application/components/Prerender2.ts +74 -14
  217. package/front_end/panels/application/components/ProtocolHandlersView.ts +6 -1
  218. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +184 -0
  219. package/front_end/panels/application/components/SharedStorageMetadataView.ts +173 -0
  220. package/front_end/panels/application/components/backForwardCacheView.css +2 -3
  221. package/front_end/panels/application/components/components.ts +4 -0
  222. package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
  223. package/front_end/panels/application/components/permissionsPolicySection.css +1 -1
  224. package/front_end/panels/application/components/protocolHandlersView.css +5 -1
  225. package/front_end/panels/application/components/sharedStorageAccessGrid.css +26 -0
  226. package/front_end/panels/application/components/sharedStorageMetadataView.css +11 -0
  227. package/front_end/panels/application/components/stackTraceLinkButton.css +1 -1
  228. package/front_end/panels/application/components/stackTraceRow.css +1 -1
  229. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -1
  230. package/front_end/panels/console/ConsoleFormat.ts +2 -2
  231. package/front_end/panels/console/ConsolePinPane.ts +1 -1
  232. package/front_end/panels/console/ConsolePrompt.ts +1 -1
  233. package/front_end/panels/console/ConsoleView.ts +1 -0
  234. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  235. package/front_end/panels/console/consoleView.css +5 -0
  236. package/front_end/panels/coverage/CoverageView.ts +2 -2
  237. package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +1 -1
  238. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +6 -24
  239. package/front_end/panels/developer_resources/developer_resources-meta.ts +1 -1
  240. package/front_end/panels/elements/CSSRuleValidator.ts +147 -65
  241. package/front_end/panels/elements/CSSRuleValidatorHelper.ts +32 -2
  242. package/front_end/panels/elements/ClassesPaneWidget.ts +2 -2
  243. package/front_end/panels/elements/ElementsPanel.ts +19 -1
  244. package/front_end/panels/elements/StylePropertiesSection.ts +3 -1
  245. package/front_end/panels/elements/StylePropertyTreeElement.ts +9 -3
  246. package/front_end/panels/elements/StylesSidebarPane.ts +46 -19
  247. package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -2
  248. package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -3
  249. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +19 -2
  250. package/front_end/panels/elements/components/computedStyleProperty.css +3 -3
  251. package/front_end/panels/elements/components/computedStyleTrace.css +8 -4
  252. package/front_end/panels/elements/components/cssHintDetailsView.css +2 -8
  253. package/front_end/panels/elements/elements-meta.ts +28 -0
  254. package/front_end/panels/elements/stylesSectionTree.css +2 -1
  255. package/front_end/panels/elements/stylesSidebarPane.css +7 -0
  256. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +2 -0
  257. package/front_end/panels/issues/IssueView.ts +5 -4
  258. package/front_end/panels/js_profiler/js_profiler-meta.ts +139 -0
  259. package/front_end/panels/lighthouse/LighthouseController.ts +4 -9
  260. package/front_end/panels/lighthouse/LighthousePanel.ts +38 -32
  261. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +16 -15
  262. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +3 -3
  263. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +6 -1
  264. package/front_end/panels/lighthouse/LighthouseReporterTypes.ts +3 -2
  265. package/front_end/panels/lighthouse/LighthouseStartView.ts +162 -89
  266. package/front_end/panels/lighthouse/lighthouseStartView.css +7 -36
  267. package/front_end/panels/media/TickingFlameChart.ts +9 -3
  268. package/front_end/panels/network/NetworkDataGridNode.ts +79 -9
  269. package/front_end/panels/network/NetworkItemView.ts +4 -3
  270. package/front_end/panels/network/NetworkLogView.ts +40 -42
  271. package/front_end/panels/network/NetworkLogViewColumns.ts +2 -1
  272. package/front_end/panels/network/RequestCookiesView.ts +28 -0
  273. package/front_end/panels/network/components/HeaderSectionRow.css +176 -0
  274. package/front_end/panels/network/components/HeaderSectionRow.ts +477 -0
  275. package/front_end/panels/network/components/RequestHeaderSection.css +59 -0
  276. package/front_end/panels/network/components/RequestHeaderSection.ts +133 -0
  277. package/front_end/panels/network/components/RequestHeadersView.css +1 -59
  278. package/front_end/panels/network/components/RequestHeadersView.ts +43 -417
  279. package/front_end/panels/network/components/ResponseHeaderSection.css +21 -0
  280. package/front_end/panels/network/components/ResponseHeaderSection.ts +635 -0
  281. package/front_end/panels/network/components/components.ts +6 -0
  282. package/front_end/panels/network/network-meta.ts +0 -16
  283. package/front_end/panels/network/requestPayloadTree.css +0 -1
  284. package/front_end/panels/profiler/HeapProfileView.ts +7 -6
  285. package/front_end/panels/profiler/LiveHeapProfileView.ts +2 -2
  286. package/front_end/panels/sensors/sensors-meta.ts +0 -10
  287. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +61 -43
  288. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
  289. package/front_end/panels/settings/SettingsScreen.ts +1 -3
  290. package/front_end/panels/settings/components/syncSection.css +1 -1
  291. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +38 -35
  292. package/front_end/panels/sources/BreakpointsSidebarPane.ts +433 -14
  293. package/front_end/panels/sources/CallStackSidebarPane.ts +10 -1
  294. package/front_end/panels/sources/CoveragePlugin.ts +1 -1
  295. package/front_end/panels/sources/DebuggerPlugin.ts +316 -109
  296. package/front_end/panels/sources/GoToLineQuickOpen.ts +22 -49
  297. package/front_end/panels/sources/NavigatorView.ts +2 -10
  298. package/front_end/panels/sources/OpenFileQuickOpen.ts +0 -13
  299. package/front_end/panels/sources/OutlineQuickOpen.ts +274 -45
  300. package/front_end/panels/sources/SourcesNavigator.ts +2 -2
  301. package/front_end/panels/sources/SourcesPanel.ts +13 -9
  302. package/front_end/panels/sources/SourcesView.ts +8 -2
  303. package/front_end/panels/sources/TabbedEditorContainer.ts +8 -0
  304. package/front_end/panels/sources/UISourceCodeFrame.ts +81 -34
  305. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
  306. package/front_end/panels/sources/components/BreakpointsView.ts +472 -28
  307. package/front_end/panels/sources/components/BreakpointsViewUtils.ts +195 -0
  308. package/front_end/panels/sources/components/HeadersView.css +5 -1
  309. package/front_end/panels/sources/components/HeadersView.ts +18 -11
  310. package/front_end/panels/sources/components/breakpointsView.css +136 -11
  311. package/front_end/panels/sources/sources-legacy.ts +0 -5
  312. package/front_end/panels/sources/sources-meta.ts +114 -5
  313. package/front_end/panels/sources/sources.ts +0 -2
  314. package/front_end/panels/sources/watchExpressionsSidebarPane.css +10 -6
  315. package/front_end/panels/timeline/PerformanceModel.ts +65 -18
  316. package/front_end/panels/timeline/TimelineController.ts +11 -5
  317. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -49
  318. package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
  319. package/front_end/panels/timeline/TimelineLoader.ts +41 -24
  320. package/front_end/panels/timeline/TimelinePanel.ts +155 -57
  321. package/front_end/panels/timeline/TimelineUIUtils.ts +1 -263
  322. package/front_end/panels/webauthn/WebauthnPane.ts +2 -2
  323. package/front_end/panels/webauthn/webauthnPane.css +1 -0
  324. package/front_end/services/puppeteer/PuppeteerConnection.ts +51 -42
  325. package/front_end/third_party/additional_readme_paths.json +0 -1
  326. package/front_end/third_party/chromium/client-variations/ClientVariations.js +1 -1
  327. package/front_end/third_party/codemirror.next/bundle.ts +1 -1
  328. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  329. package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
  330. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +7 -1
  331. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  332. package/front_end/third_party/codemirror.next/package.json +4 -2
  333. package/front_end/third_party/i18n/localized-string-set.ts +9 -1
  334. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +431 -434
  335. package/front_end/third_party/lighthouse/locales/en-US.json +144 -186
  336. package/front_end/third_party/lighthouse/locales/en-XL.json +144 -186
  337. package/front_end/third_party/puppeteer/README.chromium +14 -6
  338. package/front_end/third_party/puppeteer/package/README.md +134 -316
  339. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +337 -0
  340. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -0
  341. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +248 -0
  342. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -0
  343. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +148 -0
  344. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -0
  345. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js +135 -0
  346. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -0
  347. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +2100 -0
  348. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -0
  349. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +536 -0
  350. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -0
  351. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts +2 -2
  352. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js +39 -23
  354. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts +17 -199
  356. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js +112 -202
  358. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js.map +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts +9 -3
  360. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts.map +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +5 -6
  362. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  363. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.d.ts +1 -1
  364. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.d.ts.map +1 -1
  365. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.js +0 -6
  366. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.js.map +1 -1
  367. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.d.ts +133 -0
  368. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.d.ts.map +1 -0
  369. package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/initializePuppeteer.d.ts → cjs/puppeteer/common/Configuration.js} +4 -7
  370. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.js.map +1 -0
  371. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts +24 -0
  372. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
  373. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js +67 -28
  374. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js.map +1 -1
  375. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts +11 -2
  376. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
  377. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js +7 -5
  378. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
  379. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts +52 -0
  380. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts.map +1 -0
  381. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/{DeviceDescriptors.js → Device.js} +17 -11
  382. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.js.map +1 -0
  383. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.d.ts +29 -6
  384. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.d.ts.map +1 -1
  385. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.js +69 -46
  386. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.js.map +1 -1
  387. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +27 -3
  388. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  389. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +47 -2
  390. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  391. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts +16 -1
  392. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
  393. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js +16 -1
  394. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
  395. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.d.ts +2 -36
  396. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.d.ts.map +1 -1
  397. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js +20 -59
  398. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
  399. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FirefoxTargetManager.d.ts +1 -1
  400. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FirefoxTargetManager.d.ts.map +1 -1
  401. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.d.ts +47 -21
  402. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.d.ts.map +1 -1
  403. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.js +155 -43
  404. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.js.map +1 -1
  405. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts +7 -2
  406. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
  407. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js +47 -97
  408. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
  409. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.d.ts +39 -0
  410. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.d.ts.map +1 -0
  411. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.js +120 -0
  412. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.js.map +1 -0
  413. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts +2 -2
  414. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js +2 -2
  415. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.d.ts +13 -67
  416. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.d.ts.map +1 -1
  417. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.js +124 -511
  418. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.js.map +1 -1
  419. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts +5 -5
  420. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
  421. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js +7 -9
  422. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
  423. package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/node/install.d.ts → cjs/puppeteer/common/LazyArg.d.ts} +7 -7
  424. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.d.ts.map +1 -0
  425. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.js +45 -0
  426. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.js.map +1 -0
  427. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
  428. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js +12 -2
  429. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
  430. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.d.ts +15 -0
  431. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.d.ts.map +1 -1
  432. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.js +15 -0
  433. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.js.map +1 -1
  434. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts +1 -4
  435. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
  436. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js +2 -2
  437. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
  438. package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/node → cjs/puppeteer/common}/NodeWebSocketTransport.d.ts +1 -1
  439. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NodeWebSocketTransport.d.ts.map +1 -0
  440. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/{node → common}/NodeWebSocketTransport.js +1 -15
  441. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NodeWebSocketTransport.js.map +1 -0
  442. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts +35 -496
  443. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
  444. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js +287 -414
  445. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js.map +1 -1
  446. package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/common/NetworkConditions.d.ts → cjs/puppeteer/common/PredefinedNetworkConditions.d.ts} +13 -6
  447. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PredefinedNetworkConditions.d.ts.map +1 -0
  448. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/{NetworkConditions.js → PredefinedNetworkConditions.js} +12 -8
  449. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PredefinedNetworkConditions.js.map +1 -0
  450. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.d.ts +36 -61
  451. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.d.ts.map +1 -1
  452. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js +32 -66
  453. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
  454. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts +26 -34
  455. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts.map +1 -1
  456. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js +57 -94
  457. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js.map +1 -1
  458. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts +3 -2
  459. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
  460. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js +2 -2
  461. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js.map +1 -1
  462. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts +52 -0
  463. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -0
  464. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +204 -0
  465. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -0
  466. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.d.ts +4 -5
  467. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.d.ts.map +1 -1
  468. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.js +23 -27
  469. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.js.map +1 -1
  470. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.d.ts +45 -0
  471. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.d.ts.map +1 -0
  472. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.js +75 -0
  473. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.js.map +1 -0
  474. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.d.ts +28 -0
  475. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.d.ts.map +1 -0
  476. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.js +52 -0
  477. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.js.map +1 -0
  478. package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/puppeteer.js → cjs/puppeteer/common/bidi/Connection.d.ts} +20 -10
  479. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.d.ts.map +1 -0
  480. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.js +133 -0
  481. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.js.map +1 -0
  482. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.d.ts +28 -0
  483. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.d.ts.map +1 -0
  484. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.js +61 -0
  485. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.js.map +1 -0
  486. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts +11 -0
  487. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts.map +1 -1
  488. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts +0 -4
  489. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
  490. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +25 -59
  491. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
  492. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +4 -0
  493. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  494. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +8 -1
  495. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  496. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +8 -2
  497. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  498. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +8 -2
  499. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  500. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  501. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  502. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.d.ts +9 -0
  503. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.d.ts.map +1 -0
  504. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.js +71 -0
  505. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.js.map +1 -0
  506. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.d.ts +32 -6
  507. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.d.ts.map +1 -1
  508. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.js +30 -7
  509. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.js.map +1 -1
  510. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.d.ts +39 -0
  511. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.d.ts.map +1 -0
  512. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.js +133 -0
  513. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.js.map +1 -0
  514. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.d.ts +28 -0
  515. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.d.ts.map +1 -0
  516. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.js +80 -0
  517. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.js.map +1 -0
  518. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.d.ts +24 -0
  519. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.d.ts.map +1 -0
  520. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +42 -0
  521. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -0
  522. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +44 -1
  523. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts.map +1 -1
  524. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.js +52 -3
  525. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.js.map +1 -1
  526. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.d.ts +26 -0
  527. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.d.ts.map +1 -0
  528. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.js +58 -0
  529. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.js.map +1 -0
  530. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.d.ts +50 -14
  531. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  532. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js +137 -154
  533. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
  534. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts +6 -0
  535. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  536. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js +16 -7
  537. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
  538. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts +6 -18
  539. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  540. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +88 -28
  541. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  542. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.d.ts +4 -18
  543. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.d.ts.map +1 -1
  544. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.js +40 -33
  545. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.js.map +1 -1
  546. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.d.ts +15 -0
  547. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.d.ts.map +1 -1
  548. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.js +1 -16
  549. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.js.map +1 -1
  550. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.d.ts +24 -22
  551. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.d.ts.map +1 -1
  552. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.js +94 -130
  553. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.js.map +1 -1
  554. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/{Puppeteer.d.ts → PuppeteerNode.d.ts} +74 -43
  555. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -0
  556. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +271 -0
  557. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -0
  558. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.d.ts +21 -5
  559. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.d.ts.map +1 -1
  560. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.js +22 -6
  561. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.js.map +1 -1
  562. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +1 -1
  563. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +1 -1
  564. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.d.ts +24 -18
  565. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.d.ts.map +1 -1
  566. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.js +25 -22
  567. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.js.map +1 -1
  568. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.d.ts +9 -0
  569. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.d.ts.map +1 -0
  570. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.js +22 -0
  571. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.js.map +1 -0
  572. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.d.ts +12 -10
  573. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.d.ts.map +1 -1
  574. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.js +17 -44
  575. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.js.map +1 -1
  576. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/mitt/index.d.ts +23 -0
  577. package/front_end/third_party/puppeteer/package/lib/cjs/third_party/mitt/index.js +5 -0
  578. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +337 -0
  579. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -0
  580. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +244 -0
  581. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -0
  582. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +148 -0
  583. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -0
  584. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js +131 -0
  585. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -0
  586. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +2100 -0
  587. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -0
  588. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +532 -0
  589. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -0
  590. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts +2 -2
  591. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  592. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js +39 -23
  593. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
  594. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +17 -199
  595. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
  596. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +108 -198
  597. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js.map +1 -1
  598. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts +9 -3
  599. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts.map +1 -1
  600. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +4 -5
  601. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  602. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.d.ts +1 -1
  603. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.d.ts.map +1 -1
  604. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.js +0 -6
  605. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.js.map +1 -1
  606. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.d.ts +133 -0
  607. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.d.ts.map +1 -0
  608. package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/initializePuppeteer.d.ts → esm/puppeteer/common/Configuration.js} +3 -7
  609. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.js.map +1 -0
  610. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +24 -0
  611. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
  612. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +63 -26
  613. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js.map +1 -1
  614. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts +11 -2
  615. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
  616. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js +7 -5
  617. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js.map +1 -1
  618. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts +52 -0
  619. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts.map +1 -0
  620. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/{DeviceDescriptors.js → Device.js} +16 -10
  621. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.js.map +1 -0
  622. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.d.ts +29 -6
  623. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.d.ts.map +1 -1
  624. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.js +69 -46
  625. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.js.map +1 -1
  626. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +27 -3
  627. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  628. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +47 -2
  629. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  630. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts +16 -1
  631. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
  632. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js +16 -1
  633. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js.map +1 -1
  634. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts +2 -36
  635. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts.map +1 -1
  636. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.js +20 -59
  637. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.js.map +1 -1
  638. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FirefoxTargetManager.d.ts +1 -1
  639. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FirefoxTargetManager.d.ts.map +1 -1
  640. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.d.ts +47 -21
  641. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.d.ts.map +1 -1
  642. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.js +132 -43
  643. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.js.map +1 -1
  644. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts +7 -2
  645. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
  646. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +47 -97
  647. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
  648. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.d.ts +39 -0
  649. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.d.ts.map +1 -0
  650. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.js +116 -0
  651. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.js.map +1 -0
  652. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +2 -2
  653. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +2 -2
  654. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.d.ts +13 -67
  655. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.d.ts.map +1 -1
  656. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.js +124 -487
  657. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.js.map +1 -1
  658. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +5 -5
  659. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
  660. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +7 -9
  661. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
  662. package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/node/install.d.ts → esm/puppeteer/common/LazyArg.d.ts} +7 -7
  663. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.d.ts.map +1 -0
  664. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.js +41 -0
  665. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.js.map +1 -0
  666. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
  667. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.js +12 -2
  668. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.js.map +1 -1
  669. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.d.ts +15 -0
  670. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.d.ts.map +1 -1
  671. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.js +15 -0
  672. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.js.map +1 -1
  673. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts +1 -4
  674. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
  675. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +2 -2
  676. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
  677. package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/node → esm/puppeteer/common}/NodeWebSocketTransport.d.ts +1 -1
  678. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NodeWebSocketTransport.d.ts.map +1 -0
  679. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/{node → common}/NodeWebSocketTransport.js +1 -15
  680. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NodeWebSocketTransport.js.map +1 -0
  681. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +35 -496
  682. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
  683. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +287 -414
  684. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js.map +1 -1
  685. package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/common/NetworkConditions.d.ts → esm/puppeteer/common/PredefinedNetworkConditions.d.ts} +13 -6
  686. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PredefinedNetworkConditions.d.ts.map +1 -0
  687. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/{NetworkConditions.js → PredefinedNetworkConditions.js} +11 -7
  688. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PredefinedNetworkConditions.js.map +1 -0
  689. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts +36 -61
  690. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts.map +1 -1
  691. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.js +33 -67
  692. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.js.map +1 -1
  693. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts +26 -34
  694. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -1
  695. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +57 -94
  696. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js.map +1 -1
  697. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts +3 -2
  698. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
  699. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js +2 -2
  700. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js.map +1 -1
  701. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts +52 -0
  702. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -0
  703. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +199 -0
  704. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -0
  705. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts +4 -5
  706. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts.map +1 -1
  707. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.js +23 -27
  708. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.js.map +1 -1
  709. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.d.ts +45 -0
  710. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.d.ts.map +1 -0
  711. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.js +71 -0
  712. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.js.map +1 -0
  713. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.d.ts +28 -0
  714. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.d.ts.map +1 -0
  715. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.js +48 -0
  716. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.js.map +1 -0
  717. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.d.ts +37 -0
  718. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.d.ts.map +1 -0
  719. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.js +129 -0
  720. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.js.map +1 -0
  721. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.d.ts +28 -0
  722. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.d.ts.map +1 -0
  723. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.js +57 -0
  724. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.js.map +1 -0
  725. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts +11 -0
  726. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts.map +1 -1
  727. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts +0 -4
  728. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
  729. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +24 -57
  730. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
  731. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +4 -0
  732. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  733. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +7 -0
  734. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  735. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +8 -2
  736. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  737. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +8 -2
  738. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  739. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  740. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  741. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.d.ts +9 -0
  742. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.d.ts.map +1 -0
  743. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.js +66 -0
  744. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.js.map +1 -0
  745. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.d.ts +32 -6
  746. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.d.ts.map +1 -1
  747. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.js +30 -7
  748. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.js.map +1 -1
  749. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.d.ts +39 -0
  750. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.d.ts.map +1 -0
  751. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.js +128 -0
  752. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.js.map +1 -0
  753. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.d.ts +28 -0
  754. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.d.ts.map +1 -0
  755. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.js +75 -0
  756. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.js.map +1 -0
  757. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.d.ts +24 -0
  758. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.d.ts.map +1 -0
  759. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +37 -0
  760. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -0
  761. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts +44 -1
  762. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts.map +1 -1
  763. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.js +41 -1
  764. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.js.map +1 -1
  765. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.d.ts +26 -0
  766. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.d.ts.map +1 -0
  767. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.js +53 -0
  768. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.js.map +1 -0
  769. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts +50 -14
  770. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  771. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +137 -154
  772. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
  773. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts +6 -0
  774. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  775. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +14 -5
  776. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
  777. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts +6 -18
  778. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  779. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +89 -29
  780. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  781. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.d.ts +4 -18
  782. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.d.ts.map +1 -1
  783. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.js +41 -34
  784. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.js.map +1 -1
  785. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts +15 -0
  786. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts.map +1 -1
  787. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.js +1 -16
  788. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.js.map +1 -1
  789. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.d.ts +24 -22
  790. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.d.ts.map +1 -1
  791. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.js +70 -124
  792. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.js.map +1 -1
  793. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/{Puppeteer.d.ts → PuppeteerNode.d.ts} +74 -43
  794. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -0
  795. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +267 -0
  796. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -0
  797. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.d.ts +21 -5
  798. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.d.ts.map +1 -1
  799. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.js +22 -6
  800. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.js.map +1 -1
  801. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +1 -1
  802. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +1 -1
  803. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.d.ts +24 -18
  804. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.d.ts.map +1 -1
  805. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.js +25 -22
  806. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.js.map +1 -1
  807. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.d.ts +9 -0
  808. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.d.ts.map +1 -0
  809. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.js +18 -0
  810. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.js.map +1 -0
  811. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.d.ts +12 -10
  812. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.d.ts.map +1 -1
  813. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.js +16 -42
  814. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.js.map +1 -1
  815. package/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt/index.d.ts +23 -0
  816. package/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt/index.js +3 -0
  817. package/front_end/third_party/puppeteer/package/lib/types.d.ts +548 -513
  818. package/front_end/third_party/puppeteer/package/package.json +125 -104
  819. package/front_end/third_party/puppeteer/puppeteer.ts +3 -3
  820. package/front_end/ui/components/buttons/Button.ts +30 -1
  821. package/front_end/ui/components/buttons/button.css +21 -0
  822. package/front_end/ui/components/chrome_link/ChromeLink.ts +3 -2
  823. package/front_end/ui/components/chrome_link/chromeLink.css +1 -1
  824. package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +21 -2
  825. package/front_end/ui/components/docs/button/basic.ts +43 -10
  826. package/front_end/ui/components/docs/elements_breadcrumbs/basic.ts +2 -0
  827. package/front_end/ui/components/docs/elements_breadcrumbs/scroll-to-active-element.ts +10 -3
  828. package/front_end/ui/components/docs/two_states_counter/basic.html +27 -0
  829. package/front_end/ui/components/docs/two_states_counter/basic.ts +45 -0
  830. package/front_end/ui/components/expandable_list/expandableList.css +1 -1
  831. package/front_end/ui/components/helpers/scheduled-render.ts +5 -2
  832. package/front_end/ui/components/icon_button/iconButton.css +2 -0
  833. package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts +23 -12
  834. package/front_end/ui/components/linkifier/linkifierImpl.css +1 -0
  835. package/front_end/ui/components/markdown_view/MarkdownImage.ts +0 -4
  836. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +4 -0
  837. package/front_end/ui/components/markdown_view/MarkdownView.ts +39 -38
  838. package/front_end/ui/components/markdown_view/markdownLink.css +1 -0
  839. package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +12 -6
  840. package/front_end/ui/components/survey_link/surveyLink.css +1 -0
  841. package/front_end/ui/components/text_editor/TextEditor.ts +75 -9
  842. package/front_end/ui/components/text_editor/config.ts +58 -2
  843. package/front_end/ui/components/text_editor/position.ts +2 -0
  844. package/front_end/ui/components/text_editor/theme.ts +10 -0
  845. package/front_end/ui/components/text_prompt/textPrompt.css +4 -0
  846. package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -8
  847. package/front_end/ui/components/tree_outline/treeOutline.css +20 -0
  848. package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +103 -0
  849. package/front_end/ui/components/two_states_counter/twoStatesCounter.css +37 -0
  850. package/front_end/ui/components/two_states_counter/two_states_counter.ts +9 -0
  851. package/front_end/ui/legacy/ARIAUtils.ts +4 -1
  852. package/front_end/ui/legacy/Context.ts +5 -1
  853. package/front_end/ui/legacy/DockController.ts +19 -0
  854. package/front_end/ui/legacy/FilterBar.ts +3 -1
  855. package/front_end/ui/legacy/InspectorView.ts +6 -2
  856. package/front_end/ui/legacy/ListWidget.ts +5 -1
  857. package/front_end/ui/legacy/SearchableView.ts +6 -19
  858. package/front_end/ui/legacy/SoftContextMenu.ts +20 -6
  859. package/front_end/ui/legacy/TabbedPane.ts +7 -5
  860. package/front_end/ui/legacy/TextPrompt.ts +1 -2
  861. package/front_end/ui/legacy/Toolbar.ts +6 -4
  862. package/front_end/ui/legacy/UIUtils.ts +8 -8
  863. package/front_end/ui/legacy/XLink.ts +3 -3
  864. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +9 -10
  865. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  866. package/front_end/ui/legacy/components/data_grid/dataGrid.css +7 -6
  867. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +9 -2
  868. package/front_end/ui/legacy/components/inline_editor/CSSLength.ts +10 -2
  869. package/front_end/ui/legacy/components/inline_editor/CSSVarSwatch.ts +22 -9
  870. package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +3 -2
  871. package/front_end/ui/legacy/components/inline_editor/cssLength.css +4 -0
  872. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +15 -9
  873. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +9 -1
  874. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +75 -377
  875. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +3 -14
  876. package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -14
  877. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +9 -41
  878. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -2
  879. package/front_end/ui/legacy/inspectorCommon.css +23 -0
  880. package/front_end/ui/legacy/inspectorSyntaxHighlight.css +1 -0
  881. package/front_end/ui/legacy/reportView.css +10 -0
  882. package/front_end/ui/legacy/softContextMenu.css +11 -1
  883. package/front_end/ui/legacy/splitWidget.css +1 -1
  884. package/front_end/ui/legacy/tabbedPane.css +26 -4
  885. package/front_end/ui/legacy/theme_support/theme_support_impl.ts +3 -5
  886. package/front_end/ui/legacy/toolbar.css +7 -1
  887. package/package.json +2 -1
  888. package/scripts/eslint_rules/lib/no_only.js +27 -0
  889. package/scripts/eslint_rules/tests/no_only_test.js +95 -0
  890. package/docs/localization/README.md +0 -6
  891. package/docs/localization/adding_strings.md +0 -133
  892. package/docs/localization/descriptions.md +0 -30
  893. package/docs/localization/localization_apis.md +0 -80
  894. package/docs/localization/locked_terms.md +0 -38
  895. package/docs/testing_guidelines.md +0 -4
  896. package/docs/triage_guidelines.md +0 -3
  897. package/front_end/entrypoints/formatter_worker/HTMLOutline.ts +0 -53
  898. package/front_end/entrypoints/formatter_worker/JavaScriptOutline.ts +0 -153
  899. package/front_end/legacy_test_runner/lighthouse_test_runner/lighthouse_test_runner.js +0 -155
  900. package/front_end/models/timeline_model/TimelineIRModel.ts +0 -317
  901. package/front_end/panels/application/components/originTrialTreeView.css +0 -9
  902. package/front_end/panels/input/InputModel.ts +0 -213
  903. package/front_end/panels/input/InputTimeline.ts +0 -407
  904. package/front_end/panels/input/input-legacy.ts +0 -32
  905. package/front_end/panels/input/input-meta.ts +0 -130
  906. package/front_end/panels/input/input.ts +0 -11
  907. package/front_end/panels/input/inputTimeline.css +0 -16
  908. package/front_end/panels/lighthouse/LighthouseStartViewFR.ts +0 -179
  909. package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +0 -145
  910. package/front_end/third_party/acorn-loose/README.chromium +0 -22
  911. package/front_end/third_party/acorn-loose/acorn-loose-tsconfig.json +0 -8
  912. package/front_end/third_party/acorn-loose/acorn-loose.ts +0 -9
  913. package/front_end/third_party/acorn-loose/package/CHANGELOG.md +0 -123
  914. package/front_end/third_party/acorn-loose/package/LICENSE +0 -21
  915. package/front_end/third_party/acorn-loose/package/README.md +0 -66
  916. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.d.ts +0 -16
  917. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.js +0 -1538
  918. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.js.map +0 -1
  919. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs +0 -1528
  920. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs.d.ts +0 -10
  921. package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs.map +0 -1
  922. package/front_end/third_party/acorn-loose/package/package.json +0 -47
  923. package/front_end/third_party/puppeteer/package/LICENSE +0 -202
  924. package/front_end/third_party/puppeteer/package/install.js +0 -89
  925. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts +0 -60
  926. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +0 -1
  927. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +0 -1
  928. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkConditions.d.ts.map +0 -1
  929. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkConditions.js.map +0 -1
  930. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.d.ts +0 -6
  931. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.d.ts.map +0 -1
  932. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.js +0 -21
  933. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.js.map +0 -1
  934. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.d.ts +0 -5
  935. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.d.ts.map +0 -1
  936. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.js +0 -10
  937. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.js.map +0 -1
  938. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.d.ts.map +0 -1
  939. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.js +0 -47
  940. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.js.map +0 -1
  941. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +0 -1
  942. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +0 -1
  943. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.d.ts.map +0 -1
  944. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js +0 -213
  945. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js.map +0 -1
  946. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.d.ts.map +0 -1
  947. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js +0 -198
  948. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js.map +0 -1
  949. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.d.ts +0 -10
  950. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.d.ts.map +0 -1
  951. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.js +0 -40
  952. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.js.map +0 -1
  953. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.d.ts +0 -27
  954. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.d.ts.map +0 -1
  955. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.js +0 -44
  956. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.js.map +0 -1
  957. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.d.ts +0 -2
  958. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.d.ts.map +0 -1
  959. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.js +0 -19
  960. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.js.map +0 -1
  961. package/front_end/third_party/puppeteer/package/lib/cjs/vendor/mitt/src/index.d.ts +0 -27
  962. package/front_end/third_party/puppeteer/package/lib/cjs/vendor/mitt/src/index.js +0 -56
  963. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts +0 -60
  964. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +0 -1
  965. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.js.map +0 -1
  966. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkConditions.d.ts.map +0 -1
  967. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkConditions.js.map +0 -1
  968. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.d.ts +0 -6
  969. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.d.ts.map +0 -1
  970. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.js +0 -20
  971. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.js.map +0 -1
  972. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.d.ts +0 -5
  973. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.d.ts.map +0 -1
  974. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.js +0 -7
  975. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.js.map +0 -1
  976. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.d.ts.map +0 -1
  977. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.js +0 -43
  978. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.js.map +0 -1
  979. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +0 -1
  980. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +0 -1
  981. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts.map +0 -1
  982. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js +0 -209
  983. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js.map +0 -1
  984. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.d.ts.map +0 -1
  985. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js +0 -190
  986. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js.map +0 -1
  987. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.d.ts +0 -10
  988. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.d.ts.map +0 -1
  989. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.js +0 -13
  990. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.js.map +0 -1
  991. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.d.ts +0 -27
  992. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.d.ts.map +0 -1
  993. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.js.map +0 -1
  994. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.d.ts +0 -2
  995. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.d.ts.map +0 -1
  996. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.js +0 -15
  997. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.js.map +0 -1
  998. package/front_end/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.d.ts +0 -27
  999. package/front_end/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.js +0 -53
  1000. package/front_end/third_party/puppeteer/package/typescript-if-required.js +0 -70
  1001. package/scripts/eslint_rules/lib/render_coordinator_write.js +0 -58
  1002. package/scripts/eslint_rules/tests/render_coordinator_write_test.js +0 -55
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Lighthouse v9.6.6 86ee553a3dfe0f6f49f55f87837953f848a2a33c (Aug 16 2022)
2
+ * Lighthouse v9.6.8 16a0a776e82b69b66dffdbfab809dae97686429f (Oct 31 2022)
3
3
  *
4
4
  * Automated auditing, performance metrics, and best practices for the web.
5
5
  *
@@ -34,18 +34,18 @@ r||checkInt(this,e,t,4,2147483647,-2147483648),Buffer$2.TYPED_ARRAY_SUPPORT?(thi
34
34
  if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function base64ToBytes(e){return function toByteArray(e){var t,i,o,s,c,l;n||init$1();var u=e.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===e[u-2]?2:"="===e[u-1]?1:0,l=new a(3*u/4-c),o=c>0?u-4:u;var d=0;for(t=0,i=0;t<o;t+=4,i+=3)s=r[e.charCodeAt(t)]<<18|r[e.charCodeAt(t+1)]<<12|r[e.charCodeAt(t+2)]<<6|r[e.charCodeAt(t+3)],l[d++]=s>>16&255,l[d++]=s>>8&255,l[d++]=255&s;return 2===c?(s=r[e.charCodeAt(t)]<<2|r[e.charCodeAt(t+1)]>>4,l[d++]=255&s):1===c&&(s=r[e.charCodeAt(t)]<<10|r[e.charCodeAt(t+1)]<<4|r[e.charCodeAt(t+2)]>>2,l[d++]=s>>8&255,l[d++]=255&s),l}(function base64clean(e){if((e=function stringtrim(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(l,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,a){
35
35
  for(var n=0;n<a&&!(n+r>=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function isBuffer$4(e){return null!=e&&(!!e._isBuffer||isFastBuffer(e)||function isSlowBuffer(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&isFastBuffer(e.slice(0,0))}(e))}function isFastBuffer(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var u=Object.freeze({__proto__:null,Buffer:Buffer$2,INSPECT_MAX_BYTES:50,SlowBuffer:function SlowBuffer(e){return+e!=e&&(e=0),Buffer$2.alloc(+e)},isBuffer:isBuffer$4,kMaxLength:s});function getAugmentedNamespace(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})})),t}var d=function listCacheClear$1(){this.__data__=[],this.size=0};var m=function eq$2(e,t){return e===t||e!=e&&t!=t},p=m
36
36
  ;var h=function assocIndexOf$4(e,t){for(var r=e.length;r--;)if(p(e[r][0],t))return r;return-1},f=h,y=Array.prototype.splice;var v=h;var b=h;var w=h;var S=d,T=function listCacheDelete$1(e){var t=this.__data__,r=f(t,e);return!(r<0)&&(r==t.length-1?t.pop():y.call(t,r,1),--this.size,!0)},E=function listCacheGet$1(e){var t=this.__data__,r=v(t,e);return r<0?void 0:t[r][1]},x=function listCacheHas$1(e){return b(this.__data__,e)>-1},_=function listCacheSet$1(e,t){var r=this.__data__,a=w(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this};function ListCache$4(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}ListCache$4.prototype.clear=S,ListCache$4.prototype.delete=T,ListCache$4.prototype.get=E,ListCache$4.prototype.has=x,ListCache$4.prototype.set=_;var A=ListCache$4,R=A;var k=function stackClear$1(){this.__data__=new R,this.size=0};var D=function stackDelete$1(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}
37
- ;var C=function stackGet$1(e){return this.__data__.get(e)};var I=function stackHas$1(e){return this.__data__.has(e)},N="object"==typeof e&&e&&e.Object===Object&&e,L=N,M="object"==typeof self&&self&&self.Object===Object&&self,P=L||M||Function("return this")(),O=P.Symbol,F=O,U=Object.prototype,j=U.hasOwnProperty,B=U.toString,$=F?F.toStringTag:void 0;var q=function getRawTag$1(e){var t=j.call(e,$),r=e[$];try{e[$]=void 0;var a=!0}catch(e){}var n=B.call(e);return a&&(t?e[$]=r:delete e[$]),n},z=Object.prototype.toString;var V=q,W=function objectToString$2(e){return z.call(e)},G=O?O.toStringTag:void 0;var H=function baseGetTag$4(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":G&&G in Object(e)?V(e):W(e)};var Y=function isObject$3(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},K=H,J=Y;var X,Z=function isFunction$3(e){if(!J(e))return!1;var t=K(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t
37
+ ;var C=function stackGet$1(e){return this.__data__.get(e)};var I=function stackHas$1(e){return this.__data__.has(e)},N="object"==typeof e&&e&&e.Object===Object&&e,L=N,M="object"==typeof self&&self&&self.Object===Object&&self,P=L||M||Function("return this")(),O=P.Symbol,F=O,U=Object.prototype,j=U.hasOwnProperty,B=U.toString,$=F?F.toStringTag:void 0;var q=function getRawTag$1(e){var t=j.call(e,$),r=e[$];try{e[$]=void 0;var a=!0}catch(e){}var n=B.call(e);return a&&(t?e[$]=r:delete e[$]),n},z=Object.prototype.toString;var V=q,W=function objectToString$2(e){return z.call(e)},H=O?O.toStringTag:void 0;var G=function baseGetTag$4(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":H&&H in Object(e)?V(e):W(e)};var Y=function isObject$3(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},K=G,J=Y;var X,Z=function isFunction$3(e){if(!J(e))return!1;var t=K(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t
38
38
  },Q=P["__core-js_shared__"],ee=(X=/[^.]+$/.exec(Q&&Q.keys&&Q.keys.IE_PROTO||""))?"Symbol(src)_1."+X:"";var te=function isMasked$1(e){return!!ee&&ee in e},re=Function.prototype.toString;var ae=function toSource$2(e){if(null!=e){try{return re.call(e)}catch(e){}try{return e+""}catch(e){}}return""},ne=Z,ie=te,oe=Y,se=ae,ce=/^\[object .+?Constructor\]$/,le=Function.prototype,ue=Object.prototype,de=le.toString,me=ue.hasOwnProperty,pe=RegExp("^"+de.call(me).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var he=function baseIsNative$1(e){return!(!oe(e)||ie(e))&&(ne(e)?pe:ce).test(se(e))},ge=function getValue$1(e,t){return null==e?void 0:e[t]};var fe=function getNative$6(e,t){var r=ge(e,t);return he(r)?r:void 0},ye=fe(P,"Map"),ve=fe(Object,"create"),be=ve;var we=function hashClear$1(){this.__data__=be?be(null):{},this.size=0};var Se=function hashDelete$1(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t
39
39
  },Te=ve,Ee=Object.prototype.hasOwnProperty;var xe=function hashGet$1(e){var t=this.__data__;if(Te){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Ee.call(t,e)?t[e]:void 0},_e=ve,Ae=Object.prototype.hasOwnProperty;var Re=ve;var ke=we,De=Se,Ce=xe,Ie=function hashHas$1(e){var t=this.__data__;return _e?void 0!==t[e]:Ae.call(t,e)},Ne=function hashSet$1(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Re&&void 0===t?"__lodash_hash_undefined__":t,this};function Hash$1(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Hash$1.prototype.clear=ke,Hash$1.prototype.delete=De,Hash$1.prototype.get=Ce,Hash$1.prototype.has=Ie,Hash$1.prototype.set=Ne;var Le=Hash$1,Me=A,Pe=ye;var Oe=function isKeyable$1(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var Fe=function getMapData$4(e,t){var r=e.__data__;return Oe(t)?r["string"==typeof t?"string":"hash"]:r.map},Ue=Fe;var je=Fe
40
- ;var Be=Fe;var $e=Fe;var qe=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Le,map:new(Pe||Me),string:new Le}},ze=function mapCacheDelete$1(e){var t=Ue(this,e).delete(e);return this.size-=t?1:0,t},Ve=function mapCacheGet$1(e){return je(this,e).get(e)},We=function mapCacheHas$1(e){return Be(this,e).has(e)},Ge=function mapCacheSet$1(e,t){var r=$e(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this};function MapCache$2(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}MapCache$2.prototype.clear=qe,MapCache$2.prototype.delete=ze,MapCache$2.prototype.get=Ve,MapCache$2.prototype.has=We,MapCache$2.prototype.set=Ge;var He=MapCache$2,Ye=A,Ke=ye,Je=He;var Xe=A,Ze=k,Qe=D,et=C,tt=I,rt=function stackSet$1(e,t){var r=this.__data__;if(r instanceof Ye){var a=r.__data__;if(!Ke||a.length<199)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new Je(a)}return r.set(e,t),this.size=r.size,this};function Stack$1(e){
41
- var t=this.__data__=new Xe(e);this.size=t.size}Stack$1.prototype.clear=Ze,Stack$1.prototype.delete=Qe,Stack$1.prototype.get=et,Stack$1.prototype.has=tt,Stack$1.prototype.set=rt;var at=Stack$1;var nt=He,it=function setCacheAdd$1(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ot=function setCacheHas$1(e){return this.__data__.has(e)};function SetCache$1(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new nt;++t<r;)this.add(e[t])}SetCache$1.prototype.add=SetCache$1.prototype.push=it,SetCache$1.prototype.has=ot;var st=SetCache$1,ct=function arraySome$1(e,t){for(var r=-1,a=null==e?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1},ut=function cacheHas$1(e,t){return e.has(t)};var dt=function equalArrays$2(e,t,r,a,n,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=i.get(e),u=i.get(t);if(l&&u)return l==t&&u==e;var d=-1,m=!0,p=2&r?new st:void 0;for(i.set(e,t),i.set(t,e);++d<s;){var h=e[d],f=t[d];if(a)var y=o?a(f,h,d,t,e,i):a(h,f,d,e,t,i);if(void 0!==y){
40
+ ;var Be=Fe;var $e=Fe;var qe=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Le,map:new(Pe||Me),string:new Le}},ze=function mapCacheDelete$1(e){var t=Ue(this,e).delete(e);return this.size-=t?1:0,t},Ve=function mapCacheGet$1(e){return je(this,e).get(e)},We=function mapCacheHas$1(e){return Be(this,e).has(e)},He=function mapCacheSet$1(e,t){var r=$e(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this};function MapCache$2(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}MapCache$2.prototype.clear=qe,MapCache$2.prototype.delete=ze,MapCache$2.prototype.get=Ve,MapCache$2.prototype.has=We,MapCache$2.prototype.set=He;var Ge=MapCache$2,Ye=A,Ke=ye,Je=Ge;var Xe=A,Ze=k,Qe=D,et=C,tt=I,rt=function stackSet$1(e,t){var r=this.__data__;if(r instanceof Ye){var a=r.__data__;if(!Ke||a.length<199)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new Je(a)}return r.set(e,t),this.size=r.size,this};function Stack$1(e){
41
+ var t=this.__data__=new Xe(e);this.size=t.size}Stack$1.prototype.clear=Ze,Stack$1.prototype.delete=Qe,Stack$1.prototype.get=et,Stack$1.prototype.has=tt,Stack$1.prototype.set=rt;var at=Stack$1;var nt=Ge,it=function setCacheAdd$1(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ot=function setCacheHas$1(e){return this.__data__.has(e)};function SetCache$1(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new nt;++t<r;)this.add(e[t])}SetCache$1.prototype.add=SetCache$1.prototype.push=it,SetCache$1.prototype.has=ot;var st=SetCache$1,ct=function arraySome$1(e,t){for(var r=-1,a=null==e?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1},ut=function cacheHas$1(e,t){return e.has(t)};var dt=function equalArrays$2(e,t,r,a,n,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=i.get(e),u=i.get(t);if(l&&u)return l==t&&u==e;var d=-1,m=!0,p=2&r?new st:void 0;for(i.set(e,t),i.set(t,e);++d<s;){var h=e[d],f=t[d];if(a)var y=o?a(f,h,d,t,e,i):a(h,f,d,e,t,i);if(void 0!==y){
42
42
  if(y)continue;m=!1;break}if(p){if(!ct(t,(function(e,t){if(!ut(p,t)&&(h===e||n(h,e,r,a,i)))return p.push(t)}))){m=!1;break}}else if(h!==f&&!n(h,f,r,a,i)){m=!1;break}}return i.delete(e),i.delete(t),m};var mt=P.Uint8Array,pt=m,ht=dt,ft=function mapToArray$1(e){var t=-1,r=Array(e.size);return e.forEach((function(e,a){r[++t]=[a,e]})),r},yt=function setToArray$1(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},vt=O?O.prototype:void 0,bt=vt?vt.valueOf:void 0;var wt=function equalByTag$1(e,t,r,a,n,i,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new mt(e),new mt(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return pt(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=ft;case"[object Set]":var c=1&a
43
- ;if(s||(s=yt),e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;a|=2,o.set(e,t);var u=ht(s(e),s(t),a,n,i,o);return o.delete(e),u;case"[object Symbol]":if(bt)return bt.call(e)==bt.call(t)}return!1};var St=function arrayPush$1(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e},Tt=Array.isArray,Et=St,xt=Tt;var _t=function baseGetAllKeys$1(e,t,r){var a=t(e);return xt(e)?a:Et(a,r(e))};var At=function arrayFilter$1(e,t){for(var r=-1,a=null==e?0:e.length,n=0,i=[];++r<a;){var o=e[r];t(o,r,e)&&(i[n++]=o)}return i},Rt=function stubArray$1(){return[]},kt=Object.prototype.propertyIsEnumerable,Dt=Object.getOwnPropertySymbols,Ct=Dt?function(e){return null==e?[]:(e=Object(e),At(Dt(e),(function(t){return kt.call(e,t)})))}:Rt;var It=function baseTimes$1(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a};var Nt=function isObjectLike$4(e){return null!=e&&"object"==typeof e},Lt=H,Mt=Nt;var Pt=function baseIsArguments$1(e){return Mt(e)&&"[object Arguments]"==Lt(e)
44
- },Ot=Nt,Ft=Object.prototype,Ut=Ft.hasOwnProperty,jt=Ft.propertyIsEnumerable,Bt=Pt(function(){return arguments}())?Pt:function(e){return Ot(e)&&Ut.call(e,"callee")&&!jt.call(e,"callee")},$t={exports:{}};var zt=function stubFalse(){return!1};!function(e,t){var r=P,a=zt,n=t&&!t.nodeType&&t,i=n&&e&&!e.nodeType&&e,o=i&&i.exports===n?r.Buffer:void 0,s=(o?o.isBuffer:void 0)||a;e.exports=s}($t,$t.exports);var Vt=/^(?:0|[1-9]\d*)$/;var Wt=function isIndex$1(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Vt.test(e))&&e>-1&&e%1==0&&e<t};var Gt=function isLength$2(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Ht=H,Yt=Gt,Kt=Nt,Jt={};Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,
45
- Jt["[object Arguments]"]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object Boolean]"]=Jt["[object DataView]"]=Jt["[object Date]"]=Jt["[object Error]"]=Jt["[object Function]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt["[object Object]"]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object WeakMap]"]=!1;var Xt=function baseIsTypedArray$1(e){return Kt(e)&&Yt(e.length)&&!!Jt[Ht(e)]};var Zt=function baseUnary$1(e){return function(t){return e(t)}},Qt={exports:{}};!function(e,t){var r=N,a=t&&!t.nodeType&&t,n=a&&e&&!e.nodeType&&e,i=n&&n.exports===a&&r.process,o=function(){try{var e=n&&n.require&&n.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=o}(Qt,Qt.exports);var er=Xt,tr=Zt,rr=Qt.exports,ar=rr&&rr.isTypedArray,nr=ar?tr(ar):er,ir=It,or=Bt,sr=Tt,cr=$t.exports,lr=Wt,ur=nr,dr=Object.prototype.hasOwnProperty;var mr=function arrayLikeKeys$1(e,t){
46
- var r=sr(e),a=!r&&or(e),n=!r&&!a&&cr(e),i=!r&&!a&&!n&&ur(e),o=r||a||n||i,s=o?ir(e.length,String):[],c=s.length;for(var l in e)!t&&!dr.call(e,l)||o&&("length"==l||n&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||lr(l,c))||s.push(l);return s},pr=Object.prototype;var hr=function isPrototype$1(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||pr)};var gr=function overArg$1(e,t){return function(r){return e(t(r))}}(Object.keys,Object),fr=hr,yr=gr,vr=Object.prototype.hasOwnProperty;var br=Z,wr=Gt;var Sr=mr,Tr=function baseKeys$1(e){if(!fr(e))return yr(e);var t=[];for(var r in Object(e))vr.call(e,r)&&"constructor"!=r&&t.push(r);return t},Er=function isArrayLike$1(e){return null!=e&&wr(e.length)&&!br(e)};var xr=_t,_r=Ct,Ar=function keys$2(e){return Er(e)?Sr(e):Tr(e)};var Rr=function getAllKeys$1(e){return xr(e,Ar,_r)},kr=Object.prototype.hasOwnProperty;var Dr=function equalObjects$1(e,t,r,a,n,i){var o=1&r,s=Rr(e),c=s.length
47
- ;if(c!=Rr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:kr.call(t,u)))return!1}var d=i.get(e),m=i.get(t);if(d&&m)return d==t&&m==e;var p=!0;i.set(e,t),i.set(t,e);for(var h=o;++l<c;){var f=e[u=s[l]],y=t[u];if(a)var v=o?a(y,f,u,t,e,i):a(f,y,u,e,t,i);if(!(void 0===v?f===y||n(f,y,r,a,i):v)){p=!1;break}h||(h="constructor"==u)}if(p&&!h){var b=e.constructor,w=t.constructor;b==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(p=!1)}return i.delete(e),i.delete(t),p},Cr=fe(P,"DataView"),Ir=ye,Nr=fe(P,"Promise"),Lr=fe(P,"Set"),Mr=fe(P,"WeakMap"),Pr=H,Or=ae,Fr="[object Map]",Ur="[object Promise]",jr="[object Set]",Br="[object WeakMap]",$r="[object DataView]",qr=Or(Cr),zr=Or(Ir),Vr=Or(Nr),Wr=Or(Lr),Gr=Or(Mr),Hr=Pr;(Cr&&Hr(new Cr(new ArrayBuffer(1)))!=$r||Ir&&Hr(new Ir)!=Fr||Nr&&Hr(Nr.resolve())!=Ur||Lr&&Hr(new Lr)!=jr||Mr&&Hr(new Mr)!=Br)&&(Hr=function(e){
48
- var t=Pr(e),r="[object Object]"==t?e.constructor:void 0,a=r?Or(r):"";if(a)switch(a){case qr:return $r;case zr:return Fr;case Vr:return Ur;case Wr:return jr;case Gr:return Br}return t});var Yr=at,Kr=dt,Jr=wt,Xr=Dr,Zr=Hr,Qr=Tt,ea=$t.exports,ta=nr,ra="[object Arguments]",aa="[object Array]",na="[object Object]",ia=Object.prototype.hasOwnProperty;var oa=function baseIsEqualDeep$1(e,t,r,a,n,i){var o=Qr(e),s=Qr(t),c=o?aa:Zr(e),l=s?aa:Zr(t),u=(c=c==ra?na:c)==na,d=(l=l==ra?na:l)==na,m=c==l;if(m&&ea(e)){if(!ea(t))return!1;o=!0,u=!1}if(m&&!u)return i||(i=new Yr),o||ta(e)?Kr(e,t,r,a,n,i):Jr(e,t,c,r,a,n,i);if(!(1&r)){var p=u&&ia.call(e,"__wrapped__"),h=d&&ia.call(t,"__wrapped__");if(p||h){var f=p?e.value():e,y=h?t.value():t;return i||(i=new Yr),n(f,y,r,a,i)}}return!!m&&(i||(i=new Yr),Xr(e,t,r,a,n,i))},sa=Nt;var ca=function baseIsEqual$1(e,t,r,a,n){return e===t||(null==e||null==t||!sa(e)&&!sa(t)?e!=e&&t!=t:oa(e,t,r,a,baseIsEqual$1,n))};var la=function isEqual(e,t){return ca(e,t)}
43
+ ;if(s||(s=yt),e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;a|=2,o.set(e,t);var u=ht(s(e),s(t),a,n,i,o);return o.delete(e),u;case"[object Symbol]":if(bt)return bt.call(e)==bt.call(t)}return!1};var St=function arrayPush$1(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e},Tt=Array.isArray,Et=St,xt=Tt;var _t=function baseGetAllKeys$1(e,t,r){var a=t(e);return xt(e)?a:Et(a,r(e))};var At=function arrayFilter$1(e,t){for(var r=-1,a=null==e?0:e.length,n=0,i=[];++r<a;){var o=e[r];t(o,r,e)&&(i[n++]=o)}return i},Rt=function stubArray$1(){return[]},kt=Object.prototype.propertyIsEnumerable,Dt=Object.getOwnPropertySymbols,Ct=Dt?function(e){return null==e?[]:(e=Object(e),At(Dt(e),(function(t){return kt.call(e,t)})))}:Rt;var It=function baseTimes$1(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a};var Nt=function isObjectLike$4(e){return null!=e&&"object"==typeof e},Lt=G,Mt=Nt;var Pt=function baseIsArguments$1(e){return Mt(e)&&"[object Arguments]"==Lt(e)
44
+ },Ot=Nt,Ft=Object.prototype,Ut=Ft.hasOwnProperty,jt=Ft.propertyIsEnumerable,Bt=Pt(function(){return arguments}())?Pt:function(e){return Ot(e)&&Ut.call(e,"callee")&&!jt.call(e,"callee")},$t={exports:{}};var zt=function stubFalse(){return!1};!function(e,t){var r=P,a=zt,n=t&&!t.nodeType&&t,i=n&&e&&!e.nodeType&&e,o=i&&i.exports===n?r.Buffer:void 0,s=(o?o.isBuffer:void 0)||a;e.exports=s}($t,$t.exports);var Vt=/^(?:0|[1-9]\d*)$/;var Wt=function isIndex$1(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Vt.test(e))&&e>-1&&e%1==0&&e<t};var Ht=function isLength$2(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Gt=G,Yt=Ht,Kt=Nt,Jt={};Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,
45
+ Jt["[object Arguments]"]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object Boolean]"]=Jt["[object DataView]"]=Jt["[object Date]"]=Jt["[object Error]"]=Jt["[object Function]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt["[object Object]"]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object WeakMap]"]=!1;var Xt=function baseIsTypedArray$1(e){return Kt(e)&&Yt(e.length)&&!!Jt[Gt(e)]};var Zt=function baseUnary$1(e){return function(t){return e(t)}},Qt={exports:{}};!function(e,t){var r=N,a=t&&!t.nodeType&&t,n=a&&e&&!e.nodeType&&e,i=n&&n.exports===a&&r.process,o=function(){try{var e=n&&n.require&&n.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=o}(Qt,Qt.exports);var er=Xt,tr=Zt,rr=Qt.exports,ar=rr&&rr.isTypedArray,nr=ar?tr(ar):er,ir=It,or=Bt,sr=Tt,cr=$t.exports,lr=Wt,ur=nr,dr=Object.prototype.hasOwnProperty;var mr=function arrayLikeKeys$1(e,t){
46
+ var r=sr(e),a=!r&&or(e),n=!r&&!a&&cr(e),i=!r&&!a&&!n&&ur(e),o=r||a||n||i,s=o?ir(e.length,String):[],c=s.length;for(var l in e)!t&&!dr.call(e,l)||o&&("length"==l||n&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||lr(l,c))||s.push(l);return s},pr=Object.prototype;var hr=function isPrototype$1(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||pr)};var gr=function overArg$1(e,t){return function(r){return e(t(r))}}(Object.keys,Object),fr=hr,yr=gr,vr=Object.prototype.hasOwnProperty;var br=Z,wr=Ht;var Sr=mr,Tr=function baseKeys$1(e){if(!fr(e))return yr(e);var t=[];for(var r in Object(e))vr.call(e,r)&&"constructor"!=r&&t.push(r);return t},Er=function isArrayLike$1(e){return null!=e&&wr(e.length)&&!br(e)};var xr=_t,_r=Ct,Ar=function keys$2(e){return Er(e)?Sr(e):Tr(e)};var Rr=function getAllKeys$1(e){return xr(e,Ar,_r)},kr=Object.prototype.hasOwnProperty;var Dr=function equalObjects$1(e,t,r,a,n,i){var o=1&r,s=Rr(e),c=s.length
47
+ ;if(c!=Rr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:kr.call(t,u)))return!1}var d=i.get(e),m=i.get(t);if(d&&m)return d==t&&m==e;var p=!0;i.set(e,t),i.set(t,e);for(var h=o;++l<c;){var f=e[u=s[l]],y=t[u];if(a)var v=o?a(y,f,u,t,e,i):a(f,y,u,e,t,i);if(!(void 0===v?f===y||n(f,y,r,a,i):v)){p=!1;break}h||(h="constructor"==u)}if(p&&!h){var b=e.constructor,w=t.constructor;b==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(p=!1)}return i.delete(e),i.delete(t),p},Cr=fe(P,"DataView"),Ir=ye,Nr=fe(P,"Promise"),Lr=fe(P,"Set"),Mr=fe(P,"WeakMap"),Pr=G,Or=ae,Fr="[object Map]",Ur="[object Promise]",jr="[object Set]",Br="[object WeakMap]",$r="[object DataView]",qr=Or(Cr),zr=Or(Ir),Vr=Or(Nr),Wr=Or(Lr),Hr=Or(Mr),Gr=Pr;(Cr&&Gr(new Cr(new ArrayBuffer(1)))!=$r||Ir&&Gr(new Ir)!=Fr||Nr&&Gr(Nr.resolve())!=Ur||Lr&&Gr(new Lr)!=jr||Mr&&Gr(new Mr)!=Br)&&(Gr=function(e){
48
+ var t=Pr(e),r="[object Object]"==t?e.constructor:void 0,a=r?Or(r):"";if(a)switch(a){case qr:return $r;case zr:return Fr;case Vr:return Ur;case Wr:return jr;case Hr:return Br}return t});var Yr=at,Kr=dt,Jr=wt,Xr=Dr,Zr=Gr,Qr=Tt,ea=$t.exports,ta=nr,ra="[object Arguments]",aa="[object Array]",na="[object Object]",ia=Object.prototype.hasOwnProperty;var oa=function baseIsEqualDeep$1(e,t,r,a,n,i){var o=Qr(e),s=Qr(t),c=o?aa:Zr(e),l=s?aa:Zr(t),u=(c=c==ra?na:c)==na,d=(l=l==ra?na:l)==na,m=c==l;if(m&&ea(e)){if(!ea(t))return!1;o=!0,u=!1}if(m&&!u)return i||(i=new Yr),o||ta(e)?Kr(e,t,r,a,n,i):Jr(e,t,c,r,a,n,i);if(!(1&r)){var p=u&&ia.call(e,"__wrapped__"),h=d&&ia.call(t,"__wrapped__");if(p||h){var f=p?e.value():e,y=h?t.value():t;return i||(i=new Yr),n(f,y,r,a,i)}}return!!m&&(i||(i=new Yr),Xr(e,t,r,a,n,i))},sa=Nt;var ca=function baseIsEqual$1(e,t,r,a,n){return e===t||(null==e||null==t||!sa(e)&&!sa(t)?e!=e&&t!=t:oa(e,t,r,a,baseIsEqual$1,n))};var la=function isEqual(e,t){return ca(e,t)}
49
49
  ;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}var ua=defaultSetTimout,da=defaultClearTimeout;function runTimeout(e){if(ua===setTimeout)return setTimeout(e,0);if((ua===defaultSetTimout||!ua)&&setTimeout)return ua=setTimeout,setTimeout(e,0);try{return ua(e,0)}catch(t){try{return ua.call(null,e,0)}catch(t){return ua.call(this,e,0)}}}"function"==typeof e.setTimeout&&(ua=setTimeout),"function"==typeof e.clearTimeout&&(da=clearTimeout);var ma,pa=[],ha=!1,ga=-1;function cleanUpNextTick(){ha&&ma&&(ha=!1,ma.length?pa=ma.concat(pa):ga=-1,pa.length&&drainQueue())}function drainQueue(){if(!ha){var e=runTimeout(cleanUpNextTick);ha=!0;for(var t=pa.length;t;){for(ma=pa,pa=[];++ga<t;)ma&&ma[ga].run();ga=-1,t=pa.length}ma=null,ha=!1,function runClearTimeout(e){if(da===clearTimeout)return clearTimeout(e);if((da===defaultClearTimeout||!da)&&clearTimeout)return da=clearTimeout,
50
50
  clearTimeout(e);try{return da(e)}catch(t){try{return da.call(null,e)}catch(t){return da.call(this,e)}}}(e)}}function nextTick(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];pa.push(new Item(e,t)),1!==pa.length||ha||runTimeout(drainQueue)}function Item(e,t){this.fun=e,this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};var fa="browser",ya="browser",va={},ba=[],wa={},Sa={},Ta={};function noop$1(){}var Ea=noop$1,xa=noop$1,_a=noop$1,Aa=noop$1,Ra=noop$1,ka=noop$1,Da=noop$1;function binding$1(e){throw new Error("process.binding is not supported")}function cwd(){return"/"}function chdir(e){throw new Error("process.chdir is not supported")}function umask(){return 0}var Ca=e.performance||{},Ia=Ca.now||Ca.mozNow||Ca.msNow||Ca.oNow||Ca.webkitNow||function(){return(new Date).getTime()};function hrtime$1(e){var t=.001*Ia.call(Ca),r=Math.floor(t),a=Math.floor(t%1*1e9);return e&&(r-=e[0],(a-=e[1])<0&&(r--,
51
51
  a+=1e9)),[r,a]}var Na=new Date;function uptime(){return(new Date-Na)/1e3}var La={nextTick,title:fa,browser:true,env:va,argv:ba,version:"",versions:wa,on:Ea,addListener:xa,once:_a,off:Aa,removeListener:Ra,removeAllListeners:ka,emit:Da,binding:binding$1,cwd,chdir,umask,hrtime:hrtime$1,platform:ya,release:Sa,config:Ta,uptime},Ma=Object.freeze({__proto__:null,addListener:xa,argv:ba,binding:binding$1,browser:true,chdir,config:Ta,cwd,default:La,emit:Da,env:va,hrtime:hrtime$1,nextTick,off:Aa,on:Ea,once:_a,platform:ya,release:Sa,removeAllListeners:ka,removeListener:Ra,title:fa,umask,uptime,version:"",versions:wa}),Pa={exports:{}},Oa=1e3,Fa=60*Oa,Ua=60*Fa,ja=24*Ua,Ba=7*ja,$a=365.25*ja,ms=function(e,t){t=t||{};var r=typeof e;if("string"===r&&e.length>0)return function parse$3(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var r=parseFloat(t[1])
@@ -56,17 +56,17 @@ a=createDebug.enabled(e)),a),set:e=>{n=e}}),"function"==typeof createDebug.init&
56
56
  ;!function(e,t){t.formatArgs=function formatArgs(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let a=0,n=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(a++,"%c"===e&&(n=a))})),t.splice(n,0,r)},t.save=function save(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function load(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==La&&"env"in La&&(e=La.env.DEBUG);return e},t.useColors=function useColors(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1
57
57
  ;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function localstorage(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),
58
58
  t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=qa(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(Pa,Pa.exports)
59
- ;var za,Va,Wa,Ga,Ha=Pa.exports,Ya="undefined"!=typeof performance&&performance,Ka=La.hrtime,getNanoSeconds=function(){var e=Ka();return 1e9*e[0]+e[1]},Ja=getNanoSeconds(),now=function(){return(getNanoSeconds()-Ja)/1e6};function throwIfEmpty(e){if(!e)throw new Error("name must be non-empty")}if(Ya&&Ya.mark&&Ya.getEntriesByName&&Ya.getEntriesByType&&Ya.clearMeasures)za=function(e){throwIfEmpty(e),Ya.mark("start "+e)},Va=function(e){throwIfEmpty(e),Ya.mark("end "+e),Ya.measure(e,"start "+e,"end "+e);var t=Ya.getEntriesByName(e);return t[t.length-1]},Wa=function(){return Ya.getEntriesByType("measure")},Ga=function(){Ya.clearMarks(),Ya.clearMeasures()};else{var Xa={},Za=[];za=function(e){throwIfEmpty(e);var t=now();Xa["$"+e]=t},Va=function(e){throwIfEmpty(e);var t=now(),r=Xa["$"+e];if(!r)throw new Error("no known mark: "+e);var a={startTime:r,name:e,duration:t-r,entryType:"measure"};return function insertSorted(e,t){for(var r,a=0,n=e.length;a<n;)e[r=a+n>>>1].startTime<t.startTime?a=r+1:n=r
60
- ;e.splice(a,0,t)}(Za,a),a},Wa=function(){return Za},Ga=function(){Xa={},Za=[]}}function EventHandlers(){}function EventEmitter$4(){EventEmitter$4.init.call(this)}function $getMaxListeners(e){return void 0===e._maxListeners?EventEmitter$4.defaultMaxListeners:e._maxListeners}function emitNone(e,t,r){if(t)e.call(r);else for(var a=e.length,n=arrayClone(e,a),i=0;i<a;++i)n[i].call(r)}function emitOne(e,t,r,a){if(t)e.call(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].call(r,a)}function emitTwo(e,t,r,a,n){if(t)e.call(r,a,n);else for(var i=e.length,o=arrayClone(e,i),s=0;s<i;++s)o[s].call(r,a,n)}function emitThree(e,t,r,a,n,i){if(t)e.call(r,a,n,i);else for(var o=e.length,s=arrayClone(e,o),c=0;c<o;++c)s[c].call(r,a,n,i)}function emitMany(e,t,r,a){if(t)e.apply(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].apply(r,a)}function _addListener(e,t,r,a){var n,i,o;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function')
59
+ ;var za,Va,Wa,Ha,Ga=Pa.exports,Ya="undefined"!=typeof performance&&performance,Ka=La.hrtime,getNanoSeconds=function(){var e=Ka();return 1e9*e[0]+e[1]},Ja=getNanoSeconds(),now=function(){return(getNanoSeconds()-Ja)/1e6};function throwIfEmpty(e){if(!e)throw new Error("name must be non-empty")}if(Ya&&Ya.mark&&Ya.getEntriesByName&&Ya.getEntriesByType&&Ya.clearMeasures)za=function(e){throwIfEmpty(e),Ya.mark("start "+e)},Va=function(e){throwIfEmpty(e),Ya.mark("end "+e),Ya.measure(e,"start "+e,"end "+e);var t=Ya.getEntriesByName(e);return t[t.length-1]},Wa=function(){return Ya.getEntriesByType("measure")},Ha=function(){Ya.clearMarks(),Ya.clearMeasures()};else{var Xa={},Za=[];za=function(e){throwIfEmpty(e);var t=now();Xa["$"+e]=t},Va=function(e){throwIfEmpty(e);var t=now(),r=Xa["$"+e];if(!r)throw new Error("no known mark: "+e);var a={startTime:r,name:e,duration:t-r,entryType:"measure"};return function insertSorted(e,t){for(var r,a=0,n=e.length;a<n;)e[r=a+n>>>1].startTime<t.startTime?a=r+1:n=r
60
+ ;e.splice(a,0,t)}(Za,a),a},Wa=function(){return Za},Ha=function(){Xa={},Za=[]}}function EventHandlers(){}function EventEmitter$4(){EventEmitter$4.init.call(this)}function $getMaxListeners(e){return void 0===e._maxListeners?EventEmitter$4.defaultMaxListeners:e._maxListeners}function emitNone(e,t,r){if(t)e.call(r);else for(var a=e.length,n=arrayClone(e,a),i=0;i<a;++i)n[i].call(r)}function emitOne(e,t,r,a){if(t)e.call(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].call(r,a)}function emitTwo(e,t,r,a,n){if(t)e.call(r,a,n);else for(var i=e.length,o=arrayClone(e,i),s=0;s<i;++s)o[s].call(r,a,n)}function emitThree(e,t,r,a,n,i){if(t)e.call(r,a,n,i);else for(var o=e.length,s=arrayClone(e,o),c=0;c<o;++c)s[c].call(r,a,n,i)}function emitMany(e,t,r,a){if(t)e.apply(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].apply(r,a)}function _addListener(e,t,r,a){var n,i,o;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function')
61
61
  ;if((i=e._events)?(i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),o=i[t]):(i=e._events=new EventHandlers,e._eventsCount=0),o){if("function"==typeof o?o=i[t]=a?[r,o]:[o,r]:a?o.unshift(r):o.push(r),!o.warned&&(n=$getMaxListeners(e))&&n>0&&o.length>n){o.warned=!0;var s=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");s.name="MaxListenersExceededWarning",s.emitter=e,s.type=t,s.count=o.length,function emitWarning(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(s)}}else o=i[t]=r,++e._eventsCount;return e}function _onceWrap(e,t,r){var a=!1;function g(){e.removeListener(t,g),a||(a=!0,r.apply(e,arguments))}return g.listener=r,g}function listenerCount$1(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function arrayClone(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}
62
62
  EventHandlers.prototype=Object.create(null),EventEmitter$4.EventEmitter=EventEmitter$4,EventEmitter$4.usingDomains=!1,EventEmitter$4.prototype.domain=void 0,EventEmitter$4.prototype._events=void 0,EventEmitter$4.prototype._maxListeners=void 0,EventEmitter$4.defaultMaxListeners=10,EventEmitter$4.init=function(){this.domain=null,EventEmitter$4.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new EventHandlers,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EventEmitter$4.prototype.setMaxListeners=function setMaxListeners(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},EventEmitter$4.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this)},EventEmitter$4.prototype.emit=function emit(e){var t,r,a,n,i,o,s,c="error"===e;if(o=this._events)c=c&&null==o.error;else if(!c)return!1;if(s=this.domain,c){
63
63
  if(t=arguments[1],!s){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=s,t.domainThrown=!1,s.emit("error",t),!1}if(!(r=o[e]))return!1;var u="function"==typeof r;switch(a=arguments.length){case 1:emitNone(r,u,this);break;case 2:emitOne(r,u,this,arguments[1]);break;case 3:emitTwo(r,u,this,arguments[1],arguments[2]);break;case 4:emitThree(r,u,this,arguments[1],arguments[2],arguments[3]);break;default:for(n=new Array(a-1),i=1;i<a;i++)n[i-1]=arguments[i];emitMany(r,u,this,n)}return!0},EventEmitter$4.prototype.addListener=function addListener(e,t){return _addListener(this,e,t,!1)},EventEmitter$4.prototype.on=EventEmitter$4.prototype.addListener,EventEmitter$4.prototype.prependListener=function prependListener(e,t){return _addListener(this,e,t,!0)},EventEmitter$4.prototype.once=function once(e,t){
64
64
  if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,_onceWrap(this,e,t)),this},EventEmitter$4.prototype.prependOnceListener=function prependOnceListener(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,_onceWrap(this,e,t)),this},EventEmitter$4.prototype.removeListener=function removeListener(e,t){var r,a,n,i,o;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(a=this._events))return this;if(!(r=a[e]))return this;if(r===t||r.listener&&r.listener===t)0==--this._eventsCount?this._events=new EventHandlers:(delete a[e],a.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(n=-1,i=r.length;i-- >0;)if(r[i]===t||r[i].listener&&r[i].listener===t){o=r[i].listener,n=i;break}if(n<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new EventHandlers,this
65
65
  ;delete a[e]}else!function spliceOne(e,t){for(var r=t,a=r+1,n=e.length;a<n;r+=1,a+=1)e[r]=e[a];e.pop()}(r,n);a.removeListener&&this.emit("removeListener",e,o||t)}return this},EventEmitter$4.prototype.off=function(e,t){return this.removeListener(e,t)},EventEmitter$4.prototype.removeAllListeners=function removeAllListeners(e){var t,r;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=new EventHandlers,this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=new EventHandlers:delete r[e]),this;if(0===arguments.length){for(var a,n=Object.keys(r),i=0;i<n.length;++i)"removeListener"!==(a=n[i])&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=new EventHandlers,this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},EventEmitter$4.prototype.listeners=function listeners(e){var t,r=this._events
66
- ;return r&&(t=r[e])?"function"==typeof t?[t.listener||t]:function unwrapListeners(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[]},EventEmitter$4.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount$1.call(e,t)},EventEmitter$4.prototype.listenerCount=listenerCount$1,EventEmitter$4.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qa=Object.freeze({__proto__:null,default:EventEmitter$4,EventEmitter:EventEmitter$4});const en="win32"===La.platform,tn=La.browser,rn={red:tn?"crimson":1,yellow:tn?"gold":3,cyan:tn?"darkturquoise":6,green:tn?"forestgreen":2,blue:tn?"steelblue":4,magenta:tn?"palevioletred":5};Ha.colors=[rn.cyan,rn.green,rn.blue,rn.magenta];const an={};let nn;class Log{static _logToStdErr(e,t){Log.loggerfn(e)(...t)}static loggerfn(e){let t=an[e=`LH:${e}`];return t||(t=Ha(e),an[e]=t,
67
- e.endsWith("error")?t.color=rn.red:e.endsWith("warn")&&(t.color=rn.yellow)),t}static setLevel(e){switch(nn=e,e){case"silent":Ha.enable("-LH:*");break;case"verbose":Ha.enable("LH:*");break;case"error":Ha.enable("-LH:*, LH:*:error");break;default:Ha.enable("LH:*, -LH:*:verbose")}}static formatProtocol(e,t,r){const a=!La||La.browser?1/0:La.stdout.columns,n=t.method||"?????",i=a-n.length-e.length-25,o=t.params&&"IO.read"!==n?JSON.stringify(t.params).substr(0,i):"";Log._logToStdErr(`${e}:${r||""}`,[n,o])}static isVerbose(){return"verbose"===nn}static time({msg:e,id:t,args:r=[]},a="log"){za(t),Log[a]("status",e,...r)}static timeEnd({msg:e,id:t,args:r=[]},a="verbose"){Log[a]("statusEnd",e,...r),Va(t)}static log(e,...t){return Log.events.issueStatus(e,t),Log._logToStdErr(e,t)}static warn(e,...t){return Log.events.issueWarning(e,t),Log._logToStdErr(`${e}:warn`,t)}static error(e,...t){return Log._logToStdErr(`${e}:error`,t)}static verbose(e,...t){return Log.events.issueStatus(e,t),
66
+ ;return r&&(t=r[e])?"function"==typeof t?[t.listener||t]:function unwrapListeners(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[]},EventEmitter$4.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount$1.call(e,t)},EventEmitter$4.prototype.listenerCount=listenerCount$1,EventEmitter$4.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qa=Object.freeze({__proto__:null,default:EventEmitter$4,EventEmitter:EventEmitter$4});const en="win32"===La.platform,tn=La.browser,rn={red:tn?"crimson":1,yellow:tn?"gold":3,cyan:tn?"darkturquoise":6,green:tn?"forestgreen":2,blue:tn?"steelblue":4,magenta:tn?"palevioletred":5};Ga.colors=[rn.cyan,rn.green,rn.blue,rn.magenta];const an={};let nn;class Log{static _logToStdErr(e,t){Log.loggerfn(e)(...t)}static loggerfn(e){let t=an[e=`LH:${e}`];return t||(t=Ga(e),an[e]=t,
67
+ e.endsWith("error")?t.color=rn.red:e.endsWith("warn")&&(t.color=rn.yellow)),t}static setLevel(e){switch(nn=e,e){case"silent":Ga.enable("-LH:*");break;case"verbose":Ga.enable("LH:*");break;case"error":Ga.enable("-LH:*, LH:*:error");break;default:Ga.enable("LH:*, -LH:*:verbose")}}static formatProtocol(e,t,r){const a=!La||La.browser?1/0:La.stdout.columns,n=t.method||"?????",i=a-n.length-e.length-25,o=t.params&&"IO.read"!==n?JSON.stringify(t.params).substr(0,i):"";Log._logToStdErr(`${e}:${r||""}`,[n,o])}static isVerbose(){return"verbose"===nn}static time({msg:e,id:t,args:r=[]},a="log"){za(t),Log[a]("status",e,...r)}static timeEnd({msg:e,id:t,args:r=[]},a="verbose"){Log[a]("statusEnd",e,...r),Va(t)}static log(e,...t){return Log.events.issueStatus(e,t),Log._logToStdErr(e,t)}static warn(e,...t){return Log.events.issueWarning(e,t),Log._logToStdErr(`${e}:warn`,t)}static error(e,...t){return Log._logToStdErr(`${e}:error`,t)}static verbose(e,...t){return Log.events.issueStatus(e,t),
68
68
  Log._logToStdErr(`${e}:verbose`,t)}static greenify(e){return`${Log.green}${e}${Log.reset}`}static redify(e){return`${Log.red}${e}${Log.reset}`}static get green(){return""}static get red(){return""}static get yellow(){return""}static get purple(){return""}static get reset(){return""}static get bold(){return""}static get dim(){return""}static get tick(){return en?"√":"✓"}static get cross(){return en?"×":"✘"}static get whiteSmallSquare(){return en?"·":"▫"}static get heavyHorizontal(){return en?"─":"━"}static get heavyVertical(){return en?"│ ":"┃ "}static get heavyUpAndRight(){return en?"└":"┗"}static get heavyVerticalAndRight(){return en?"├":"┣"}static get heavyDownAndHorizontal(){return en?"┬":"┳"}static get doubleLightHorizontal(){return"──"}}Log.events=new class Emitter extends EventEmitter$4{issueStatus(e,t){"status"!==e&&"statusEnd"!==e||this.emit(e,[e,...t])}issueWarning(e,t){this.emit("warning",[e,...t])}},Log.takeTimeEntries=()=>{const e=Wa()
69
- ;return Ga(),e},Log.getTimeEntries=()=>Wa();var on=getAugmentedNamespace(Object.freeze({__proto__:null,default:Log}));const sn=3.75,cn=.9,ln={DEVTOOLS_RTT_ADJUSTMENT_FACTOR:sn,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:cn,mobileSlow4G:{rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}},un={mobile:{mobile:!0,width:360,height:640,deviceScaleFactor:2.625,disabled:!1},desktop:{mobile:!1,width:1350,height:940,deviceScaleFactor:1,disabled:!1}},dn={mobile:"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Mobile Safari/537.36 Chrome-Lighthouse",
69
+ ;return Ha(),e},Log.getTimeEntries=()=>Wa();var on=getAugmentedNamespace(Object.freeze({__proto__:null,default:Log}));const sn=3.75,cn=.9,ln={DEVTOOLS_RTT_ADJUSTMENT_FACTOR:sn,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:cn,mobileSlow4G:{rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}},un={mobile:{mobile:!0,width:360,height:640,deviceScaleFactor:2.625,disabled:!1},desktop:{mobile:!1,width:1350,height:940,deviceScaleFactor:1,disabled:!1}},dn={mobile:"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Mobile Safari/537.36 Chrome-Lighthouse",
70
70
  desktop:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Safari/537.36 Chrome-Lighthouse"};var mn={throttling:ln,screenEmulationMetrics:un,userAgents:dn,defaultSettings:{output:"json",maxWaitForFcp:3e4,maxWaitForLoad:45e3,formFactor:"mobile",throttling:ln.mobileSlow4G,throttlingMethod:"simulate",screenEmulation:un.mobile,emulatedUserAgent:dn.mobile,auditMode:!1,gatherMode:!1,disableStorageReset:!1,debugNavigation:!1,channel:"node",budgets:null,locale:"en-US",blockedUrlPatterns:null,additionalTraceCategories:null,extraHeaders:null,precomputedLanternData:null,onlyAudits:null,onlyCategories:null,skipAudits:null},defaultPassConfig:{passName:"defaultPass",loadFailureMode:"fatal",recordTrace:!1,useThrottling:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",gatherers:[]},defaultNavigationConfig:{id:"default",loadFailureMode:"fatal",
71
71
  disableThrottling:!1,disableStorageReset:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",artifacts:[]},nonSimulatedPassConfigOverrides:{pauseAfterFcpMs:5250,pauseAfterLoadMs:5250,networkQuietThresholdMs:5250,cpuQuietThresholdMs:5250}};function wrapRuntimeEvalErrorInBrowser(e){return e&&"string"!=typeof e||(e=new Error(e)),{__failedInBrowser:!0,name:e.name||"Error",message:e.message||"unknown error",stack:e.stack}}function getElementsInDocument(e){const t=window.__ElementMatches||window.Element.prototype.matches,r=[],_findAllElements=a=>{for(let n,i=0;n=a[i];++i){if(!e||t.call(n,e)){const e=n;r.push(e)}n.shadowRoot&&_findAllElements(n.shadowRoot.querySelectorAll("*"))}};return _findAllElements(document.querySelectorAll("*")),r}function getOuterHTMLSnippet(e,t=[],r=500){const a=["autofill-information","autofill-prediction","title"];e instanceof ShadowRoot&&(e=e.host);try{const n=e.cloneNode()
72
72
  ;e.ownerDocument.createElement("template").content.append(n),t.concat(a).forEach((e=>{n.removeAttribute(e)}));let i=0;for(const t of n.getAttributeNames()){if(i>r){n.removeAttribute(t);continue}let a=n.getAttribute(t);if(null===a)continue;let o=!1;if("src"===t&&"currentSrc"in e){const t=e,r=t.currentSrc,n=t.ownerDocument.location.href;new URL(a,n).toString()!==r&&(a=r,o=!0)}if(a.length>75&&(a=a.slice(0,74)+"…",o=!0),o)if("style"===t){n.style.cssText=a}else n.setAttribute(t,a);i+=t.length+a.length}const o=/^[\s\S]*?>/,[s]=n.outerHTML.match(o)||[];return s&&i>r?s.slice(0,s.length-1)+" …>":s||""}catch(t){return`<${e.localName}>`}}function computeBenchmarkIndex(){return(function benchmarkIndexGC(){const e=Date.now();let t=0;for(;Date.now()-e<500;){let e="";for(let t=0;t<1e4;t++)e+="a";if(1===e.length)throw new Error("will never happen, but prevents compiler optimizations");t++}const r=(Date.now()-e)/1e3;return Math.round(t/10/r)}()+function benchmarkIndexNoGC(){const e=[],t=[]
@@ -81,7 +81,7 @@ for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/
81
81
  return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}function classEscape(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}return"Expected "+function describeExpected(e){var t,a,n,i=new Array(e.length);for(t=0;t<e.length;t++)i[t]=(n=e[t],r[n.type](n));if(i.sort(),i.length>0){for(t=1,a=1;t<i.length;t++)i[t-1]!==i[t]&&(i[a]=i[t],a++);i.length=a}switch(i.length){case 1:return i[0];case 2:return i[0]+" or "+i[1];default:return i.slice(0,-1).join(", ")+", or "+i[i.length-1]}}(e)+" but "+function describeFound(e){
82
82
  return e?'"'+literalEscape(e)+'"':"end of input"}(t)+" found."},{SyntaxError:peg$SyntaxError,parse:function peg$parse(e,t){t=void 0!==t?t:{};var r,a={},n={start:peg$parsestart},i=peg$parsestart,peg$c3=function(e){return e.join("")
83
83
  },o=peg$literalExpectation("{",!1),s=",",c=peg$literalExpectation(",",!1),l=peg$literalExpectation("}",!1),u="number",d=peg$literalExpectation("number",!1),m="date",p=peg$literalExpectation("date",!1),h="time",f=peg$literalExpectation("time",!1),y="plural",v=peg$literalExpectation("plural",!1),b="selectordinal",w=peg$literalExpectation("selectordinal",!1),S="select",T=peg$literalExpectation("select",!1),E=peg$literalExpectation("=",!1),x="offset:",_=peg$literalExpectation("offset:",!1),A=peg$otherExpectation("whitespace"),R=/^[ \t\n\r]/,k=peg$classExpectation([" ","\t","\n","\r"],!1,!1),D=peg$otherExpectation("optionalWhitespace"),C=/^[0-9]/,I=peg$classExpectation([["0","9"]],!1,!1),N=/^[0-9a-f]/i,L=peg$classExpectation([["0","9"],["a","f"]],!1,!0),M=peg$literalExpectation("0",!1),P=/^[1-9]/,O=peg$classExpectation([["1","9"]],!1,!1),F="'",U=peg$literalExpectation("'",!1),j=/^[ \t\n\r,.+={}#]/,B=peg$classExpectation([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),$={type:"any"
84
- },q=/^[^{}\\\0-\x1F\x7F \t\n\r]/,z=peg$classExpectation(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=peg$literalExpectation("\\\\",!1),W=peg$literalExpectation("\\#",!1),G=peg$literalExpectation("\\{",!1),H=peg$literalExpectation("\\}",!1),Y=peg$literalExpectation("\\u",!1),K=0,J=0,X=[{line:1,column:1}],Z=0,Q=[],ee=0;if("startRule"in t){if(!(t.startRule in n))throw new Error("Can't start parsing from rule \""+t.startRule+'".');i=n[t.startRule]}function location(){return peg$computeLocation(J,K)}function peg$literalExpectation(e,t){return{type:"literal",text:e,ignoreCase:t}}function peg$classExpectation(e,t,r){return{type:"class",parts:e,inverted:t,ignoreCase:r}}function peg$otherExpectation(e){return{type:"other",description:e}}function peg$computePosDetails(t){var r,a=X[t];if(a)return a;for(r=t-1;!X[r];)r--;for(a={line:(a=X[r]).line,column:a.column};r<t;)10===e.charCodeAt(r)?(a.line++,a.column=1):a.column++,r++;return X[t]=a,a}function peg$computeLocation(e,t){
84
+ },q=/^[^{}\\\0-\x1F\x7F \t\n\r]/,z=peg$classExpectation(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=peg$literalExpectation("\\\\",!1),W=peg$literalExpectation("\\#",!1),H=peg$literalExpectation("\\{",!1),G=peg$literalExpectation("\\}",!1),Y=peg$literalExpectation("\\u",!1),K=0,J=0,X=[{line:1,column:1}],Z=0,Q=[],ee=0;if("startRule"in t){if(!(t.startRule in n))throw new Error("Can't start parsing from rule \""+t.startRule+'".');i=n[t.startRule]}function location(){return peg$computeLocation(J,K)}function peg$literalExpectation(e,t){return{type:"literal",text:e,ignoreCase:t}}function peg$classExpectation(e,t,r){return{type:"class",parts:e,inverted:t,ignoreCase:r}}function peg$otherExpectation(e){return{type:"other",description:e}}function peg$computePosDetails(t){var r,a=X[t];if(a)return a;for(r=t-1;!X[r];)r--;for(a={line:(a=X[r]).line,column:a.column};r<t;)10===e.charCodeAt(r)?(a.line++,a.column=1):a.column++,r++;return X[t]=a,a}function peg$computeLocation(e,t){
85
85
  var r=peg$computePosDetails(e),a=peg$computePosDetails(t);return{start:{offset:e,line:r.line,column:r.column},end:{offset:t,line:a.line,column:a.column}}}function peg$fail(e){K<Z||(K>Z&&(Z=K,Q=[]),Q.push(e))}function peg$parsestart(){return peg$parsemessageFormatPattern()}function peg$parsemessageFormatPattern(){var e,t,r;for(e=K,t=[],r=peg$parsemessageFormatElement();r!==a;)t.push(r),r=peg$parsemessageFormatElement();return t!==a&&(J=e,t={type:"messageFormatPattern",elements:t,location:location()}),e=t}function peg$parsemessageFormatElement(){var t;return(t=function peg$parsemessageTextElement(){var t,r;t=K,(r=function peg$parsemessageText(){var t,r,n,i,o,s;t=K,r=[],n=K,(i=peg$parse_())!==a&&(o=peg$parsechars())!==a&&(s=peg$parse_())!==a?n=i=[i,o,s]:(K=n,n=a);if(n!==a)for(;n!==a;)r.push(n),n=K,(i=peg$parse_())!==a&&(o=peg$parsechars())!==a&&(s=peg$parse_())!==a?n=i=[i,o,s]:(K=n,n=a);else r=a;r!==a&&(J=t,r=r.reduce((function(e,t){return e.concat(t)}),[]).join(""));(t=r)===a&&(t=K,
86
86
  t=(r=peg$parsews())!==a?e.substring(t,K):r);return t}())!==a&&(J=t,r={type:"messageTextElement",value:r,location:location()});return t=r}())===a&&(t=function peg$parseargumentElement(){var t,r,n,i,E,x,_;t=K,123===e.charCodeAt(K)?(r="{",K++):(r=a,0===ee&&peg$fail(o));r!==a&&peg$parse_()!==a&&(n=function peg$parseargument(){var e,t,r;if((e=peg$parsenumber())===a){for(e=K,t=[],r=peg$parsequoteEscapedChar();r!==a;)t.push(r),r=peg$parsequoteEscapedChar();t!==a&&(J=e,t=peg$c3(t)),e=t}return e}())!==a&&peg$parse_()!==a?(i=K,44===e.charCodeAt(K)?(E=s,K++):(E=a,0===ee&&peg$fail(c)),E!==a&&(x=peg$parse_())!==a&&(_=function peg$parseelementFormat(){var t;(t=function peg$parsesimpleFormat(){var t,r,n,i,o,l;t=K,e.substr(K,6)===u?(r=u,K+=6):(r=a,0===ee&&peg$fail(d));r===a&&(e.substr(K,4)===m?(r=m,K+=4):(r=a,0===ee&&peg$fail(p)),r===a&&(e.substr(K,4)===h?(r=h,K+=4):(r=a,0===ee&&peg$fail(f))));r!==a&&peg$parse_()!==a?(n=K,44===e.charCodeAt(K)?(i=s,K++):(i=a,0===ee&&peg$fail(c)),
87
87
  i!==a&&(o=peg$parse_())!==a&&(l=peg$parsechars())!==a?n=i=[i,o,l]:(K=n,n=a),n===a&&(n=null),n!==a?(J=t,t=r={type:r+"Format",style:(y=n)&&y[2],location:location()}):(K=t,t=a)):(K=t,t=a);var y;return t}())===a&&(t=function peg$parsepluralFormat(){var t,r,n,i;t=K,e.substr(K,6)===y?(r=y,K+=6):(r=a,0===ee&&peg$fail(v));r!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(n=s,K++):(n=a,0===ee&&peg$fail(c)),n!==a&&peg$parse_()!==a&&(i=peg$parsepluralStyle())!==a?(J=t,t=r={type:(o=i).type,ordinal:!1,offset:o.offset||0,options:o.options,location:location()}):(K=t,t=a)):(K=t,t=a);var o;return t}())===a&&(t=function peg$parseselectOrdinalFormat(){var t,r,n,i;t=K,e.substr(K,13)===b?(r=b,K+=13):(r=a,0===ee&&peg$fail(w));r!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(n=s,K++):(n=a,0===ee&&peg$fail(c)),n!==a&&peg$parse_()!==a&&(i=peg$parsepluralStyle())!==a?(J=t,t=r={type:(o=i).type,ordinal:!0,offset:o.offset||0,options:o.options,location:location()}):(K=t,t=a)):(K=t,t=a);var o;return t
@@ -89,7 +89,7 @@ i!==a&&(o=peg$parse_())!==a&&(l=peg$parsechars())!==a?n=i=[i,o,l]:(K=n,n=a),n===
89
89
  0===ee&&peg$fail(E)),n!==a&&(i=peg$parsenumber())!==a?r=n=[n,i]:(K=r,r=a),(t=r!==a?e.substring(t,K):r)===a&&(t=peg$parsechars()),t}())!==a&&peg$parse_()!==a?(123===e.charCodeAt(K)?(n="{",K++):(n=a,0===ee&&peg$fail(o)),n!==a&&(i=peg$parsemessageFormatPattern())!==a?(125===e.charCodeAt(K)?(s="}",K++):(s=a,0===ee&&peg$fail(l)),s!==a?(J=t,t={type:"optionalFormatPattern",selector:r,value:i,location:location()}):(K=t,t=a)):(K=t,t=a)):(K=t,t=a),t}function peg$parsepluralStyle(){var t,r,n,i;if(t=K,(r=function peg$parseoffset(){var t,r,n;return t=K,e.substr(K,7)===x?(r=x,K+=7):(r=a,0===ee&&peg$fail(_)),r!==a&&peg$parse_()!==a&&(n=peg$parsenumber())!==a?(J=t,t=r=n):(K=t,t=a),t}())===a&&(r=null),r!==a)if(peg$parse_()!==a){if(n=[],(i=peg$parseoptionalFormatPattern())!==a)for(;i!==a;)n.push(i),i=peg$parseoptionalFormatPattern();else n=a;n!==a?(J=t,t=r=function(e,t){return{type:"pluralFormat",offset:e,options:t,location:location()}}(r,n)):(K=t,t=a)}else K=t,t=a;else K=t,t=a;return t}
90
90
  function peg$parsews(){var t,r;if(ee++,t=[],R.test(e.charAt(K))?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(k)),r!==a)for(;r!==a;)t.push(r),R.test(e.charAt(K))?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(k));else t=a;return ee--,t===a&&(r=a,0===ee&&peg$fail(A)),t}function peg$parse_(){var t,r,n;for(ee++,t=K,r=[],n=peg$parsews();n!==a;)r.push(n),n=peg$parsews();return t=r!==a?e.substring(t,K):r,ee--,t===a&&(r=a,0===ee&&peg$fail(D)),t}function peg$parsedigit(){var t;return C.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(I)),t}function peg$parsehexDigit(){var t;return N.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(L)),t}function peg$parsenumber(){var t,r,n,i,o,s;if(t=K,48===e.charCodeAt(K)?(r="0",K++):(r=a,0===ee&&peg$fail(M)),r===a){if(r=K,n=K,P.test(e.charAt(K))?(i=e.charAt(K),K++):(i=a,0===ee&&peg$fail(O)),i!==a){for(o=[],s=peg$parsedigit();s!==a;)o.push(s),s=peg$parsedigit();o!==a?n=i=[i,o]:(K=n,n=a)}else K=n,n=a;r=n!==a?e.substring(r,K):n}return r!==a&&(J=t,
91
91
  r=parseInt(r,10)),t=r}function peg$parsequoteEscapedChar(){var t,r,n;return t=K,r=K,ee++,39===e.charCodeAt(K)?(n=F,K++):(n=a,0===ee&&peg$fail(U)),n===a&&(j.test(e.charAt(K))?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail(B))),ee--,n===a?r=void 0:(K=r,r=a),r!==a?(e.length>K?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail($)),n!==a?(J=t,t=r=n):(K=t,t=a)):(K=t,t=a),t===a&&(t=K,39===e.charCodeAt(K)?(r=F,K++):(r=a,0===ee&&peg$fail(U)),r!==a&&(n=function peg$parseescape(){var t;j.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(B));t===a&&(t=peg$parseapostrophe());return t}())!==a?(J=t,t=r=n):(K=t,t=a)),t}function peg$parseapostrophe(){var t;return 39===e.charCodeAt(K)?(t=F,K++):(t=a,0===ee&&peg$fail(U)),t}function peg$parsechar(){var t,r,n,i,o,s,c,l,u;return t=K,39===e.charCodeAt(K)?(r=F,K++):(r=a,0===ee&&peg$fail(U)),r!==a&&(n=peg$parseapostrophe())!==a?(J=t,t=r=n):(K=t,t=a),t===a&&(q.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(z)),t===a&&(t=K,
92
- "\\\\"===e.substr(K,2)?(r="\\\\",K+=2):(r=a,0===ee&&peg$fail(V)),r!==a&&(J=t,r="\\"),(t=r)===a&&(t=K,"\\#"===e.substr(K,2)?(r="\\#",K+=2):(r=a,0===ee&&peg$fail(W)),r!==a&&(J=t,r="\\#"),(t=r)===a&&(t=K,"\\{"===e.substr(K,2)?(r="\\{",K+=2):(r=a,0===ee&&peg$fail(G)),r!==a&&(J=t,r="{"),(t=r)===a&&(t=K,"\\}"===e.substr(K,2)?(r="\\}",K+=2):(r=a,0===ee&&peg$fail(H)),r!==a&&(J=t,r="}"),(t=r)===a&&(t=K,"\\u"===e.substr(K,2)?(r="\\u",K+=2):(r=a,0===ee&&peg$fail(Y)),r!==a?(n=K,i=K,(o=peg$parsehexDigit())!==a&&(s=peg$parsehexDigit())!==a&&(c=peg$parsehexDigit())!==a&&(l=peg$parsehexDigit())!==a?i=o=[o,s,c,l]:(K=i,i=a),(n=i!==a?e.substring(n,K):i)!==a?(J=t,u=n,t=r=String.fromCharCode(parseInt(u,16))):(K=t,t=a)):(K=t,t=a))))))),t}function peg$parsechars(){var e,t,r;if(e=K,t=[],(r=peg$parsechar())!==a)for(;r!==a;)t.push(r),r=peg$parsechar();else t=a;return t!==a&&(J=e,t=peg$c3(t)),e=t}if((r=i())!==a&&K===e.length)return r;throw r!==a&&K<e.length&&peg$fail({type:"end"}),
92
+ "\\\\"===e.substr(K,2)?(r="\\\\",K+=2):(r=a,0===ee&&peg$fail(V)),r!==a&&(J=t,r="\\"),(t=r)===a&&(t=K,"\\#"===e.substr(K,2)?(r="\\#",K+=2):(r=a,0===ee&&peg$fail(W)),r!==a&&(J=t,r="\\#"),(t=r)===a&&(t=K,"\\{"===e.substr(K,2)?(r="\\{",K+=2):(r=a,0===ee&&peg$fail(H)),r!==a&&(J=t,r="{"),(t=r)===a&&(t=K,"\\}"===e.substr(K,2)?(r="\\}",K+=2):(r=a,0===ee&&peg$fail(G)),r!==a&&(J=t,r="}"),(t=r)===a&&(t=K,"\\u"===e.substr(K,2)?(r="\\u",K+=2):(r=a,0===ee&&peg$fail(Y)),r!==a?(n=K,i=K,(o=peg$parsehexDigit())!==a&&(s=peg$parsehexDigit())!==a&&(c=peg$parsehexDigit())!==a&&(l=peg$parsehexDigit())!==a?i=o=[o,s,c,l]:(K=i,i=a),(n=i!==a?e.substring(n,K):i)!==a?(J=t,u=n,t=r=String.fromCharCode(parseInt(u,16))):(K=t,t=a)):(K=t,t=a))))))),t}function peg$parsechars(){var e,t,r;if(e=K,t=[],(r=peg$parsechar())!==a)for(;r!==a;)t.push(r),r=peg$parsechar();else t=a;return t!==a&&(J=e,t=peg$c3(t)),e=t}if((r=i())!==a&&K===e.length)return r;throw r!==a&&K<e.length&&peg$fail({type:"end"}),
93
93
  function peg$buildStructuredError(e,t,r){return new peg$SyntaxError(peg$SyntaxError.buildMessage(e,t),e,t,r)}(Q,Z<e.length?e.charAt(Z):null,Z<e.length?peg$computeLocation(Z,Z+1):peg$computeLocation(Z,Z))}}}(),Tn=globalThis&&globalThis.__extends||(yn=function(e,t){return(yn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function __(){this.constructor=e}yn(e,t),e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}),En=function(){function Compiler(e,t,r){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=t,this.formatters=r}return Compiler.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},Compiler.prototype.compileMessage=function(e){var t=this
94
94
  ;if(!e||"messageFormatPattern"!==e.type)throw new Error('Message AST is not of type: "messageFormatPattern"');var r=e.elements,a=r.filter((function(e){return"messageTextElement"===e.type||"argumentElement"===e.type})).map((function(e){return"messageTextElement"===e.type?t.compileMessageText(e):t.compileArgument(e)}));if(a.length!==r.length)throw new Error("Message element does not have a valid type");return a},Compiler.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new Rn(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},Compiler.prototype.compileArgument=function(e){var t=e.format,r=e.id,a=this.formatters;if(!t)return new _n(r);var n=this.formats,i=this.locales;switch(t.type){case"numberFormat":return{id:r,format:a.getNumberFormat(i,n.number[t.style]).format};case"dateFormat":return{
95
95
  id:r,format:a.getDateTimeFormat(i,n.date[t.style]).format};case"timeFormat":return{id:r,format:a.getDateTimeFormat(i,n.time[t.style]).format};case"pluralFormat":return new An(r,t.offset,this.compileOptions(e),a.getPluralRules(i,{type:t.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new kn(r,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},Compiler.prototype.compileOptions=function(e){var t=this,r=e.format,a=r.options;this.pluralStack.push(this.currentPlural),this.currentPlural="pluralFormat"===r.type?e:null;var n=a.reduce((function(e,r){return e[r.selector]=t.compileMessage(r.value),e}),{});return this.currentPlural=this.pluralStack.pop(),n},Compiler}(),xn=function xn(e){this.id=e},_n=function(e){function StringFormat(){return null!==e&&e.apply(this,arguments)||this}return Tn(StringFormat,e),StringFormat.prototype.format=function(e){return e||"number"==typeof e?"string"==typeof e?e:String(e):""},StringFormat
@@ -102,7 +102,7 @@ day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"
102
102
  ;function collectAllCustomElementsFromICU(e,t=new Map){for(const r of e)if("argumentElement"===r.type&&(t.set(r.id,r),r.format&&"pluralFormat"===r.format.type))for(const e of r.format.options)collectAllCustomElementsFromICU(e.value.elements,t);return t}function formatMessage$1(e,t={},r){const a="en-XA"===r||"en-XL"===r?"de-DE":r,n=new(On.IntlMessageFormat||On)(e,a,zn),i=function _preformatValues(e,t,r){const a=[...collectAllCustomElementsFromICU(e.getAst().elements).values()],n={};for(const{id:e,format:i}of a){if(e&&e in t==0)throw new Error(`ICU Message "${r}" contains a value reference ("${e}") that wasn't provided`);const a=t[e];if(i&&"numberFormat"===i.type){if("number"!=typeof a)throw new Error(`ICU Message "${r}" contains a numeric reference ("${e}") but provided value was not a number`);"milliseconds"===i.style?n[e]=10*Math.round(a/10):"seconds"===i.style&&"timeInMs"===e?n[e]=Math.round(a/100)/10:"bytes"===i.style?n[e]=a/1024:n[e]=a}else n[e]=a}
103
103
  for(const e of Object.keys(t))if(!(e in n)){if("errorCode"!==e)throw new Error(`Provided value "${e}" does not match any placeholder in ICU message "${r}"`);n.errorCode=t.errorCode}return n}(n,t,e);return n.format(i)}function isIcuMessage$2(e){if(!Fn(e))return!1;const{i18nId:t,values:r,formattedDefault:a}=e;if("string"!=typeof t)return!1;if("string"!=typeof a)return!1;if(void 0!==r){if(!Fn(r))return!1;for(const e of Object.values(r))if("string"!=typeof e&&"number"!=typeof e)return!1}return qn.test(t)}function getFormatted(e,t){if(isIcuMessage$2(e))return function _localizeIcuMessage(e,t){const r=_getLocaleMessages(t)[e.i18nId];return r?formatMessage$1(r.message,e.values,t):e.formattedDefault}(e,t);if("string"==typeof e)return e;throw new Error("Attempted to format invalid icuMessage type")}function _formatPathAsString(e){let t="";for(const r of e)if(/^[a-z]+$/i.test(r))t.length&&(t+="."),t+=r;else{if(/]|"|'|\s/.test(r))throw new Error(`Cannot handle "${r}" in i18n`);t+=`[${r}]`}
104
104
  return t}function _getLocaleMessages(e){const t=jn[e];if(!t){if(e===Bn)return{};throw new Error(`Unsupported locale '${e}'`)}return t}function getIcuMessageIdParts(e){if(!qn.test(e))throw Error(`"${e}" does not appear to be a valid ICU message id`);const[t,r]=e.split(" | ");return{filename:t,key:r}}var Vn={DEFAULT_LOCALE:Bn,_formatPathAsString,collectAllCustomElementsFromICU,isIcuMessage:isIcuMessage$2,getFormatted,getRendererFormattedStrings:function getRendererFormattedStrings(e){const t=_getLocaleMessages(e),r=Object.keys(t).filter((e=>e.startsWith("report/"))),a={};for(const e of r){const{filename:r,key:n}=getIcuMessageIdParts(e);if(!r.endsWith("util.js"))throw new Error(`Unexpected message: ${e}`);a[n]=t[e].message}return a},replaceIcuMessages:function replaceIcuMessages(e,t){const r={};return function replaceInObject(e,r,a=[]){if(Un(e))for(const[n,i]of Object.entries(e)){const o=a.concat([n]);if(isIcuMessage$2(i)){
105
- const a=getFormatted(i,t),s=r[i.i18nId]||[],c=_formatPathAsString(o);s.push(i.values?{values:i.values,path:c}:c),e[n]=a,r[i.i18nId]=s}else replaceInObject(i,r,o)}}(e,r),r},hasLocale:function hasLocale(e){if(e===Bn)return!0;const t=Intl.NumberFormat.supportedLocalesOf([e]).length>0,r=Boolean(jn[e]);return t&&r},registerLocaleData:function registerLocaleData(e,t){jn[e]=t},formatMessage:formatMessage$1,getIcuMessageIdParts,getAvailableLocales:function getAvailableLocales$1(){return[...new Set([...Object.keys(jn),Bn])].sort()},getCanonicalLocales:function getCanonicalLocales(){return $n}};const Wn=globalThis.URL;var Gn=getAugmentedNamespace(Object.freeze({__proto__:null,URL:Wn}));const Hn=wn,Yn=bn,Kn=Gn;var Jn={LH_ROOT:"",readJson(e,t){const r=t?Yn.dirname(Kn.fileURLToPath(t.url)):"";return e=Yn.resolve(r,e),JSON.parse(Hn.readFileSync(e,"utf-8"))}};const Xn=bn,Zn=function lookupClosestLocale(e,t){if("string"==typeof e&&t[e])return e
105
+ const a=getFormatted(i,t),s=r[i.i18nId]||[],c=_formatPathAsString(o);s.push(i.values?{values:i.values,path:c}:c),e[n]=a,r[i.i18nId]=s}else replaceInObject(i,r,o)}}(e,r),r},hasLocale:function hasLocale(e){if(e===Bn)return!0;const t=Intl.NumberFormat.supportedLocalesOf([e]).length>0,r=Boolean(jn[e]);return t&&r},registerLocaleData:function registerLocaleData(e,t){jn[e]=t},formatMessage:formatMessage$1,getIcuMessageIdParts,getAvailableLocales:function getAvailableLocales$1(){return[...new Set([...Object.keys(jn),Bn])].sort()},getCanonicalLocales:function getCanonicalLocales(){return $n}};const Wn=globalThis.URL;var Hn=getAugmentedNamespace(Object.freeze({__proto__:null,URL:Wn}));const Gn=wn,Yn=bn,Kn=Hn;var Jn={LH_ROOT:"",readJson(e,t){const r=t?Yn.dirname(Kn.fileURLToPath(t.url)):"";return e=Yn.resolve(r,e),JSON.parse(Gn.readFileSync(e,"utf-8"))}};const Xn=bn,Zn=function lookupClosestLocale(e,t){if("string"==typeof e&&t[e])return e
106
106
  ;for(var r=[].concat(e||[]),a=0,n=r.length;a<n;++a)for(var i=r[a].split("-");i.length;){var o=i.join("-");if(t[o])return o;i.pop()}},{getAvailableLocales:Qn}=Vn,ei=on.default,{LH_ROOT:ti}=Jn,{isIcuMessage:ri,formatMessage:ai,DEFAULT_LOCALE:ni}=Vn,ii={ms:"{timeInMs, number, milliseconds} ms",seconds:"{timeInMs, number, seconds} s",displayValueByteSavings:"Potential savings of {wastedBytes, number, bytes} KiB",displayValueMsSavings:"Potential savings of {wastedMs, number, milliseconds} ms",displayValueElementsFound:"{nodeCount, plural, =1 {1 element found} other {# elements found}}",columnURL:"URL",columnSize:"Size",columnResourceSize:"Resource Size",columnTransferSize:"Transfer Size",columnCacheTTL:"Cache TTL",columnWastedBytes:"Potential Savings",columnWastedMs:"Potential Savings",columnBlockingTime:"Main-Thread Blocking Time",columnTimeSpent:"Time Spent",columnLocation:"Location",columnResourceType:"Resource Type",columnRequests:"Requests",columnName:"Name",columnSource:"Source",
107
107
  columnOverBudget:"Over Budget",columnElement:"Element",columnStartTime:"Start Time",columnDuration:"Duration",columnFailingElem:"Failing Elements",columnDescription:"Description",totalResourceType:"Total",documentResourceType:"Document",scriptResourceType:"Script",stylesheetResourceType:"Stylesheet",imageResourceType:"Image",mediaResourceType:"Media",fontResourceType:"Font",otherResourceType:"Other",thirdPartyResourceType:"Third-party",otherResourcesLabel:"Other resources",firstContentfulPaintMetric:"First Contentful Paint",interactiveMetric:"Time to Interactive",firstMeaningfulPaintMetric:"First Meaningful Paint",totalBlockingTimeMetric:"Total Blocking Time",maxPotentialFIDMetric:"Max Potential First Input Delay",speedIndexMetric:"Speed Index",largestContentfulPaintMetric:"Largest Contentful Paint",cumulativeLayoutShiftMetric:"Cumulative Layout Shift",interactionToNextPaint:"Interaction to Next Paint",itemSeverityLow:"Low",itemSeverityMedium:"Medium",itemSeverityHigh:"High"}
108
108
  ;function createIcuMessageFn(e,t){const r={...ii,...t};return(a,n)=>{const i=Object.keys(r).find((e=>r[e]===a));if(!i)throw new Error(`Could not locate: ${a}`);const o=i in t?e:"lighthouse-core/lib/i18n/i18n.js";return{i18nId:`${Xn.relative(ti,o).replace(/\\/g,"/")} | ${i}`,values:n,formattedDefault:ai(a,n,ni)}}}var oi={UIStrings:ii,lookupLocale:function lookupLocale(e,t){if("object"!=typeof Intl)throw new Error("Lighthouse must be run in Node with `Intl` support. See https://nodejs.org/api/intl.html for help");const r=Intl.getCanonicalLocales(e),a=Intl.NumberFormat.supportedLocalesOf(r),n=t||Qn(),i=Object.fromEntries(n.map((e=>[e,{}]))),o=Zn(a,i);return o||(0===Intl.NumberFormat.supportedLocalesOf("es").length&&ei.warn("i18n","Requested locale not available in this version of node. The `full-icu` npm module can provide additional locales. For help, see https://github.com/GoogleChrome/lighthouse/blob/master/readme.md#how-do-i-get-localized-lighthouse-results-via-the-cli"),
@@ -138,14 +138,14 @@ opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Esti
138
138
  viewTraceLabel:"View Trace",viewOriginalTraceLabel:"View Original Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G4",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",
139
139
  throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};Util$3.UIStrings=Ii;var Ni={Util:Util$3,UIStrings:Ii};const{Util:Li}=Ni,Mi=vi.exports,Pi=["https:","http:","chrome:","chrome-extension:"],Oi=["data","https","wss","blob","chrome","chrome-extension","about","filesystem"],Fi=["localhost","127.0.0.1"],Ui=["blob","data","intent","file","filesystem"];function rewriteChromeInternalUrl(e){return e&&e.startsWith("chrome://")?(e.endsWith("/")&&(e=e.replace(/\/$/,"")),e.replace(/^chrome:\/\/chrome\//,"chrome://")):e}class URLShim extends URL{static isValid(e){try{return new URL(e),!0}catch(e){return!1}}static hostsMatch(e,t){try{return new URL(e).host===new URL(t).host}catch(e){return!1}}static originsMatch(e,t){try{return new URL(e).origin===new URL(t).origin}catch(e){return!1}}static getOrigin(e){try{const t=new URL(e);return t.host&&t.origin||null
140
140
  }catch(e){return null}}static rootDomainsMatch(e,t){let r,a;try{r=Li.createOrReturnURL(e),a=Li.createOrReturnURL(t)}catch(e){return!1}if(!r.hostname||!a.hostname)return!1;return Li.getRootDomain(r)===Li.getRootDomain(a)}static getURLDisplayName(e,t){return Li.getURLDisplayName(new URL(e),t)}static elideDataURI(e){try{return"data:"===new URL(e).protocol?e.slice(0,100):e}catch(t){return e}}static equalWithExcludedFragments(e,t){[e,t]=[e,t].map(rewriteChromeInternalUrl);try{const r=new URL(e);r.hash="";const a=new URL(t);return a.hash="",r.href===a.href}catch(e){return!1}}static isProtocolAllowed(e){try{const t=new URL(e);return Pi.includes(t.protocol)}catch(e){return!1}}static isLikeLocalhost(e){return Fi.includes(e)||e.endsWith(".localhost")}static isSecureScheme(e){return Oi.includes(e)}static isNonNetworkProtocol(e){const t=e.includes(":")?e.slice(0,e.indexOf(":")):e;return Ui.includes(t)}static guessMimeType(e){let t;try{t=new URL(e)}catch{return}if("data:"===t.protocol){
141
- const e=t.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);if(!e)return;return e[1]}const r=t.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!r)return;const a=r[1];return"svg"===a?"image/svg+xml":"jpg"===a?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new Mi(Mi.errors.INVALID_URL)}}URLShim.URL=URL,URLShim.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";var ji=URLShim;const Bi=ji,$i="X-TCPMs",qi="X-SSLMs",zi="X-RequestMs",Vi="X-ResponseMs",Wi="X-TotalMs",Gi="X-TotalFetchedSize",Hi="X-ProtocolIsH2",Yi={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",
142
- SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport"};class NetworkRequest$p{constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.startTime=-1,this.endTime=-1,this.responseReceivedTime=-1,this.transferSize=0,this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",this.sessionId=void 0,this.isLinkPreload=!1}
143
- hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){let t;this.requestId=e.requestId;try{t=new Bi(e.request.url)}catch(e){return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:t.protocol.split(":")[0],host:t.hostname,securityOrigin:t.origin},this.isSecure=Bi.isSecureScheme(this.parsedURL.scheme),this.startTime=e.timestamp,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&Yi[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload="preload"===e.initiator.type||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength,-1!==e.encodedDataLength&&(this.transferSize+=e.encodedDataLength)}onLoadingFinished(e){
144
- this.finished||(this.finished=!0,this.endTime=e.timestamp,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,this.failed=!0,this.resourceType=e.type&&Yi[e.type],this.localizedFailDescription=e.errorText,this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.endTime=e.timestamp,this._updateResponseReceivedTimeIfNecessary()}setSession(e){this.sessionId=e}_onResponse(e,t,r){this.url=e.url,this.connectionId=String(e.connectionId),
145
- this.connectionReused=e.connectionReused,e.protocol&&(this.protocol=e.protocol),this.responseReceivedTime=t,this.transferSize=e.encodedDataLength,"boolean"==typeof e.fromDiskCache&&(this.fromDiskCache=e.fromDiskCache),"boolean"==typeof e.fromPrefetchCache&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,r&&(this.resourceType=Yi[r]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=NetworkRequest$p._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(0===e.requestTime||-1===e.receiveHeadersEnd)return;this.startTime=e.requestTime;const t=e.requestTime+e.receiveHeadersEnd/1e3;(!this.responseReceivedTime||this.responseReceivedTime<0)&&(this.responseReceivedTime=t),this.responseReceivedTime=Math.min(this.responseReceivedTime,t),
146
- this.responseReceivedTime=Math.max(this.responseReceivedTime,this.startTime),this.endTime=Math.max(this.endTime,this.responseReceivedTime)}_updateResponseReceivedTimeIfNecessary(){this.responseReceivedTime=Math.min(this.endTime,this.responseReceivedTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Gi));if(!e)return;const t=parseFloat(e.value);isNaN(t)||(this.transferSize=t)}_updateProtocolForLightrider(){globalThis.isLightrider&&this.responseHeaders.some((e=>e.name===Hi))&&(this.protocol="h2")}_updateTimingsForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Wi));if(!e)return
141
+ const e=t.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);if(!e)return;return e[1]}const r=t.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!r)return;const a=r[1];return"svg"===a?"image/svg+xml":"jpg"===a?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new Mi(Mi.errors.INVALID_URL)}}URLShim.URL=URL,URLShim.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";var ji=URLShim;const Bi=ji,$i="X-TCPMs",qi="X-SSLMs",zi="X-RequestMs",Vi="X-ResponseMs",Wi="X-TotalMs",Hi="X-TotalFetchedSize",Gi="X-ProtocolIsH2",Yi={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",
142
+ SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport",Prefetch:"Prefetch"};class NetworkRequest$p{constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.rendererStartTime=-1,this.startTime=-1,this.endTime=-1,this.responseReceivedTime=-1,this.transferSize=0,this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",
143
+ this.sessionId=void 0,this.isLinkPreload=!1}hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){let t;this.requestId=e.requestId;try{t=new Bi(e.request.url)}catch(e){return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:t.protocol.split(":")[0],host:t.hostname,securityOrigin:t.origin},this.isSecure=Bi.isSecureScheme(this.parsedURL.scheme),this.rendererStartTime=e.timestamp,this.startTime=e.timestamp,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&Yi[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload="preload"===e.initiator.type||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength,
144
+ -1!==e.encodedDataLength&&(this.transferSize+=e.encodedDataLength)}onLoadingFinished(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,this.failed=!0,this.resourceType=e.type&&Yi[e.type],this.localizedFailDescription=e.errorText,this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.endTime=e.timestamp,this._updateResponseReceivedTimeIfNecessary()}setSession(e){this.sessionId=e}_onResponse(e,t,r){
145
+ this.url=e.url,this.connectionId=String(e.connectionId),this.connectionReused=e.connectionReused,e.protocol&&(this.protocol=e.protocol),this.responseReceivedTime=t,this.transferSize=e.encodedDataLength,"boolean"==typeof e.fromDiskCache&&(this.fromDiskCache=e.fromDiskCache),"boolean"==typeof e.fromPrefetchCache&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,r&&(this.resourceType=Yi[r]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=NetworkRequest$p._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(0===e.requestTime||-1===e.receiveHeadersEnd)return;this.startTime=e.requestTime;const t=e.requestTime+e.receiveHeadersEnd/1e3;(!this.responseReceivedTime||this.responseReceivedTime<0)&&(this.responseReceivedTime=t),
146
+ this.responseReceivedTime=Math.min(this.responseReceivedTime,t),this.responseReceivedTime=Math.max(this.responseReceivedTime,this.startTime),this.endTime=Math.max(this.endTime,this.responseReceivedTime)}_updateResponseReceivedTimeIfNecessary(){this.responseReceivedTime=Math.min(this.endTime,this.responseReceivedTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Hi));if(!e)return;const t=parseFloat(e.value);isNaN(t)||(this.transferSize=t)}_updateProtocolForLightrider(){globalThis.isLightrider&&this.responseHeaders.some((e=>e.name===Gi))&&(this.protocol="h2")}_updateTimingsForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Wi));if(!e)return
147
147
  ;const t=parseInt(e.value),r=this.responseHeaders.find((e=>e.name===$i)),a=this.responseHeaders.find((e=>e.name===qi)),n=this.responseHeaders.find((e=>e.name===zi)),i=this.responseHeaders.find((e=>e.name===Vi)),o=r?Math.max(0,parseInt(r.value)):0,s=a?Math.max(0,parseInt(a.value)):0,c=n?Math.max(0,parseInt(n.value)):0,l=i?Math.max(0,parseInt(i.value)):0;o+c+l===t&&(s>o||(this.lrStatistics={endTimeDeltaMs:1e3*(this.endTime-(this.startTime+t/1e3)),TCPMs:o,requestMs:c,responseMs:l}))}static getRequestIdForBackend(e){return e.replace(/(:redirect)+$/,"")}static _headersDictToHeadersArray(e){const t=[];for(const r of Object.keys(e)){const a=e[r].split("\n");for(let e=0;e<a.length;++e)t.push({name:r,value:a[e]})}return t}static get TYPES(){return Yi}static isNonNetworkRequest(e){return Bi.isNonNetworkProtocol(e.protocol)||Bi.isNonNetworkProtocol(e.parsedURL.scheme)}static isSecureRequest(e){
148
- return Bi.isSecureScheme(e.parsedURL.scheme)||Bi.isSecureScheme(e.protocol)||Bi.isLikeLocalhost(e.parsedURL.host)||NetworkRequest$p.isHstsRequest(e)}static isHstsRequest(e){const t=e.redirectDestination;if(!t)return!1;return"HSTS"===e.responseHeaders.find((e=>"Non-Authoritative-Reason"===e.name))?.value&&NetworkRequest$p.isSecureRequest(t)}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}}NetworkRequest$p.HEADER_TCP=$i,NetworkRequest$p.HEADER_SSL=qi,NetworkRequest$p.HEADER_REQ=zi,NetworkRequest$p.HEADER_RES=Vi,NetworkRequest$p.HEADER_TOTAL=Wi,NetworkRequest$p.HEADER_FETCHED_SIZE=Gi,NetworkRequest$p.HEADER_PROTOCOL_IS_H2=Hi;var Ki=NetworkRequest$p;const Ji=Ki;var Xi={fetchResponseBodyFromCache:async function fetchResponseBodyFromCache$4(e,t,r=1e3){return t=Ji.getRequestIdForBackend(t),e.setNextProtocolTimeout(r),(await e.sendCommand("Network.getResponseBody",{requestId:t})).body}},Zi=getAugmentedNamespace(Qa);var Qi=class DevtoolsLog$a{
148
+ return Bi.isSecureScheme(e.parsedURL.scheme)||Bi.isSecureScheme(e.protocol)||Bi.isLikeLocalhost(e.parsedURL.host)||NetworkRequest$p.isHstsRequest(e)}static isHstsRequest(e){const t=e.redirectDestination;if(!t)return!1;return"HSTS"===e.responseHeaders.find((e=>"Non-Authoritative-Reason"===e.name))?.value&&NetworkRequest$p.isSecureRequest(t)}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}}NetworkRequest$p.HEADER_TCP=$i,NetworkRequest$p.HEADER_SSL=qi,NetworkRequest$p.HEADER_REQ=zi,NetworkRequest$p.HEADER_RES=Vi,NetworkRequest$p.HEADER_TOTAL=Wi,NetworkRequest$p.HEADER_FETCHED_SIZE=Hi,NetworkRequest$p.HEADER_PROTOCOL_IS_H2=Gi;var Ki=NetworkRequest$p;const Ji=Ki;var Xi={fetchResponseBodyFromCache:async function fetchResponseBodyFromCache$4(e,t,r=1e3){return t=Ji.getRequestIdForBackend(t),e.setNextProtocolTimeout(r),(await e.sendCommand("Network.getResponseBody",{requestId:t})).body}},Zi=getAugmentedNamespace(Qa);var Qi=class DevtoolsLog$a{
149
149
  constructor(e){this._filter=e,this._messages=[],this._isRecording=!1}get messages(){return this._messages}reset(){this._messages=[]}beginRecording(){this._isRecording=!0}endRecording(){this._isRecording=!1}record(e){this._isRecording&&"string"==typeof e.method&&(this._filter&&!this._filter.test(e.method)||this._messages.push(e))}};var eo=class FRGatherer$C{meta={supportedModes:[]};startInstrumentation(e){}startSensitiveInstrumentation(e){}stopSensitiveInstrumentation(e){}stopInstrumentation(e){}getArtifact(e){}get name(){let e=this.constructor.name;return e.includes("$")&&(e=e.substr(0,e.indexOf("$"))),e}async beforePass(e){await this.startInstrumentation({...e,dependencies:{}}),await this.startSensitiveInstrumentation({...e,dependencies:{}})}pass(e){}async afterPass(e,t){if("dependencies"in this.meta)throw Error("Gatherer with dependencies should override afterPass");return await this.stopSensitiveInstrumentation({...e,dependencies:{}}),await this.stopInstrumentation({...e,
150
150
  dependencies:{}}),this.getArtifact({...e,dependencies:{}})}};const to=on.default,ro=/^(chrome|https?):/;class TraceProcessor$5{static get TIMESPAN_MARKER_ID(){return"__lighthouseTimespanStart__"}static createNoNavstartError(){return new Error("No navigationStart event found")}static createNoResourceSendRequestError(){return new Error("No ResourceSendRequest event found")}static createNoTracingStartedError(){return new Error("No tracingStartedInBrowser event found")}static createNoFirstContentfulPaintError(){return new Error("No FirstContentfulPaint event found")}static createNoLighthouseMarkerError(){return new Error("No Lighthouse timespan marker event found")}static _isNavigationStartOfInterest(e){return"navigationStart"===e.name&&(void 0===e.args.data?.documentLoaderURL||!!e.args.data?.documentLoaderURL&&ro.test(e.args.data.documentLoaderURL))}static _sortTimestampEventGroup(e,t,r,a){
151
151
  const lookupArrayIndexByTsIndex=e=>t[e],lookupEventByTsIndex=e=>a[lookupArrayIndexByTsIndex(e)],n=[],i=[],o=[];for(const t of e){const e=lookupArrayIndexByTsIndex(t),r=lookupEventByTsIndex(t);"E"===r.ph?n.push(e):"X"===r.ph||"B"===r.ph?i.push(e):o.push(e)}const s=new Map;for(const n of i){const i=a[n];if("X"===i.ph)s.set(n,i.dur);else{let a=Number.MAX_SAFE_INTEGER,o=0;for(let n=r+e.length;n<t.length;n++){const e=lookupEventByTsIndex(n);if(e.name===i.name&&e.pid===i.pid&&e.tid===i.tid){if("E"===e.ph&&0===o){a=e.ts-i.ts;break}"E"===e.ph?o--:"B"===e.ph&&o++}}s.set(n,a)}}return i.sort(((e,t)=>(s.get(t)||0)-(s.get(e)||0)||e-t)),o.sort(((e,t)=>e-t)),[...n,...i,...o]}static filteredTraceSort(e,t){const r=[];for(let a=0;a<e.length;a++)t(e[a])&&r.push(a);r.sort(((t,r)=>e[t].ts-e[r].ts));for(let t=0;t<r.length-1;t++){const a=e[r[t]].ts,n=[t];for(let i=t+1;i<r.length&&e[r[i]].ts===a;i++)n.push(i);if(1===n.length)continue;const i=TraceProcessor$5._sortTimestampEventGroup(n,r,t,e)
@@ -178,11 +178,11 @@ if(!Number.isFinite(r.receiveHeadersEnd)||r.receiveHeadersEnd<0)return;if(!Numbe
178
178
  static estimateRTTByOrigin(e,t){const{forceCoarseEstimates:r=!1,coarseEstimateMultiplier:a=.3,useDownloadEstimates:n=!0,useSendStartEstimates:i=!0,useHeadersEndEstimates:o=!0}=t||{};let s=NetworkAnalyzer$b._estimateRTTByOriginViaTCPTiming(e);if(!s.size||r){s=new Map;const t=NetworkAnalyzer$b._estimateRTTByOriginViaDownloadTiming(e),r=NetworkAnalyzer$b._estimateRTTByOriginViaSendStartTiming(e),c=NetworkAnalyzer$b._estimateRTTByOriginViaHeadersEndTiming(e);for(const[e,r]of t.entries())n&&s.set(e,r);for(const[e,t]of r.entries()){if(!i)continue;const r=s.get(e)||[];s.set(e,r.concat(t))}for(const[e,t]of c.entries()){if(!o)continue;const r=s.get(e)||[];s.set(e,r.concat(t))}for(const e of s.values())e.forEach(((t,r)=>e[r]=t*a))}if(!s.size)throw new Error("No timing information available");return NetworkAnalyzer$b.summarize(s)}static estimateServerResponseTimeByOrigin(e,t){let r=(t||{}).rttByOrigin;if(!r){r=new Map;const a=NetworkAnalyzer$b.estimateRTTByOrigin(e,t)
179
179
  ;for(const[e,t]of a.entries())r.set(e,t.min)}const a=NetworkAnalyzer$b._estimateResponseTimeByOrigin(e,r);return NetworkAnalyzer$b.summarize(a)}static estimateThroughput(e){let t=0;const r=e.reduce(((e,r)=>("data"===r.parsedURL?.scheme||r.failed||!r.finished||r.statusCode>300||!r.transferSize||(t+=r.transferSize,e.push({time:r.responseReceivedTime,isStart:!0}),e.push({time:r.endTime,isStart:!1})),e)),[]).sort(((e,t)=>e.time-t.time));if(!r.length)return 1/0;let a=0,n=0,i=0;return r.forEach((e=>{e.isStart?(0===a&&(n=e.time),a++):(a--,0===a&&(i+=e.time-n))})),8*t/i}static findMainDocument(e,t){const r=NetworkAnalyzer$b.findOptionalMainDocument(e,t);if(!r)throw new Error("Unable to identify the main resource");return r}static findOptionalMainDocument(e,t){if(t){const r=e.find((e=>t.startsWith(e.url)&&Po.equalWithExcludedFragments(e.url,t)));if(r)return r}const r=e.filter((e=>e.resourceType===Mo.TYPES.Document));if(r.length)return r.reduce(((e,t)=>t.startTime<e.startTime?t:e))}
180
180
  static resolveRedirects(e){for(;e.redirectDestination;)e=e.redirectDestination;return e}}var Fo=NetworkAnalyzer$b;const Uo=vi.exports,jo=Fo;function getNetworkError(e){if(!e)return new Uo(Uo.errors.NO_DOCUMENT_REQUEST);if(e.failed){const t=e.localizedFailDescription;return"net::ERR_NAME_NOT_RESOLVED"===t||"net::ERR_NAME_RESOLUTION_FAILED"===t||t.startsWith("net::ERR_DNS_")?new Uo(Uo.errors.DNS_FAILURE):new Uo(Uo.errors.FAILED_DOCUMENT_REQUEST,{errorDetails:t})}return e.hasErrorStatusCode()?new Uo(Uo.errors.ERRORED_DOCUMENT_REQUEST,{statusCode:`${e.statusCode}`}):void 0}function getInterstitialError(e,t){if(!e)return;return t.find((e=>e.documentURL.startsWith("chrome-error://")))&&e.failed?e.localizedFailDescription.startsWith("net::ERR_CERT")?new Uo(Uo.errors.INSECURE_DOCUMENT_REQUEST,{securityMessages:e.localizedFailDescription}):new Uo(Uo.errors.CHROME_INTERSTITIAL_ERROR):void 0}function getNonHtmlError(e){if(e)return"text/html"!==e.mimeType?new Uo(Uo.errors.NOT_HTML,{
181
- mimeType:e.mimeType}):void 0}var Bo={getNetworkError,getInterstitialError,getPageLoadError:function getPageLoadError$2(e,t){const{url:r,loadFailureMode:a,networkRecords:n}=t;let i,o;try{i=jo.findMainDocument(n,r)}catch(e){}i&&(o=jo.resolveRedirects(i));const s=getNetworkError(i),c=getInterstitialError(i,n),l=getNonHtmlError(o);if("ignore"!==a)return c||(s||(l||e))},getNonHtmlError};var $o=getAugmentedNamespace(Object.freeze({__proto__:null,version:"9.6.6"}));const{version:qo}=$o,zo={latency:0,downloadThroughput:0,uploadThroughput:0,offline:!1},Vo={rate:1};function parseUseragentIntoMetadata(e,t){const r=e.match(/Chrome\/([\d.]+)/)?.[1]||"99.0.1234.0",[a]=r.split(".",1),n="mobile"===t;return{brands:[{brand:"Chromium",version:a},{brand:"Google Chrome",version:a},{brand:"Lighthouse",version:qo}],fullVersion:r,...n?{platform:"Android",platformVersion:"6.0",architecture:"",model:"Moto G4"}:{platform:"macOS",platformVersion:"10.15.7",architecture:"x86",model:""},mobile:n}}
181
+ mimeType:e.mimeType}):void 0}var Bo={getNetworkError,getInterstitialError,getPageLoadError:function getPageLoadError$2(e,t){const{url:r,loadFailureMode:a,networkRecords:n}=t;let i,o;try{i=jo.findMainDocument(n,r)}catch(e){}i&&(o=jo.resolveRedirects(i));const s=getNetworkError(i),c=getInterstitialError(i,n),l=getNonHtmlError(o);if("ignore"!==a)return c||(s||(l||e))},getNonHtmlError};var $o=getAugmentedNamespace(Object.freeze({__proto__:null,version:"9.6.8"}));const{version:qo}=$o,zo={latency:0,downloadThroughput:0,uploadThroughput:0,offline:!1},Vo={rate:1};function parseUseragentIntoMetadata(e,t){const r=e.match(/Chrome\/([\d.]+)/)?.[1]||"99.0.1234.0",[a]=r.split(".",1),n="mobile"===t;return{brands:[{brand:"Chromium",version:a},{brand:"Google Chrome",version:a},{brand:"Lighthouse",version:qo}],fullVersion:r,...n?{platform:"Android",platformVersion:"6.0",architecture:"",model:"Moto G4"}:{platform:"macOS",platformVersion:"10.15.7",architecture:"x86",model:""},mobile:n}}
182
182
  function enableNetworkThrottling(e,t){const r={offline:!1,latency:t.requestLatencyMs||0,downloadThroughput:t.downloadThroughputKbps||0,uploadThroughput:t.uploadThroughputKbps||0};return r.downloadThroughput=Math.floor(1024*r.downloadThroughput/8),r.uploadThroughput=Math.floor(1024*r.uploadThroughput/8),e.sendCommand("Network.emulateNetworkConditions",r)}function clearNetworkThrottling(e){return e.sendCommand("Network.emulateNetworkConditions",zo)}function enableCPUThrottling(e,t){const r=t.cpuSlowdownMultiplier;return e.sendCommand("Emulation.setCPUThrottlingRate",{rate:r})}function clearCPUThrottling(e){return e.sendCommand("Emulation.setCPUThrottlingRate",Vo)}var Wo={emulate:async function emulate(e,t){if(!1!==t.emulatedUserAgent){const r=t.emulatedUserAgent;await e.sendCommand("Network.setUserAgentOverride",{userAgent:r,userAgentMetadata:parseUseragentIntoMetadata(r,t.formFactor)})}if(!0!==t.screenEmulation.disabled){
183
- const{width:r,height:a,deviceScaleFactor:n,mobile:i}=t.screenEmulation,o={width:r,height:a,deviceScaleFactor:n,mobile:i};await e.sendCommand("Emulation.setDeviceMetricsOverride",o),await e.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:o.mobile})}},throttle:async function throttle(e,t){if("devtools"!==t.throttlingMethod)return clearNetworkThrottling(e);await Promise.all([enableNetworkThrottling(e,t.throttling),enableCPUThrottling(e,t.throttling)])},clearThrottling:async function clearThrottling(e){await Promise.all([clearNetworkThrottling(e),clearCPUThrottling(e)])},enableNetworkThrottling,clearNetworkThrottling,enableCPUThrottling,clearCPUThrottling};const Go=on.default,Ho={
184
- warningData:"{locationCount, plural,\n =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n }"},Yo=oi.createMessageInstanceIdFn("lighthouse-core/gather/driver/storage.js",Ho);var Ko={clearDataForOrigin:async function clearDataForOrigin(e,t){const r={msg:"Cleaning origin data",id:"lh:storage:clearDataForOrigin"};Go.time(r);const a=new URL(t).origin,n=["file_systems","shader_cache","service_workers","cache_storage"].join(",");e.setNextProtocolTimeout(5e3);try{await e.sendCommand("Storage.clearDataForOrigin",{origin:a,storageTypes:n})}catch(e){if("PROTOCOL_TIMEOUT"!==e.code)throw e;Go.warn("Driver","clearDataForOrigin timed out")}finally{Go.timeEnd(r)}},
185
- clearBrowserCaches:async function clearBrowserCaches(e){const t={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};Go.time(t),await e.sendCommand("Network.clearBrowserCache"),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!0}),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!1}),Go.timeEnd(t)},getImportantStorageWarning:async function getImportantStorageWarning(e,t){const r=await e.sendCommand("Storage.getUsageAndQuota",{origin:t}),a={local_storage:"Local Storage",indexeddb:"IndexedDB",websql:"Web SQL"},n=r.usageBreakdown.filter((e=>e.usage)).map((e=>a[e.storageType]||"")).filter(Boolean);if(n.length)return Yo(Ho.warningData,{locations:n.join(", "),locationCount:n.length})},UIStrings:Ho};const Jo=on.default,Xo=Ko,Zo=Wo,Qo=hn;async function prepareThrottlingAndNetwork(e,t,r){const a={msg:"Preparing network conditions",id:"lh:gather:prepareThrottlingAndNetwork"};Jo.time(a),r.disableThrottling?await Zo.clearThrottling(e):await Zo.throttle(e,t)
183
+ const{width:r,height:a,deviceScaleFactor:n,mobile:i}=t.screenEmulation,o={width:r,height:a,deviceScaleFactor:n,mobile:i};await e.sendCommand("Emulation.setDeviceMetricsOverride",o),await e.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:o.mobile})}},throttle:async function throttle(e,t){if("devtools"!==t.throttlingMethod)return clearNetworkThrottling(e);await Promise.all([enableNetworkThrottling(e,t.throttling),enableCPUThrottling(e,t.throttling)])},clearThrottling:async function clearThrottling(e){await Promise.all([clearNetworkThrottling(e),clearCPUThrottling(e)])},enableNetworkThrottling,clearNetworkThrottling,enableCPUThrottling,clearCPUThrottling};const Ho=on.default,Go={
184
+ warningData:"{locationCount, plural,\n =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n }"},Yo=oi.createMessageInstanceIdFn("lighthouse-core/gather/driver/storage.js",Go);var Ko={clearDataForOrigin:async function clearDataForOrigin(e,t){const r={msg:"Cleaning origin data",id:"lh:storage:clearDataForOrigin"};Ho.time(r);const a=new URL(t).origin,n=["file_systems","shader_cache","service_workers","cache_storage"].join(",");e.setNextProtocolTimeout(5e3);try{await e.sendCommand("Storage.clearDataForOrigin",{origin:a,storageTypes:n})}catch(e){if("PROTOCOL_TIMEOUT"!==e.code)throw e;Ho.warn("Driver","clearDataForOrigin timed out")}finally{Ho.timeEnd(r)}},
185
+ clearBrowserCaches:async function clearBrowserCaches(e){const t={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};Ho.time(t),await e.sendCommand("Network.clearBrowserCache"),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!0}),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!1}),Ho.timeEnd(t)},getImportantStorageWarning:async function getImportantStorageWarning(e,t){const r=await e.sendCommand("Storage.getUsageAndQuota",{origin:t}),a={local_storage:"Local Storage",indexeddb:"IndexedDB",websql:"Web SQL"},n=r.usageBreakdown.filter((e=>e.usage)).map((e=>a[e.storageType]||"")).filter(Boolean);if(n.length)return Yo(Go.warningData,{locations:n.join(", "),locationCount:n.length})},UIStrings:Go};const Jo=on.default,Xo=Ko,Zo=Wo,Qo=hn;async function prepareThrottlingAndNetwork(e,t,r){const a={msg:"Preparing network conditions",id:"lh:gather:prepareThrottlingAndNetwork"};Jo.time(a),r.disableThrottling?await Zo.clearThrottling(e):await Zo.throttle(e,t)
186
186
  ;const n=(r.blockedUrlPatterns||[]).concat(t.blockedUrlPatterns||[]);await e.sendCommand("Network.setBlockedURLs",{urls:n});const i=t.extraHeaders;i&&await e.sendCommand("Network.setExtraHTTPHeaders",{headers:i}),Jo.timeEnd(a)}async function prepareDeviceEmulationAndAsyncStacks(e,t){await e.defaultSession.sendCommand("Network.enable"),await Zo.emulate(e.defaultSession,t),await async function enableAsyncStacks(e){const enable=async()=>{await e.sendCommand("Debugger.enable"),await e.sendCommand("Debugger.setSkipAllPauses",{skip:!0}),await e.sendCommand("Debugger.setAsyncCallStackDepth",{maxDepth:8})};e.on("Debugger.paused",(()=>e.sendCommand("Debugger.resume"))),e.on("Page.frameNavigated",(e=>{e.frame.parentId||enable().catch((e=>Jo.error("Driver",e)))})),await enable()}(e.defaultSession)}var es={prepareThrottlingAndNetwork,prepareTargetForTimespanMode:async function prepareTargetForTimespanMode$1(e,t){const r={msg:"Preparing target for timespan mode",id:"lh:prepare:timespanMode"}
187
187
  ;Jo.time(r),await prepareDeviceEmulationAndAsyncStacks(e,t),await prepareThrottlingAndNetwork(e.defaultSession,t,{disableThrottling:!1,blockedUrlPatterns:void 0}),Jo.timeEnd(r)},prepareTargetForNavigationMode:async function prepareTargetForNavigationMode(e,t){const r={msg:"Preparing target for navigation mode",id:"lh:prepare:navigationMode"};Jo.time(r),await prepareDeviceEmulationAndAsyncStacks(e,t),await async function dismissJavaScriptDialogs(e){e.on("Page.javascriptDialogOpening",(t=>{Jo.warn("Driver",`${t.type} dialog opened by the page automatically suppressed.`),e.sendCommand("Page.handleJavaScriptDialog",{accept:!0,promptText:"Lighthouse prompt response"}).catch((e=>Jo.warn("Driver",e)))})),await e.sendCommand("Page.enable")}(e.defaultSession),await e.executionContext.cacheNativesOnNewDocument(),"simulate"===t.throttlingMethod&&await async function shimRequestIdleCallbackOnNewDocument(e,t){await e.executionContext.evaluateOnNewDocument(Qo.wrapRequestIdleCallback,{
188
188
  args:[t.throttling.cpuSlowdownMultiplier]})}(e,t),Jo.timeEnd(r)},prepareTargetForIndividualNavigation:async function prepareTargetForIndividualNavigation(e,t,r){const a={msg:"Preparing target for navigation",id:"lh:prepare:navigation"};Jo.time(a);const n=[],{requestor:i}=r;if(!t.disableStorageReset&&!r.disableStorageReset&&"string"==typeof i){const t=i,{warnings:r}=await async function resetStorageForUrl(e,t){const r=[],a=await Xo.getImportantStorageWarning(e,t);return a&&r.push(a),await Xo.clearDataForOrigin(e,t),await Xo.clearBrowserCaches(e),{warnings:r}}(e,t);n.push(...r)}return await prepareThrottlingAndNetwork(e,t,r),Jo.timeEnd(a),{warnings:n}}};const ts=on.default;var rs=class TargetManager$1{constructor(e){this._enabled=!1,this._session=e,this._listeners=[],this._onSessionAttached=this._onSessionAttached.bind(this),this._targets=new Map,this._onFrameNavigated=async e=>{e.frame.parentId||await this._session.sendCommand("Target.setAutoAttach",{autoAttach:!0,flatten:!0,
@@ -217,8 +217,8 @@ warning:"ERROR: 'display' has invalid value "+a+". will fall back to browser."}}
217
217
  a.warning=`ERROR: invalid application URL ${e.url}`}return{raw:e,value:{platform:t,id:r,url:a},warning:void 0}}function parseRelatedApplications(e){const t=e.related_applications;if(void 0===t)return{raw:t,value:void 0,warning:void 0};if(!Array.isArray(t))return{raw:t,value:void 0,warning:"ERROR: 'related_applications' expected to be an array but is not."};const r=t.filter((e=>!!e.platform)).map(parseApplication).filter((e=>!!e.value.id.value||!!e.value.url.value));return{raw:t,value:r,warning:void 0}}function parsePreferRelatedApplications(e){const t=e.prefer_related_applications;let r,a;return"boolean"==typeof t?r=t:(void 0!==t&&(a="ERROR: 'prefer_related_applications' expected to be a boolean."),r=void 0),{raw:t,value:r,warning:a}}function parseThemeColor(e){return parseColor(e.theme_color)}function parseBackgroundColor(e){return parseColor(e.background_color)}var Ms=function parse$2(e,t,r){
218
218
  if(void 0===t||void 0===r)throw new Error("Manifest and document URLs required for manifest parsing.");let a;try{a=JSON.parse(e)}catch(r){return{raw:e,value:void 0,warning:"ERROR: file isn't valid JSON: "+r,url:t}}const n={name:parseName(a),short_name:parseShortName(a),start_url:parseStartUrl(a,t,r),display:parseDisplay(a),orientation:parseOrientation(a),icons:parseIcons(a,t),related_applications:parseRelatedApplications(a),prefer_related_applications:parsePreferRelatedApplications(a),theme_color:parseThemeColor(a),background_color:parseBackgroundColor(a)};let i;try{new Ds(t).protocol.startsWith("http")||(i="WARNING: manifest URL not available over a valid network protocol")}catch(e){i=`ERROR: invalid manifest URL: '${t}'`}return{raw:e,value:n,warning:i,url:t}};const Ps=on.default,Os=Ms,Fs=eo;class WebAppManifest$1 extends Fs{meta={supportedModes:["snapshot","navigation"]};static async fetchAppManifest(e){let t;e.setNextProtocolTimeout(1e4);try{
219
219
  t=await e.sendCommand("Page.getAppManifest")}catch(e){if("PROTOCOL_TIMEOUT"===e.code)return Ps.error("WebAppManifest","Failed fetching manifest",e),null;throw e}let r=t.data;if(!r)return null;return 65279===r.charCodeAt(0)&&(r=Buffer.from(r).slice(3).toString()),{...t,data:r}}static async getWebAppManifest(e,t){const r={msg:"Get webapp manifest",id:"lh:gather:getWebAppManifest"};Ps.time(r);const a=await WebAppManifest$1.fetchAppManifest(e);if(!a)return null;const n=Os(a.data,a.url,t);return Ps.timeEnd(r),n}getArtifact(e){const t=e.driver;return WebAppManifest$1.getWebAppManifest(t.defaultSession,e.url)}}var Us=WebAppManifest$1;const js=on.default,Bs=eo;class InstallabilityErrors$1 extends Bs{meta={supportedModes:["snapshot","navigation"]};static async getInstallabilityErrors(e){const t={msg:"Get webapp installability errors",id:"lh:gather:getInstallabilityErrors"};js.time(t);const r=(await e.sendCommand("Page.getInstallabilityErrors")).installabilityErrors;return js.timeEnd(t),{
220
- errors:r}}getArtifact(e){const t=e.driver;return InstallabilityErrors$1.getInstallabilityErrors(t.defaultSession)}}var $s=InstallabilityErrors$1;const qs=ls,zs=Qi,Vs=eo;class DevtoolsLog$8 extends Vs{static symbol=Symbol("DevtoolsLog");meta={symbol:DevtoolsLog$8.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._networkMonitor=void 0,this._messageLog=new zs(/^(Page|Network)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),this._messageLog.beginRecording(),this._networkMonitor=new qs(e.defaultSession),this._networkMonitor.on("protocolmessage",this._onProtocolMessage),this._networkMonitor.enable()}async stopSensitiveInstrumentation(){this._networkMonitor&&(this._messageLog.endRecording(),this._networkMonitor.disable(),this._networkMonitor.off("protocolmessage",this._onProtocolMessage))}async getArtifact(){return this._messageLog.messages}}var Ws=DevtoolsLog$8;const Gs=eo,Hs=Ws
221
- ;class NetworkUserAgent$1 extends Gs{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Hs.symbol}};static getNetworkUserAgent(e){for(const t of e){if("Network.requestWillBeSent"!==t.method)continue;const e=t.params.request.headers["User-Agent"];if(e)return e}return""}async getArtifact(e){return NetworkUserAgent$1.getNetworkUserAgent(e.dependencies.DevtoolsLog)}}var Ys=NetworkUserAgent$1;const Ks=on.default,Js=eo;async function detectLibraries(){const e=[],t=d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests;for(const[r,a]of Object.entries(t))try{let t;const n=new Promise((e=>t=setTimeout((()=>e(!1)),1e3))),i=await Promise.race([a.test(window),n]);t&&clearTimeout(t),i&&e.push({id:a.id,name:r,version:i.version,npm:a.npm})}catch(e){}return e}class Stacks$1 extends Js{constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}static async collectStacks(e){const t={msg:"Collect stacks",id:"lh:gather:collectStacks"};Ks.time(t)
220
+ errors:r}}getArtifact(e){const t=e.driver;return InstallabilityErrors$1.getInstallabilityErrors(t.defaultSession)}}var $s=InstallabilityErrors$1;const qs=ls,zs=Qi,Vs=eo;class DevtoolsLog$8 extends Vs{static symbol=Symbol("DevtoolsLog");meta={symbol:DevtoolsLog$8.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._networkMonitor=void 0,this._messageLog=new zs(/^(Page|Network)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),this._messageLog.beginRecording(),this._networkMonitor=new qs(e.defaultSession),this._networkMonitor.on("protocolmessage",this._onProtocolMessage),this._networkMonitor.enable()}async stopSensitiveInstrumentation(){this._networkMonitor&&(this._messageLog.endRecording(),this._networkMonitor.disable(),this._networkMonitor.off("protocolmessage",this._onProtocolMessage))}async getArtifact(){return this._messageLog.messages}}var Ws=DevtoolsLog$8;const Hs=eo,Gs=Ws
221
+ ;class NetworkUserAgent$1 extends Hs{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Gs.symbol}};static getNetworkUserAgent(e){for(const t of e){if("Network.requestWillBeSent"!==t.method)continue;const e=t.params.request.headers["User-Agent"];if(e)return e}return""}async getArtifact(e){return NetworkUserAgent$1.getNetworkUserAgent(e.dependencies.DevtoolsLog)}}var Ys=NetworkUserAgent$1;const Ks=on.default,Js=eo;async function detectLibraries(){const e=[],t=d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests;for(const[r,a]of Object.entries(t))try{let t;const n=new Promise((e=>t=setTimeout((()=>e(!1)),1e3))),i=await Promise.race([a.test(window),n]);t&&clearTimeout(t),i&&e.push({id:a.id,name:r,version:i.version,npm:a.npm})}catch(e){}return e}class Stacks$1 extends Js{constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}static async collectStacks(e){const t={msg:"Collect stacks",id:"lh:gather:collectStacks"};Ks.time(t)
222
222
  ;const r=(await e.evaluate(detectLibraries,{args:[],
223
223
  deps:['function _createTimeoutHelper(){let e;return{timeoutPromise:new Promise(((t,o)=>{e=setTimeout((()=>o(new Error("Timed out"))),5e3)})),clearTimeout:()=>clearTimeout(e)}}var UNKNOWN_VERSION=null,d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests={GWT:{id:"gwt",icon:"gwt",url:"http://www.gwtproject.org/",test:function(e){var t=e.document,o=t.getElementById("__gwt_historyFrame"),r=t.gwt_uid,n=t.body.__listener,i=t.body.__eventBits,s=e.__gwt_activeModules,c=e.__gwt_jsonp__,u=e.__gwt_scriptsLoaded||e.__gwt_stylesLoaded||e.__gwt_activeModules;if(o||r||n||i||s||c||u){for(var a=t.getElementsByTagName("iframe"),l=UNKNOWN_VERSION,N=0;N<a.length;N++)try{if(a[N].tabIndex<0&&a[N].contentWindow&&a[N].contentWindow.$gwt_version){l=a[N].contentWindow.$gwt_version;break}}catch(e){}return"0.0.999"==l&&(l="Google Internal"),{version:l}}return!1}},Ink:{id:"ink",icon:"ink",url:"http://ink.sapo.pt/",test:function(e){return!(!e.Ink||!e.Ink.createModule)&&{version:UNKNOWN_VERSION}}},Vaadin:{id:"vaadin",icon:"vaadin",url:"https://vaadin.com/",test:function(e){return!(!e.vaadin||!e.vaadin.registerWidgetset)&&{version:UNKNOWN_VERSION}}},Bootstrap:{id:"bootstrap",icon:"bootstrap",url:"http://getbootstrap.com/",npm:"bootstrap",test:function(e){var t,o=e.$&&e.$.fn;if(o&&(["affix","alert","button","carousel","collapse","dropdown","modal","popover","scrollspy","tab","tooltip"].some((function(o){if(e.$.fn[o]){if(e.$.fn[o].Constructor&&e.$.fn[o].Constructor.VERSION)return t=e.$.fn[o].Constructor.VERSION,!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")(?:bs\\\\.){1}"+o).test(e.$.fn[o].toString()))return t=">= 3.0.0 & <= 3.1.1",!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")"+o).test(e.$.fn[o].toString()))return t=">= 2.0.0 & <= 2.3.2",!0}return!1})),t))return{version:t};return!1}},Zurb:{id:"zurb",icon:"zurb",url:"https://foundation.zurb.com/",npm:"foundation-sites",test:function(e){return!(!e.Foundation||!e.Foundation.Toggler)&&{version:e.Foundation.version||UNKNOWN_VERSION}}},Polymer:{id:"polymer",icon:"polymer",url:"https://www.polymer-project.org/",npm:"@polymer/polymer",test:function(e){return!(!e.Polymer||!e.Polymer.dom)&&{version:e.Polymer.version||UNKNOWN_VERSION}}},LitElement:{id:"litelement",icon:"polymer",url:"https://lit-element.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litElementVersions&&e.litElementVersions.length){var t=[...e.litElementVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},"lit-html":{id:"lit-html",icon:"polymer",url:"https://lit-html.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litHtmlVersions&&e.litHtmlVersions.length){var t=[...e.litHtmlVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},Highcharts:{id:"highcharts",icon:"highcharts",url:"http://www.highcharts.com",npm:"highcharts",test:function(e){return!(!e.Highcharts||!e.Highcharts.Point)&&{version:e.Highcharts.version||UNKNOWN_VERSION}}},InfoVis:{id:"jit",icon:"jit",url:"http://philogb.github.com/jit/",test:function(e){return!(!e.$jit||!e.$jit.PieChart)&&{version:e.$jit.version||UNKNOWN_VERSION}}},FlotCharts:{id:"flotcharts",icon:"flotcharts",url:"http://www.flotcharts.org/",npm:"flot",test:function(e){return!(!e.$||!e.$.plot)&&{version:e.$.plot.version||UNKNOWN_VERSION}}},CreateJS:{id:"createjs",icon:"createjs",url:"https://createjs.com/",npm:"createjs",test:function(e){return!(!e.createjs||!e.createjs.promote)&&{version:UNKNOWN_VERSION}}},"Google Maps":{id:"gmaps",icon:"gmaps",url:"https://developers.google.com/maps/",test:function(e){return!(!e.google||!e.google.maps)&&{version:e.google.maps.version||UNKNOWN_VERSION}}},jQuery:{id:"jquery",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!!(t&&t.fn&&t.fn.jquery)&&{version:t.fn.jquery.replace(/[^\\d+\\.+]/g,"")||UNKNOWN_VERSION}}},"jQuery (Fast path)":{id:"jquery-fast",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.fn)&&{version:UNKNOWN_VERSION}}},"jQuery UI":{id:"jquery_ui",icon:"jquery_ui",url:"http://jqueryui.com",npm:"jquery-ui",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;if(t&&t.fn&&t.fn.jquery&&t.ui){for(var o="accordion,datepicker,dialog,draggable,droppable,progressbar,resizable,selectable,slider,menu,grid,tabs".split(","),r=[],n=0;n<o.length;n++)t.ui[o[n]]&&r.push(o[n].substr(0,1).toUpperCase()+o[n].substr(1));return{version:t.ui.version||UNKNOWN_VERSION,details:r.length?"Plugins used: "+r.join(","):""}}return!1}},Dojo:{id:"dojo",icon:"dojo",url:"http://dojotoolkit.org",npm:"dojo",test:function(e){return!(!e.dojo||!e.dojo.delegate)&&{version:e.dojo.version?e.dojo.version.toString():UNKNOWN_VERSION,details:"Details: "+(e.dijit?"Uses Dijit":"none")}}},Prototype:{id:"prototype",icon:"prototype",url:"http://prototypejs.org",test:function(e){return!(!e.Prototype||!e.Prototype.BrowserFeatures)&&{version:e.Prototype.Version||UNKNOWN_VERSION}}},Scriptaculous:{id:"scriptaculous",icon:"scriptaculous",url:"http://script.aculo.us",test:function(e){return!(!e.Scriptaculous||!e.Scriptaculous.load)&&{version:e.Scriptaculous.Version||UNKNOWN_VERSION}}},MooTools:{id:"mootools",icon:"mootools",url:"https://mootools.net/",test:function(e){return!(!e.MooTools||!e.MooTools.build)&&{version:e.MooTools.version||UNKNOWN_VERSION}}},Spry:{id:"spry",icon:"spry",url:"http://labs.adobe.com/technologies/spry",test:function(e){return!(!e.Spry||!e.Spry.Data)&&{version:UNKNOWN_VERSION}}},"YUI 2":{id:"yui",icon:"yui",url:"http://developer.yahoo.com/yui/2/",test:function(e){return!(!e.YAHOO||!e.YAHOO.util)&&{version:e.YAHOO.VERSION||UNKNOWN_VERSION}}},"YUI 3":{id:"yui3",icon:"yui3",url:"https://yuilibrary.com/",npm:"yui",test:function(e){return!(!e.YUI||!e.YUI.Env)&&{version:e.YUI.version||UNKNOWN_VERSION}}},Qooxdoo:{id:"qooxdoo",icon:"qooxdoo",url:"http://www.qooxdoo.org/",npm:"qooxdoo",test:function(e){return!(!e.qx||!e.qx.Bootstrap)&&{version:UNKNOWN_VERSION}}},"Ext JS":{id:"extjs",icon:"extjs",url:"https://www.sencha.com/products/extjs/",test:function(e){return e.Ext&&e.Ext.versions?{version:e.Ext.versions.core.version}:!!e.Ext&&{version:e.Ext.version||UNKNOWN_VERSION}}},Ezoic:{id:"ezoic",icon:"ezoic",url:"https://www.ezoic.com/",test:function(e){return!(!e.__ez||!e.__ez.template)&&{version:UNKNOWN_VERSION}}},base2:{id:"base2",icon:"base2",url:"http://code.google.com/p/base2",test:function(e){return!(!e.base2||!e.base2.dom)&&{version:e.base2.version||UNKNOWN_VERSION}}},"Closure Library":{id:"closure",icon:"closure",url:"https://developers.google.com/closure/library/",npm:"google-closure-library",test:function(e){return!(!e.goog||!e.goog.provide)&&{version:UNKNOWN_VERSION}}},"Rapha&euml;l":{id:"raphael",icon:"raphael",url:"http://dmitrybaranovskiy.github.io/raphael/",test:function(e){return!(!e.Raphael||!e.Raphael.circle)&&{version:e.Raphael.version||UNKNOWN_VERSION}}},React:{id:"react",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),r=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||null!=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return t(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()||o&&o.innerText.length>0||r||e.React&&e.React.Component)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"React (Fast path)":{id:"react-fast",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),r=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||o||r||e.React)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"Next.js":{id:"next",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!(!e.__NEXT_DATA__||!e.__NEXT_DATA__.buildId)&&{version:window.next&&window.next.version||UNKNOWN_VERSION}}},"Next.js (Fast path)":{id:"next-fast",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!!e.__NEXT_DATA__&&{version:UNKNOWN_VERSION}}},Preact:{id:"preact",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("preactattr");function o(e){return"__k"in e&&"props"in e.__k&&"type"in e.__k||("_component"in e||"__preactattr_"in e||t&&null!=e[t])}function r(e){return null!=e&&o(e)&&e}var n=r(document.body)||r(document.body.firstElementChild);if(n||(n=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return o(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()),n||e.preact){var i=UNKNOWN_VERSION;return n&&("__k"in n&&(i="10"),"__preactattr_"in n&&(i="8"),t&&null!=n[t]&&(i="7")),{version:i}}return!1}},"Preact (Fast path)":{id:"preact-fast",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t=UNKNOWN_VERSION;function o(e){return null!=e&&function(e){return null!=e.__k?(t="10",!0):null!=e._component||null!=e.__preactattr_}(e)}return!(!o(document.body)&&!o(document.body.firstElementChild)&&!e.preact)&&{version:t}}},Modernizr:{id:"modernizr",icon:"modernizr",url:"https://modernizr.com/",npm:"modernizr",test:function(e){return!(!e.Modernizr||!e.Modernizr.addTest)&&{version:e.Modernizr._version||UNKNOWN_VERSION}}},"Processing.js":{id:"processingjs",icon:"processingjs",url:"http://processingjs.org",npm:"processing-js",test:function(e){return!(!e.Processing||!e.Processing.box)&&{version:Processing.version||UNKNOWN_VERSION}}},Backbone:{id:"backbone",icon:"backbone",url:"http://backbonejs.org/",npm:"backbone",test:function(e){return!(!e.Backbone||!e.Backbone.Model.extend)&&{version:e.Backbone.VERSION||UNKNOWN_VERSION}}},Leaflet:{id:"leaflet",icon:"leaflet",url:"http://leafletjs.com",npm:"leaflet",test:function(e){return!(!e.L||!e.L.GeoJSON||!e.L.marker&&!e.L.Marker)&&{version:e.L.version||e.L.VERSION||UNKNOWN_VERSION}}},Mapbox:{id:"mapbox",icon:"mapbox",url:"https://www.mapbox.com/",npm:"mapbox-gl",test:function(e){return!!(e.L&&e.L.mapbox&&e.L.mapbox.geocoder)&&{version:e.L.mapbox.VERSION||UNKNOWN_VERSION}}},"Lo-Dash":{id:"lodash",icon:"lodash",url:"https://lodash.com/",npm:"lodash",test:function(e){var t="function"==typeof(t=e._)&&t,o="function"==typeof(o=t&&t.chain)&&o,r=(o||t||function(){return{}})(1);return!(!t||!r.__wrapped__)&&{version:t.VERSION||UNKNOWN_VERSION}}},Underscore:{id:"underscore",icon:"underscore",url:"http://underscorejs.org/",npm:"underscore",test:function(e){return!(!e._||"function"!=typeof e._.tap||d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests["Lo-Dash"].test(e))&&{version:e._.VERSION||UNKNOWN_VERSION}}},Sammy:{id:"sammy",icon:"sammy",url:"http://sammyjs.org",test:function(e){return!(!e.Sammy||!e.Sammy.Application.curry)&&{version:e.Sammy.VERSION||UNKNOWN_VERSION}}},Rico:{id:"rico",icon:"rico",url:"http://openrico.sourceforge.net/examples/index.html",test:function(e){return!(!e.Rico||!window.Rico.checkIfComplete)&&{version:e.Rico.Version||UNKNOWN_VERSION}}},MochiKit:{id:"mochikit",icon:"mochikit",url:"https://mochi.github.io/mochikit/",test:function(e){return!(!e.MochiKit||!e.MochiKit.Base.module)&&{version:MochiKit.VERSION||UNKNOWN_VERSION}}},"gRapha&euml;l":{id:"graphael",icon:"graphael",url:"https://github.com/DmitryBaranovskiy/g.raphael",test:function(e){return!(!e.Raphael||!e.Raphael.fn.g)&&{version:UNKNOWN_VERSION}}},Glow:{id:"glow",icon:"glow",url:"http://www.bbc.co.uk/glow/",test:function(e){return e.gloader&&e.gloader.getRequests?{version:UNKNOWN_VERSION}:e.glow&&e.glow.dom?{version:e.glow.VERSION||UNKNOWN_VERSION}:!!e.Glow&&{version:e.Glow.version||UNKNOWN_VERSION}}},"Socket.IO":{id:"socketio",icon:"socketio",url:"https://socket.io/",npm:"socket.io",test:function(e){return!(!e.io||!e.io.sockets&&!e.io.Socket)&&{version:e.io.version||UNKNOWN_VERSION}}},Mustache:{id:"mustache",icon:"mustache",url:"http://mustache.github.io/",npm:"mustache",test:function(e){return!(!e.Mustache||!e.Mustache.to_html)&&{version:e.Mustache.version||UNKNOWN_VERSION}}},"Fabric.js":{id:"fabricjs",icon:"icon38",url:"http://fabricjs.com/",npm:"fabric",test:function(e){return!(!e.fabric||!e.fabric.util)&&{version:e.fabric.version||UNKNOWN_VERSION}}},FuseJS:{id:"fusejs",icon:"fusejs",url:"http://fusejs.io/",npm:"fuse.js",test:function(e){return!!e.Fuse&&{version:UNKNOWN_VERSION}}},"Tween.js":{id:"tweenjs",icon:"icon38",url:"https://github.com/tweenjs/tween.js",npm:"tween.js",test:function(e){return!(!e.TWEEN||!e.TWEEN.Easing)&&{version:UNKNOWN_VERSION}}},SproutCore:{id:"sproutcore",icon:"sproutcore",url:"http://sproutcore.com/",test:function(e){return!(!e.SC||!e.SC.Application)&&{version:UNKNOWN_VERSION}}},"Zepto.js":{id:"zepto",icon:"zepto",url:"http://zeptojs.com",npm:"zepto",test:function(e){return!(!e.Zepto||!e.Zepto.fn)&&{version:UNKNOWN_VERSION}}},"three.js":{id:"threejs",icon:"icon38",url:"https://threejs.org/",npm:"three",test:function(e){return e.THREE&&e.THREE.REVISION?{version:"r"+e.THREE.REVISION}:!!e.THREE&&{version:UNKNOWN_VERSION}}},PhiloGL:{id:"philogl",icon:"philogl",url:"http://www.senchalabs.org/philogl/",npm:"philogl",test:function(e){return!(!e.PhiloGL||!e.PhiloGL.Camera)&&{version:e.PhiloGL.version||UNKNOWN_VERSION}}},CamanJS:{id:"camanjs",icon:"camanjs",url:"http://camanjs.com/",npm:"caman",test:function(e){return e.Caman&&e.Caman.version?{version:e.Caman.version.release}:!!e.Caman&&{version:UNKNOWN_VERSION}}},yepnope:{id:"yepnope",icon:"yepnope",url:"http://yepnopejs.com/",test:function(e){return!(!e.yepnope||!e.yepnope.injectJs)&&{version:UNKNOWN_VERSION}}},LABjs:{id:"labjs",icon:"icon38",url:"https://github.com/getify/LABjs",test:function(e){return!(!e.$LAB||!e.$LAB.setOptions)&&{version:UNKNOWN_VERSION}}},"Head JS":{id:"headjs",icon:"headjs",url:"http://headjs.com/",npm:"headjs",test:function(e){return!(!e.head||!e.head.js)&&{version:UNKNOWN_VERSION}}},ControlJS:{id:"controljs",icon:"icon38",url:"http://stevesouders.com/controljs/",test:function(e){return!(!e.CJS||!e.CJS.start)&&{version:UNKNOWN_VERSION}}},RequireJS:{id:"requirejs",icon:"requirejs",url:"http://requirejs.org/",npm:"requirejs",test:function(e){var t=e.require||e.requirejs;return!(!t||!(t.load||t.s&&t.s.contexts&&t.s.contexts._&&(t.s.contexts._.loaded||t.s.contexts._.load)))&&{version:t.version||UNKNOWN_VERSION}}},RightJS:{id:"rightjs",icon:"rightjs",url:"http://rightjs.org/",test:function(e){return!(!e.RightJS||!e.RightJS.isNode)&&{version:e.RightJS.version||UNKNOWN_VERSION}}},"jQuery Tools":{id:"jquerytools",icon:"jquerytools",url:"http://jquerytools.github.io/",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.tools)&&{version:t.tools.version||UNKNOWN_VERSION}}},Pusher:{id:"pusher",icon:"pusher",url:"https://pusher.com/docs/",npm:"pusher-js",test:function(e){return!(!e.Pusher||!e.Pusher.Channel)&&{version:e.Pusher.VERSION||UNKNOWN_VERSION}}},"Paper.js":{id:"paperjs",icon:"paperjs",url:"http://paperjs.org/",npm:"paper",test:function(e){return!(!e.paper||!e.paper.Point)&&{version:e.paper.version||UNKNOWN_VERSION}}},Swiffy:{id:"swiffy",icon:"icon38",url:"https://developers.google.com/swiffy/",test:function(e){return!(!e.swiffy||!e.swiffy.Stage)&&{version:UNKNOWN_VERSION}}},Move:{id:"move",icon:"move",url:"https://github.com/rsms/move",npm:"move",test:function(e){return!(!e.move||!e.move.compile)&&{version:e.move.version()||UNKNOWN_VERSION}}},AmplifyJS:{id:"amplifyjs",icon:"amplifyjs",url:"http://amplifyjs.com/",npm:"amplifyjs",test:function(e){return!(!e.amplify||!e.amplify.publish)&&{version:UNKNOWN_VERSION}}},"Popcorn.js":{id:"popcornjs",icon:"popcornjs",url:"https://github.com/mozilla/popcorn-js/",test:function(e){return!(!e.Popcorn||!e.Popcorn.Events)&&{version:e.Popcorn.version||UNKNOWN_VERSION}}},D3:{id:"d3",icon:"d3",url:"https://d3js.org/",npm:"d3",test:function(e){return!(!e.d3||!e.d3.select)&&{version:e.d3.version||UNKNOWN_VERSION}}},Handlebars:{id:"handlebars",icon:"handlebars",url:"http://handlebarsjs.com/",npm:"handlebars",test:function(e){return!(!e.Handlebars||!e.Handlebars.compile)&&{version:e.Handlebars.VERSION||UNKNOWN_VERSION}}},Knockout:{id:"knockout",icon:"knockout",url:"http://knockoutjs.com/",npm:"knockout",test:function(e){return!(!e.ko||!e.ko.applyBindings)&&{version:e.ko.version||UNKNOWN_VERSION}}},Spine:{id:"spine",icon:"icon38",url:"http://spine.github.io/",test:function(e){return!(!e.Spine||!e.Spine.Controller)&&{version:e.Spine.version||UNKNOWN_VERSION}}},"jQuery Mobile":{id:"jquery-mobile",icon:"jquery_mobile",url:"http://jquerymobile.com/",npm:"jquery-mobile",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.mobile)&&{version:t.mobile.version||UNKNOWN_VERSION}}},"WebFont Loader":{id:"webfontloader",icon:"icon38",url:"https://github.com/typekit/webfontloader",npm:"webfontloader",test:function(e){return!(!e.WebFont||!e.WebFont.load)&&{version:UNKNOWN_VERSION}}},Angular:{id:"angular",icon:"angular",url:"https://angular.io/",npm:"@angular/core",test:function(e){var t=e.document.querySelector("[ng-version]");return t?{version:t.getAttribute("ng-version")||UNKNOWN_VERSION}:!!(e.ng&&e.ng.probe instanceof Function)&&{version:UNKNOWN_VERSION}}},AngularJS:{id:"angularjs",icon:"angularjs",url:"https://angularjs.org/",npm:"angular",test:function(e){var t=e.angular;return t&&t.version&&t.version.full?{version:t.version.full}:!!t&&{version:UNKNOWN_VERSION}}},"Ember.js":{id:"emberjs",icon:"emberjs",url:"https://emberjs.com/",npm:"ember-source",test:function(e){var t=e.Ember||e.Em;return!(!t||!t.GUID_KEY)&&{version:t.VERSION||UNKNOWN_VERSION}}},"Hammer.js":{id:"hammerjs",icon:"hammerjs",url:"http://eightmedia.github.io/hammer.js/",npm:"hammerjs",test:function(e){return!(!e.Hammer||!e.Hammer.Pinch)&&{version:e.Hammer.VERSION||"&lt; 1.0.10"}}},"Visibility.js":{id:"visibilityjs",icon:"icon38",url:"https://github.com/ai/visibilityjs",npm:"visibilityjs",test:function(e){return!(!e.Visibility||!e.Visibility.every)&&{version:UNKNOWN_VERSION}}},"Velocity.js":{id:"velocityjs",icon:"icon38",url:"http://velocityjs.org/",npm:"velocity-animate",test:function(e){var t=e.jQuery||e.$,o=t?t.Velocity:e.Velocity;return o&&o.RegisterEffect&&o.version?{version:o.version.major+"."+o.version.minor+"."+o.version.patch}:!(!o||!o.RegisterEffect)&&{version:UNKNOWN_VERSION}}},"IfVisible.js":{id:"ifvisiblejs",icon:"icon38",url:"http://serkanyersen.github.io/ifvisible.js/",npm:"ifvisible.js",test:function(e){var t=e.ifvisible;return!(!t||"ifvisible.object.event.identifier"!==t.__ceGUID)&&{version:UNKNOWN_VERSION}}},"Pixi.js":{id:"pixi",icon:"pixi",url:"http://www.pixijs.com/",npm:"pixi.js",test:function(e){var t=e.PIXI;return!!(t&&t.WebGLRenderer&&t.VERSION)&&{version:t.VERSION.replace("v","")||UNKNOWN_VERSION}}},"DC.js":{id:"dcjs",icon:"dcjs",url:"http://dc-js.github.io/dc.js/",npm:"dc",test:function(e){var t=e.dc;return!(!t||!t.registerChart)&&{version:t.version||UNKNOWN_VERSION}}},"GreenSock JS":{id:"greensock",icon:"greensock",url:"https://greensock.com/gsap",npm:"gsap",test:function(e){return!(!e.TweenMax||!e.TweenMax.pauseAll)&&{version:e.TweenMax.version||UNKNOWN_VERSION}}},FastClick:{id:"fastclick",icon:"fastclick",url:"https://github.com/ftlabs/fastclick",npm:"fastclick",test:function(e){return!(!e.FastClick||!e.FastClick.notNeeded)&&{version:UNKNOWN_VERSION}}},Isotope:{id:"isotope",icon:"isotope",url:"https://isotope.metafizzy.co/",npm:"isotope-layout",test:function(e){return!!(e.Isotope||null!=e.$&&e.$.Isotope)&&{version:UNKNOWN_VERSION}}},Marionette:{id:"marionette",icon:"marionette",url:"https://marionettejs.com/",npm:"backbone.marionette",test:function(e){return!(!e.Marionette||!e.Marionette.Application)&&{version:e.Marionette.VERSION||UNKNOWN_VERSION}}},Can:{id:"canjs",icon:"canjs",url:"https://canjs.com/",npm:"can",test:function(e){return!(!e.can||!e.can.Construct)&&{version:e.can.VERSION||UNKNOWN_VERSION}}},Vue:{id:"vue",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!(null===document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return null!=e.__vue__?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()&&!e.Vue)&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Vue (Fast path)":{id:"vue-fast",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!!e.Vue&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Nuxt.js":{id:"nuxt",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!!(e.__NUXT__||e.$nuxt||[...e.document.querySelectorAll("*")].some((e=>e.__vue__?.nuxt)))&&{version:UNKNOWN_VERSION}}},"Nuxt.js (Fast path)":{id:"nuxt-fast",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!(!e.__NUXT__&&!e.$nuxt)&&{version:UNKNOWN_VERSION}}},Two:{id:"two",icon:"two",url:"https://two.js.org/",npm:"two.js",test:function(e){return!(!e.Two||!e.Two.Utils)&&{version:e.Two.Version||UNKNOWN_VERSION}}},Brewser:{id:"brewser",icon:"brewser",url:"https://robertpataki.github.io/brewser/",npm:"brewser",test:function(e){return!(!e.BREWSER||!e.BREWSER.ua)&&{version:BREWSER.VERSION||UNKNOWN_VERSION}}},"Material Design Lite":{id:"materialdesignlite",icon:"mdl",url:"https://getmdl.io/",npm:"material-design-lite",test:function(e){return!(!e.componentHandler||!e.componentHandler.upgradeElement)&&{version:UNKNOWN_VERSION}}},"Kendo UI":{id:"kendoui",icon:"kendoui",url:"https://github.com/telerik/kendo-ui-core",npm:"kendo-ui-core",test:function(e){return!!(e.kendo&&e.kendo.View&&e.kendo.View.extend)&&{version:e.kendo.version||UNKNOWN_VERSION}}},"Matter.js":{id:"matterjs",icon:"matter-js",url:"http://brm.io/matter-js/",npm:"matter-js",test:function(e){return!(!e.Matter||!e.Matter.Engine)&&{version:UNKNOWN_VERSION}}},Riot:{id:"riot",icon:"riot",url:"http://riotjs.com/",npm:"riot",test:function(e){return!(!e.riot||!e.riot.mixin)&&{version:e.riot.version||UNKNOWN_VERSION}}},"Sea.js":{id:"seajs",icon:"icon38",url:"https://seajs.github.io/seajs/docs/",npm:"seajs",test:function(e){return!(!e.seajs||!e.seajs.use)&&{version:e.seajs.version||UNKNOWN_VERSION}}},"Moment.js":{id:"momentjs",icon:"momentjs",url:"http://momentjs.com/",npm:"moment",test:function(e){return!(!e.moment||!e.moment.isMoment&&!e.moment.lang)&&{version:e.moment.version||UNKNOWN_VERSION}}},"Moment Timezone":{id:"moment-timezone",icon:"momentjs",url:"http://momentjs.com/timezone/",npm:"moment-timezone",test:function(e){return!(!e.moment||!e.moment.tz)&&{version:e.moment.tz.version||UNKNOWN_VERSION}}},ScrollMagic:{id:"scrollmagic",icon:"scrollmagic",url:"http://scrollmagic.io/",npm:"scrollmagic",test:function(e){return!(!e.ScrollMagic||!e.ScrollMagic.Controller)&&{version:ScrollMagic.version||UNKNOWN_VERSION}}},SWFObject:{id:"swfobject",icon:"icon38",url:"https://github.com/swfobject/swfobject",test:function(e){return e.swfobject&&e.swfobject.embedSWF?{version:e.swfobject.version||UNKNOWN_VERSION}:!(!e.deconcept||!e.deconcept.SWFObject)&&{version:UNKNOWN_VERSION}}},FlexSlider:{id:"flexslider",icon:"icon38",url:"https://woocommerce.com/flexslider/",npm:"flexslider",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.flexslider)&&{version:UNKNOWN_VERSION}}},SPF:{id:"spf",icon:"icon38",url:"https://youtube.github.io/spfjs/",npm:"spf",test:function(e){return!(!e.spf||!e.spf.init)&&{version:UNKNOWN_VERSION}}},"Numeral.js":{id:"numeraljs",icon:"icon38",url:"http://numeraljs.com/",npm:"numeraljs",test:function(e){return!(!e.numeral||!e.isNumeral)&&{version:e.numeral.version||UNKNOWN_VERSION}}},"boomerang.js":{id:"boomerangjs",icon:"icon38",url:"https://soasta.github.io/boomerang/",npm:"boomerangjs",test:function(e){return!!(e.BOOMR&&e.BOOMR.utils&&e.BOOMR.init)&&{version:e.BOOMR.version||UNKNOWN_VERSION}}},Framer:{id:"framer",icon:"framer",url:"https://framer.com/",npm:"framerjs",test:function(e){return!(!e.Framer||!e.Framer.Layer)&&{version:e.Framer.Version.build||UNKNOWN_VERSION}}},Marko:{id:"marko",icon:"marko",url:"https://markojs.com/",npm:"marko",test:function(e){return!!document.querySelector("[data-marko-key], [data-marko]")&&{version:UNKNOWN_VERSION}}},AMP:{id:"amp",icon:"amp",url:"https://amp.dev/",npm:"https://www.npmjs.com/org/ampproject",test:function(e){var t=e.document.documentElement.getAttribute("amp-version");return!!t&&{version:t}}},Gatsby:{id:"gatsby",icon:"gatsby",url:"https://www.gatsbyjs.org/",npm:"gatsby",test:function(e){return!!document.getElementById("___gatsby")&&{version:UNKNOWN_VERSION}}},Shopify:{id:"shopify",icon:"shopify",url:"https://www.shopify.com/",npm:null,test:function(e){return!(!e.Shopify||!e.Shopify.shop)&&{version:UNKNOWN_VERSION}}},Magento:{id:"magento",icon:"magento",url:"https://magento.com/",npm:null,test:function(e){const t=/\\/static(?:\\/version\\d+)?\\/frontend\\/.+\\/.+\\/requirejs\\/require(?:\\.min)?\\.js/;return!!Array.from(document.querySelectorAll("script[src]")||[]).some((e=>t.test(e.src)))&&{version:2}}},WordPress:{id:"wordpress",icon:"wordpress",url:"https://wordpress.org/",npm:null,test:function(e){const t=!!document.querySelector(\'link[rel="https://api.w.org/"]\'),o=!!document.querySelectorAll(\'link[href*="wp-includes"], script[src*="wp-includes"]\').length;if(!t&&!o)return!1;const r=document.querySelector(\'meta[name=generator][content^="WordPress"]\');return{version:r?r.getAttribute("content").replace(/^\\w+\\s/,""):UNKNOWN_VERSION}}},Wix:{id:"wix",icon:"wix",url:"https://www.wix.com/",npm:null,test:function(e){return!!e.wixBiSession&&{version:UNKNOWN_VERSION}}},Workbox:{id:"workbox",icon:"workbox",url:"https://developers.google.com/web/tools/workbox/",npm:"workbox-sw",test:async function(e){var t=e.navigator;if(!("serviceWorker"in t))return!1;const{timeoutPromise:o,clearTimeout:r}=_createTimeoutHelper(),n=t.serviceWorker.getRegistration().then((function(e){var o=t.serviceWorker.controller?t.serviceWorker.controller.scriptURL:e.active.scriptURL;return fetch(o,{credentials:"include",headers:{"service-worker":"script"}}).then((function(e){return e.text()})).then((function(e){if(/new Workbox|new workbox|workbox\\.precaching\\.|workbox\\.strategies/gm.test(e)){var t=/workbox.*?\\b((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)\\b/gim.exec(e),o=UNKNOWN_VERSION;return Array.isArray(t)&&t.length>1&&t[1]&&(o=t[1]),{version:o}}return!1}))})).catch((function(e){return!1}));return Promise.race([n,o]).catch((function(e){return!1})).finally((e=>(r(),e)))}},Boq:{id:"boq",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/143",npm:null,test:function(e){return!!e.WIZ_global_data&&{version:UNKNOWN_VERSION}}},Wiz:{id:"wiz",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/147",npm:null,test:function(e){return!!document.__wizdispatcher&&{version:UNKNOWN_VERSION}}},"core-js":{id:"corejs",icon:"icon38",url:"https://github.com/zloirock/core-js",npm:"core-js",test:function(e){const t=e["__core-js_shared__"],o=e.core;if(t){const e=t.versions;return{version:Array.isArray(e)?e.map((e=>`core-js-${e.mode}@${e.version}`)).join("; "):UNKNOWN_VERSION}}return!!o&&{version:o.version||UNKNOWN_VERSION}}},Drupal:{id:"drupal",icon:"drupal",url:"https://www.drupal.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="Drupal"]\'),o=t?t.getAttribute("content").replace(/\\D+/gi,""):UNKNOWN_VERSION,r=/\\/sites\\/(?:default|all)\\/(?:themes|modules|files)/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(n.some((e=>r.test(e.src)))||n.some((e=>r.test(e.href)))||t||e.Drupal&&e.Drupal.behaviors)&&{version:o}}},TYPO3:{id:"typo3",icon:"typo3",url:"https://typo3.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="TYPO3"]\'),o=/\\/(typo3conf|typo3temp|fileadmin)/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||r.some((e=>o.test(e.src)))||r.some((e=>o.test(e.href))))&&{version:UNKNOWN_VERSION}}},"Create React App":{id:"create-react-app",icon:"cra",url:"https://create-react-app.dev/",npm:"react-scripts",test:function(e){let t,o,r=e.document.body.firstElementChild;do{"noscript"===r.localName?t=r:"root"===r.id&&(o=r)}while(r=r.nextElementSibling);return!!(o&&t&&/You need to enable JavaScript to run this app/.test(t.textContent))&&{version:UNKNOWN_VERSION}}},"Guess.js":{id:"guessjs",icon:"guessjs",url:"https://guess-js.github.io/",test:function(e){return!(!e.__GUESS__||!e.__GUESS__.guess)&&{version:UNKNOWN_VERSION}}},"October CMS":{id:"octobercms",icon:"octobercms",url:"https://octobercms.com/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="OctoberCMS"]\'),o=document.querySelector(\'meta[name="generator"][content^="October CMS"]\'),r=/\\/modules\\/system\\/assets\\/(css|js)\\/framework(\\.extras|\\.combined)?(-min)?/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||o||n.some((e=>r.test(e.src||e.href))))&&{version:UNKNOWN_VERSION}}},Joomla:{id:"joomla",icon:"joomla",url:"https://www.joomla.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name=generator][content^="Joomla"]\'),o=!!document.querySelectorAll(\'script[src*="/media/jui/js/bootstrap.min.js"]\').length;return t?{version:t.getAttribute("content").replace(/^\\w+\\s/,"")}:!(!e.Joomla&&!o)&&{version:UNKNOWN_VERSION}}},Sugar:{id:"sugar",icon:"sugar",url:"https://sugarjs.com",npm:"sugar",test:function(e){return e.Sugar?{version:e.Sugar.VERSION||UNKNOWN_VERSION}:!!e.Array.SugarMethods&&{version:UNKNOWN_VERSION}}},Bento:{id:"bentojs",icon:"bentojs",url:"https://bentojs.dev",npm:"https://www.npmjs.com/org/bentoproject",test:function(e){return!(!e.BENTO||!e.BENTO.push)&&{version:UNKNOWN_VERSION}}}};']
224
224
  })).map((e=>({detector:"js",id:e.id,name:e.name,version:"number"==typeof e.version?String(e.version):e.version||void 0,npm:e.npm||void 0})));return Ks.timeEnd(t),r}async getArtifact(e){return Stacks$1.collectStacks(e.driver.executionContext)}}var Xs=Stacks$1;const Zs=on.default,Qs=la,{getBrowserVersion:ec,getBenchmarkIndex:tc,getEnvironmentWarnings:rc}=mi;var ac={getBaseArtifacts:async function getBaseArtifacts$3(e,t,r){const a=await tc(t.executionContext),{userAgent:n}=await ec(t.defaultSession);return{fetchTime:(new Date).toJSON(),Timing:[],LighthouseRunWarnings:[],settings:e.settings,BenchmarkIndex:a,HostUserAgent:n,HostFormFactor:n.includes("Android")||n.includes("Mobile")?"mobile":"desktop",URL:{requestedUrl:"",finalUrl:""},PageLoadError:null,GatherContext:r,Stacks:[],NetworkUserAgent:"",WebAppManifest:null,InstallabilityErrors:{errors:[]},traces:{},devtoolsLogs:{}}},finalizeArtifacts:function finalizeArtifacts$4(e,t){
@@ -298,8 +298,8 @@ return Object.prototype.hasOwnProperty.call(e,t)}var qc={inherits:Fc,_extend,log
298
298
  !((n=(t=this.charBuffer.slice(0,this.charLength).toString(this.encoding)).charCodeAt(t.length-1))>=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var a=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,a),a-=this.charReceived);var n;a=(t+=e.toString(this.encoding,0,a)).length-1;if((n=t.charCodeAt(a))>=55296&&n<=56319){var i=this.surrogateSize;return this.charLength+=i,this.charReceived+=i,this.charBuffer.copy(this.charBuffer,i,0,i),e.copy(this.charBuffer,0,0,i),t.substring(0,a)}return t},StringDecoder.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},StringDecoder.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),
299
299
  this.charReceived){var r=this.charReceived,a=this.charBuffer,n=this.encoding;t+=a.slice(0,r).toString(n)}return t},Readable.ReadableState=ReadableState;var Wc=debuglog("stream");function ReadableState(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,a=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:a,this.highWaterMark=~~this.highWaterMark,this.buffer=new BufferList,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new StringDecoder(e.encoding),this.encoding=e.encoding)}function Readable(e){if(!(this instanceof Readable))return new Readable(e)
300
300
  ;this._readableState=new ReadableState(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),EventEmitter$4.call(this)}function readableAddChunk(e,t,r,a,n){var i=function chunkInvalid(e,t){var r=null;Buffer$2.isBuffer(t)||"string"==typeof t||null==t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));return r}(t,r);if(i)e.emit("error",i);else if(null===r)t.reading=!1,function onEofChunk(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,emitReadable(e)}(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!n){var o=new Error("stream.push() after EOF");e.emit("error",o)}else if(t.endEmitted&&n){var s=new Error("stream.unshift() after end event");e.emit("error",s)}else{var c;!t.decoder||n||a||(r=t.decoder.write(r),c=!t.objectMode&&0===r.length),n||(t.reading=!1),c||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,
301
- n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e))),function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,nextTick(maybeReadMore_,e,t))}(e,t)}else n||(t.reading=!1);return function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(t)}Fc(Readable,EventEmitter$4),Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding)!==r.encoding&&(e=Buffer$2.from(e,t),t=""),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){return readableAddChunk(this,this._readableState,e,"",!0)},Readable.prototype.isPaused=function(){return!1===this._readableState.flowing},Readable.prototype.setEncoding=function(e){return this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var Gc=8388608;function howMuchToRead(e,t){
302
- return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=Gc?e=Gc:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(Wc("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?nextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){Wc("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore_(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(Wc("maybeReadMore read 0"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function nReadingNextTick(e){Wc("readable nexttick read 0"),e.read(0)}function resume_(e,t){t.reading||(Wc("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}
301
+ n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e))),function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,nextTick(maybeReadMore_,e,t))}(e,t)}else n||(t.reading=!1);return function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(t)}Fc(Readable,EventEmitter$4),Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding)!==r.encoding&&(e=Buffer$2.from(e,t),t=""),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){return readableAddChunk(this,this._readableState,e,"",!0)},Readable.prototype.isPaused=function(){return!1===this._readableState.flowing},Readable.prototype.setEncoding=function(e){return this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var Hc=8388608;function howMuchToRead(e,t){
302
+ return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=Hc?e=Hc:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(Wc("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?nextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){Wc("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore_(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(Wc("maybeReadMore read 0"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function nReadingNextTick(e){Wc("readable nexttick read 0"),e.read(0)}function resume_(e,t){t.reading||(Wc("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}
303
303
  function flow(e){var t=e._readableState;for(Wc("flow",t.flowing);t.flowing&&null!==e.read(););}function fromList(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function fromListPartial(e,t,r){var a;e<t.head.data.length?(a=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):a=e===t.head.data.length?t.shift():r?function copyFromBufferString(e,t){var r=t.head,a=1,n=r.data;e-=n.length;for(;r=r.next;){var i=r.data,o=e>i.length?i.length:e;if(o===i.length?n+=i:n+=i.slice(0,e),0===(e-=o)){o===i.length?(++a,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(o));break}++a}return t.length-=a,n}(e,t):function copyFromBuffer(e,t){var r=Buffer$2.allocUnsafe(e),a=t.head,n=1;a.data.copy(r),e-=a.data.length;for(;a=a.next;){var i=a.data,o=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,o),0===(e-=o)){o===i.length?(++n,
304
304
  a.next?t.head=a.next:t.head=t.tail=null):(t.head=a,a.data=i.slice(o));break}++n}return t.length-=n,r}(e,t);return a}(e,t.buffer,t.decoder),r);var r}function endReadable(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,nextTick(endReadableNT,t,e))}function endReadableNT(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function indexOf(e,t){for(var r=0,a=e.length;r<a;r++)if(e[r]===t)return r;return-1}function nop(){}function WriteReq(e,t,r){this.chunk=e,this.encoding=t,this.callback=r,this.next=null}function WritableState(e,t){Object.defineProperty(this,"buffer",{get:deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")}),e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,a=this.objectMode?16:16384
305
305
  ;this.highWaterMark=r||0===r?r:a,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var n=!1===e.decodeStrings;this.decodeStrings=!n,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function onwrite(e,t){var r=e._writableState,a=r.sync,n=r.writecb;if(function onwriteStateUpdate(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function onwriteError(e,t,r,a,n){--t.pendingcb,r?nextTick(n,a):n(a);e._writableState.errorEmitted=!0,e.emit("error",a)}(e,r,a,t,n);else{var i=needFinish(r);i||r.corked||r.bufferProcessing||!r.bufferedRequest||clearBuffer(e,r),a?nextTick(afterWrite,e,r,i,n):afterWrite(e,r,i,n)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,
@@ -312,7 +312,7 @@ var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)re
312
312
  e.flowing=!0,function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,nextTick(resume_,e,t))}(this,e)),this},Readable.prototype.pause=function(){return Wc("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(Wc("pause"),this._readableState.flowing=!1,this.emit("pause")),this},Readable.prototype.wrap=function(e){var t=this._readableState,r=!1,a=this;for(var n in e.on("end",(function(){if(Wc("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&a.push(e)}a.push(null)})),e.on("data",(function(n){(Wc("wrapped data"),t.decoder&&(n=t.decoder.write(n)),t.objectMode&&null==n)||(t.objectMode||n&&n.length)&&(a.push(n)||(r=!0,e.pause()))})),e)void 0===this[n]&&"function"==typeof e[n]&&(this[n]=function(t){return function(){return e[t].apply(e,arguments)}}(n));return function forEach(e,t){for(var r=0,a=e.length;r<a;r++)t(e[r],r)}(["error","close","destroy","pause","resume"],(function(t){e.on(t,a.emit.bind(a,t))})),a._read=function(t){
313
313
  Wc("wrapped _read",t),r&&(r=!1,e.resume())},a},Readable._fromList=fromList,Writable.WritableState=WritableState,Fc(Writable,EventEmitter$4),WritableState.prototype.getBuffer=function writableStateGetBuffer(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},Writable.prototype.write=function(e,t,r){var a=this._writableState,n=!1;return"function"==typeof t&&(r=t,t=null),Buffer$2.isBuffer(e)?t="buffer":t||(t=a.defaultEncoding),"function"!=typeof r&&(r=nop),a.ended?function writeAfterEnd(e,t){var r=new Error("write after end");e.emit("error",r),nextTick(t,r)}(this,r):function validChunk(e,t,r,a){var n=!0,i=!1;return null===r?i=new TypeError("May not write null values to stream"):Buffer$2.isBuffer(r)||"string"==typeof r||void 0===r||t.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),nextTick(a,i),n=!1),n}(this,a,e,r)&&(a.pendingcb++,
314
314
  n=function writeOrBuffer(e,t,r,a,n){r=function decodeChunk(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=Buffer$2.from(t,r));return t}(t,r,a),Buffer$2.isBuffer(r)&&(a="buffer");var i=t.objectMode?1:r.length;t.length+=i;var o=t.length<t.highWaterMark;o||(t.needDrain=!0);if(t.writing||t.corked){var s=t.lastBufferedRequest;t.lastBufferedRequest=new WriteReq(r,a,n),s?s.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else doWrite(e,t,!1,i,r,a,n);return o}(this,a,e,t,r)),n},Writable.prototype.cork=function(){this._writableState.corked++},Writable.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||clearBuffer(this,e))},Writable.prototype.setDefaultEncoding=function setDefaultEncoding(e){if("string"==typeof e&&(e=e.toLowerCase()),
315
- !(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var a=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),a.corked&&(a.corked=1,this.uncork()),a.ending||a.finished||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,a,r)},Fc(Duplex,Readable);for(var Hc=Object.keys(Writable.prototype),Yc=0;Yc<Hc.length;Yc++){var Kc=Hc[Yc];Duplex.prototype[Kc]||(Duplex.prototype[Kc]=Writable.prototype[Kc])}function Duplex(e){if(!(this instanceof Duplex))return new Duplex(e);Readable.call(this,e),Writable.call(this,e),
315
+ !(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var a=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),a.corked&&(a.corked=1,this.uncork()),a.ending||a.finished||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,a,r)},Fc(Duplex,Readable);for(var Gc=Object.keys(Writable.prototype),Yc=0;Yc<Gc.length;Yc++){var Kc=Gc[Yc];Duplex.prototype[Kc]||(Duplex.prototype[Kc]=Writable.prototype[Kc])}function Duplex(e){if(!(this instanceof Duplex))return new Duplex(e);Readable.call(this,e),Writable.call(this,e),
316
316
  e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",onend)}function onend(){this.allowHalfOpen||this._writableState.ended||nextTick(onEndNT,this)}function onEndNT(e){e.end()}function TransformState(e){this.afterTransform=function(t,r){return function afterTransform(e,t,r){var a=e._transformState;a.transforming=!1;var n=a.writecb;if(!n)return e.emit("error",new Error("no writecb in Transform class"));a.writechunk=null,a.writecb=null,null!=r&&e.push(r);n(t);var i=e._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&e._read(i.highWaterMark)}(e,t,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function Transform(e){if(!(this instanceof Transform))return new Transform(e);Duplex.call(this,e),this._transformState=new TransformState(this);var t=this;this._readableState.needReadable=!0,
317
317
  this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.once("prefinish",(function(){"function"==typeof this._flush?this._flush((function(e){done(t,e)})):done(t)}))}function done(e,t){if(t)return e.emit("error",t);var r=e._writableState,a=e._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(a.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}function PassThrough(e){if(!(this instanceof PassThrough))return new PassThrough(e);Transform.call(this,e)}function Stream(){EventEmitter$4.call(this)}Fc(Transform,Duplex),Transform.prototype.push=function(e,t){return this._transformState.needTransform=!1,Duplex.prototype.push.call(this,e,t)},Transform.prototype._transform=function(e,t,r){throw new Error("Not implemented")},Transform.prototype._write=function(e,t,r){var a=this._transformState;if(a.writecb=r,
318
318
  a.writechunk=e,a.writeencoding=t,!a.transforming){var n=this._readableState;(a.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}},Transform.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},Fc(PassThrough,Transform),PassThrough.prototype._transform=function(e,t,r){r(null,e)},Fc(Stream,EventEmitter$4),Stream.Readable=Readable,Stream.Writable=Writable,Stream.Duplex=Duplex,Stream.Transform=Transform,Stream.PassThrough=PassThrough,Stream.Stream=Stream,Stream.prototype.pipe=function(e,t){var r=this;function ondata(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function ondrain(){r.readable&&r.resume&&r.resume()}r.on("data",ondata),e.on("drain",ondrain),e._isStdio||t&&!1===t.end||(r.on("end",onend),r.on("close",onclose));var a=!1;function onend(){a||(a=!0,e.end())}function onclose(){a||(a=!0,
@@ -344,8 +344,8 @@ serverResponseTimeByOrigin:{}};for(const[r,a]of e.additionalRttByOrigin.entries(
344
344
  ;let a=500,n="";for(const e of t)n+=`,\n ${JSON.stringify(e)}`,a--,0===a&&(yield n,a=500,n="");yield n}yield"\n]"}async function saveTrace(e,t){const r=function*traceJsonGenerator(e){const{traceEvents:t,...r}=e;yield"{\n",yield'"traceEvents": ',yield*arrayOfObjectsJsonGenerator(t);for(const[e,t]of Object.entries(r))yield`,\n"${e}": ${JSON.stringify(t,null,2)}`;yield"}\n"}(e),a=Cl.createWriteStream(t);return $l(r,a)}function saveDevtoolsLog(e,t){const r=Cl.createWriteStream(t);return $l((function*(){yield*arrayOfObjectsJsonGenerator(e),yield"\n"}),r)}var Wl={saveArtifacts:async function saveArtifacts(e,t){const r={msg:"Saving artifacts",id:"lh:assetSaver:saveArtifacts"};Nl.time(r),Cl.mkdirSync(t,{recursive:!0});const a=Cl.readdirSync(t);for(const e of a)(e.endsWith(zl)||e.endsWith(Vl)||e===ql)&&Cl.unlinkSync(`${t}/${e}`);const{traces:n,devtoolsLogs:i,...o}=e;for(const[e,r]of Object.entries(n))await saveTrace(r,`${t}/${e}.trace.json`)
345
345
  ;for(const[e,r]of Object.entries(i))await saveDevtoolsLog(r,`${t}/${e}.devtoolslog.json`);const s=JSON.stringify(o,stringifyReplacer,2)+"\n";Cl.writeFileSync(`${t}/artifacts.json`,s,"utf8"),Nl.log("Artifacts saved to disk in folder:",t),Nl.timeEnd(r)},saveLhr:function saveLhr(e,t){Cl.writeFileSync(`${t}/lhr.report.json`,JSON.stringify(e,null,2))},loadArtifacts:function loadArtifacts(e){if(Nl.log("Reading artifacts from disk:",e),!Cl.existsSync(e))throw new Error("No saved artifacts found at "+e);const t=Cl.readFileSync(Il.join(e,ql),"utf8"),r=JSON.parse(t,Bl.parseReviver),a=Cl.readdirSync(e);return r.devtoolsLogs={},a.filter((e=>e.endsWith(Vl))).forEach((t=>{const a=t.replace(Vl,""),n=JSON.parse(Cl.readFileSync(Il.join(e,t),"utf8"));r.devtoolsLogs[a]=n})),r.traces={},a.filter((e=>e.endsWith(zl))).forEach((t=>{const a=Cl.readFileSync(Il.join(e,t),{encoding:"utf-8"}),n=JSON.parse(a),i=t.replace(zl,"");r.traces[i]=Array.isArray(n)?{traceEvents:n}:n})),
346
346
  Array.isArray(r.Timing)&&r.Timing.forEach((e=>e.gather=!0)),r},saveAssets:async function saveAssets(e,t,r){const a=(await prepareAssets(e,t)).map((async(e,t)=>{const a=`${r}-${t}.devtoolslog.json`;Cl.writeFileSync(a,JSON.stringify(e.devtoolsLog,null,2)),Nl.log("saveAssets","devtools log saved to disk: "+a);const n=`${r}-${t}.trace.json`;Nl.log("saveAssets","streaming trace file to disk: "+n),await saveTrace(e.traceData,n),Nl.log("saveAssets","trace file streamed to disk: "+n)}));await Promise.all(a),await async function saveLanternDebugTraces(e){if(process.env.LANTERN_DEBUG)for(const[t,r]of Pl.ALL_NODE_TIMINGS){if(Ol.simulationNamesToIgnore.includes(t))continue;const a=`${e}-${t}.trace.json`;await saveTrace(Ol.convertNodeTimingsToTrace(r),a),Nl.log("saveAssets",`${t} lantern trace file streamed to disk: ${a}`)}}(r)},prepareAssets,saveTrace,saveDevtoolsLog,saveLanternNetworkData:async function saveLanternNetworkData(e,t){const r={computedCache:new Map
347
- },a=await Ul.request(e,r),n=jl.convertAnalysisToSaveableLanternData(a);Cl.writeFileSync(t,JSON.stringify(n))},stringifyReplacer,normalizeTimingEntries:function normalizeTimingEntries(e){let t=0;for(const r of e)r.startTime=t++,r.duration=1}},Gl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));const Hl=on.default,Yl=[],noop=()=>{},Kl={init:function init(e){if(!e.flags.enableErrorReporting)return;if(!Kl._shouldSample())return;try{const t=Gl;t.init({...e.environmentData,dsn:"https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697"});const r={...e.flags.throttling,channel:e.flags.channel||"cli",url:e.url,formFactor:e.flags.formFactor,throttlingMethod:e.flags.throttlingMethod};t.setExtras(r),Kl.captureMessage=(...e)=>t.captureMessage(...e),Kl.captureBreadcrumb=(...e)=>t.addBreadcrumb(...e),Kl.getContext=()=>r;const a=new Map;Kl.captureException=async(e,r={})=>{if(!e)return;if(e.expected)return;const n=r.tags||{};if(n.audit){
348
- const t=`audit-${n.audit}-${e.message}`;if(a.has(t))return;a.set(t,!0)}if(n.gatherer){const t=`gatherer-${n.gatherer}-${e.message}`;if(a.has(t))return;a.set(t,!0)}const i=Yl.find((t=>t.pattern.test(e.message)));i&&i.rate<=Math.random()||(e.protocolMethod&&(r.fingerprint=["{{ default }}",e.protocolMethod,e.protocolError],r.tags=r.tags||{},r.tags.protocolMethod=e.protocolMethod),t.withScope((a=>{r.level&&a.setLevel(r.level),r.tags&&a.setTags(r.tags),r.extra&&a.setExtras(r.extra),t.captureException(e)})))}}catch(e){Hl.warn("sentry","Could not load Sentry, errors will not be reported.")}},captureMessage:noop,captureBreadcrumb:noop,getContext:noop,captureException:async()=>{},_shouldSample:()=>.01>=Math.random()};var Jl=Kl;const Xl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));class ReportGenerator{static replaceStrings(e,t){if(0===t.length)return e;const r=t[0],a=t.slice(1);return e.split(r.search).map((e=>ReportGenerator.replaceStrings(e,a))).join(r.replacement)}
347
+ },a=await Ul.request(e,r),n=jl.convertAnalysisToSaveableLanternData(a);Cl.writeFileSync(t,JSON.stringify(n))},stringifyReplacer,normalizeTimingEntries:function normalizeTimingEntries(e){let t=0;for(const r of e)r.startTime=t++,r.duration=1}},Hl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));const Gl=on.default,Yl=[],noop=()=>{},Kl={init:function init(e){if(!e.flags.enableErrorReporting)return;if(!Kl._shouldSample())return;try{const t=Hl;t.init({...e.environmentData,dsn:"https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697"});const r={...e.flags.throttling,channel:e.flags.channel||"cli",url:e.url,formFactor:e.flags.formFactor,throttlingMethod:e.flags.throttlingMethod};t.setExtras(r),Kl.captureMessage=(...e)=>t.captureMessage(...e),Kl.captureBreadcrumb=(...e)=>t.addBreadcrumb(...e),Kl.getContext=()=>r;const a=new Map;Kl.captureException=async(e,r={})=>{if(!e)return;if(e.expected)return;const n=r.tags||{};if(n.audit){
348
+ const t=`audit-${n.audit}-${e.message}`;if(a.has(t))return;a.set(t,!0)}if(n.gatherer){const t=`gatherer-${n.gatherer}-${e.message}`;if(a.has(t))return;a.set(t,!0)}const i=Yl.find((t=>t.pattern.test(e.message)));i&&i.rate<=Math.random()||(e.protocolMethod&&(r.fingerprint=["{{ default }}",e.protocolMethod,e.protocolError],r.tags=r.tags||{},r.tags.protocolMethod=e.protocolMethod),t.withScope((a=>{r.level&&a.setLevel(r.level),r.tags&&a.setTags(r.tags),r.extra&&a.setExtras(r.extra),t.captureException(e)})))}}catch(e){Gl.warn("sentry","Could not load Sentry, errors will not be reported.")}},captureMessage:noop,captureBreadcrumb:noop,getContext:noop,captureException:async()=>{},_shouldSample:()=>.01>=Math.random()};var Jl=Kl;const Xl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));class ReportGenerator{static replaceStrings(e,t){if(0===t.length)return e;const r=t[0],a=t.slice(1);return e.split(r.search).map((e=>ReportGenerator.replaceStrings(e,a))).join(r.replacement)}
349
349
  static sanitizeJson(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}static generateReportHtml(e){const t=ReportGenerator.sanitizeJson(e),r=Xl.REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return ReportGenerator.replaceStrings(Xl.REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_JAVASCRIPT%%",replacement:r}])}static generateFlowReportHtml(e){const t=ReportGenerator.sanitizeJson(e);return ReportGenerator.replaceStrings(Xl.FLOW_REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_FLOW_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_FLOW_JAVASCRIPT%%",replacement:Xl.FLOW_REPORT_JAVASCRIPT},{search:"/*%%LIGHTHOUSE_FLOW_CSS%%*/",replacement:Xl.FLOW_REPORT_CSS}])}static generateReportCSV(e){const escape=e=>`"${e.replace(/"/g,'""')}"`,rowFormatter=e=>e.map((e=>e.toString())).map(escape),t=Object.keys(e.categories).map((t=>{const r=[],a=e.categories[t],n=null===a.score?-1:a.score
350
350
  ;return r.push(rowFormatter([e.requestedUrl,e.finalUrl,a.title,`${t}-score`,`Overall ${a.title} Category Score`,"numeric",n])),r.concat(a.auditRefs.map((t=>{const r=e.audits[t.id],n=null===r.score?-1:r.score;return rowFormatter([e.requestedUrl,e.finalUrl,a.title,r.id,r.title,r.scoreDisplayMode,n])})))}));return[["requestedUrl","finalUrl","category","name","title","type","score"]].concat(...t).map((e=>e.join(","))).join("\r\n")}static generateReport(e,t){const r=Array.isArray(t);"string"==typeof t&&(t=[t]);const a=t.map((t=>{if("html"===t)return ReportGenerator.generateReportHtml(e);if("csv"===t)return ReportGenerator.generateReportCSV(e);if("json"===t)return JSON.stringify(e,null,2);throw new Error("Invalid output mode: "+t)}));return r?a:a[0]}}var Zl=ReportGenerator;const Ql=la,eu=To,tu=Sc,ru=Cc,au=kc,nu=on.default,iu=Vn,ou=Oc,su=Wl,cu=bn,lu=Jl,uu=Zl.generateReport,du=vi.exports,{version:mu}=$o;class Runner$9{static async audit(e,t){const{config:r,computedCache:a}=t,n=r.settings;try{
351
351
  const t={msg:"Audit phase",id:"lh:runner:audit"};nu.time(t,"verbose");const i=[];if(n.gatherMode&&!n.auditMode)return;if(!r.audits)throw new Error("No audits to evaluate.");const o=await Runner$9._runAudits(n,r.audits,e,i,a),s={msg:"Generating results...",id:"lh:runner:generate"};nu.time(s),e.LighthouseRunWarnings&&i.push(...e.LighthouseRunWarnings);const c={"axe-core":e.Accessibility?.version};let l={};r.categories&&(l=ru.scoreAllCategories(r.categories,o)),nu.timeEnd(s),nu.timeEnd(t);const u={lighthouseVersion:mu,requestedUrl:e.URL.requestedUrl,finalUrl:e.URL.finalUrl,fetchTime:e.fetchTime,gatherMode:e.GatherContext.gatherMode,runtimeError:Runner$9.getArtifactRuntimeError(e),runWarnings:i,userAgent:e.HostUserAgent,environment:{networkUserAgent:e.NetworkUserAgent,hostUserAgent:e.HostUserAgent,benchmarkIndex:e.BenchmarkIndex,credits:c},audits:o,configSettings:n,categories:l,categoryGroups:r.groups||void 0,stackPacks:ou.getStackPacks(e.Stacks),timing:this._getTiming(e),i18n:{
@@ -399,8 +399,8 @@ var Fu=class ConsoleMessages extends Ou{meta={supportedModes:["timespan","naviga
399
399
  url:e.exceptionDetails.url,lineNumber:e.exceptionDetails.lineNumber,columnNumber:e.exceptionDetails.columnNumber};this._logEntries.push(r)}onLogEntry(e){const{source:t,level:r,text:a,stackTrace:n,timestamp:i,url:o,lineNumber:s}=e.entry,{columnNumber:c}=e.entry.stackTrace?.callFrames[0]||{};this._logEntries.push({eventType:"protocolLog",source:t,level:r,text:a,stackTrace:n,timestamp:i,url:o,lineNumber:s,columnNumber:c})}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Log.entryAdded",this._onLogEntryAdded),await t.sendCommand("Log.enable"),await t.sendCommand("Log.startViolationsReport",{config:[{name:"discouragedAPIUse",threshold:-1}]}),t.on("Runtime.consoleAPICalled",this._onConsoleAPICalled),t.on("Runtime.exceptionThrown",this._onExceptionThrown),await t.sendCommand("Runtime.enable")}async stopInstrumentation({driver:e}){await e.defaultSession.sendCommand("Log.stopViolationsReport"),await e.defaultSession.off("Log.entryAdded",this._onLogEntryAdded),
400
400
  await e.defaultSession.sendCommand("Log.disable"),await e.defaultSession.off("Runtime.consoleAPICalled",this._onConsoleAPICalled),await e.defaultSession.off("Runtime.exceptionThrown",this._onExceptionThrown),await e.defaultSession.sendCommand("Runtime.disable")}async getArtifact(){return this._logEntries}};const Uu=on.default,ju=eo,Bu=Jl;var $u=class CSSUsage extends ju{constructor(){super(),this._session=void 0,this._sheetPromises=new Map,this._ruleUsage=void 0,this._onStylesheetAdded=this._onStylesheetAdded.bind(this)}meta={supportedModes:["snapshot","timespan","navigation"]};async _onStylesheetAdded(e){if(!this._session)throw new Error("Session not initialized");const t=e.header.styleSheetId,r=this._session.sendCommand("CSS.getStyleSheetText",{styleSheetId:t}).then((t=>({header:e.header,content:t.text}))).catch((t=>(Uu.warn("CSSUsage",`Error fetching content of stylesheet with URL "${e.header.sourceURL}"`),Bu.captureException(t,{tags:{gatherer:this.name},extra:{
401
401
  url:e.header.sourceURL},level:"error"}),t)));this._sheetPromises.set(t,r)}async startCSSUsageTracking(e){const t=e.driver.defaultSession;this._session=t,t.on("CSS.styleSheetAdded",this._onStylesheetAdded),await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable"),await t.sendCommand("CSS.startRuleUsageTracking")}async stopCSSUsageTracking(e){const t=e.driver.defaultSession,r=await t.sendCommand("CSS.stopRuleUsageTracking");this._ruleUsage=r.ruleUsage,t.off("CSS.styleSheetAdded",this._onStylesheetAdded)}async startInstrumentation(e){"timespan"===e.gatherMode&&await this.startCSSUsageTracking(e)}async stopInstrumentation(e){"timespan"===e.gatherMode&&await this.stopCSSUsageTracking(e)}async getArtifact(e){const t=e.driver.defaultSession,r=e.driver.executionContext;"timespan"!==e.gatherMode&&(await this.startCSSUsageTracking(e),await r.evaluateAsync("getComputedStyle(document.body)"),await this.stopCSSUsageTracking(e))
402
- ;const a=new Map,n=await Promise.all(this._sheetPromises.values());for(const e of n)e instanceof Error||a.set(e.content,e);if(await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}};const qu=Ws,zu=eo;var Vu=class DevtoolsLogCompat extends zu{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:qu.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}};const Wu=eo;function getDoctype(){if(!document.doctype)return null;const{name:e,publicId:t,systemId:r}=document.doctype;return{name:e,publicId:t,systemId:r}}var Gu=class Doctype$1 extends Wu{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(getDoctype,{args:[],useIsolation:!0})}};const Hu=eo,Yu=hn;function getDOMStats(e=document.body,t=!0){let r=null,a=-1,n=-1,i=0,o=null
403
- ;const _calcDOMWidthAndHeight=function(e,s=1){s>a&&(r=e,a=s),e.children.length>n&&(o=e,n=e.children.length);let c=e.firstElementChild;for(;c;)_calcDOMWidthAndHeight(c,s+1),t&&c.shadowRoot&&_calcDOMWidthAndHeight(c.shadowRoot,s+1),c=c.nextElementSibling,i++;return{maxDepth:a,maxWidth:n,numElements:i}},s=_calcDOMWidthAndHeight(e);return{depth:{max:s.maxDepth,...getNodeDetails(r)},width:{max:s.maxWidth,...getNodeDetails(o)},totalBodyElements:s.numElements}}var Ku=class DOMStats extends Hu{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;await t.defaultSession.sendCommand("DOM.enable");const r=await t.executionContext.evaluate(getDOMStats,{args:[],useIsolation:!0,deps:[Yu.getNodeDetailsString]});return await t.defaultSession.sendCommand("DOM.disable"),r}};const Ju=on.default,Xu=eo,Zu=ji,Qu=Ki,ed=Jl,td=Lo,rd=Ws,ad=/^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/;class OptimizedImages extends Xu{meta={supportedModes:["timespan","navigation"],dependencies:{
402
+ ;const a=new Map,n=await Promise.all(this._sheetPromises.values());for(const e of n)e instanceof Error||a.set(e.content,e);if(await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}};const qu=Ws,zu=eo;var Vu=class DevtoolsLogCompat extends zu{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:qu.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}};const Wu=eo;function getDoctype(){if(!document.doctype)return null;const{name:e,publicId:t,systemId:r}=document.doctype;return{name:e,publicId:t,systemId:r}}var Hu=class Doctype$1 extends Wu{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(getDoctype,{args:[],useIsolation:!0})}};const Gu=eo,Yu=hn;function getDOMStats(e=document.body,t=!0){let r=null,a=-1,n=-1,i=0,o=null
403
+ ;const _calcDOMWidthAndHeight=function(e,s=1){s>a&&(r=e,a=s),e.children.length>n&&(o=e,n=e.children.length);let c=e.firstElementChild;for(;c;)_calcDOMWidthAndHeight(c,s+1),t&&c.shadowRoot&&_calcDOMWidthAndHeight(c.shadowRoot,s+1),c=c.nextElementSibling,i++;return{maxDepth:a,maxWidth:n,numElements:i}},s=_calcDOMWidthAndHeight(e);return{depth:{max:s.maxDepth,...getNodeDetails(r)},width:{max:s.maxWidth,...getNodeDetails(o)},totalBodyElements:s.numElements}}var Ku=class DOMStats extends Gu{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;await t.defaultSession.sendCommand("DOM.enable");const r=await t.executionContext.evaluate(getDOMStats,{args:[],useIsolation:!0,deps:[Yu.getNodeDetailsString]});return await t.defaultSession.sendCommand("DOM.disable"),r}};const Ju=on.default,Xu=eo,Zu=ji,Qu=Ki,ed=Jl,td=Lo,rd=Ws,ad=/^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/;class OptimizedImages extends Xu{meta={supportedModes:["timespan","navigation"],dependencies:{
404
404
  DevtoolsLog:rd.symbol}};constructor(){super(),this._encodingStartAt=0}static filterImageRequests(e){const t=new Set;return e.reduce(((e,r)=>{if(t.has(r.url)||!r.finished||r.sessionId)return e;t.add(r.url);const a=r.resourceType===Qu.TYPES.Image&&ad.test(r.mimeType),n=Qu.getResourceSizeOnNetwork(r);return a&&n>4096&&e.push({requestId:r.requestId,url:r.url,mimeType:r.mimeType,resourceSize:n}),e}),[])}_getEncodedResponse(e,t,r){const a={requestId:t=Qu.getRequestIdForBackend(t),encoding:r,quality:"jpeg"===r?.92:.85,sizeOnly:!0};return e.sendCommand("Audits.getEncodedResponse",a)}async calculateImageStats(e,t){const r=t.resourceSize;if(Date.now()-this._encodingStartAt>5e3||r>2048e3)return{originalSize:r,jpegSize:void 0,webpSize:void 0};const a=await this._getEncodedResponse(e,t.requestId,"jpeg"),n=await this._getEncodedResponse(e,t.requestId,"webp");return{originalSize:r,jpegSize:a.encodedSize,webpSize:n.encodedSize}}async computeOptimizedImages(e,t){this._encodingStartAt=Date.now()
405
405
  ;const r=[];for(const a of t)try{const t={failed:!1,...await this.calculateImageStats(e,a),...a};r.push(t)}catch(e){Ju.warn("optimized-images",e.message),ed.captureException(e,{tags:{gatherer:"OptimizedImages"},extra:{imageUrl:Zu.elideDataURI(a.url)},level:"warning"});const t={failed:!0,errMsg:e.message,...a};r.push(t)}return r}async _getArtifact(e,t){const r=OptimizedImages.filterImageRequests(t).sort(((e,t)=>t.resourceSize-e.resourceSize)),a=await this.computeOptimizedImages(e.driver.defaultSession,r),n=a.filter((e=>!e.failed));if(a.length&&!n.length)throw new Error("All image optimizations failed");return a}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await td.request(t,e);return this._getArtifact(e,r)}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.networkRecords)}}var nd=OptimizedImages;const id=eo,od=hn;function findPasswordInputsWithPreventedPaste(){
406
406
  return Array.from(document.querySelectorAll('input[type="password"]')).filter((e=>!e.dispatchEvent(new ClipboardEvent("paste",{cancelable:!0})))).map((e=>({node:getNodeDetails(e)})))}var sd=class PasswordInputsWithPreventedPaste extends id{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(findPasswordInputsWithPreventedPaste,{args:[],deps:[od.getNodeDetailsString]})}},cd=getAugmentedNamespace(u),ld={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function ZStream(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}function arraySet(e,t,r,a,n){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+a),n);else for(var i=0;i<a;i++)e[n+i]=t[r+i]}
@@ -428,17 +428,17 @@ put_byte(a,e.total_in>>16&255),put_byte(a,e.total_in>>24&255)):(putShortMSB(a,e.
428
428
  })),new Config$2(4,4,8,4,deflate_fast),new Config$2(4,5,16,8,deflate_fast),new Config$2(4,6,32,32,deflate_fast),new Config$2(4,4,16,16,deflate_slow),new Config$2(8,16,32,32,deflate_slow),new Config$2(8,16,128,128,deflate_slow),new Config$2(8,32,128,256,deflate_slow),new Config$2(32,128,258,1024,deflate_slow),new Config$2(32,258,258,4096,deflate_slow)];function inflate_fast(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x,_,A,R;r=e.state,a=e.next_in,A=e.input,n=a+(e.avail_in-5),i=e.next_out,R=e.output,o=i-(t-e.avail_out),s=i+(e.avail_out-257),c=r.dmax,l=r.wsize,u=r.whave,d=r.wnext,m=r.window,p=r.hold,h=r.bits,f=r.lencode,y=r.distcode,v=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{h<15&&(p+=A[a++]<<h,h+=8,p+=A[a++]<<h,h+=8),w=f[p&v];t:for(;;){if(p>>>=S=w>>>24,h-=S,0===(S=w>>>16&255))R[i++]=65535&w;else{if(!(16&S)){if(0==(64&S)){w=f[(65535&w)+(p&(1<<S)-1)];continue t}if(32&S){r.mode=12;break e}e.msg="invalid literal/length code",r.mode=30;break e}T=65535&w,(S&=15)&&(h<S&&(p+=A[a++]<<h,
429
429
  h+=8),T+=p&(1<<S)-1,p>>>=S,h-=S),h<15&&(p+=A[a++]<<h,h+=8,p+=A[a++]<<h,h+=8),w=y[p&b];r:for(;;){if(p>>>=S=w>>>24,h-=S,!(16&(S=w>>>16&255))){if(0==(64&S)){w=y[(65535&w)+(p&(1<<S)-1)];continue r}e.msg="invalid distance code",r.mode=30;break e}if(E=65535&w,h<(S&=15)&&(p+=A[a++]<<h,(h+=8)<S&&(p+=A[a++]<<h,h+=8)),(E+=p&(1<<S)-1)>c){e.msg="invalid distance too far back",r.mode=30;break e}if(p>>>=S,h-=S,E>(S=i-o)){if((S=E-S)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,_=m,0===d){if(x+=l-S,S<T){T-=S;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}}else if(d<S){if(x+=l+d-S,(S-=d)<T){T-=S;do{R[i++]=m[x++]}while(--S);if(x=0,d<T){T-=S=d;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}}}else if(x+=d-S,S<T){T-=S;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}for(;T>2;)R[i++]=_[x++],R[i++]=_[x++],R[i++]=_[x++],T-=3;T&&(R[i++]=_[x++],T>1&&(R[i++]=_[x++]))}else{x=i-E;do{R[i++]=R[x++],R[i++]=R[x++],R[i++]=R[x++],T-=3}while(T>2);T&&(R[i++]=R[x++],T>1&&(R[i++]=R[x++]))}break}}break}}while(a<n&&i<s)
430
430
  ;a-=T=h>>3,p&=(1<<(h-=T<<3))-1,e.next_in=a,e.next_out=i,e.avail_in=a<n?n-a+5:5-(a-n),e.avail_out=i<s?s-i+257:257-(i-s),r.hold=p,r.bits=h}var jd=15,Bd=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],$d=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],qd=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],zd=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function inflate_table(e,t,r,a,n,i,o,s){var c,l,u,d,m,p,h,f,y,v=s.bits,b=0,w=0,S=0,T=0,E=0,x=0,_=0,A=0,R=0,k=0,D=null,C=0,I=new dd(16),N=new dd(16),L=null,M=0;for(b=0;b<=jd;b++)I[b]=0;for(w=0;w<a;w++)I[t[r+w]]++;for(E=v,T=jd;T>=1&&0===I[T];T--);if(E>T&&(E=T),0===T)return n[i++]=20971520,n[i++]=20971520,s.bits=1,0;for(S=1;S<T&&0===I[S];S++);for(E<S&&(E=S),A=1,b=1;b<=jd;b++)if(A<<=1,(A-=I[b])<0)return-1;if(A>0&&(0===e||1!==T))return-1
431
- ;for(N[1]=0,b=1;b<jd;b++)N[b+1]=N[b]+I[b];for(w=0;w<a;w++)0!==t[r+w]&&(o[N[t[r+w]]++]=w);if(0===e?(D=L=o,p=19):1===e?(D=Bd,C-=257,L=$d,M-=257,p=256):(D=qd,L=zd,p=-1),k=0,w=0,b=S,m=i,x=E,_=0,u=-1,d=(R=1<<E)-1,1===e&&R>852||2===e&&R>592)return 1;for(;;){h=b-_,o[w]<p?(f=0,y=o[w]):o[w]>p?(f=L[M+o[w]],y=D[C+o[w]]):(f=96,y=0),c=1<<b-_,S=l=1<<x;do{n[m+(k>>_)+(l-=c)]=h<<24|f<<16|y|0}while(0!==l);for(c=1<<b-1;k&c;)c>>=1;if(0!==c?(k&=c-1,k+=c):k=0,w++,0==--I[b]){if(b===T)break;b=t[r+o[w]]}if(b>E&&(k&d)!==u){for(0===_&&(_=E),m+=S,A=1<<(x=b-_);x+_<T&&!((A-=I[x+_])<=0);)x++,A<<=1;if(R+=1<<x,1===e&&R>852||2===e&&R>592)return 1;n[u=k&d]=E<<24|x<<16|m-i|0}}return 0!==k&&(n[m+k]=b-_<<24|64<<16|0),s.bits=E,0}var Vd=-2,Wd=12,Gd=30;function zswap32(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function InflateState(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,
431
+ ;for(N[1]=0,b=1;b<jd;b++)N[b+1]=N[b]+I[b];for(w=0;w<a;w++)0!==t[r+w]&&(o[N[t[r+w]]++]=w);if(0===e?(D=L=o,p=19):1===e?(D=Bd,C-=257,L=$d,M-=257,p=256):(D=qd,L=zd,p=-1),k=0,w=0,b=S,m=i,x=E,_=0,u=-1,d=(R=1<<E)-1,1===e&&R>852||2===e&&R>592)return 1;for(;;){h=b-_,o[w]<p?(f=0,y=o[w]):o[w]>p?(f=L[M+o[w]],y=D[C+o[w]]):(f=96,y=0),c=1<<b-_,S=l=1<<x;do{n[m+(k>>_)+(l-=c)]=h<<24|f<<16|y|0}while(0!==l);for(c=1<<b-1;k&c;)c>>=1;if(0!==c?(k&=c-1,k+=c):k=0,w++,0==--I[b]){if(b===T)break;b=t[r+o[w]]}if(b>E&&(k&d)!==u){for(0===_&&(_=E),m+=S,A=1<<(x=b-_);x+_<T&&!((A-=I[x+_])<=0);)x++,A<<=1;if(R+=1<<x,1===e&&R>852||2===e&&R>592)return 1;n[u=k&d]=E<<24|x<<16|m-i|0}}return 0!==k&&(n[m+k]=b-_<<24|64<<16|0),s.bits=E,0}var Vd=-2,Wd=12,Hd=30;function zswap32(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function InflateState(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,
432
432
  this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new dd(320),this.work=new dd(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function inflateReset(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,function inflateResetKeep(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new md(852),t.distcode=t.distdyn=new md(592),t.sane=1,t.back=-1,0):Vd}(e)):Vd}function inflateInit2(e,t){var r,a;return e?(a=new InflateState,e.state=a,a.window=null,0!==(r=function inflateReset2(e,t){var r,a;return e&&e.state?(a=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Vd:(null!==a.window&&a.wbits!==t&&(a.window=null),a.wrap=r,
433
- a.wbits=t,inflateReset(e))):Vd}(e,t))&&(e.state=null),r):Vd}var Hd,Yd,Kd=!0;function fixedtables(e){if(Kd){var t;for(Hd=new md(512),Yd=new md(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(inflate_table(1,e.lens,0,288,Hd,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;inflate_table(2,e.lens,0,32,Yd,0,e.work,{bits:5}),Kd=!1}e.lencode=Hd,e.lenbits=9,e.distcode=Yd,e.distbits=5}function inflate$1(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x,_,A,R=0,k=new ud(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Vd;(r=e.state).mode===Wd&&(r.mode=13),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,d=s,m=c,x=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(2&r.wrap&&35615===l){r.check=0,k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0),l=0,u=0,r.mode=2
434
- ;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=Gd;break}if(8!=(15&l)){e.msg="unknown compression method",r.mode=Gd;break}if(u-=4,E=8+(15&(l>>>=4)),0===r.wbits)r.wbits=E;else if(E>r.wbits){e.msg="invalid window size",r.mode=Gd;break}r.dmax=1<<E,e.adler=r.check=1,r.mode=512&l?10:Wd,l=0,u=0;break;case 2:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.flags=l,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=Gd;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=Gd;break}r.head&&(r.head.text=l>>8&1),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0,r.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.time=l),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,k[2]=l>>>16&255,k[3]=l>>>24&255,r.check=crc32(r.check,k,4,0)),l=0,u=0,r.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.xflags=255&l,r.head.os=l>>8),
433
+ a.wbits=t,inflateReset(e))):Vd}(e,t))&&(e.state=null),r):Vd}var Gd,Yd,Kd=!0;function fixedtables(e){if(Kd){var t;for(Gd=new md(512),Yd=new md(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(inflate_table(1,e.lens,0,288,Gd,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;inflate_table(2,e.lens,0,32,Yd,0,e.work,{bits:5}),Kd=!1}e.lencode=Gd,e.lenbits=9,e.distcode=Yd,e.distbits=5}function inflate$1(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x,_,A,R=0,k=new ud(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Vd;(r=e.state).mode===Wd&&(r.mode=13),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,d=s,m=c,x=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(2&r.wrap&&35615===l){r.check=0,k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0),l=0,u=0,r.mode=2
434
+ ;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=Hd;break}if(8!=(15&l)){e.msg="unknown compression method",r.mode=Hd;break}if(u-=4,E=8+(15&(l>>>=4)),0===r.wbits)r.wbits=E;else if(E>r.wbits){e.msg="invalid window size",r.mode=Hd;break}r.dmax=1<<E,e.adler=r.check=1,r.mode=512&l?10:Wd,l=0,u=0;break;case 2:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.flags=l,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=Hd;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=Hd;break}r.head&&(r.head.text=l>>8&1),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0,r.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.time=l),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,k[2]=l>>>16&255,k[3]=l>>>24&255,r.check=crc32(r.check,k,4,0)),l=0,u=0,r.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.xflags=255&l,r.head.os=l>>8),
435
435
  512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0,r.mode=5;case 5:if(1024&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.length=l,r.head&&(r.head.extra_len=l),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((p=r.length)>s&&(p=s),p&&(r.head&&(E=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),arraySet(r.head.extra,a,i,p,E)),512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,r.length-=p),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===s)break e;p=0;do{E=a[i+p++],r.head&&E&&r.length<65536&&(r.head.name+=String.fromCharCode(E))}while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===s)break e;p=0;do{E=a[i+p++],r.head&&E&&r.length<65536&&(r.head.comment+=String.fromCharCode(E))
436
- }while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(65535&r.check)){e.msg="header crc mismatch",r.mode=Gd;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Wd;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}e.adler=r.check=zswap32(l),l=0,u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,2;e.adler=r.check=1,r.mode=Wd;case Wd:if(5===t||6===t)break e;case 13:if(r.last){l>>>=7&u,u-=7&u,r.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}switch(r.last=1&l,u-=1,3&(l>>>=1)){case 0:r.mode=14;break;case 1:if(fixedtables(r),r.mode=20,6===t){l>>>=2,u-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=Gd}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,
437
- l+=a[i++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=Gd;break}if(r.length=65535&l,l=0,u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(p=r.length){if(p>s&&(p=s),p>c&&(p=c),0===p)break e;arraySet(n,a,i,p,o),s-=p,i+=p,c-=p,o+=p,r.length-=p;break}r.mode=Wd;break;case 17:for(;u<14;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.nlen=257+(31&l),l>>>=5,u-=5,r.ndist=1+(31&l),l>>>=5,u-=5,r.ncode=4+(15&l),l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Gd;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.lens[D[r.have++]]=7&l,l>>>=3,u-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,_={bits:r.lenbits},x=inflate_table(0,r.lens,0,19,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid code lengths set",r.mode=Gd;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,
438
- b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(b<16)l>>>=y,u-=y,r.lens[r.have++]=b;else{if(16===b){for(A=y+2;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l>>>=y,u-=y,0===r.have){e.msg="invalid bit length repeat",r.mode=Gd;break}E=r.lens[r.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===b){for(A=y+3;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=3+(7&(l>>>=y)),l>>>=3,u-=3}else{for(A=y+7;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=11+(127&(l>>>=y)),l>>>=7,u-=7}if(r.have+p>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Gd;break}for(;p--;)r.lens[r.have++]=E}}if(r.mode===Gd)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Gd;break}if(r.lenbits=9,_={bits:r.lenbits},x=inflate_table(1,r.lens,0,r.nlen,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid literal/lengths set",r.mode=Gd;break}if(r.distbits=6,r.distcode=r.distdyn,_={bits:r.distbits},x=inflate_table(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,_),
439
- r.distbits=_.bits,x){e.msg="invalid distances set",r.mode=Gd;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,inflate_fast(e,m),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,r.mode===Wd&&(r.back=-1);break}for(r.back=0;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(v&&0==(240&v)){for(w=y,S=v,T=b;v=(R=r.lencode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,r.length=b,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=Wd;break}if(64&v){e.msg="invalid literal/length code",r.mode=Gd;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23
440
- ;case 23:for(;v=(R=r.distcode[l&(1<<r.distbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(0==(240&v)){for(w=y,S=v,T=b;v=(R=r.distcode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,64&v){e.msg="invalid distance code",r.mode=Gd;break}r.offset=b,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Gd;break}r.mode=25;case 25:if(0===c)break e;if(p=m-c,r.offset>p){if((p=r.offset-p)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Gd;break}p>r.wnext?(p-=r.wnext,h=r.wsize-p):h=r.wnext-p,p>r.length&&(p=r.length),f=r.window}else f=n,h=o-r.offset,p=r.length;p>c&&(p=c),c-=p,r.length-=p;do{n[o++]=f[h++]}while(--p);0===r.length&&(r.mode=21);break;case 26:
441
- if(0===c)break e;n[o++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;u<32;){if(0===s)break e;s--,l|=a[i++]<<u,u+=8}if(m-=c,e.total_out+=m,r.total+=m,m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,o-m):adler32(r.check,n,m,o-m)),m=c,(r.flags?l:zswap32(l))!==r.check){e.msg="incorrect data check",r.mode=Gd;break}l=0,u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=Gd;break}l=0,u=0}r.mode=29;case 29:x=1;break e;case Gd:x=-3;break e;case 31:return-4;case 32:default:return Vd}return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,(r.wsize||m!==e.avail_out&&r.mode<Gd&&(r.mode<27||4!==t))&&function updatewindow(e,t,r,a){var n,i=e.state;return null===i.window&&(i.wsize=1<<i.wbits,i.wnext=0,i.whave=0,i.window=new ud(i.wsize)),a>=i.wsize?(arraySet(i.window,t,r-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):((n=i.wsize-i.wnext)>a&&(n=a),
436
+ }while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(65535&r.check)){e.msg="header crc mismatch",r.mode=Hd;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Wd;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}e.adler=r.check=zswap32(l),l=0,u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,2;e.adler=r.check=1,r.mode=Wd;case Wd:if(5===t||6===t)break e;case 13:if(r.last){l>>>=7&u,u-=7&u,r.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}switch(r.last=1&l,u-=1,3&(l>>>=1)){case 0:r.mode=14;break;case 1:if(fixedtables(r),r.mode=20,6===t){l>>>=2,u-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=Hd}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,
437
+ l+=a[i++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=Hd;break}if(r.length=65535&l,l=0,u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(p=r.length){if(p>s&&(p=s),p>c&&(p=c),0===p)break e;arraySet(n,a,i,p,o),s-=p,i+=p,c-=p,o+=p,r.length-=p;break}r.mode=Wd;break;case 17:for(;u<14;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.nlen=257+(31&l),l>>>=5,u-=5,r.ndist=1+(31&l),l>>>=5,u-=5,r.ncode=4+(15&l),l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Hd;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.lens[D[r.have++]]=7&l,l>>>=3,u-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,_={bits:r.lenbits},x=inflate_table(0,r.lens,0,19,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid code lengths set",r.mode=Hd;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,
438
+ b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(b<16)l>>>=y,u-=y,r.lens[r.have++]=b;else{if(16===b){for(A=y+2;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l>>>=y,u-=y,0===r.have){e.msg="invalid bit length repeat",r.mode=Hd;break}E=r.lens[r.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===b){for(A=y+3;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=3+(7&(l>>>=y)),l>>>=3,u-=3}else{for(A=y+7;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=11+(127&(l>>>=y)),l>>>=7,u-=7}if(r.have+p>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Hd;break}for(;p--;)r.lens[r.have++]=E}}if(r.mode===Hd)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Hd;break}if(r.lenbits=9,_={bits:r.lenbits},x=inflate_table(1,r.lens,0,r.nlen,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid literal/lengths set",r.mode=Hd;break}if(r.distbits=6,r.distcode=r.distdyn,_={bits:r.distbits},x=inflate_table(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,_),
439
+ r.distbits=_.bits,x){e.msg="invalid distances set",r.mode=Hd;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,inflate_fast(e,m),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,r.mode===Wd&&(r.back=-1);break}for(r.back=0;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(v&&0==(240&v)){for(w=y,S=v,T=b;v=(R=r.lencode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,r.length=b,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=Wd;break}if(64&v){e.msg="invalid literal/length code",r.mode=Hd;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23
440
+ ;case 23:for(;v=(R=r.distcode[l&(1<<r.distbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(0==(240&v)){for(w=y,S=v,T=b;v=(R=r.distcode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,64&v){e.msg="invalid distance code",r.mode=Hd;break}r.offset=b,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Hd;break}r.mode=25;case 25:if(0===c)break e;if(p=m-c,r.offset>p){if((p=r.offset-p)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Hd;break}p>r.wnext?(p-=r.wnext,h=r.wsize-p):h=r.wnext-p,p>r.length&&(p=r.length),f=r.window}else f=n,h=o-r.offset,p=r.length;p>c&&(p=c),c-=p,r.length-=p;do{n[o++]=f[h++]}while(--p);0===r.length&&(r.mode=21);break;case 26:
441
+ if(0===c)break e;n[o++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;u<32;){if(0===s)break e;s--,l|=a[i++]<<u,u+=8}if(m-=c,e.total_out+=m,r.total+=m,m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,o-m):adler32(r.check,n,m,o-m)),m=c,(r.flags?l:zswap32(l))!==r.check){e.msg="incorrect data check",r.mode=Hd;break}l=0,u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=Hd;break}l=0,u=0}r.mode=29;case 29:x=1;break e;case Hd:x=-3;break e;case 31:return-4;case 32:default:return Vd}return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,(r.wsize||m!==e.avail_out&&r.mode<Hd&&(r.mode<27||4!==t))&&function updatewindow(e,t,r,a){var n,i=e.state;return null===i.window&&(i.wsize=1<<i.wbits,i.wnext=0,i.whave=0,i.window=new ud(i.wsize)),a>=i.wsize?(arraySet(i.window,t,r-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):((n=i.wsize-i.wnext)>a&&(n=a),
442
442
  arraySet(i.window,t,r-a,n,i.wnext),(a-=n)?(arraySet(i.window,t,r-a,a,0),i.wnext=a,i.whave=i.wsize):(i.wnext+=n,i.wnext===i.wsize&&(i.wnext=0),i.whave<i.wsize&&(i.whave+=n))),0}(e,e.output,e.next_out,m-e.avail_out),d-=e.avail_in,m-=e.avail_out,e.total_in+=d,e.total_out+=m,r.total+=m,r.wrap&&m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,e.next_out-m):adler32(r.check,n,m,e.next_out-m)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Wd?128:0)+(20===r.mode||15===r.mode?256:0),(0===d&&0===m||4===t)&&0===x&&(x=-5),x}var Jd;function Zlib$1(e){if(e<1||e>7)throw new TypeError("Bad argument");this.mode=e,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function bufferSet(e,t){for(var r=0;r<e.length;r++)this[t+r]=e[r]}Zlib$1.prototype.init=function(e,t,r,a,n){var i;switch(this.windowBits=e,this.level=t,this.memLevel=r,this.strategy=a,3!==this.mode&&4!==this.mode||(this.windowBits+=16),
443
443
  7===this.mode&&(this.windowBits+=32),5!==this.mode&&6!==this.mode||(this.windowBits=-this.windowBits),this.strm=new ZStream,this.mode){case 1:case 3:case 5:i=function deflateInit2(e,t,r,a,n,i){if(!e)return Ld;var o=1;if(-1===t&&(t=6),a<0?(o=0,a=-a):a>15&&(o=2,a-=16),n<1||n>9||8!==r||a<8||a>15||t<0||t>9||i<0||i>4)return err(e,Ld);8===a&&(a=9);var s=new DeflateState;return e.state=s,s.strm=e,s.wrap=o,s.gzhead=null,s.w_bits=a,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=n+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new ud(2*s.w_size),s.head=new dd(s.hash_size),s.prev=new dd(s.w_size),s.lit_bufsize=1<<n+6,s.pending_buf_size=4*s.lit_bufsize,s.pending_buf=new ud(s.pending_buf_size),s.d_buf=1*s.lit_bufsize,s.l_buf=3*s.lit_bufsize,s.level=t,s.strategy=i,s.method=r,deflateReset(e)}(this.strm,this.level,8,this.windowBits,this.memLevel,this.strategy);break;case 2:case 4:case 6:case 7:i=inflateInit2(this.strm,this.windowBits);break
444
444
  ;default:throw new Error("Unknown mode "+this.mode)}0===i?(this.write_in_progress=!1,this.init_done=!0):this._error(i)},Zlib$1.prototype.params=function(){throw new Error("deflateParams Not supported")},Zlib$1.prototype._writeCheck=function(){if(!this.init_done)throw new Error("write before init");if(0===this.mode)throw new Error("already finalized");if(this.write_in_progress)throw new Error("write already in progress");if(this.pending_close)throw new Error("close is pending")},Zlib$1.prototype.write=function(e,t,r,a,n,i,o){this._writeCheck(),this.write_in_progress=!0;var s=this;return La.nextTick((function(){s.write_in_progress=!1;var c=s._write(e,t,r,a,n,i,o);s.callback(c[0],c[1]),s.pending_close&&s.close()})),this},Zlib$1.prototype.writeSync=function(e,t,r,a,n,i,o){return this._writeCheck(),this._write(e,t,r,a,n,i,o)},Zlib$1.prototype._write=function(e,t,r,a,n,i,o){if(this.write_in_progress=!0,0!==e&&1!==e&&2!==e&&3!==e&&4!==e&&5!==e)throw new Error("Invalid flush value")
@@ -477,10 +477,10 @@ imageRendering:e.getPropertyValue("image-rendering")},isCss:!0,isPicture:!1,isIn
477
477
  ;r.cssEffectiveRules={width:i,height:o,aspectRatio:s}}catch(e){if(/No node.*found/.test(e.message))return;throw e}}async collectExtraDetails(e,t){let r=!1;setTimeout((e=>r=!0),5e3);let a=0;for(const n of t)r?a++:(n.isInShadowDOM||n.isCss||await this.fetchSourceRules(e.defaultSession,n.node.devtoolsNodePath,n),(n.isPicture||n.isCss||n.srcset)&&await this.fetchElementWithSizeInformation(e,n));r&&Lm.warn("ImageElements",`Reached gathering budget of 5s. Skipped extra details for ${a}/${t.length}`)}async getArtifact(e){const t=e.driver.defaultSession,r=e.driver.executionContext,a=await r.evaluate(collectImageElementInfo,{args:[],deps:[Pm.getElementsInDocumentString,Pm.getBoundingClientRectString,Pm.getNodeDetailsString,getClientRect,getPosition,getHTMLImages,getCSSImages]});return await Promise.all([t.sendCommand("DOM.enable"),t.sendCommand("CSS.enable"),t.sendCommand("DOM.getDocument",{depth:-1,pierce:!0})]),a.sort(((e,t)=>getPixelArea(t)-getPixelArea(e))),
478
478
  await this.collectExtraDetails(e.driver,a),await Promise.all([t.sendCommand("DOM.disable"),t.sendCommand("CSS.disable")]),a}};const Um=eo,jm=hn;function collectElements(){const e=[],t=new Map,r=new Map,a=getElementsInDocument("form");for(const e of a)t.set(e,{id:e.id,name:e.name,autocomplete:e.autocomplete,node:getNodeDetails(e)});const n=getElementsInDocument("label");for(const e of n)r.set(e,{for:e.htmlFor,node:getNodeDetails(e)});const i=getElementsInDocument("textarea, input, select");for(const a of i){const n=a.form,i=n?[...t.keys()].indexOf(n):void 0,o=[...a.labels||[]].map((e=>[...r.keys()].indexOf(e)));e.push({parentFormIndex:i,labelIndices:o,id:a.id,name:a.name,type:a.type,placeholder:a instanceof HTMLSelectElement?void 0:a.placeholder,autocomplete:{property:a.autocomplete,attribute:a.getAttribute("autocomplete"),prediction:a.getAttribute("autofill-prediction")},node:getNodeDetails(a)})}return{inputs:e,forms:[...t.values()],labels:[...r.values()]}}
479
479
  var Bm=class Inputs extends Um{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){return e.driver.executionContext.evaluate(collectElements,{args:[],useIsolation:!0,deps:[jm.getElementsInDocumentString,jm.getNodeDetailsString]})}};const $m=eo,qm=Lo,zm=Ws;var Vm=class InspectorIssues extends $m{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:zm.symbol}};constructor(){super(),this._issues=[],this._onIssueAdded=this.onIssueAdded.bind(this)}onIssueAdded(e){this._issues.push(e.issue)}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.enable")}async stopInstrumentation(e){const t=e.driver.defaultSession;t.off("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.disable")}async _getArtifact(e){const t={attributionReportingIssue:[],blockedByResponseIssue:[],clientHintIssue:[],contentSecurityPolicyIssue:[],corsIssue:[],deprecationIssue:[],
480
- federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],twaQualityEnforcement:[]},r=Object.keys(t);for(const a of r){const r=`${a}Details`,n=this._issues.map((e=>e.details[r]));for(const r of n){if(!r)continue;const n="request"in r&&r.request&&r.request.requestId;n?e.find((e=>e.requestId===n))&&t[a].push(r):t[a].push(r)}}return t}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await qm.request(t,e);return this._getArtifact(r)}async afterPass(e,t){return await this.stopInstrumentation({...e,dependencies:{}}),this._getArtifact(t.networkRecords)}};const Wm=eo;var Gm=class JsUsage extends Wm{meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this._scriptUsages=[],this.onScriptParsed=this.onScriptParsed.bind(this)}onScriptParsed(e){e.embedderName&&this._scriptParsedEvents.push(e)}
480
+ federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],twaQualityEnforcement:[]},r=Object.keys(t);for(const a of r){const r=`${a}Details`,n=this._issues.map((e=>e.details[r]));for(const r of n){if(!r)continue;const n="request"in r&&r.request&&r.request.requestId;n?e.find((e=>e.requestId===n))&&t[a].push(r):t[a].push(r)}}return t}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await qm.request(t,e);return this._getArtifact(r)}async afterPass(e,t){return await this.stopInstrumentation({...e,dependencies:{}}),this._getArtifact(t.networkRecords)}};const Wm=eo;var Hm=class JsUsage extends Wm{meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this._scriptUsages=[],this.onScriptParsed=this.onScriptParsed.bind(this)}onScriptParsed(e){e.embedderName&&this._scriptParsedEvents.push(e)}
481
481
  async startInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Profiler.enable"),await t.sendCommand("Profiler.startPreciseCoverage",{detailed:!1})}async stopInstrumentation(e){const t=e.driver.defaultSession,r=await t.sendCommand("Profiler.takePreciseCoverage");this._scriptUsages=r.result,await t.sendCommand("Profiler.stopPreciseCoverage"),await t.sendCommand("Profiler.disable")}async startSensitiveInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopSensitiveInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Debugger.disable"),t.off("Debugger.scriptParsed",this.onScriptParsed)}_addMissingScriptIds(e){for(const t of this._scriptParsedEvents){const r=t.embedderName;if(!r)continue;const a=e[r]||[];a.find((e=>e.scriptId===t.scriptId))||a.push({url:r,scriptId:t.scriptId,functions:[]}),e[r]=a}}async getArtifact(e){const t={}
482
- ;"snapshot"===e.gatherMode&&(await this.startSensitiveInstrumentation(e),await this.stopSensitiveInstrumentation(e));for(const e of this._scriptUsages){let r=e.url;const a=this._scriptParsedEvents.find((t=>t.scriptId===e.scriptId));if(a?.embedderName&&(r=a.embedderName),""===e.url||a&&""===a.embedderName)continue;const n=t[r]||[];n.push(e),t[r]=n}return"navigation"!==e.gatherMode&&this._addMissingScriptIds(t),t}};function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Hm=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function stringifyPrimitive(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}}function stringify(e,t,r,a){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?map(Ym(e),(function(a){var n=encodeURIComponent(stringifyPrimitive(a))+r;return Hm(e[a])?map(e[a],(function(e){
483
- return n+encodeURIComponent(stringifyPrimitive(e))})).join(t):n+encodeURIComponent(stringifyPrimitive(e[a]))})).join(t):a?encodeURIComponent(stringifyPrimitive(a))+r+encodeURIComponent(stringifyPrimitive(e)):""}function map(e,t){if(e.map)return e.map(t);for(var r=[],a=0;a<e.length;a++)r.push(t(e[a],a));return r}var Ym=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t};function parse$1(e,t,r,a){t=t||"&",r=r||"=";var n={};if("string"!=typeof e||0===e.length)return n;var i=/\+/g;e=e.split(t);var o=1e3;a&&"number"==typeof a.maxKeys&&(o=a.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var c=0;c<s;++c){var l,u,d,m,p=e[c].replace(i,"%20"),h=p.indexOf(r);h>=0?(l=p.substr(0,h),u=p.substr(h+1)):(l=p,u=""),d=decodeURIComponent(l),m=decodeURIComponent(u),hasOwnProperty(n,d)?Hm(n[d])?n[d].push(m):n[d]=[n[d],m]:n[d]=m}return n}var Km={encode:stringify,stringify,decode:parse$1,parse:parse$1},Jm=getAugmentedNamespace(Object.freeze({
482
+ ;"snapshot"===e.gatherMode&&(await this.startSensitiveInstrumentation(e),await this.stopSensitiveInstrumentation(e));for(const e of this._scriptUsages){let r=e.url;const a=this._scriptParsedEvents.find((t=>t.scriptId===e.scriptId));if(a?.embedderName&&(r=a.embedderName),""===e.url||a&&""===a.embedderName)continue;const n=t[r]||[];n.push(e),t[r]=n}return"navigation"!==e.gatherMode&&this._addMissingScriptIds(t),t}};function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Gm=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function stringifyPrimitive(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}}function stringify(e,t,r,a){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?map(Ym(e),(function(a){var n=encodeURIComponent(stringifyPrimitive(a))+r;return Gm(e[a])?map(e[a],(function(e){
483
+ return n+encodeURIComponent(stringifyPrimitive(e))})).join(t):n+encodeURIComponent(stringifyPrimitive(e[a]))})).join(t):a?encodeURIComponent(stringifyPrimitive(a))+r+encodeURIComponent(stringifyPrimitive(e)):""}function map(e,t){if(e.map)return e.map(t);for(var r=[],a=0;a<e.length;a++)r.push(t(e[a],a));return r}var Ym=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t};function parse$1(e,t,r,a){t=t||"&",r=r||"=";var n={};if("string"!=typeof e||0===e.length)return n;var i=/\+/g;e=e.split(t);var o=1e3;a&&"number"==typeof a.maxKeys&&(o=a.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var c=0;c<s;++c){var l,u,d,m,p=e[c].replace(i,"%20"),h=p.indexOf(r);h>=0?(l=p.substr(0,h),u=p.substr(h+1)):(l=p,u=""),d=decodeURIComponent(l),m=decodeURIComponent(u),hasOwnProperty(n,d)?Gm(n[d])?n[d].push(m):n[d]=[n[d],m]:n[d]=m}return n}var Km={encode:stringify,stringify,decode:parse$1,parse:parse$1},Jm=getAugmentedNamespace(Object.freeze({
484
484
  __proto__:null,stringify,parse:parse$1,default:Km,encode:stringify,decode:parse$1})),Xm=function trim(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};function Link(e){if(!(this instanceof Link))return new Link(e);this.refs=[]}Link.pattern=/(?:\<([^\>]+)\>)((\s*;\s*([a-z\*]+)=(("[^"]+")|('[^']+')|([^\,\;]+)))*)(\s*,\s*|$)/gi,Link.attrPattern=/([a-z\*]+)=(?:(?:"([^"]+)")|(?:'([^']+)')|([^\,\;]+))/gi,Link.isCompatibleEncoding=function(e){return/^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i.test(e)},Link.formatExtendedAttribute=function(e,t){var r=(t.encoding||"utf-8").toUpperCase();return e+"="+r+"'"+(t.language||"en")+"'"+(Buffer$2.isBuffer(t.value)&&Link.isCompatibleEncoding(r)?t.value.toString(r):Buffer$2.isBuffer(t.value)?t.value.toString("hex").replace(/[0-9a-f]{2}/gi,"%$1"):Jm.escape(t.value))},Link.formatAttribute=function(e,t){
485
485
  return/\*$/.test(e)||"string"!=typeof t?Link.formatExtendedAttribute(e,t):(/[^a-z]/i.test(t)&&(t='"'+(t=Jm.escape(t).replace(/%20/g," ").replace(/%2C/g,",").replace(/%3B/g,";"))+'"'),e+"="+t)},Link.parseExtendedValue=function(e){var t=/([^']+)?(?:'([^']+)')?(.+)/.exec(e);return{language:t[2].toLowerCase(),encoding:Link.isCompatibleEncoding(t[1])?null:t[1].toLowerCase(),value:Link.isCompatibleEncoding(t[1])?Jm.unescape(t[3]):t[3]}},Link.setAttr=function(e,t,r){return"rel"===t&&null!=e[t]||(Array.isArray(e[t])?e[t].push(r):null!=e[t]?e[t]=[e[t],r]:e[t]=r),e},Link.parseParams=function(e,t){var r={},a=/(.+)\?(.+)/gi.exec(t);if(!a)return e;a=a[2].split("&");for(var n=0;n<a.length;n++){var i=a[n].split("=");r[i[0]]=i[1]}return Link.setAttr(e,"params",r),e},Link.parseAttrs=function(e,t){var r=null,a="",n="",i="",o=/<(.*)>;\s*(.*)/gi.exec(t);for(o&&(i=o[2],e=Link.parseParams(e,o[1]));r=Link.attrPattern.exec(i);)a=r[1].toLowerCase(),n=r[4]||r[3]||r[2],
486
486
  /\*$/.test(a)?Link.setAttr(e,a,Link.parseExtendedValue(n)):/%/.test(n)?Link.setAttr(e,a,Jm.unescape(n)):Link.setAttr(e,a,n);return e},Link.parse=function(e){return(new Link).parse(e)},Link.prototype={constructor:Link,rel:function(e){for(var t=[],r=0;r<this.refs.length;r++)this.refs[r].rel===e&&t.push(this.refs[r]);return t},get:function(e,t){e=e.toLowerCase();for(var r=[],a=0;a<this.refs.length;a++)this.refs[a][e]===t&&r.push(this.refs[a]);return r},set:function(e){return this.refs.push(e),this},has:function(e,t){return null!=this.get(e,t)},parse:function(e){e=Xm(e).replace(/\r?\n[\x20\x09]+/g,"");for(var t=null;t=Link.pattern.exec(e);){var r=Link.parseAttrs({uri:t[1]},t[0]);this.refs.push(r)}return this},toString:function(){for(var e=[],t="",r=null,a=0;a<this.refs.length;a++)r=this.refs[a],t=Object.keys(this.refs[a]).reduce((function(e,t){return"uri"===t?e:e+"; "+Link.formatAttribute(t,r[t])}),"<"+r.uri+">"),e.push(t);return e.join(", ")}}
@@ -498,21 +498,21 @@ const r=getComputedStyle(t).position;"fixed"!==r&&"sticky"!==r||t.classList.add(
498
498
  async addStyleRule(e,t){const r=await e.sendCommand("Page.getFrameTree"),{styleSheetId:a}=await e.sendCommand("CSS.createStyleSheet",{frameId:r.frameTree.frame.id}),n=`.${t} { pointer-events: none !important }`;return await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:a,text:n}),a}async removeStyleRule(e,t){await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:t,text:""})}async getArtifact(e){const t=e.driver.defaultSession;await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable");const r="lighthouse-disable-pointer-events",a=await this.addStyleRule(t,r),n=await e.driver.executionContext.evaluate(gatherTapTargets,{args:[Np,r],useIsolation:!0,deps:[Cp.getNodeDetailsString,Cp.getElementsInDocument,disableFixedAndStickyElementPointerEvents,elementIsVisible,elementHasAncestorTapTarget,elementCenterIsAtZAxisTop,getClientRects,hasTextNodeSiblingsFormingTextBlock,elementIsInTextBlock,Ip.getRectCenterPoint,Cp.getNodePath,Cp.getNodeSelector,Cp.getNodeLabel]})
499
499
  ;return await this.removeStyleRule(t,a),await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),n}};const Mp=eo,Pp=As;var Op=class ServiceWorker$1 extends Mp{meta={supportedModes:["navigation"]};async beforePass(e){return this.getArtifact({...e,dependencies:{}})}async afterPass(){}async getArtifact(e){const t=e.driver.defaultSession,{versions:r}=await Pp.getServiceWorkerVersions(t),{registrations:a}=await Pp.getServiceWorkerRegistrations(t);return{versions:r,registrations:a}}};const Fp=eo,Up=ji;var jp=class SourceMaps extends Fp{meta={supportedModes:["timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this.onScriptParsed=this.onScriptParsed.bind(this)}async fetchSourceMap(e,t){const r=await e.fetcher.fetchResource(t,{timeout:1500});if(null===r.content)throw new Error(`Failed fetching source map (${r.status})`);return JSON.parse(r.content)}parseSourceMapFromDataUrl(e){const t=Buffer.from(e.split(",")[1],"base64");return JSON.parse(t.toString())}
500
500
  onScriptParsed(e){e.sourceMapURL&&this._scriptParsedEvents.push(e)}_resolveUrl(e,t){try{return new Up(e,t).href}catch(e){return}}async _retrieveMapFromScriptParsedEvent(e,t){if(!t.sourceMapURL)throw new Error("precondition failed: event.sourceMapURL should exist");const r=t.sourceMapURL.startsWith("data:"),a=t.url,n=r?t.sourceMapURL:this._resolveUrl(t.sourceMapURL,t.url);if(!n)return{scriptUrl:a,errorMessage:`Could not resolve map url: ${t.sourceMapURL}`};const i=r?void 0:n;try{const t=r?this.parseSourceMapFromDataUrl(n):await this.fetchSourceMap(e,n);return t.sections&&(t.sections=t.sections.filter((e=>e.map))),{scriptUrl:a,sourceMapUrl:i,map:t}}catch(e){return{scriptUrl:a,sourceMapUrl:i,errorMessage:e.toString()}}}async startSensitiveInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopSensitiveInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Debugger.disable"),
501
- t.off("Debugger.scriptParsed",this.onScriptParsed)}async getArtifact(e){await e.driver.fetcher.enable();const t=this._scriptParsedEvents.map((t=>this._retrieveMapFromScriptParsedEvent(e.driver,t)));return Promise.all(t)}};const Bp=oo,$p=eo;var qp=class TraceCompat extends $p{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Bp.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}};const zp=vi.exports,Vp=ao;var Wp=class LHTraceProcessor$2 extends Vp{static createNoNavstartError(){return new zp(zp.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new zp(zp.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new zp(zp.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new zp(zp.errors.NO_FCP)}};const Gp=Ao,Hp=Wp;var Yp=Gp(class ProcessedTrace$h{static async compute_(e){return Hp.processTrace(e)}},null);const Kp=Ao,Jp=Wp;var Xp=Kp(class ProcessedNavigation$7{static async compute_(e){
501
+ t.off("Debugger.scriptParsed",this.onScriptParsed)}async getArtifact(e){await e.driver.fetcher.enable();const t=this._scriptParsedEvents.map((t=>this._retrieveMapFromScriptParsedEvent(e.driver,t)));return Promise.all(t)}};const Bp=oo,$p=eo;var qp=class TraceCompat extends $p{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Bp.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}};const zp=vi.exports,Vp=ao;var Wp=class LHTraceProcessor$2 extends Vp{static createNoNavstartError(){return new zp(zp.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new zp(zp.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new zp(zp.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new zp(zp.errors.NO_FCP)}};const Hp=Ao,Gp=Wp;var Yp=Hp(class ProcessedTrace$h{static async compute_(e){return Gp.processTrace(e)}},null);const Kp=Ao,Jp=Wp;var Xp=Kp(class ProcessedNavigation$7{static async compute_(e){
502
502
  return Jp.processNavigation(e)}},null);const Zp=Ao,Qp=Yp,eh=new Set(["keydown","keypress","keyup"]),th=new Set(["mousedown","mouseup","pointerdown","pointerup","click"]),rh={keyboard:eh,tapOrClick:th,drag:th};class Responsiveness{static getHighPercentileResponsiveness(e){const t=e.frameTreeEvents.filter((e=>"Responsiveness.Renderer.UserInteraction"===e.name)).sort(((e,t)=>t.args.data.maxDuration-e.args.data.maxDuration));if(0===t.length)return null;return t[Math.min(9,Math.floor(t.length/50))]}static findInteractionEvent(e,{traceEvents:t}){const r=t.filter((e=>"EventTiming"===e.name&&"e"!==e.ph));if(r.length&&!r.some((e=>e.args.data?.frame)))return{name:"FallbackTiming",duration:e.args.data.maxDuration};const{maxDuration:a,interactionType:n}=e.args.data;let i,o=Number.POSITIVE_INFINITY;for(const t of r){if(t.args.data.frame!==e.args.frame)continue;const{type:r,duration:s}=t.args.data,c=rh[n];if(!c)throw new Error(`unexpected responsiveness interactionType '${n}'`);if(!c.has(r))continue
503
503
  ;const l=Math.abs(s-a);l<o&&(i=t,o=l)}if(!i)throw new Error(`no interaction event found for responsiveness type '${n}'`);if(o>5)throw new Error(`no interaction event found within 5ms of responsiveness maxDuration (max: ${a}, closest ${i.args.data.duration})`);return i}static async compute_(e,t){const{settings:r,trace:a}=e;if("simulate"===r.throttlingMethod)throw new Error("Responsiveness currently unsupported by simulated throttling");const n=await Qp.request(a,t),i=Responsiveness.getHighPercentileResponsiveness(n);if(!i)return null;const o=Responsiveness.findInteractionEvent(i,a);return JSON.parse(JSON.stringify(o))}}var ah=Zp(Responsiveness,["trace","settings"]);const nh=eo,{resolveNodeIdToObjectId:ih}=Du,oh=hn,sh=kp,ch=Jl,lh=oo,uh=Yp,dh=Xp,mh=vi.exports,ph=ah;function getNodeDetailsData(){const e=this.nodeType===document.ELEMENT_NODE?this:this.parentElement;let t;return e&&(t={node:getNodeDetails(e)}),t}class TraceElements extends nh{meta={supportedModes:["timespan","navigation"],
504
504
  dependencies:{Trace:lh.symbol}};animationIdToName=new Map;constructor(){super(),this._onAnimationStarted=this._onAnimationStarted.bind(this)}_onAnimationStarted({animation:{id:e,name:t}}){t&&this.animationIdToName.set(e,t)}static traceRectToLHRect(e){const t={x:e[0],y:e[1],width:e[2],height:e[3]};return sh.addRectTopAndBottom(t)}static getTopLayoutShiftElements(e){const t=new Map,r=e.filter((e=>"LayoutShift"===e.name)).map((e=>e.args?.data)),a=r.findIndex((e=>e&&!e.had_recent_input));r.forEach(((e,r)=>{if(!e||!e.impacted_nodes||!e.score)return;if(-1!==a&&r>=a&&e.had_recent_input)return;let n=0;const i=new Map;e.impacted_nodes.forEach((e=>{if(!e.node_id||!e.old_rect||!e.new_rect)return;const t=TraceElements.traceRectToLHRect(e.old_rect),r=TraceElements.traceRectToLHRect(e.new_rect),a=sh.getRectArea(t)+sh.getRectArea(r)-sh.getRectOverlapArea(t,r);i.set(e.node_id,a),n+=a}));for(const[r,a]of i.entries()){let i=t.get(r)||0;i+=a/n*e.score,t.set(r,i)}}))
505
505
  ;return[...t.entries()].sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>({nodeId:e,score:t})))}static async getResponsivenessElement(e,t){const{settings:r}=t;try{const a=await ph.request({trace:e,settings:r},t);if(!a||"FallbackTiming"===a.name)return;return{nodeId:a.args.data.nodeId}}catch{return}}async getAnimatedElements(e){const t=new Map;for(const r of e){if("Animation"!==r.name)continue;if(!r.id2||!r.id2.local)continue;const e=r.id2.local,a=t.get(e)||{begin:void 0,status:void 0};"b"===r.ph?a.begin=r:"n"===r.ph&&r.args.data&&void 0!==r.args.data.compositeFailed&&(a.status=r),t.set(e,a)}const r=new Map;for(const{begin:e,status:a}of t.values()){const t=e?.args?.data?.nodeId,n=e?.args?.data?.id,i=a?.args?.data?.compositeFailed,o=a?.args?.data?.unsupportedProperties;if(!t||!n)continue;const s=r.get(t)||new Set;s.add({animationId:n,failureReasonsMask:i,unsupportedProperties:o}),r.set(t,s)}const a=[];for(const[e,t]of r){const r=[]
506
- ;for(const{animationId:e,failureReasonsMask:a,unsupportedProperties:n}of t){const t=this.animationIdToName.get(e);r.push({name:t,failureReasonsMask:a,unsupportedProperties:n})}a.push({nodeId:e,animations:r})}return a}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async _getArtifact(e,t){const r=e.driver.defaultSession;if(!t)throw new Error("Trace is missing!");const a=await uh.request(t,e),{largestContentfulPaintEvt:n}=await dh.request(a,e).catch((t=>{if("timespan"===e.gatherMode&&t.code===mh.errors.NO_FCP.code)return{largestContentfulPaintEvt:void 0};throw t
507
- })),{mainThreadEvents:i}=a,o=n?.args?.data?.nodeId,s=TraceElements.getTopLayoutShiftElements(i),c=await this.getAnimatedElements(i),l=await TraceElements.getResponsivenessElement(t,e),u=new Map([["largest-contentful-paint",o?[{nodeId:o}]:[]],["layout-shift",s],["animation",c],["responsiveness",l?[l]:[]]]),d=[];for(const[e,t]of u)for(let a=0;a<t.length;a++){const n=t[a].nodeId;let i;try{const e=await ih(r,n);if(!e)continue;i=await r.sendCommand("Runtime.callFunctionOn",{objectId:e,functionDeclaration:`function () {\n ${getNodeDetailsData.toString()};\n ${oh.getNodeDetailsString};\n return getNodeDetailsData.call(this);\n }`,returnByValue:!0,awaitPromise:!0})}catch(e){ch.captureException(e,{tags:{gatherer:this.name},level:"error"});continue}i?.result?.value&&d.push({traceEventType:e,...i.result.value,score:t[a].score,animations:t[a].animations,nodeId:n})}return d}async getArtifact(e){return this._getArtifact(e,e.dependencies.Trace)}
508
- async afterPass(e,t){const r={...e,dependencies:{}};return await this.stopInstrumentation(r),this._getArtifact(r,t.trace)}}var hh=TraceElements;const gh=eo;function getViewportDimensions(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var fh=class ViewportDimensions extends gh{meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){const t=e.driver,r=await t.executionContext.evaluate(getViewportDimensions,{args:[],useIsolation:!0});if(!Object.values(r).every(Number.isFinite)){const e=JSON.stringify(r);throw new Error(`ViewportDimensions results were not numeric: ${e}`)}return r}},yh={exports:{}},vh={exports:{}};const bh=kc,wh={failingElementsHeader:"Failing Elements"},Sh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/axe-audit.js",wh);vh.exports=class AxeAudit$I extends bh{static audit(e){
509
- if((e.Accessibility.notApplicable||[]).find((e=>e.id===this.meta.id)))return{score:null,notApplicable:!0};const t=e.Accessibility.incomplete||[],r=t.find((e=>e.id===this.meta.id));if(r?.error)return{score:null,errorMessage:`axe-core Error: ${r.error.message||"Unknown error"}`};const a=this.meta.scoreDisplayMode===bh.SCORING_MODES.INFORMATIVE,n=e.Accessibility.violations||[],i=(a?n.concat(t):n).find((e=>e.id===this.meta.id)),o=i?.impact,s=i?.tags;if(a&&!i)return{score:null,notApplicable:!0};let c=[];i?.nodes&&(c=i.nodes.map((e=>({node:{...bh.makeNodeItem(e.node),explanation:e.failureSummary},subItems:e.relatedNodes.length?{type:"subitems",items:e.relatedNodes.map((e=>({relatedNode:bh.makeNodeItem(e)})))}:void 0}))));const l=[{key:"node",itemType:"node",subItemsHeading:{key:"relatedNode",itemType:"node"},text:Sh(wh.failingElementsHeader)}];let u;return(o||s)&&(u={type:"debugdata",impact:o,tags:s}),{score:Number(void 0===i),details:{...bh.makeTableDetails(l,c),debugData:u}}}},
510
- vh.exports.UIStrings=wh;const Th=vh.exports,Eh={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/)."},xh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/accesskeys.js",Eh);yh.exports=class Accesskeys extends Th{static get meta(){return{id:"accesskeys",title:xh(Eh.title),failureTitle:xh(Eh.failureTitle),description:xh(Eh.description),requiredArtifacts:["Accessibility"]}}},yh.exports.UIStrings=Eh;var _h={exports:{}};const Ah=vh.exports,Rh={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/)."
506
+ ;for(const{animationId:e,failureReasonsMask:a,unsupportedProperties:n}of t){const t=this.animationIdToName.get(e);r.push({name:t,failureReasonsMask:a,unsupportedProperties:n})}a.push({nodeId:e,animations:r})}return a}static async getLcpElement(e,t){let r;try{r=await dh.request(e,t)}catch(e){if("timespan"===t.gatherMode&&e.code===mh.errors.NO_FCP.code)return;throw e}const a=r.largestContentfulPaintEvt?.args?.data;if(void 0!==a?.nodeId&&a.type)return{nodeId:a.nodeId,type:a.type}}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async _getArtifact(e,t){const r=e.driver.defaultSession;if(!t)throw new Error("Trace is missing!")
507
+ ;const a=await uh.request(t,e),{mainThreadEvents:n}=a,i=await TraceElements.getLcpElement(a,e),o=TraceElements.getTopLayoutShiftElements(n),s=await this.getAnimatedElements(n),c=await TraceElements.getResponsivenessElement(t,e),l=new Map([["largest-contentful-paint",i?[i]:[]],["layout-shift",o],["animation",s],["responsiveness",c?[c]:[]]]),u=[];for(const[e,t]of l)for(let a=0;a<t.length;a++){const n=t[a].nodeId;let i;try{const e=await ih(r,n);if(!e)continue;i=await r.sendCommand("Runtime.callFunctionOn",{objectId:e,functionDeclaration:`function () {\n ${getNodeDetailsData.toString()};\n ${oh.getNodeDetailsString};\n return getNodeDetailsData.call(this);\n }`,returnByValue:!0,awaitPromise:!0})}catch(e){ch.captureException(e,{tags:{gatherer:this.name},level:"error"});continue}i?.result?.value&&u.push({traceEventType:e,...i.result.value,score:t[a].score,animations:t[a].animations,nodeId:n,type:t[a].type})}return u}async getArtifact(e){
508
+ return this._getArtifact(e,e.dependencies.Trace)}async afterPass(e,t){const r={...e,dependencies:{}};return await this.stopInstrumentation(r),this._getArtifact(r,t.trace)}}var hh=TraceElements;const gh=eo;function getViewportDimensions(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var fh=class ViewportDimensions extends gh{meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){const t=e.driver,r=await t.executionContext.evaluate(getViewportDimensions,{args:[],useIsolation:!0});if(!Object.values(r).every(Number.isFinite)){const e=JSON.stringify(r);throw new Error(`ViewportDimensions results were not numeric: ${e}`)}return r}},yh={exports:{}},vh={exports:{}};const bh=kc,wh={failingElementsHeader:"Failing Elements"},Sh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/axe-audit.js",wh);vh.exports=class AxeAudit$I extends bh{
509
+ static audit(e){if((e.Accessibility.notApplicable||[]).find((e=>e.id===this.meta.id)))return{score:null,notApplicable:!0};const t=e.Accessibility.incomplete||[],r=t.find((e=>e.id===this.meta.id));if(r?.error)return{score:null,errorMessage:`axe-core Error: ${r.error.message||"Unknown error"}`};const a=this.meta.scoreDisplayMode===bh.SCORING_MODES.INFORMATIVE,n=e.Accessibility.violations||[],i=(a?n.concat(t):n).find((e=>e.id===this.meta.id)),o=i?.impact,s=i?.tags;if(a&&!i)return{score:null,notApplicable:!0};let c=[];i?.nodes&&(c=i.nodes.map((e=>({node:{...bh.makeNodeItem(e.node),explanation:e.failureSummary},subItems:e.relatedNodes.length?{type:"subitems",items:e.relatedNodes.map((e=>({relatedNode:bh.makeNodeItem(e)})))}:void 0}))));const l=[{key:"node",itemType:"node",subItemsHeading:{key:"relatedNode",itemType:"node"},text:Sh(wh.failingElementsHeader)}];let u;return(o||s)&&(u={type:"debugdata",impact:o,tags:s}),{score:Number(void 0===i),details:{...bh.makeTableDetails(l,c),debugData:u}
510
+ }}},vh.exports.UIStrings=wh;const Th=vh.exports,Eh={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/)."},xh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/accesskeys.js",Eh);yh.exports=class Accesskeys extends Th{static get meta(){return{id:"accesskeys",title:xh(Eh.title),failureTitle:xh(Eh.failureTitle),description:xh(Eh.description),requiredArtifacts:["Accessibility"]}}},yh.exports.UIStrings=Eh;var _h={exports:{}};const Ah=vh.exports,Rh={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/)."
511
511
  },kh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-allowed-attr.js",Rh);_h.exports=class ARIAAllowedAttr extends Ah{static get meta(){return{id:"aria-allowed-attr",title:kh(Rh.title),failureTitle:kh(Rh.failureTitle),description:kh(Rh.description),requiredArtifacts:["Accessibility"]}}},_h.exports.UIStrings=Rh;var Dh={exports:{}};const Ch=vh.exports,Ih={title:"`button`, `link`, and `menuitem` elements have accessible names",failureTitle:"`button`, `link`, and `menuitem` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Nh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-command-name.js",Ih);Dh.exports=class AriaCommandName extends Ch{static get meta(){return{id:"aria-command-name",title:Nh(Ih.title),failureTitle:Nh(Ih.failureTitle),
512
512
  description:Nh(Ih.description),requiredArtifacts:["Accessibility"]}}},Dh.exports.UIStrings=Ih;var Lh={exports:{}};const Mh=vh.exports,Ph={title:'`[aria-hidden="true"]` is not present on the document `<body>`',failureTitle:'`[aria-hidden="true"]` is present on the document `<body>`',description:'Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. [Learn more](https://web.dev/aria-hidden-body/).'},Oh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-hidden-body.js",Ph);Lh.exports=class AriaHiddenBody extends Mh{static get meta(){return{id:"aria-hidden-body",title:Oh(Ph.title),failureTitle:Oh(Ph.failureTitle),description:Oh(Ph.description),requiredArtifacts:["Accessibility"]}}},Lh.exports.UIStrings=Ph;var Fh={exports:{}};const Uh=vh.exports,jh={title:'`[aria-hidden="true"]` elements do not contain focusable descendents',failureTitle:'`[aria-hidden="true"]` elements contain focusable descendents',
513
513
  description:'Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn more](https://web.dev/aria-hidden-focus/).'},Bh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-hidden-focus.js",jh);Fh.exports=class AriaHiddenFocus extends Uh{static get meta(){return{id:"aria-hidden-focus",title:Bh(jh.title),failureTitle:Bh(jh.failureTitle),description:Bh(jh.description),requiredArtifacts:["Accessibility"]}}},Fh.exports.UIStrings=jh;var $h={exports:{}};const qh=vh.exports,zh={title:"ARIA input fields have accessible names",failureTitle:"ARIA input fields do not have accessible names",description:"When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."
514
- },Vh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-input-field-name.js",zh);$h.exports=class AriaInputFieldName extends qh{static get meta(){return{id:"aria-input-field-name",title:Vh(zh.title),failureTitle:Vh(zh.failureTitle),description:Vh(zh.description),requiredArtifacts:["Accessibility"]}}},$h.exports.UIStrings=zh;var Wh={exports:{}};const Gh=vh.exports,Hh={title:"ARIA `meter` elements have accessible names",failureTitle:"ARIA `meter` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Yh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-meter-name.js",Hh);Wh.exports=class AriaMeterName extends Gh{static get meta(){return{id:"aria-meter-name",title:Yh(Hh.title),failureTitle:Yh(Hh.failureTitle),description:Yh(Hh.description),
515
- requiredArtifacts:["Accessibility"]}}},Wh.exports.UIStrings=Hh;var Kh={exports:{}};const Jh=vh.exports,Xh={title:"ARIA `progressbar` elements have accessible names",failureTitle:"ARIA `progressbar` elements do not have accessible names.",description:"When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Zh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-progressbar-name.js",Xh);Kh.exports=class AriaProgressbarName extends Jh{static get meta(){return{id:"aria-progressbar-name",title:Zh(Xh.title),failureTitle:Zh(Xh.failureTitle),description:Zh(Xh.description),requiredArtifacts:["Accessibility"]}}},Kh.exports.UIStrings=Xh;var Qh={exports:{}};const eg=vh.exports,tg={title:"`[role]`s have all required `[aria-*]` attributes",failureTitle:"`[role]`s do not have all required `[aria-*]` attributes",
514
+ },Vh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-input-field-name.js",zh);$h.exports=class AriaInputFieldName extends qh{static get meta(){return{id:"aria-input-field-name",title:Vh(zh.title),failureTitle:Vh(zh.failureTitle),description:Vh(zh.description),requiredArtifacts:["Accessibility"]}}},$h.exports.UIStrings=zh;var Wh={exports:{}};const Hh=vh.exports,Gh={title:"ARIA `meter` elements have accessible names",failureTitle:"ARIA `meter` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Yh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-meter-name.js",Gh);Wh.exports=class AriaMeterName extends Hh{static get meta(){return{id:"aria-meter-name",title:Yh(Gh.title),failureTitle:Yh(Gh.failureTitle),description:Yh(Gh.description),
515
+ requiredArtifacts:["Accessibility"]}}},Wh.exports.UIStrings=Gh;var Kh={exports:{}};const Jh=vh.exports,Xh={title:"ARIA `progressbar` elements have accessible names",failureTitle:"ARIA `progressbar` elements do not have accessible names.",description:"When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Zh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-progressbar-name.js",Xh);Kh.exports=class AriaProgressbarName extends Jh{static get meta(){return{id:"aria-progressbar-name",title:Zh(Xh.title),failureTitle:Zh(Xh.failureTitle),description:Zh(Xh.description),requiredArtifacts:["Accessibility"]}}},Kh.exports.UIStrings=Xh;var Qh={exports:{}};const eg=vh.exports,tg={title:"`[role]`s have all required `[aria-*]` attributes",failureTitle:"`[role]`s do not have all required `[aria-*]` attributes",
516
516
  description:"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more](https://web.dev/aria-required-attr/)."},rg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-attr.js",tg);Qh.exports=class ARIARequiredAttr extends eg{static get meta(){return{id:"aria-required-attr",title:rg(tg.title),failureTitle:rg(tg.failureTitle),description:rg(tg.description),requiredArtifacts:["Accessibility"]}}},Qh.exports.UIStrings=tg;var ag={exports:{}};const ng=vh.exports,ig={title:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",failureTitle:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` are missing some or all of those required children.",description:"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-children/)."
517
517
  },og=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-children.js",ig);ag.exports=class AriaRequiredChildren extends ng{static get meta(){return{id:"aria-required-children",title:og(ig.title),failureTitle:og(ig.failureTitle),description:og(ig.description),requiredArtifacts:["Accessibility"]}}},ag.exports.UIStrings=ig;var sg={exports:{}};const cg=vh.exports,lg={title:"`[role]`s are contained by their required parent element",failureTitle:"`[role]`s are not contained by their required parent element",description:"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-parent/)."},ug=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-parent.js",lg);sg.exports=class AriaRequiredParent extends cg{static get meta(){return{id:"aria-required-parent",title:ug(lg.title),failureTitle:ug(lg.failureTitle),
518
518
  description:ug(lg.description),requiredArtifacts:["Accessibility"]}}},sg.exports.UIStrings=lg;var dg={exports:{}};const mg=vh.exports,pg={title:"`[role]` values are valid",failureTitle:"`[role]` values are not valid",description:"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more](https://web.dev/aria-roles/)."},hg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-roles.js",pg);dg.exports=class AriaRoles extends mg{static get meta(){return{id:"aria-roles",title:hg(pg.title),failureTitle:hg(pg.failureTitle),description:hg(pg.description),requiredArtifacts:["Accessibility"]}}},dg.exports.UIStrings=pg;var gg={exports:{}};const fg=vh.exports,yg={title:"ARIA toggle fields have accessible names",failureTitle:"ARIA toggle fields do not have accessible names",
@@ -521,8 +521,8 @@ description:"When a toggle field doesn't have an accessible name, screen readers
521
521
  requiredArtifacts:["Accessibility"]}}},Eg.exports.UIStrings=_g;var Rg={exports:{}};const kg=vh.exports,Dg={title:"`[aria-*]` attributes have valid values",failureTitle:"`[aria-*]` attributes do not have valid values",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more](https://web.dev/aria-valid-attr-value/)."},Cg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-valid-attr-value.js",Dg);Rg.exports=class ARIAValidAttr$1 extends kg{static get meta(){return{id:"aria-valid-attr-value",title:Cg(Dg.title),failureTitle:Cg(Dg.failureTitle),description:Cg(Dg.description),requiredArtifacts:["Accessibility"]}}},Rg.exports.UIStrings=Dg;var Ig={exports:{}};const Ng=vh.exports,Lg={title:"`[aria-*]` attributes are valid and not misspelled",failureTitle:"`[aria-*]` attributes are not valid or misspelled",
522
522
  description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more](https://web.dev/aria-valid-attr/)."},Mg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-valid-attr.js",Lg);Ig.exports=class ARIAValidAttr extends Ng{static get meta(){return{id:"aria-valid-attr",title:Mg(Lg.title),failureTitle:Mg(Lg.failureTitle),description:Mg(Lg.description),requiredArtifacts:["Accessibility"]}}},Ig.exports.UIStrings=Lg;var Pg={exports:{}};const Og=vh.exports,Fg={title:"Buttons have an accessible name",failureTitle:"Buttons do not have an accessible name",description:'When a button doesn\'t have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. [Learn more](https://web.dev/button-name/).'},Ug=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/button-name.js",Fg);Pg.exports=class ButtonName extends Og{static get meta(){return{
523
523
  id:"button-name",title:Ug(Fg.title),failureTitle:Ug(Fg.failureTitle),description:Ug(Fg.description),requiredArtifacts:["Accessibility"]}}},Pg.exports.UIStrings=Fg;var jg={exports:{}};const Bg=vh.exports,$g={title:"The page contains a heading, skip link, or landmark region",failureTitle:"The page does not contain a heading, skip link, or landmark region",description:"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more](https://web.dev/bypass/)."},qg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/bypass.js",$g);jg.exports=class Bypass extends Bg{static get meta(){return{id:"bypass",title:qg($g.title),failureTitle:qg($g.failureTitle),description:qg($g.description),requiredArtifacts:["Accessibility"]}}},jg.exports.UIStrings=$g;var zg={exports:{}};const Vg=vh.exports,Wg={title:"Background and foreground colors have a sufficient contrast ratio",
524
- failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/)."},Gg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/color-contrast.js",Wg);zg.exports=class ColorContrast extends Vg{static get meta(){return{id:"color-contrast",title:Gg(Wg.title),failureTitle:Gg(Wg.failureTitle),description:Gg(Wg.description),requiredArtifacts:["Accessibility"]}}},zg.exports.UIStrings=Wg;var Hg={exports:{}};const Yg=vh.exports,Kg={title:"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",failureTitle:"`<dl>`'s do not contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
525
- description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/)."},Jg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/definition-list.js",Kg);Hg.exports=class DefinitionList extends Yg{static get meta(){return{id:"definition-list",title:Jg(Kg.title),failureTitle:Jg(Kg.failureTitle),description:Jg(Kg.description),requiredArtifacts:["Accessibility"]}}},Hg.exports.UIStrings=Kg;var Xg={exports:{}};const Zg=vh.exports,Qg={title:"Definition list items are wrapped in `<dl>` elements",failureTitle:"Definition list items are not wrapped in `<dl>` elements",description:"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn more](https://web.dev/dlitem/)."},ef=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/dlitem.js",Qg);Xg.exports=class DLItem extends Zg{
524
+ failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/)."},Hg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/color-contrast.js",Wg);zg.exports=class ColorContrast extends Vg{static get meta(){return{id:"color-contrast",title:Hg(Wg.title),failureTitle:Hg(Wg.failureTitle),description:Hg(Wg.description),requiredArtifacts:["Accessibility"]}}},zg.exports.UIStrings=Wg;var Gg={exports:{}};const Yg=vh.exports,Kg={title:"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",failureTitle:"`<dl>`'s do not contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
525
+ description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/)."},Jg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/definition-list.js",Kg);Gg.exports=class DefinitionList extends Yg{static get meta(){return{id:"definition-list",title:Jg(Kg.title),failureTitle:Jg(Kg.failureTitle),description:Jg(Kg.description),requiredArtifacts:["Accessibility"]}}},Gg.exports.UIStrings=Kg;var Xg={exports:{}};const Zg=vh.exports,Qg={title:"Definition list items are wrapped in `<dl>` elements",failureTitle:"Definition list items are not wrapped in `<dl>` elements",description:"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn more](https://web.dev/dlitem/)."},ef=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/dlitem.js",Qg);Xg.exports=class DLItem extends Zg{
526
526
  static get meta(){return{id:"dlitem",title:ef(Qg.title),failureTitle:ef(Qg.failureTitle),description:ef(Qg.description),requiredArtifacts:["Accessibility"]}}},Xg.exports.UIStrings=Qg;var tf={exports:{}};const rf=vh.exports,af={title:"Document has a `<title>` element",failureTitle:"Document doesn't have a `<title>` element",description:"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more](https://web.dev/document-title/)."},nf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/document-title.js",af);tf.exports=class DocumentTitle extends rf{static get meta(){return{id:"document-title",title:nf(af.title),failureTitle:nf(af.failureTitle),description:nf(af.description),requiredArtifacts:["Accessibility"]}}},tf.exports.UIStrings=af;var of={exports:{}};const sf=vh.exports,cf={title:"`[id]` attributes on active, focusable elements are unique",
527
527
  failureTitle:"`[id]` attributes on active, focusable elements are not unique",description:"All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn more](https://web.dev/duplicate-id-active/)."},lf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/duplicate-id-active.js",cf);of.exports=class DuplicateIdActive extends sf{static get meta(){return{id:"duplicate-id-active",title:lf(cf.title),failureTitle:lf(cf.failureTitle),description:lf(cf.description),requiredArtifacts:["Accessibility"]}}},of.exports.UIStrings=cf;var uf={exports:{}};const df=vh.exports,mf={title:"ARIA IDs are unique",failureTitle:"ARIA IDs are not unique",description:"The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn more](https://web.dev/duplicate-id-aria/)."},pf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/duplicate-id-aria.js",mf)
528
528
  ;uf.exports=class DuplicateIdAria extends df{static get meta(){return{id:"duplicate-id-aria",title:pf(mf.title),failureTitle:pf(mf.failureTitle),description:pf(mf.description),requiredArtifacts:["Accessibility"]}}},uf.exports.UIStrings=mf;var hf={exports:{}};const gf=vh.exports,ff={title:"No form fields have multiple labels",failureTitle:"Form fields have multiple labels",description:"Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn more](https://web.dev/form-field-multiple-labels/)."},yf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/form-field-multiple-labels.js",ff);hf.exports=class FormFieldMultipleLabels extends gf{static get meta(){return{id:"form-field-multiple-labels",title:yf(ff.title),failureTitle:yf(ff.failureTitle),description:yf(ff.description),scoreDisplayMode:gf.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},
@@ -531,8 +531,8 @@ description:"Properly ordered headings that do not skip levels convey the semant
531
531
  description:"If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more](https://web.dev/html-has-lang/)."},Df=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/html-has-lang.js",kf);Af.exports=class HTMLHasLang extends Rf{static get meta(){return{id:"html-has-lang",title:Df(kf.title),failureTitle:Df(kf.failureTitle),description:Df(kf.description),requiredArtifacts:["Accessibility"]}}},Af.exports.UIStrings=kf;var Cf={exports:{}};const If=vh.exports,Nf={title:"`<html>` element has a valid value for its `[lang]` attribute",failureTitle:"`<html>` element does not have a valid value for its `[lang]` attribute.",
532
532
  description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn more](https://web.dev/html-lang-valid/)."},Lf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/html-lang-valid.js",Nf);Cf.exports=class HTMLLangValid extends If{static get meta(){return{id:"html-lang-valid",title:Lf(Nf.title),failureTitle:Lf(Nf.failureTitle),description:Lf(Nf.description),requiredArtifacts:["Accessibility"]}}},Cf.exports.UIStrings=Nf;var Mf={exports:{}};const Pf=vh.exports,Of={title:"Image elements have `[alt]` attributes",failureTitle:"Image elements do not have `[alt]` attributes",description:"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more](https://web.dev/image-alt/)."},Ff=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/image-alt.js",Of)
533
533
  ;Mf.exports=class ImageAlt extends Pf{static get meta(){return{id:"image-alt",title:Ff(Of.title),failureTitle:Ff(Of.failureTitle),description:Ff(Of.description),requiredArtifacts:["Accessibility"]}}},Mf.exports.UIStrings=Of;var Uf={exports:{}};const jf=vh.exports,Bf={title:'`<input type="image">` elements have `[alt]` text',failureTitle:'`<input type="image">` elements do not have `[alt]` text',description:"When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn more](https://web.dev/input-image-alt/)."},$f=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/input-image-alt.js",Bf);Uf.exports=class InputImageAlt extends jf{static get meta(){return{id:"input-image-alt",title:$f(Bf.title),failureTitle:$f(Bf.failureTitle),description:$f(Bf.description),requiredArtifacts:["Accessibility"]}}},Uf.exports.UIStrings=Bf;var qf={exports:{}};const zf=vh.exports,Vf={
534
- title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/)."},Wf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/label.js",Vf);qf.exports=class Label extends zf{static get meta(){return{id:"label",title:Wf(Vf.title),failureTitle:Wf(Vf.failureTitle),description:Wf(Vf.description),requiredArtifacts:["Accessibility"]}}},qf.exports.UIStrings=Vf;var Gf={exports:{}};const Hf=vh.exports,Yf={title:"Links have a discernible name",failureTitle:"Links do not have a discernible name",description:"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://web.dev/link-name/)."
535
- },Kf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/link-name.js",Yf);Gf.exports=class LinkName extends Hf{static get meta(){return{id:"link-name",title:Kf(Yf.title),failureTitle:Kf(Yf.failureTitle),description:Kf(Yf.description),requiredArtifacts:["Accessibility"]}}},Gf.exports.UIStrings=Yf;var Jf={exports:{}};const Xf=vh.exports,Zf={title:"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",failureTitle:"Lists do not contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",description:"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://web.dev/list/)."},Qf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/list.js",Zf);Jf.exports=class List extends Xf{static get meta(){return{id:"list",title:Qf(Zf.title),failureTitle:Qf(Zf.failureTitle),description:Qf(Zf.description),
534
+ title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/)."},Wf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/label.js",Vf);qf.exports=class Label extends zf{static get meta(){return{id:"label",title:Wf(Vf.title),failureTitle:Wf(Vf.failureTitle),description:Wf(Vf.description),requiredArtifacts:["Accessibility"]}}},qf.exports.UIStrings=Vf;var Hf={exports:{}};const Gf=vh.exports,Yf={title:"Links have a discernible name",failureTitle:"Links do not have a discernible name",description:"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://web.dev/link-name/)."
535
+ },Kf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/link-name.js",Yf);Hf.exports=class LinkName extends Gf{static get meta(){return{id:"link-name",title:Kf(Yf.title),failureTitle:Kf(Yf.failureTitle),description:Kf(Yf.description),requiredArtifacts:["Accessibility"]}}},Hf.exports.UIStrings=Yf;var Jf={exports:{}};const Xf=vh.exports,Zf={title:"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",failureTitle:"Lists do not contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",description:"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://web.dev/list/)."},Qf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/list.js",Zf);Jf.exports=class List extends Xf{static get meta(){return{id:"list",title:Qf(Zf.title),failureTitle:Qf(Zf.failureTitle),description:Qf(Zf.description),
536
536
  requiredArtifacts:["Accessibility"]}}},Jf.exports.UIStrings=Zf;var ey={exports:{}};const ty=vh.exports,ry={title:"List items (`<li>`) are contained within `<ul>` or `<ol>` parent elements",failureTitle:"List items (`<li>`) are not contained within `<ul>` or `<ol>` parent elements.",description:"Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. [Learn more](https://web.dev/listitem/)."},ay=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/listitem.js",ry);ey.exports=class ListItem extends ty{static get meta(){return{id:"listitem",title:ay(ry.title),failureTitle:ay(ry.failureTitle),description:ay(ry.description),requiredArtifacts:["Accessibility"]}}},ey.exports.UIStrings=ry;const ny=kc;var iy=class ManualAudit$e extends ny{static get partialMeta(){return{scoreDisplayMode:ny.SCORING_MODES.MANUAL,requiredArtifacts:[]}}static audit(){return{score:0}}};const oy=iy
537
537
  ;var sy=class CustomControlsLabels extends oy{static get meta(){return Object.assign({id:"custom-controls-labels",description:"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://web.dev/custom-controls-labels/).",title:"Custom controls have associated labels"},super.partialMeta)}};const cy=iy;var ly=class CustomControlsRoles extends cy{static get meta(){return Object.assign({id:"custom-controls-roles",description:"Custom interactive controls have appropriate ARIA roles. [Learn more](https://web.dev/custom-control-roles/).",title:"Custom controls have ARIA roles"},super.partialMeta)}};const uy=iy;var dy=class FocusTraps extends uy{static get meta(){return Object.assign({id:"focus-traps",description:"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://web.dev/focus-traps/).",title:"User focus is not accidentally trapped in a region"},super.partialMeta)}}
538
538
  ;const my=iy;var py=class FocusableControls extends my{static get meta(){return Object.assign({id:"focusable-controls",description:"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://web.dev/focusable-controls/).",title:"Interactive controls are keyboard focusable"},super.partialMeta)}};const hy=iy;var gy=class InteractiveElementAffordance extends hy{static get meta(){return Object.assign({id:"interactive-element-affordance",description:"Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn more](https://web.dev/interactive-element-affordance/).",title:"Interactive elements indicate their purpose and state"},super.partialMeta)}};const fy=iy;var yy=class LogicalTabOrder extends fy{static get meta(){return Object.assign({id:"logical-tab-order",
@@ -541,8 +541,8 @@ return Object.assign({id:"use-landmarks",description:"Landmark elements (<main>,
541
541
  description:"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more](https://web.dev/meta-refresh/)."},Dy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/meta-refresh.js",ky);Ay.exports=class MetaRefresh extends Ry{static get meta(){return{id:"meta-refresh",title:Dy(ky.title),failureTitle:Dy(ky.failureTitle),description:Dy(ky.description),requiredArtifacts:["Accessibility"]}}},Ay.exports.UIStrings=ky;var Cy={exports:{}};const Iy=vh.exports,Ny={title:'`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.',failureTitle:'`[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.',
542
542
  description:"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more](https://web.dev/meta-viewport/)."},Ly=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/meta-viewport.js",Ny);Cy.exports=class MetaViewport extends Iy{static get meta(){return{id:"meta-viewport",title:Ly(Ny.title),failureTitle:Ly(Ny.failureTitle),description:Ly(Ny.description),requiredArtifacts:["Accessibility"]}}},Cy.exports.UIStrings=Ny;var My={exports:{}};const Py=vh.exports,Oy={title:"`<object>` elements have alternate text",failureTitle:"`<object>` elements do not have alternate text",description:"Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more](https://web.dev/object-alt/)."},Fy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/object-alt.js",Oy);My.exports=class ObjectAlt extends Py{
543
543
  static get meta(){return{id:"object-alt",title:Fy(Oy.title),failureTitle:Fy(Oy.failureTitle),description:Fy(Oy.description),requiredArtifacts:["Accessibility"]}}},My.exports.UIStrings=Oy;var Uy={exports:{}};const jy=vh.exports,By={title:"No element has a `[tabindex]` value greater than 0",failureTitle:"Some elements have a `[tabindex]` value greater than 0",description:"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more](https://web.dev/tabindex/)."},$y=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/tabindex.js",By);Uy.exports=class TabIndex extends jy{static get meta(){return{id:"tabindex",title:$y(By.title),failureTitle:$y(By.failureTitle),description:$y(By.description),requiredArtifacts:["Accessibility"]}}},Uy.exports.UIStrings=By;var qy={exports:{}};const zy=vh.exports,Vy={
544
- title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/)."},Wy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/td-headers-attr.js",Vy);qy.exports=class TDHeadersAttr extends zy{static get meta(){return{id:"td-headers-attr",title:Wy(Vy.title),failureTitle:Wy(Vy.failureTitle),description:Wy(Vy.description),requiredArtifacts:["Accessibility"]}}},qy.exports.UIStrings=Vy;var Gy={exports:{}};const Hy=vh.exports,Yy={
545
- title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/)."},Ky=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/th-has-data-cells.js",Yy);Gy.exports=class THHasDataCells extends Hy{static get meta(){return{id:"th-has-data-cells",title:Ky(Yy.title),failureTitle:Ky(Yy.failureTitle),description:Ky(Yy.description),requiredArtifacts:["Accessibility"]}}},Gy.exports.UIStrings=Yy;var Jy={exports:{}};const Xy=vh.exports,Zy={title:"`[lang]` attributes have a valid value",failureTitle:"`[lang]` attributes do not have a valid value",
544
+ title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/)."},Wy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/td-headers-attr.js",Vy);qy.exports=class TDHeadersAttr extends zy{static get meta(){return{id:"td-headers-attr",title:Wy(Vy.title),failureTitle:Wy(Vy.failureTitle),description:Wy(Vy.description),requiredArtifacts:["Accessibility"]}}},qy.exports.UIStrings=Vy;var Hy={exports:{}};const Gy=vh.exports,Yy={
545
+ title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/)."},Ky=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/th-has-data-cells.js",Yy);Hy.exports=class THHasDataCells extends Gy{static get meta(){return{id:"th-has-data-cells",title:Ky(Yy.title),failureTitle:Ky(Yy.failureTitle),description:Ky(Yy.description),requiredArtifacts:["Accessibility"]}}},Hy.exports.UIStrings=Yy;var Jy={exports:{}};const Xy=vh.exports,Zy={title:"`[lang]` attributes have a valid value",failureTitle:"`[lang]` attributes do not have a valid value",
546
546
  description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn more](https://web.dev/valid-lang/)."},Qy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/valid-lang.js",Zy);Jy.exports=class ValidLang extends Xy{static get meta(){return{id:"valid-lang",title:Qy(Zy.title),failureTitle:Qy(Zy.failureTitle),description:Qy(Zy.description),requiredArtifacts:["Accessibility"]}}},Jy.exports.UIStrings=Zy;var ev={exports:{}};const tv=vh.exports,rv={title:'`<video>` elements contain a `<track>` element with `[kind="captions"]`',failureTitle:'`<video>` elements do not contain a `<track>` element with `[kind="captions"]`.',description:"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more](https://web.dev/video-caption/)."
547
547
  },av=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/video-caption.js",rv);ev.exports=class VideoCaption extends tv{static get meta(){return{id:"video-caption",title:av(rv.title),failureTitle:av(rv.failureTitle),description:av(rv.description),requiredArtifacts:["Accessibility"]}}},ev.exports.UIStrings=rv;var nv={exports:{}};const iv=kc,ov={title:"Provides a valid `apple-touch-icon`",failureTitle:"Does not provide a valid `apple-touch-icon`",description:"For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. [Learn More](https://web.dev/apple-touch-icon/).",precomposedWarning:"`apple-touch-icon-precomposed` is out of date; `apple-touch-icon` is preferred."},sv=oi.createMessageInstanceIdFn("lighthouse-core/audits/apple-touch-icon.js",ov);nv.exports=class AppleTouchIcon extends iv{static get meta(){return{id:"apple-touch-icon",title:sv(ov.title),
548
548
  failureTitle:sv(ov.failureTitle),description:sv(ov.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements"]}}static audit(e){const t=e.LinkElements.filter((e=>"apple-touch-icon"===e.rel||"apple-touch-icon-precomposed"===e.rel)).filter((e=>!!e.href)),r=0!==t.length,a=[];return 0!==t.filter((e=>"apple-touch-icon-precomposed"===e.rel)).length&&0===t.filter((e=>"apple-touch-icon"===e.rel)).length&&a.push(sv(ov.precomposedWarning)),{score:r?1:0,warnings:a}}},nv.exports.UIStrings=ov;var cv={exports:{}};const lv=kc,uv=oi,dv=on.default,mv={title:"`<input>` elements correctly use `autocomplete`",failureTitle:"`<input>` elements do not have correct `autocomplete` attributes",description:"`autocomplete` helps users submit forms quicker. To reduce user effort, consider enabling by setting the `autocomplete` attribute to a valid value. [Learn more](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)",
@@ -567,12 +567,12 @@ getAttributableURLForTask:getAttributableURLForTask$2,getExecutionTimingsByURL:f
567
567
  },jv=Mv.createMessageInstanceIdFn("lighthouse-core/audits/bootup-time.js",Uv);class BootupTime extends Nv{static get meta(){return{id:"bootup-time",title:jv(Uv.title),failureTitle:jv(Uv.failureTitle),description:jv(Uv.description),scoreDisplayMode:Nv.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{p10:1282,median:3500,thresholdInMs:50}}static async audit(e,t){const r=t.settings||{},a=e.traces[BootupTime.DEFAULT_PASS],n=e.devtoolsLogs[BootupTime.DEFAULT_PASS],i=await Pv.request(n,t),o=await Ov.request(a,t),s="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,c=Fv(o,i);let l=!1,u=0;const d=Array.from(c).map((([e,r])=>{let a=0;for(const[e,t]of Object.entries(r))r[e]=t*s,a+=t*s;const n=r[Lv.scriptEvaluation.id]||0,i=r[Lv.scriptParseCompile.id]||0;return a>=t.options.thresholdInMs&&(u+=n+i),l=l||e.startsWith("chrome-extension:")&&n>100,{url:e,total:a,scripting:n,scriptParseCompile:i}
568
568
  })).filter((e=>e.total>=t.options.thresholdInMs)).sort(((e,t)=>t.total-e.total));let m;l&&(m=[jv(Uv.chromeExtensionsWarning)]);const p={wastedMs:u},h=[{key:"url",itemType:"url",text:jv(Mv.UIStrings.columnURL)},{key:"total",granularity:1,itemType:"ms",text:jv(Uv.columnTotal)},{key:"scripting",granularity:1,itemType:"ms",text:jv(Uv.columnScriptEval)},{key:"scriptParseCompile",granularity:1,itemType:"ms",text:jv(Uv.columnScriptParse)}],f=BootupTime.makeTableDetails(h,d,p);return{score:Nv.computeLogNormalScore({p10:t.options.p10,median:t.options.median},u),numericValue:u,numericUnit:"millisecond",displayValue:u>0?jv(Mv.UIStrings.seconds,{timeInMs:u}):"",details:f,runWarnings:m}}}yv.exports=BootupTime,yv.exports.UIStrings=Uv;var Bv={exports:{}};const $v=Zc,qv=Ki;class NetworkNode$1 extends $v{constructor(e){super(e.requestId),this._record=e}get type(){return $v.TYPES.NETWORK}get startTime(){return 1e3*this._record.startTime*1e3}get endTime(){return 1e3*this._record.endTime*1e3}get record(){
569
569
  return this._record}get initiatorType(){return this._record.initiator&&this._record.initiator.type}get fromDiskCache(){return!!this._record.fromDiskCache}get isNonNetworkProtocol(){return qv.isNonNetworkRequest(this._record)}get isConnectionless(){return this.fromDiskCache||this.isNonNetworkProtocol}hasRenderBlockingPriority(){const e=this._record.priority,t=this._record.resourceType===qv.TYPES.Script,r=this._record.resourceType===qv.TYPES.Document;return"VeryHigh"===e||"High"===e&&t||"High"===e&&r}cloneWithoutRelationships(){const e=new NetworkNode$1(this._record);return e.setIsMainDocument(this._isMainDocument),e}}var zv=NetworkNode$1;const Vv=Zc;class CPUNode$1 extends Vv{constructor(e,t=[]){super(`${e.tid}.${e.ts}`),this._event=e,this._childEvents=t}get type(){return Vv.TYPES.CPU}get startTime(){return this._event.ts}get endTime(){return this._event.ts+this._event.dur}get event(){return this._event}get childEvents(){return this._childEvents}didPerformLayout(){
570
- return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data&&t.args.data.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new CPUNode$1(this._event,this._childEvents)}}const Wv=Ao,Gv=zv,Hv=CPUNode$1,Yv=Fo,Kv=ao,Jv=Ki,Xv=Yp,Zv=Lo,Qv=/^video/;class PageDependencyGraph$a{static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if("script"===e.initiator.type){const t=new Set;let r=e.initiator.stack;for(;r;){const e=r.callFrames||[];for(const r of e)r.url&&t.add(r.url);r=r.parent}return Array.from(t)}return[]}static getNetworkNodeOutput(e){const t=[],r=new Map,a=new Map,n=new Map;return e.forEach((e=>{if(Qv.test(e.mimeType))return;for(;r.has(e.requestId);)e.requestId+=":duplicate";const i=new Gv(e);t.push(i);const o=a.get(e.url)||[];if(o.push(i),r.set(e.requestId,i),a.set(e.url,o),
571
- e.frameId&&e.resourceType===Jv.TYPES.Document&&e.documentURL===e.url){const t=n.has(e.frameId)?null:i;n.set(e.frameId,t)}})),{nodes:t,idToNodeMap:r,urlToNodeMap:a,frameIdToNodeMap:n}}static getCPUNodes({mainThreadEvents:e}){const t=[];let r=0;for(Kv.assertHasToplevelEvents(e);r<e.length;){const a=e[r];if(r++,!Kv.isScheduleableTask(a)||!a.dur)continue;const n=[];for(const t=a.ts+a.dur;r<e.length&&e[r].ts<t;r++)n.push(e[r]);t.push(new Hv(a,n))}return t}static linkNetworkNodes(e,t){t.nodes.forEach((r=>{const a=r.record.initiatorRequest||e.record,n=t.idToNodeMap.get(a.requestId)||e,i=!n.isDependentOn(r)&&r.canDependOn(n),o=PageDependencyGraph$a.getNetworkInitiators(r.record);if(o.length?o.forEach((e=>{const a=t.urlToNodeMap.get(e)||[];1===a.length&&a[0].startTime<=r.startTime&&!a[0].isDependentOn(r)?r.addDependency(a[0]):i&&n.addDependent(r)})):i&&n.addDependent(r),r!==e&&0===r.getDependencies().length&&r.canDependOn(e)&&r.addDependency(e),!r.record.redirects)return
570
+ return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data&&t.args.data.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new CPUNode$1(this._event,this._childEvents)}}const Wv=Ao,Hv=zv,Gv=CPUNode$1,Yv=Fo,Kv=ao,Jv=Ki,Xv=Yp,Zv=Lo,Qv=/^video/;class PageDependencyGraph$a{static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if("script"===e.initiator.type){const t=new Set;let r=e.initiator.stack;for(;r;){const e=r.callFrames||[];for(const r of e)r.url&&t.add(r.url);r=r.parent}return Array.from(t)}return[]}static getNetworkNodeOutput(e){const t=[],r=new Map,a=new Map,n=new Map;return e.forEach((e=>{if(Qv.test(e.mimeType))return;for(;r.has(e.requestId);)e.requestId+=":duplicate";const i=new Hv(e);t.push(i);const o=a.get(e.url)||[];if(o.push(i),r.set(e.requestId,i),a.set(e.url,o),
571
+ e.frameId&&e.resourceType===Jv.TYPES.Document&&e.documentURL===e.url){const t=n.has(e.frameId)?null:i;n.set(e.frameId,t)}})),{nodes:t,idToNodeMap:r,urlToNodeMap:a,frameIdToNodeMap:n}}static getCPUNodes({mainThreadEvents:e}){const t=[];let r=0;for(Kv.assertHasToplevelEvents(e);r<e.length;){const a=e[r];if(r++,!Kv.isScheduleableTask(a)||!a.dur)continue;const n=[];for(const t=a.ts+a.dur;r<e.length&&e[r].ts<t;r++)n.push(e[r]);t.push(new Gv(a,n))}return t}static linkNetworkNodes(e,t){t.nodes.forEach((r=>{const a=r.record.initiatorRequest||e.record,n=t.idToNodeMap.get(a.requestId)||e,i=!n.isDependentOn(r)&&r.canDependOn(n),o=PageDependencyGraph$a.getNetworkInitiators(r.record);if(o.length?o.forEach((e=>{const a=t.urlToNodeMap.get(e)||[];1===a.length&&a[0].startTime<=r.startTime&&!a[0].isDependentOn(r)?r.addDependency(a[0]):i&&n.addDependent(r)})):i&&n.addDependent(r),r!==e&&0===r.getDependencies().length&&r.canDependOn(e)&&r.addDependency(e),!r.record.redirects)return
572
572
  ;const s=[...r.record.redirects,r.record];for(let e=1;e<s.length;e++){const r=t.idToNodeMap.get(s[e-1].requestId),a=t.idToNodeMap.get(s[e].requestId);a&&r&&a.addDependency(r)}}))}static linkCPUNodes(e,t,r){const a=new Set([Jv.TYPES.XHR,Jv.TYPES.Fetch,Jv.TYPES.Script]);function addDependentNetworkRequest(e,r){const n=t.idToNodeMap.get(r);if(!n||n.startTime<=e.startTime)return;const{record:i}=n,o=i.resourceType||i.redirectDestination?.resourceType;a.has(o)&&e.addDependent(n)}function addDependencyOnFrame(e,r){if(!r)return;const a=t.frameIdToNodeMap.get(r);a&&(a.startTime>=e.startTime||e.addDependency(a))}function addDependencyOnUrl(e,r){if(!r)return;const a=t.urlToNodeMap.get(r)||[];let n=null,i=1/0;for(const t of a){if(e.startTime<=t.startTime)return;const r=e.startTime-t.endTime;r>=-1e5&&r<i&&(n=t,i=r)}n&&e.addDependency(n)}const n=new Map;for(const t of r){for(const e of t.childEvents){if(!e.args.data)continue
573
573
  ;const r=e.args.data.url,a=(e.args.data.stackTrace||[]).map((e=>e.url)).filter(Boolean);switch(e.name){case"TimerInstall":n.set(e.args.data.timerId,t),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"TimerFire":{const r=n.get(e.args.data.timerId);if(!r||r.endTime>t.startTime)break;r.addDependent(t);break}case"InvalidateLayout":case"ScheduleStyleRecalculation":addDependencyOnFrame(t,e.args.data.frame),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"EvaluateScript":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,r),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"XHRReadyStateChange":if(4!==e.args.data.readyState)break;addDependencyOnUrl(t,r),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"FunctionCall":case"v8.compile":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,r);break;case"ParseAuthorStyleSheet":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,e.args.data.styleSheetUrl);break;case"ResourceSendRequest":
574
574
  addDependencyOnFrame(t,e.args.data.frame),addDependentNetworkRequest(t,e.args.data.requestId),a.forEach((e=>addDependencyOnUrl(t,e)))}}0===t.getNumberOfDependencies()&&t.canDependOn(e)&&t.addDependency(e)}let i=!1,o=!1,s=!1;for(const e of r){let t=!1;!i&&e.childEvents.some((e=>"Layout"===e.name))&&(t=i=!0),!o&&e.childEvents.some((e=>"Paint"===e.name))&&(t=o=!0),!s&&e.childEvents.some((e=>"ParseHTML"===e.name))&&(t=s=!0),t||e.event.dur>=1e4||(1===e.getNumberOfDependencies()||e.getNumberOfDependents()<=1)&&PageDependencyGraph$a._pruneNode(e)}}static _pruneNode(e){const t=e.getDependencies(),r=e.getDependents();for(const a of t){e.removeDependency(a);for(const e of r)a.addDependent(e)}for(const t of r)e.removeDependent(t)}static createGraph(e,t){const r=PageDependencyGraph$a.getNetworkNodeOutput(t),a=PageDependencyGraph$a.getCPUNodes(e),n=Yv.findMainDocument(t),i=r.idToNodeMap.get(n.requestId);if(!i)throw new Error("mainDocumentNode not found.");const o=i.record.redirects?.[0];let s
575
- ;if(o){if(s=o&&r.idToNodeMap.get(o.requestId),!s)throw new Error("rootNode not found")}else s=i;if(PageDependencyGraph$a.linkNetworkNodes(s,r),PageDependencyGraph$a.linkCPUNodes(s,r,a),i.setIsMainDocument(!0),Gv.hasCycle(s))throw new Error("Invalid dependency graph created, cycle detected");return s}static printGraph(e,t=100){function padRight(e,t,r=" "){return e+r.repeat(Math.max(t-e.length,0))}const r=[];e.traverse((e=>r.push(e))),r.sort(((e,t)=>e.startTime-t.startTime));const a=r[0].startTime,n=(r.reduce(((e,t)=>Math.max(e,t.endTime)),0)-a)/t;r.forEach((e=>{const r=Math.round((e.startTime-a)/n),i=Math.ceil((e.endTime-e.startTime)/n),o=padRight("",r)+padRight("",i,"="),s=e.record?e.record.url:e.type;console.log(padRight(o,t),`| ${s.slice(0,30)}`)}))}static async compute_(e,t){const r=e.trace,a=e.devtoolsLog,[n,i]=await Promise.all([Xv.request(r,t),Zv.request(a,t)]);return PageDependencyGraph$a.createGraph(n,i)}}var eb=Wv(PageDependencyGraph$a,["devtoolsLog","trace"])
575
+ ;if(o){if(s=o&&r.idToNodeMap.get(o.requestId),!s)throw new Error("rootNode not found")}else s=i;if(PageDependencyGraph$a.linkNetworkNodes(s,r),PageDependencyGraph$a.linkCPUNodes(s,r,a),i.setIsMainDocument(!0),Hv.hasCycle(s))throw new Error("Invalid dependency graph created, cycle detected");return s}static printGraph(e,t=100){function padRight(e,t,r=" "){return e+r.repeat(Math.max(t-e.length,0))}const r=[];e.traverse((e=>r.push(e))),r.sort(((e,t)=>e.startTime-t.startTime));const a=r[0].startTime,n=(r.reduce(((e,t)=>Math.max(e,t.endTime)),0)-a)/t;r.forEach((e=>{const r=Math.round((e.startTime-a)/n),i=Math.ceil((e.endTime-e.startTime)/n),o=padRight("",r)+padRight("",i,"="),s=e.record?e.record.url:e.type;console.log(padRight(o,t),`| ${s.slice(0,30)}`)}))}static async compute_(e,t){const r=e.trace,a=e.devtoolsLog,[n,i]=await Promise.all([Xv.request(r,t),Zv.request(a,t)]);return PageDependencyGraph$a.createGraph(n,i)}}var eb=Wv(PageDependencyGraph$a,["devtoolsLog","trace"])
576
576
  ;const tb=Zc,rb=Ki,ab=Yp,nb=Xp,ib=eb,ob=Dl;var sb=class LanternMetricArtifact$1{static getScriptUrls(e,t){const r=new Set;return e.traverse((e=>{e.type!==tb.TYPES.CPU&&e.record.resourceType===rb.TYPES.Script&&(t&&!t(e)||r.add(e.record.url))})),r}static get COEFFICIENTS(){throw new Error("COEFFICIENTS unimplemented!")}static getScaledCoefficients(e){return this.COEFFICIENTS}static getOptimisticGraph(e,t){throw new Error("Optimistic graph unimplemented!")}static getPessimisticGraph(e,t){throw new Error("Pessmistic graph unimplemented!")}static getEstimateFromSimulation(e,t){return e}static async computeMetricWithGraphs(e,t,r){const a=e.gatherContext||{gatherMode:"navigation"},{trace:n,devtoolsLog:i,settings:o}=e;if("navigation"!==a.gatherMode)throw new Error("Lantern metrics can only be computed on navigations");const s=this.name.replace("Lantern",""),c=await ib.request({trace:n,devtoolsLog:i},t),l=await ab.request(n,t),u=await nb.request(l,t),d=e.simulator||await ob.request({
577
577
  devtoolsLog:i,settings:o},t),m=this.getOptimisticGraph(c,u),p=this.getPessimisticGraph(c,u);let h={label:`optimistic${s}`};const f=d.simulate(m,h);h={label:`optimisticFlex${s}`,flexibleOrdering:!0};const y=d.simulate(m,h);h={label:`pessimistic${s}`};const v=d.simulate(p,h),b=this.getEstimateFromSimulation(f.timeInMs<y.timeInMs?f:y,{...r,optimistic:!0}),w=this.getEstimateFromSimulation(v,{...r,optimistic:!1}),S=this.getScaledCoefficients(d.rtt),T=S.intercept>0?Math.min(1,b.timeInMs/1e3):1;return{timing:S.intercept*T+S.optimistic*b.timeInMs+S.pessimistic*w.timeInMs,optimisticEstimate:b,pessimisticEstimate:w,optimisticGraph:m,pessimisticGraph:p}}static async compute_(e,t){return this.computeMetricWithGraphs(e,t)}};const cb=Ao,lb=sb,ub=Zc;var db=cb(class LanternFirstContentfulPaint$6 extends lb{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getBlockingNodeData(e,t,r,a){const n=new Map,i=[];e.traverse((e=>{if(e.type===ub.TYPES.CPU){
578
578
  e.startTime<=t&&i.push(e);const r=e.getEvaluateScriptURLs();for(const t of r){const r=n.get(t)||e;n.set(t,e.startTime<r.startTime?e:r)}}})),i.sort(((e,t)=>e.startTime-t.startTime));const o=lb.getScriptUrls(e,(e=>e.endTime<=t&&r(e))),s=new Set,c=new Set;for(const e of o){const t=n.get(e);t&&(i.includes(t)?c.add(t.id):s.add(e))}const l=i.find((e=>e.didPerformLayout()));l&&c.add(l.id);const u=i.find((e=>e.childEvents.some((e=>"Paint"===e.name))));u&&c.add(u.id);const d=i.find((e=>e.childEvents.some((e=>"ParseHTML"===e.name))));return d&&c.add(d.id),a&&i.filter(a).forEach((e=>c.add(e.id))),{definitelyNotRenderBlockingScriptUrls:s,blockingCpuNodeIds:c}}static getFirstPaintBasedGraph(e,t,r,a){const{definitelyNotRenderBlockingScriptUrls:n,blockingCpuNodeIds:i}=this.getBlockingNodeData(e,t,r,a);return e.cloneWithRelationships((e=>{if(e.type===ub.TYPES.NETWORK){if((e.endTime>t||e.startTime>t)&&!e.isMainDocument())return!1;const a=e.record.url;return!n.has(a)&&r(e)}return i.has(e.id)}))}
@@ -590,10 +590,10 @@ return e.lineNumber!==t.sourceLineNumber?e.lineNumber-t.sourceLineNumber:e.colum
590
590
  constructor(e,t){this.content=e,this.reverseMappings=t}}}(TextSourceMap=t.TextSourceMap||(t.TextSourceMap={})),e.exports=TextSourceMap}(Nb,Nb.exports);const Mb={TextSourceMap:Nb.exports};Mb.TextSourceMap.prototype.computeLastGeneratedColumns=function(){const e=this.mappings();if(!e.length||void 0===e[0].lastColumnNumber)for(let t=0;t<e.length-1;t++){const r=e[t],a=e[t+1];r.lineNumber===a.lineNumber&&(r.lastColumnNumber=a.columnNumber)}};var Pb=Mb;const Ob=on.default,Fb=Ao,Ub=Pb;function computeGeneratedFileSizes(e,t){const r=t.split("\n"),a={},n=t.length;let i=n;e.computeLastGeneratedColumns();for(const t of e.mappings()){const n=t.sourceURL,o=t.lineNumber,s=t.columnNumber,c=t.lastColumnNumber;if(!n)continue;const l=r[o];if(null==l){const t=`${e.url()} mapping for line out of bounds: ${o+1}`;return Ob.error("JSBundles",t),{errorMessage:t}}if(s>l.length){const t=`${e.url()} mapping for column out of bounds: ${o+1}:${s}`;return Ob.error("JSBundles",t),{errorMessage:t}}let u=0
591
591
  ;if(void 0!==c){if(c>l.length){const t=`${e.url()} mapping for last column out of bounds: ${o+1}:${c}`;return Ob.error("JSBundles",t),{errorMessage:t}}u=c-s}else u=l.length-s+1;a[n]=(a[n]||0)+u,i-=u}return{files:a,unmappedBytes:i,totalBytes:n}}var jb=Fb(class JSBundles{static async compute_(e){const{SourceMaps:t,ScriptElements:r}=e,a=[];for(const e of t){if(!e.map)continue;const{scriptUrl:t,map:n}=e;if(!n.mappings)continue;const i=r.find((e=>e.src===t));if(!i)continue;const o=e.scriptUrl||"compiled.js",s=e.sourceMapUrl||"compiled.js.map",c=new Ub.TextSourceMap(o,s,n),l={rawMap:n,script:i,map:c,sizes:computeGeneratedFileSizes(c,i?.content?i.content:"")};a.push(l)}return a}},["ScriptElements","SourceMaps"]);const Bb=Ao,$b=jb;class ModuleDuplication$2{static normalizeSource(e){const t=(e=e.replace(/\?$/,"")).lastIndexOf("node_modules");return-1!==t&&(e=e.substring(t)),e}static _shouldIgnoreSource(e){
592
592
  return!!e.includes("webpack/bootstrap")||(!!e.includes("(webpack)/buildin")||!!e.includes("external "))}static _normalizeAggregatedData(e){for(const[t,r]of e.entries()){let a=r;if(a.sort(((e,t)=>t.resourceSize-e.resourceSize)),a.length>1){const e=a[0].resourceSize;a=a.filter((t=>t.resourceSize/e>=.1))}a=a.filter((e=>e.resourceSize>=512)),a.length>1?e.set(t,a):e.delete(t)}}static async compute_(e,t){const r=await $b.request(e,t),a=new Map;for(const{rawMap:e,sizes:t}of r){if("errorMessage"in t)continue;const r=[];a.set(e,r);for(let a=0;a<e.sources.length;a++){if(this._shouldIgnoreSource(e.sources[a]))continue;const n=(e.sourceRoot||"")+e.sources[a],i=t.files[n];r.push({source:ModuleDuplication$2.normalizeSource(e.sources[a]),resourceSize:i})}}const n=new Map;for(const{rawMap:e,script:t}of r){const r=a.get(e);if(r)for(const e of r){let r=n.get(e.source);r||(r=[],n.set(e.source,r)),r.push({scriptUrl:t.src||"",resourceSize:e.resourceSize})}}return this._normalizeAggregatedData(n),n}}
593
- var qb=Bb(ModuleDuplication$2,["ScriptElements","SourceMaps"]);var zb={getRequestForScript:function getRequestForScript$3(e,t){if(!t)return;let r=t.requestId&&e.find((e=>e.requestId===t.requestId));for(r||(r=e.find((e=>e.url===t.src)));r?.redirectDestination;)r=r.redirectDestination;return r}};const Vb=Ib,Wb=qb,Gb=oi,{getRequestForScript:Hb}=zb,Yb={title:"Remove duplicate modules in JavaScript bundles",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. "},Kb=Gb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/duplicated-javascript.js",Yb);function indexOfOrEnd(e,t,r=0){const a=e.indexOf(t,r);return-1===a?e.length:a}class DuplicatedJavascript extends Vb{static get meta(){return{id:"duplicated-javascript",title:Kb(Yb.title),description:Kb(Yb.description),scoreDisplayMode:Vb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","SourceMaps","ScriptElements","GatherContext","URL"]}}
593
+ var qb=Bb(ModuleDuplication$2,["ScriptElements","SourceMaps"]);var zb={getRequestForScript:function getRequestForScript$3(e,t){if(!t)return;let r=t.requestId&&e.find((e=>e.requestId===t.requestId));for(r||(r=e.find((e=>e.url===t.src)));r?.redirectDestination;)r=r.redirectDestination;return r}};const Vb=Ib,Wb=qb,Hb=oi,{getRequestForScript:Gb}=zb,Yb={title:"Remove duplicate modules in JavaScript bundles",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. "},Kb=Hb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/duplicated-javascript.js",Yb);function indexOfOrEnd(e,t,r=0){const a=e.indexOf(t,r);return-1===a?e.length:a}class DuplicatedJavascript extends Vb{static get meta(){return{id:"duplicated-javascript",title:Kb(Yb.title),description:Kb(Yb.description),scoreDisplayMode:Vb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","SourceMaps","ScriptElements","GatherContext","URL"]}}
594
594
  static _getNodeModuleName(e){const t=e.split("node_modules/"),r=indexOfOrEnd(e=t[t.length-1],"/");return"@"===e[0]?e.slice(0,indexOfOrEnd(e,"/",r+1)):e.slice(0,r)}static async _getDuplicationGroupedByNodeModules(e,t){const r=await Wb.request(e,t),a=new Map;for(const[e,t]of r.entries()){if(!e.includes("node_modules")){a.set(e,t);continue}const r="node_modules/"+DuplicatedJavascript._getNodeModuleName(e),n=a.get(r)||[];for(const{scriptUrl:e,resourceSize:r}of t){let t=n.find((t=>t.scriptUrl===e));t||(t={scriptUrl:e,resourceSize:0},n.push(t)),t.resourceSize+=r}a.set(r,n)}for(const e of r.values())e.sort(((e,t)=>t.resourceSize-e.resourceSize));return a}static _estimateTransferRatio(e,t){return Vb.estimateTransferSize(e,t,"Script")/t}static async audit_(e,t,r){const a=r.options?.ignoreThresholdInBytes||1024,n=await DuplicatedJavascript._getDuplicationGroupedByNodeModules(e,r),i=new Map,o=[];let s=0;const c=new Set,l=new Map;for(const[r,u]of n.entries()){const n=[];let d=0
595
- ;for(let r=0;r<u.length;r++){const a=u[r],o=a.scriptUrl;let s=i.get(o);if(void 0===s){const r=Hb(t,{src:o}),a=e.ScriptElements.find((e=>e.src===o));if(!a||null===a.content)continue;const n=a.content.length;s=DuplicatedJavascript._estimateTransferRatio(r,n),i.set(o,s)}if(void 0===s)continue;const c=Math.round(a.resourceSize*s);n.push({url:o,sourceTransferBytes:c}),0!==r&&(d+=c,l.set(o,(l.get(o)||0)+c))}if(d<=a){s+=d;for(const e of n)c.add(e.url)}else o.push({source:r,wastedBytes:d,url:"",totalBytes:0,subItems:{type:"subitems",items:n}})}s>a&&o.push({source:"Other",wastedBytes:s,url:"",totalBytes:0,subItems:{type:"subitems",items:Array.from(c).map((e=>({url:e})))}});return{items:o,headings:[{key:"source",valueType:"code",subItemsHeading:{key:"url",valueType:"url"},label:Kb(Gb.UIStrings.columnSource)},{key:null,valueType:"bytes",subItemsHeading:{key:"sourceTransferBytes"},granularity:.05,label:Kb(Gb.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",granularity:.05,
596
- label:Kb(Gb.UIStrings.columnWastedBytes)}],wastedBytesByUrl:l}}}Bv.exports=DuplicatedJavascript,Bv.exports.UIStrings=Yb;var Jb={exports:{}};const Xb=Ki,Zb=Ib,Qb=oi,ew={title:"Use video formats for animated content",description:"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://web.dev/efficient-animated-content/)"},tw=Qb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/efficient-animated-content.js",ew);class EfficientAnimatedContent extends Zb{static get meta(){return{id:"efficient-animated-content",title:tw(ew.title),description:tw(ew.description),scoreDisplayMode:Zb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","GatherContext"]}}static getPercentSavings(e){return Math.round(29.1*Math.log10(e)-100.7)/100}static audit_(e,t){return{
595
+ ;for(let r=0;r<u.length;r++){const a=u[r],o=a.scriptUrl;let s=i.get(o);if(void 0===s){const r=Gb(t,{src:o}),a=e.ScriptElements.find((e=>e.src===o));if(!a||null===a.content)continue;const n=a.content.length;s=DuplicatedJavascript._estimateTransferRatio(r,n),i.set(o,s)}if(void 0===s)continue;const c=Math.round(a.resourceSize*s);n.push({url:o,sourceTransferBytes:c}),0!==r&&(d+=c,l.set(o,(l.get(o)||0)+c))}if(d<=a){s+=d;for(const e of n)c.add(e.url)}else o.push({source:r,wastedBytes:d,url:"",totalBytes:0,subItems:{type:"subitems",items:n}})}s>a&&o.push({source:"Other",wastedBytes:s,url:"",totalBytes:0,subItems:{type:"subitems",items:Array.from(c).map((e=>({url:e})))}});return{items:o,headings:[{key:"source",valueType:"code",subItemsHeading:{key:"url",valueType:"url"},label:Kb(Hb.UIStrings.columnSource)},{key:null,valueType:"bytes",subItemsHeading:{key:"sourceTransferBytes"},granularity:.05,label:Kb(Hb.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",granularity:.05,
596
+ label:Kb(Hb.UIStrings.columnWastedBytes)}],wastedBytesByUrl:l}}}Bv.exports=DuplicatedJavascript,Bv.exports.UIStrings=Yb;var Jb={exports:{}};const Xb=Ki,Zb=Ib,Qb=oi,ew={title:"Use video formats for animated content",description:"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://web.dev/efficient-animated-content/)"},tw=Qb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/efficient-animated-content.js",ew);class EfficientAnimatedContent extends Zb{static get meta(){return{id:"efficient-animated-content",title:tw(ew.title),description:tw(ew.description),scoreDisplayMode:Zb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","GatherContext"]}}static getPercentSavings(e){return Math.round(29.1*Math.log10(e)-100.7)/100}static audit_(e,t){return{
597
597
  items:t.filter((e=>"image/gif"===e.mimeType&&e.resourceType===Xb.TYPES.Image&&(e.resourceSize||0)>102400)).map((e=>{const t=e.resourceSize||0;return{url:e.url,totalBytes:t,wastedBytes:Math.round(t*EfficientAnimatedContent.getPercentSavings(t))}})),headings:[{key:"url",valueType:"url",label:tw(Qb.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:tw(Qb.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:tw(Qb.UIStrings.columnWastedBytes)}]}}}Jb.exports=EfficientAnimatedContent,Jb.exports.UIStrings=ew;var rw={exports:{}};const aw=/:\/\/(\S*?)(:\d+)?(\/|$)/,nw=/([a-z0-9.-]+\.[a-z0-9]+|localhost)/i,iw=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,ow=/[^.]+\.([^.]+|(gov|com|co|ne)\.\w{2})$/i;function getDomainFromOriginOrURL(e){return"string"!=typeof e||e.length>1e4||e.startsWith("data:")?null:aw.test(e)?e.match(aw)[1]:nw.test(e)?e.match(nw)[0]:null}function getRootDomain(e){const t=getDomainFromOriginOrURL(e);if(!t)return null;if(iw.test(t))return t
598
598
  ;const r=t.match(ow);return r&&r[0]||t}function sliceSubdomainFromDomain(e,t){return e.length<=t.length?e:e.split(".").slice(1).join(".")}function getEntityInDataset(e,t,r,a){const n=getDomainFromOriginOrURL(a),i=getRootDomain(n);if(n&&i){if(e.has(n))return e.get(n);for(let e=n;e.length>i.length;e=sliceSubdomainFromDomain(e,i))if(t.has(e))return t.get(e);return r.has(i)?r.get(i):void 0}}function getProductInDataset(e,t,r,a){const n=getEntityInDataset(e,t,r,a),i=n&&n.products;if(i&&"string"==typeof a)for(const e of i)for(const t of e.urlPatterns){if(t instanceof RegExp&&t.test(a))return e;if("string"==typeof t&&a.includes(t))return e}}var sw={createAPIFromDataset:function createAPIFromDataset$1(e){const t=function cloneEntities(e){return e.map((e=>{const t={company:e.name,...e},r=(e.products||[]).map((e=>({company:t.company,categories:t.categories,facades:[],...e,urlPatterns:(e.urlPatterns||[]).map((e=>e.startsWith("REGEXP:")?new RegExp(e.slice("REGEXP:".length)):e))})))
599
599
  ;return t.products=r,t}))}(e),r=new Map,a=new Map,n=new Map;for(const e of t){e.totalExecutionTime=Number(e.totalExecutionTime)||0,e.totalOccurrences=Number(e.totalOccurrences)||0,e.averageExecutionTime=e.totalExecutionTime/e.totalOccurrences;for(const t of e.domains){if(r.has(t)){const a=r.get(t);throw new Error(`Duplicate domain ${t} (${e.name} and ${a.name})`)}r.set(t,e);const i=getRootDomain(t);if(t.startsWith("*.")){const r=t.slice(2);r===i?a.set(i,e):n.set(r,e)}}}for(const[e,t]of a.entries())t||a.delete(e);return{getEntity:getEntityInDataset.bind(null,r,n,a),getProduct:getProductInDataset.bind(null,r,n,a),getRootDomain,entities:t}}};const{createAPIFromDataset:cw}=sw;const lw=cw([{name:"Google Analytics",company:"Google",homepage:"https://marketingplatform.google.com/about/analytics/",categories:["analytics"],domains:["*.google-analytics.com","*.urchin.com","analytics.google.com"]},{name:"Google Tag Manager",company:"Google",
@@ -722,9 +722,9 @@ const a=r.timestamps.firstContentfulPaint/1e3,isLongEnoughQuietPeriod=e=>e.end>a
722
722
  ;const n=Cw.getMainThreadTopLevelEvents(t).filter((e=>e.duration>=50)),i=Interactive$4.findOverlappingQuietPeriods(n,a,r).cpuQuietPeriod,o=1e3*Math.max(i.start,r.timestamps.firstContentfulPaint/1e3,r.timestamps.domContentLoaded/1e3),s=(o-r.timestamps.timeOrigin)/1e3;return Promise.resolve({timing:s,timestamp:o})}}var Lw=Aw(Interactive$4,["devtoolsLog","gatherContext","settings","simulator","trace"]);const Mw=Ib,Pw=Ki,Ow=Jl,Fw=ji,Uw=oi,jw=Lw,Bw=Yp,$w={title:"Defer offscreen images",description:"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://web.dev/offscreen-images/)."},qw=Uw.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/offscreen-images.js",$w);class OffscreenImages extends Mw{static get meta(){return{id:"offscreen-images",title:qw($w.title),description:qw($w.description),scoreDisplayMode:Mw.SCORING_MODES.NUMERIC,supportedModes:["navigation"],
723
723
  requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces"]}}static computeVisiblePixels(e,t){const r=t.innerWidth,a=t.innerHeight,n=3*t.innerHeight,i=Math.max(e.top,-100),o=Math.min(e.right,r+100),s=Math.min(e.bottom,a+n),c=Math.max(e.left,-100);return Math.max(o-c,0)*Math.max(s-i,0)}static computeWaste(e,t,r){const a=r.find((t=>t.url===e.src));if(!a)return null;if("lazy"===e.loading||"eager"===e.loading)return null;const n=Fw.elideDataURI(e.src),i=e.displayedWidth*e.displayedHeight,o=this.computeVisiblePixels(e.clientRect,t),s=0===i?1:1-o/i,c=Pw.getResourceSizeOnNetwork(a),l=Math.round(c*s);return Number.isFinite(s)?{node:Mw.makeNodeItem(e.node),url:n,requestStartTime:a.startTime,totalBytes:c,wastedBytes:l,wastedPercent:100*s}:new Error(`Invalid image sizing information ${n}`)}static filterLanternResults(e,t){const r=t.pessimisticEstimate.nodeTimings;let a=0;const n=new Map
724
724
  ;for(const[e,t]of r)"cpu"===e.type&&t.duration>=50?a=Math.max(a,t.startTime):"network"===e.type&&n.set(e.record.url,t.startTime);return e.filter((e=>{if(e.wastedBytes<2048)return!1;if(e.wastedPercent<75)return!1;return(n.get(e.url)||0)<a-50}))}static filterObservedResults(e,t){return e.filter((e=>!(e.wastedBytes<2048)&&(!(e.wastedPercent<75)&&e.requestStartTime<t/1e6-.05)))}static computeWasteWithTTIGraph(e,t,r){return super.computeWasteWithTTIGraph(e,t,r,{includeLoad:!1})}static async audit_(e,t,r){const a=e.ImageElements,n=e.ViewportDimensions,i=e.GatherContext,o=e.traces[Mw.DEFAULT_PASS],s=e.devtoolsLogs[Mw.DEFAULT_PASS],c=[],l=new Map;for(const e of a){const r=OffscreenImages.computeWaste(e,n,t);if(null===r)continue;if(r instanceof Error){c.push(r.message),Ow.captureException(r,{tags:{audit:this.meta.id},level:"warning"});continue}const a=l.get(r.url);(!a||a.wastedBytes>r.wastedBytes)&&l.set(r.url,r)}const u=r.settings;let d;const m=Array.from(l.values());try{const e={trace:o,
725
- devtoolsLog:s,gatherContext:i,settings:u},t=await jw.request(e,r),a=t;d="simulate"===r.settings.throttlingMethod?OffscreenImages.filterLanternResults(m,a):OffscreenImages.filterObservedResults(m,t.timestamp)}catch(e){if("simulate"===r.settings.throttlingMethod)throw e;d=OffscreenImages.filterObservedResults(m,await Bw.request(o,r).then((e=>e.timestamps.traceEnd)))}return{warnings:c,items:d,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qw(Uw.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnWastedBytes)}]}}}vw.exports=OffscreenImages,vw.exports.UIStrings=$w;var zw={exports:{}};const Vw=Ao,Ww=Ib,Gw=Lo,Hw=100;class UnusedCSS$3{static indexStylesheetsById(e,t){const r=t.filter((e=>e.resourceSize>0)).reduce(((e,t)=>(e[t.url]=t,e)),{});return e.reduce(((e,t)=>(e[t.header.styleSheetId]=Object.assign({usedRules:[],
726
- networkRecord:r[t.header.sourceURL]},t),e)),{})}static indexUsedRules(e,t){e.forEach((e=>{const r=t[e.styleSheetId];r&&e.used&&r.usedRules.push(e)}))}static computeUsage(e){let t=0;const r=e.content.length;for(const r of e.usedRules)t+=r.endOffset-r.startOffset;const a=Ww.estimateTransferSize(e.networkRecord,r,"Stylesheet"),n=(r-t)/r;return{wastedBytes:Math.round(n*a),wastedPercent:100*n,totalBytes:a}}static determineContentPreview(e){let t=(e||"").slice(0,500).replace(/( {2,}|\t)+/g," ").replace(/\n\s+}/g,"\n}").trim();if(t.length>Hw){const e=t.indexOf("{"),r=t.indexOf("}");if(-1===e||-1===r||e>r||e>Hw)t=t.slice(0,Hw)+"...";else if(r<Hw)t=t.slice(0,r+1)+" ...";else{const r=t.slice(0,Hw).lastIndexOf(";");t=r<e?t.slice(0,Hw)+"... } ...":t.slice(0,r+1)+" ... } ..."}}return t}static mapSheetToResult(e,t){let r=e.header.sourceURL;if(!r||r===t){r=UnusedCSS$3.determineContentPreview(e.content)}return{url:r,...UnusedCSS$3.computeUsage(e)}}static async compute_(e,t){
727
- const{CSSUsage:r,URL:a,devtoolsLog:n}=e,i=await Gw.request(n,t),o=UnusedCSS$3.indexStylesheetsById(r.stylesheets,i);UnusedCSS$3.indexUsedRules(r.rules,o);return Object.keys(o).map((e=>UnusedCSS$3.mapSheetToResult(o[e],a.finalUrl)))}}var Yw=Vw(UnusedCSS$3,["CSSUsage","URL","devtoolsLog"]);const Kw=Ao,Jw=_w,Xw=db;var Zw=Kw(class FirstContentfulPaint$3 extends Jw{static computeSimulatedMetric(e,t){const r=Jw.getMetricComputationInput(e);return Xw.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaint,timestamp:t.timestamps.firstContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Qw=kc,eS=oi,tS=Zc,rS=Ib,aS=Yw,nS=Ki,iS=Yp,oS=Xp,sS=Dl,cS=Zw,lS={title:"Eliminate render-blocking resources",
725
+ devtoolsLog:s,gatherContext:i,settings:u},t=await jw.request(e,r),a=t;d="simulate"===r.settings.throttlingMethod?OffscreenImages.filterLanternResults(m,a):OffscreenImages.filterObservedResults(m,t.timestamp)}catch(e){if("simulate"===r.settings.throttlingMethod)throw e;d=OffscreenImages.filterObservedResults(m,await Bw.request(o,r).then((e=>e.timestamps.traceEnd)))}return{warnings:c,items:d,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qw(Uw.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnWastedBytes)}]}}}vw.exports=OffscreenImages,vw.exports.UIStrings=$w;var zw={exports:{}};const Vw=Ao,Ww=Ib,Hw=Lo,Gw=100;class UnusedCSS$3{static indexStylesheetsById(e,t){const r=t.filter((e=>e.resourceSize>0)).reduce(((e,t)=>(e[t.url]=t,e)),{});return e.reduce(((e,t)=>(e[t.header.styleSheetId]=Object.assign({usedRules:[],
726
+ networkRecord:r[t.header.sourceURL]},t),e)),{})}static indexUsedRules(e,t){e.forEach((e=>{const r=t[e.styleSheetId];r&&e.used&&r.usedRules.push(e)}))}static computeUsage(e){let t=0;const r=e.content.length;for(const r of e.usedRules)t+=r.endOffset-r.startOffset;const a=Ww.estimateTransferSize(e.networkRecord,r,"Stylesheet"),n=(r-t)/r;return{wastedBytes:Math.round(n*a),wastedPercent:100*n,totalBytes:a}}static determineContentPreview(e){let t=(e||"").slice(0,500).replace(/( {2,}|\t)+/g," ").replace(/\n\s+}/g,"\n}").trim();if(t.length>Gw){const e=t.indexOf("{"),r=t.indexOf("}");if(-1===e||-1===r||e>r||e>Gw)t=t.slice(0,Gw)+"...";else if(r<Gw)t=t.slice(0,r+1)+" ...";else{const r=t.slice(0,Gw).lastIndexOf(";");t=r<e?t.slice(0,Gw)+"... } ...":t.slice(0,r+1)+" ... } ..."}}return t}static mapSheetToResult(e,t){let r=e.header.sourceURL;if(!r||r===t){r=UnusedCSS$3.determineContentPreview(e.content)}return{url:r,...UnusedCSS$3.computeUsage(e)}}static async compute_(e,t){
727
+ const{CSSUsage:r,URL:a,devtoolsLog:n}=e,i=await Hw.request(n,t),o=UnusedCSS$3.indexStylesheetsById(r.stylesheets,i);UnusedCSS$3.indexUsedRules(r.rules,o);return Object.keys(o).map((e=>UnusedCSS$3.mapSheetToResult(o[e],a.finalUrl)))}}var Yw=Vw(UnusedCSS$3,["CSSUsage","URL","devtoolsLog"]);const Kw=Ao,Jw=_w,Xw=db;var Zw=Kw(class FirstContentfulPaint$3 extends Jw{static computeSimulatedMetric(e,t){const r=Jw.getMetricComputationInput(e);return Xw.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaint,timestamp:t.timestamps.firstContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Qw=kc,eS=oi,tS=Zc,rS=Ib,aS=Yw,nS=Ki,iS=Yp,oS=Xp,sS=Dl,cS=Zw,lS={title:"Eliminate render-blocking resources",
728
728
  description:"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://web.dev/render-blocking-resources/)."},uS=eS.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/render-blocking-resources.js",lS);function computeStackSpecificTiming(e,t,r){const a={...t};return r.some((e=>"amp"===e.id))&&e.type===tS.TYPES.NETWORK&&e.record.resourceType===nS.TYPES.Stylesheet&&t.endTime>2100&&(a.endTime=Math.max(t.startTime,2100),a.duration=a.endTime-a.startTime),a}class RenderBlockingResources extends Qw{static get meta(){return{id:"render-blocking-resources",title:uS(lS.title),supportedModes:["navigation"],scoreDisplayMode:Qw.SCORING_MODES.NUMERIC,description:uS(lS.description),requiredArtifacts:["URL","TagsBlockingFirstPaint","traces","devtoolsLogs","CSSUsage","GatherContext","Stacks"]}}static async computeResults(e,t){
729
729
  const r=e.GatherContext,a=e.traces[Qw.DEFAULT_PASS],n=e.devtoolsLogs[Qw.DEFAULT_PASS],i={devtoolsLog:n,settings:t.settings},o=await iS.request(a,t),s=await oS.request(o,t),c=await sS.request(i,t),l=await RenderBlockingResources.computeWastedCSSBytes(e,t),u={trace:a,devtoolsLog:n,gatherContext:r,simulator:c,settings:{...t.settings,throttlingMethod:"simulate"}},d=await cS.request(u,t),m=s.timestamps.firstContentfulPaint/1e3,p=function getNodesAndTimingByUrl(e){const t={};return Array.from(e.keys()).forEach((r=>{if("network"!==r.type)return;const a=e.get(r);a&&(t[r.record.url]={node:r,nodeTiming:a})})),t}(d.optimisticEstimate.nodeTimings),h=[],f=new Set;for(const t of e.TagsBlockingFirstPaint){if(1e3*t.endTime>m)continue;if(!p[t.tag.url])continue;const{node:r,nodeTiming:a}=p[t.tag.url],n=computeStackSpecificTiming(r,a,e.Stacks);r.traverse((e=>f.add(e.id)));const i=Math.round(n.duration);i<50||h.push({url:t.tag.url,totalBytes:t.transferSize,wastedMs:i})}if(!h.length)return{results:h,
730
730
  wastedMs:0};return{results:h,wastedMs:RenderBlockingResources.estimateSavingsWithGraphs(c,d.optimisticGraph,f,l,e.Stacks)}}static estimateSavingsWithGraphs(e,t,r,a,n){const{nodeTimings:i}=e.simulate(t),o=new Map(i);let s=0;const c=t.cloneWithRelationships((e=>{!function adjustNodeTimings(e,t,r){const a=e.get(t);if(!a)return;const n=computeStackSpecificTiming(t,a,r);a.duration-n.duration&&(t.traverse((t=>{e.delete(t)})),e.set(t,n))}(o,e,n);const t=r.has(e.id);if(e.type!==tS.TYPES.NETWORK)return!t;const i=e.record.resourceType===nS.TYPES.Stylesheet;if(t&&i){const t=a.get(e.record.url)||0;s+=(e.record.transferSize||0)-t}return!t}));if("network"!==c.type)throw new Error("minimalFCPGraph not a NetworkNode");const l=Math.max(...Array.from(Array.from(o).map((e=>e[1].endTime)))),u=c.record.transferSize,d=u||0;c.record.transferSize=d+s;const m=e.simulate(c).timeInMs;return c.record.transferSize=u,Math.round(Math.max(l-m,0))}static async computeWastedCSSBytes(e,t){const r=new Map;try{
@@ -741,10 +741,10 @@ label:RS(xS.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",
741
741
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
742
742
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
743
743
  */const qS=Ao;class UnusedJavascriptSummary{static computeWaste(e){let t=0;for(const r of e.functions)t=Math.max(t,...r.ranges.map((e=>e.endOffset)));const r=new Uint8Array(t);for(const t of e.functions)for(const e of t.ranges)if(0===e.count)for(let t=e.startOffset;t<e.endOffset;t++)r[t]=1;let a=0;for(const e of r)a+=e;return{unusedByIndex:r,unusedLength:a,contentLength:t}}static createItem(e,t){const r=t.unused/t.content||0,a=Math.round(t.content*r);return{url:e,totalBytes:t.content,wastedBytes:a,wastedPercent:100*r}}static determineLengths(e){let t=0,r=0;for(const a of e)t+=a.unusedLength,r+=a.contentLength;return{content:r,unused:t}}static createSourceWastedBytes(e,t){if(!t.script.content)return;const r={},a=t.script.content.split("\n").map((e=>e.length));let n=0;const i=a.map((e=>{const t=n;return n+=e+1,t}));t.map.computeLastGeneratedColumns();for(const n of t.map.mappings()){let t=i[n.lineNumber];t+=n.columnNumber
744
- ;const o=void 0!==n.lastColumnNumber?n.lastColumnNumber-1:a[n.lineNumber];for(let a=n.columnNumber;a<=o;a++){if(e.every((e=>1===e.unusedByIndex[t]))){const e=n.sourceURL||"(unmapped)";r[e]=(r[e]||0)+1}t+=1}}const o=Object.entries(r).sort((([e,t],[r,a])=>a-t)),s={};for(const[e,t]of o)s[e]=t;return s}static async compute_(e){const{url:t,scriptCoverages:r,bundle:a}=e,n=r.map(UnusedJavascriptSummary.computeWaste),i=UnusedJavascriptSummary.determineLengths(n),o=UnusedJavascriptSummary.createItem(t,i);return a?{...o,sourcesWastedBytes:UnusedJavascriptSummary.createSourceWastedBytes(n,a)}:o}}var zS=qS(UnusedJavascriptSummary,["bundle","scriptCoverages","url"]);const VS=Ib,WS=zS,GS=jb,HS=oi,{getRequestForScript:YS}=zb,KS={title:"Reduce unused JavaScript",description:"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-javascript/)."
745
- },JS=HS.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/unused-javascript.js",KS),XS=20480,ZS=512;function commonPrefix(e){if(!e.length)return"";const t=e.reduce(((e,t)=>e>t?e:t));let r=e.reduce(((e,t)=>e>t?t:e));for(;!t.startsWith(r);)r=r.slice(0,-1);return r}function trimCommonPrefix(e,t){return t&&e.startsWith(t)?"…"+e.slice(t.length):e}$S.exports=class UnusedJavaScript extends VS{static get meta(){return{id:"unused-javascript",title:JS(KS.title),description:JS(KS.description),scoreDisplayMode:VS.SCORING_MODES.NUMERIC,requiredArtifacts:["JsUsage","ScriptElements","SourceMaps","GatherContext","devtoolsLogs","traces"]}}static async audit_(e,t,r){const a=await GS.request(e,r),{unusedThreshold:n=XS,bundleSourceUnusedThreshold:i=ZS}=r.options||{},o=[];for(const[s,c]of Object.entries(e.JsUsage)){const e=YS(t,{src:s});if(!e)continue;const l=a.find((e=>e.script.src===s)),u=await WS.request({url:s,scriptCoverages:c,bundle:l},r)
746
- ;if(0===u.wastedBytes||0===u.totalBytes)continue;const d=VS.estimateTransferSize(e,u.totalBytes,"Script")/u.totalBytes,m={url:u.url,totalBytes:Math.round(d*u.totalBytes),wastedBytes:Math.round(d*u.wastedBytes),wastedPercent:u.wastedPercent};if(m.wastedBytes<=n)continue;if(o.push(m),!l||"errorMessage"in l.sizes)continue;const p=l.sizes;if(u.sourcesWastedBytes){const e=Object.entries(u.sourcesWastedBytes).sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>{const r="(unmapped)"===e?p.unmappedBytes:p.files[e];return{source:e,unused:Math.round(t*d),total:Math.round(r*d)}})).filter((e=>e.unused>=i)),t=commonPrefix([...l.map.sourceInfos.keys()]);m.subItems={type:"subitems",items:e.map((({source:e,unused:r,total:a})=>({source:trimCommonPrefix(e,t),sourceBytes:a,sourceWastedBytes:r})))}}}return{items:o,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:JS(HS.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",subItemsHeading:{key:"sourceBytes"},
747
- label:JS(HS.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",subItemsHeading:{key:"sourceWastedBytes"},label:JS(HS.UIStrings.columnWastedBytes)}]}}},$S.exports.UIStrings=KS;var QS={exports:{}};const eT=function parseCacheControl(e){if("string"!=typeof e)return null;var t={},r=e.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(e,r,a,n){var i=a||n;return t[r]=!i||i.toLowerCase(),""}));if(t["max-age"])try{var a=parseInt(t["max-age"],10);if(isNaN(a))return null;t["max-age"]=a}catch(r){}return r?null:t},tT=kc,rT=Ki,aT=ji,nT=xc.linearInterpolation,iT=oi,oT=Lo,sT={title:"Uses efficient cache policy on static assets",failureTitle:"Serve static assets with an efficient cache policy",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more](https://web.dev/uses-long-cache-ttl/).",
744
+ ;const o=void 0!==n.lastColumnNumber?n.lastColumnNumber-1:a[n.lineNumber];for(let a=n.columnNumber;a<=o;a++){if(e.every((e=>1===e.unusedByIndex[t]))){const e=n.sourceURL||"(unmapped)";r[e]=(r[e]||0)+1}t+=1}}const o=Object.entries(r).sort((([e,t],[r,a])=>a-t)),s={};for(const[e,t]of o)s[e]=t;return s}static async compute_(e){const{url:t,scriptCoverages:r,bundle:a}=e,n=r.map(UnusedJavascriptSummary.computeWaste),i=UnusedJavascriptSummary.determineLengths(n),o=UnusedJavascriptSummary.createItem(t,i);return a?{...o,sourcesWastedBytes:UnusedJavascriptSummary.createSourceWastedBytes(n,a)}:o}}var zS=qS(UnusedJavascriptSummary,["bundle","scriptCoverages","url"]);const VS=Ib,WS=zS,HS=jb,GS=oi,{getRequestForScript:YS}=zb,KS={title:"Reduce unused JavaScript",description:"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-javascript/)."
745
+ },JS=GS.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/unused-javascript.js",KS),XS=20480,ZS=512;function commonPrefix(e){if(!e.length)return"";const t=e.reduce(((e,t)=>e>t?e:t));let r=e.reduce(((e,t)=>e>t?t:e));for(;!t.startsWith(r);)r=r.slice(0,-1);return r}function trimCommonPrefix(e,t){return t&&e.startsWith(t)?"…"+e.slice(t.length):e}$S.exports=class UnusedJavaScript extends VS{static get meta(){return{id:"unused-javascript",title:JS(KS.title),description:JS(KS.description),scoreDisplayMode:VS.SCORING_MODES.NUMERIC,requiredArtifacts:["JsUsage","ScriptElements","SourceMaps","GatherContext","devtoolsLogs","traces"]}}static async audit_(e,t,r){const a=await HS.request(e,r),{unusedThreshold:n=XS,bundleSourceUnusedThreshold:i=ZS}=r.options||{},o=[];for(const[s,c]of Object.entries(e.JsUsage)){const e=YS(t,{src:s});if(!e)continue;const l=a.find((e=>e.script.src===s)),u=await WS.request({url:s,scriptCoverages:c,bundle:l},r)
746
+ ;if(0===u.wastedBytes||0===u.totalBytes)continue;const d=VS.estimateTransferSize(e,u.totalBytes,"Script")/u.totalBytes,m={url:u.url,totalBytes:Math.round(d*u.totalBytes),wastedBytes:Math.round(d*u.wastedBytes),wastedPercent:u.wastedPercent};if(m.wastedBytes<=n)continue;if(o.push(m),!l||"errorMessage"in l.sizes)continue;const p=l.sizes;if(u.sourcesWastedBytes){const e=Object.entries(u.sourcesWastedBytes).sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>{const r="(unmapped)"===e?p.unmappedBytes:p.files[e];return{source:e,unused:Math.round(t*d),total:Math.round(r*d)}})).filter((e=>e.unused>=i)),t=commonPrefix([...l.map.sourceInfos.keys()]);m.subItems={type:"subitems",items:e.map((({source:e,unused:r,total:a})=>({source:trimCommonPrefix(e,t),sourceBytes:a,sourceWastedBytes:r})))}}}return{items:o,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:JS(GS.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",subItemsHeading:{key:"sourceBytes"},
747
+ label:JS(GS.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",subItemsHeading:{key:"sourceWastedBytes"},label:JS(GS.UIStrings.columnWastedBytes)}]}}},$S.exports.UIStrings=KS;var QS={exports:{}};const eT=function parseCacheControl(e){if("string"!=typeof e)return null;var t={},r=e.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(e,r,a,n){var i=a||n;return t[r]=!i||i.toLowerCase(),""}));if(t["max-age"])try{var a=parseInt(t["max-age"],10);if(isNaN(a))return null;t["max-age"]=a}catch(r){}return r?null:t},tT=kc,rT=Ki,aT=ji,nT=xc.linearInterpolation,iT=oi,oT=Lo,sT={title:"Uses efficient cache policy on static assets",failureTitle:"Serve static assets with an efficient cache policy",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more](https://web.dev/uses-long-cache-ttl/).",
748
748
  displayValue:"{itemCount, plural,\n =1 {1 resource found}\n other {# resources found}\n }"},cT=iT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js",sT);class CacheHeaders$1 extends tT{static get meta(){return{id:"uses-long-cache-ttl",title:cT(sT.title),failureTitle:cT(sT.failureTitle),description:cT(sT.description),scoreDisplayMode:tT.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:28672,median:131072}}static getCacheHitProbability(e){const t=[0,.2,1,3,8,12,24,48,72,168,8760,1/0];if(12!==t.length)throw new Error("deciles 0-10 and 1 for overflow");const r=e/3600,a=t.findIndex((e=>e>=r));if(a===t.length-1)return 1;if(0===a)return 0;const n=t[a],i=t[a-1];return nT(i,(a-1)/10,n,a/10,r)}static computeCacheLifetimeInSeconds(e,t){if(t&&void 0!==t["max-age"])return t["max-age"];const r=e.get("expires");if(r){const e=new Date(r).getTime();return e?Math.ceil((e-Date.now())/1e3):0}return null}
749
749
  static isCacheableAsset(e){const t=new Set([200,203,206]),r=new Set([rT.TYPES.Font,rT.TYPES.Image,rT.TYPES.Media,rT.TYPES.Script,rT.TYPES.Stylesheet]);return!rT.isNonNetworkRequest(e)&&(t.has(e.statusCode)&&r.has(e.resourceType||"Other"))}static shouldSkipRecord(e,t){return!(t||!(e.get("pragma")||"").includes("no-cache"))||!(!t||!(t["must-revalidate"]||t["no-cache"]||t["no-store"]||t["stale-while-revalidate"]||t.private))}static audit(e,t){const r=e.devtoolsLogs[tT.DEFAULT_PASS];return oT.request(r,t).then((e=>{const r=[];let a=0;for(const t of e){if(!CacheHeaders$1.isCacheableAsset(t))continue;const e=new Map;for(const r of t.responseHeaders||[])if(e.has(r.name.toLowerCase())){const t=e.get(r.name.toLowerCase());e.set(r.name.toLowerCase(),`${t}, ${r.value}`)}else e.set(r.name.toLowerCase(),r.value);const n=eT(e.get("cache-control"));if(this.shouldSkipRecord(e,n))continue;let i=CacheHeaders$1.computeCacheLifetimeInSeconds(e,n);if(null!==i&&(!Number.isFinite(i)||i<=0))continue;i=i||0
750
750
  ;const o=CacheHeaders$1.getCacheHitProbability(i);if(o>.925)continue;const s=aT.elideDataURI(t.url),c=t.transferSize||0,l=(1-o)*c;let u;a+=l,n&&(u={type:"debugdata",...n}),r.push({url:s,debugData:u,cacheLifetimeMs:1e3*i,cacheHitProbability:o,totalBytes:c,wastedBytes:l})}r.sort(((e,t)=>e.cacheLifetimeMs-t.cacheLifetimeMs||t.totalBytes-e.totalBytes||e.url.localeCompare(t.url)));const n=tT.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),i=[{key:"url",itemType:"url",text:cT(iT.UIStrings.columnURL)},{key:"cacheLifetimeMs",itemType:"ms",text:cT(iT.UIStrings.columnCacheTTL),displayUnit:"duration"},{key:"totalBytes",itemType:"bytes",text:cT(iT.UIStrings.columnTransferSize),displayUnit:"kb",granularity:1}],o={wastedBytes:a},s=tT.makeTableDetails(i,r,o);return{score:n,numericValue:a,numericUnit:"byte",displayValue:cT(sT.displayValue,{itemCount:r.length}),details:s}}))}}QS.exports=CacheHeaders$1,QS.exports.UIStrings=sT;var lT={exports:{}};const uT=Ib,dT=ji,mT=oi,pT={
@@ -756,8 +756,8 @@ node:wT.makeNodeItem(e.node),url:o,totalBytes:c,wastedBytes:l,wastedPercent:100*
756
756
  ;const RT=kc,kT=fT.exports,DT=ji,CT=oi,IT={title:"Images were appropriate for their displayed size",failureTitle:"Images were larger than their displayed size",columnDisplayedDimensions:"Displayed dimensions",columnActualDimensions:"Actual dimensions"},NT=CT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js",IT);gT.exports=class UsesResponsiveImagesSnapshot extends RT{static get meta(){return{id:"uses-responsive-images-snapshot",title:NT(IT.title),failureTitle:NT(IT.failureTitle),description:kT.str_(kT.UIStrings.description),supportedModes:["snapshot"],requiredArtifacts:["ImageElements","ViewportDimensions"]}}static async audit(e){let t=1;const r=[];for(const a of e.ImageElements){if(!a.naturalDimensions)continue;const n=a.naturalDimensions,i=kT.getDisplayedDimensions({...a,naturalWidth:n.width,naturalHeight:n.height},e.ViewportDimensions),o=n.width*n.height,s=i.width*i.height;o<=s||(o-s>1365&&(t=0),r.push({
757
757
  node:RT.makeNodeItem(a.node),url:DT.elideDataURI(a.src),displayedDimensions:`${i.width}x${i.height}`,actualDimensions:`${n.width}x${n.height}`}))}const a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:NT(CT.UIStrings.columnURL)},{key:"displayedDimensions",itemType:"text",text:NT(IT.columnDisplayedDimensions)},{key:"actualDimensions",itemType:"text",text:NT(IT.columnActualDimensions)}];return{score:t,details:RT.makeTableDetails(a,r)}}},gT.exports.UIStrings=IT;var LT={exports:{}};const MT=Ib,PT=ji,OT=oi,FT={title:"Enable text compression",description:"Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more](https://web.dev/uses-text-compression/)."},UT=OT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-text-compression.js",FT);LT.exports=class ResponsesAreCompressed extends MT{static get meta(){return{id:"uses-text-compression",title:UT(FT.title),
758
758
  description:UT(FT.description),scoreDisplayMode:MT.SCORING_MODES.NUMERIC,requiredArtifacts:["ResponseCompression","GatherContext","devtoolsLogs","traces"]}}static audit_(e){const t=e.ResponseCompression,r=[];t.forEach((e=>{if(!e.gzipSize||e.gzipSize<0)return;const t=e.resourceSize,a=e.gzipSize,n=t-a;if(1-a/t<.1||n<1400||e.transferSize<a)return;const i=PT.elideDataURI(e.url);r.find((t=>t.url===i&&t.totalBytes===e.resourceSize))||r.push({url:i,totalBytes:t,wastedBytes:n})}));const a=[{key:"url",valueType:"url",label:UT(OT.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:UT(OT.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:UT(OT.UIStrings.columnWastedBytes)}];return{items:r,headings:a}}},LT.exports.UIStrings=FT;var jT={exports:{}};const BT=kc,$T={title:"Content is sized correctly for the viewport",failureTitle:"Content is not sized correctly for the viewport",
759
- description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},qT=oi.createMessageInstanceIdFn("lighthouse-core/audits/content-width.js",$T);jT.exports=class ContentWidth extends BT{static get meta(){return{id:"content-width",title:qT($T.title),failureTitle:qT($T.failureTitle),description:qT($T.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,t){const r=e.ViewportDimensions.innerWidth===e.ViewportDimensions.outerWidth;if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};let a;return r||(a=qT($T.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(r),explanation:a}}},jT.exports.UIStrings=$T;var zT={exports:{}};const VT=Ao,WT=Fo,GT=Lo;var HT=VT(class MainResource$h{
760
- static async compute_(e,t){const r=e.URL.finalUrl,a=await GT.request(e.devtoolsLog,t),n=WT.findMainDocument(a,r);if(!n)throw new Error("Unable to identify the main resource");return n}},["URL","devtoolsLog"]);const YT=Ao,KT=Ki,JT=HT,XT=eb;class CriticalRequestChains$2{static isCritical(e,t){if(!t)throw new Error("mainResource not provided");if(e.requestId===t.requestId)return!0;if(e.isLinkPreload)return!1;for(;e.redirectDestination;)e=e.redirectDestination;const r=e.resourceType===KT.TYPES.Document&&e.frameId!==t.frameId;return!([KT.TYPES.Image,KT.TYPES.XHR,KT.TYPES.Fetch,KT.TYPES.EventSource].includes(e.resourceType||"Other")||r||e.mimeType&&e.mimeType.startsWith("image/"))&&(!!e.initiatorRequest&&["VeryHigh","High","Medium"].includes(e.priority))}static extractChainsFromGraph(e,t){const r={};const a=new Set;return t.traverse(((t,n)=>{if(a.add(t),"network"!==t.type)return;if(!CriticalRequestChains$2.isCritical(t.record,e))return
759
+ description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},qT=oi.createMessageInstanceIdFn("lighthouse-core/audits/content-width.js",$T);jT.exports=class ContentWidth extends BT{static get meta(){return{id:"content-width",title:qT($T.title),failureTitle:qT($T.failureTitle),description:qT($T.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,t){const r=e.ViewportDimensions.innerWidth===e.ViewportDimensions.outerWidth;if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};let a;return r||(a=qT($T.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(r),explanation:a}}},jT.exports.UIStrings=$T;var zT={exports:{}};const VT=Ao,WT=Fo,HT=Lo;var GT=VT(class MainResource$h{
760
+ static async compute_(e,t){const r=e.URL.finalUrl,a=await HT.request(e.devtoolsLog,t),n=WT.findMainDocument(a,r);if(!n)throw new Error("Unable to identify the main resource");return n}},["URL","devtoolsLog"]);const YT=Ao,KT=Ki,JT=GT,XT=eb;class CriticalRequestChains$2{static isCritical(e,t){if(!t)throw new Error("mainResource not provided");if(e.requestId===t.requestId)return!0;if(e.isLinkPreload)return!1;for(;e.redirectDestination;)e=e.redirectDestination;const r=e.resourceType===KT.TYPES.Document&&e.frameId!==t.frameId;return!([KT.TYPES.Image,KT.TYPES.XHR,KT.TYPES.Fetch,KT.TYPES.EventSource].includes(e.resourceType||"Other")||r||e.mimeType&&e.mimeType.startsWith("image/"))&&(!!e.initiatorRequest&&["VeryHigh","High","Medium"].includes(e.priority))}static extractChainsFromGraph(e,t){const r={};const a=new Set;return t.traverse(((t,n)=>{if(a.add(t),"network"!==t.type)return;if(!CriticalRequestChains$2.isCritical(t.record,e))return
761
761
  ;const i=n.filter((e=>"network"===e.type)).reverse().map((e=>e.record));i.some((t=>!CriticalRequestChains$2.isCritical(t,e)))||function addChain(e){let t=r;for(const r of e)t[r.requestId]||(t[r.requestId]={request:r,children:{}}),t=t[r.requestId].children}(i)}),(function getNextNodes(e){return e.getDependents().filter((e=>e.getDependencies().every((e=>a.has(e)))))})),r}static async compute_(e,t){const r=await JT.request({URL:e.URL,devtoolsLog:e.devtoolsLog},t),a=await XT.request({trace:e.trace,devtoolsLog:e.devtoolsLog},t);return CriticalRequestChains$2.extractChainsFromGraph(r,a)}}var ZT=YT(CriticalRequestChains$2,["URL","devtoolsLog","trace"]);const QT=kc,eE=ZT,tE={title:"Avoid chaining critical requests",
762
762
  description:"The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn more](https://web.dev/critical-request-chains/).",displayValue:"{itemCount, plural,\n =1 {1 chain found}\n other {# chains found}\n }"},rE=oi.createMessageInstanceIdFn("lighthouse-core/audits/critical-request-chains.js",tE);class CriticalRequestChains$1 extends QT{static get meta(){return{id:"critical-request-chains",title:rE(tE.title),description:rE(tE.description),scoreDisplayMode:QT.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static _traverse(e,t){!function walk(e,r,a,n=0){const i=Object.keys(e);0!==i.length&&i.forEach((i=>{const o=e[i];a||(a=o.request.startTime),t({depth:r,id:i,node:o,chainDuration:1e3*(o.request.endTime-a),
763
763
  chainTransferSize:n+o.request.transferSize}),o.children&&walk(o.children,r+1,a)}),"")}(e,0)}static _getLongestChain(e){const t={duration:0,length:0,transferSize:0};return CriticalRequestChains$1._traverse(e,(e=>{const r=e.chainDuration;r>t.duration&&(t.duration=r,t.transferSize=e.chainTransferSize,t.length=e.depth)})),t.length++,t}static flattenRequests(e){const t={},r=new Map;return CriticalRequestChains$1._traverse(e,(function flatten(e){const a=e.node.request,n={url:a.url,startTime:a.startTime,endTime:a.endTime,responseReceivedTime:a.responseReceivedTime,transferSize:a.transferSize};let i=r.get(e.id);if(i?i.request=n:(i={request:n},t[e.id]=i),e.node.children)for(const t of Object.keys(e.node.children)){const e={request:{}};r.set(t,e),i.children||(i.children={}),i.children[t]=e}r.set(e.id,i)})),t}static audit(e,t){const r=e.traces[QT.DEFAULT_PASS],a=e.devtoolsLogs[QT.DEFAULT_PASS],n=e.URL;return eE.request({devtoolsLog:a,trace:r,URL:n},t).then((e=>{let t=0
@@ -795,132 +795,129 @@ nE.evaluateForFailure=function evaluateForFailure$1(e){const t=[...atLeastOnePas
795
795
  const r=t[e].trim().match(/\S+/g);if(Array.isArray(r)){const e=r[0].toLowerCase();if(e in this.csp.directives)continue;ME.isDirective(e);const t=[];for(let e,a=1;e=r[a];a++)e=normalizeDirectiveValue(e),t.includes(e)||t.push(e);this.csp.directives[e]=t}}return this.csp}},CE.TEST_ONLY={normalizeDirectiveValue};const{evaluateForFailure:PE,evaluateForSyntaxErrors:OE,evaluateForWarnings:FE}=nE,{Type:UE}=sE,{CspParser:jE}=CE,{Directive:BE}=oE,$E=on.default,qE=oi,{isIcuMessage:zE}=Vn,VE={missingBaseUri:"Missing base-uri allows injected <base> tags to set the base URL for all relative URLs (e.g. scripts) to an attacker controlled domain. Consider setting base-uri to 'none' or 'self'.",missingScriptSrc:"script-src directive is missing. This can allow the execution of unsafe scripts.",missingObjectSrc:"Missing object-src allows the injection of plugins that execute unsafe scripts. Consider setting object-src to 'none' if you can.",
796
796
  strictDynamic:"Host allowlists can frequently be bypassed. Consider using CSP nonces or hashes instead, along with 'strict-dynamic' if necessary.",unsafeInline:"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers. Consider using CSP nonces or hashes to allow scripts individually.",unsafeInlineFallback:"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",allowlistFallback:"Consider adding https: and http: URL schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",reportToOnly:"The reporting destination is only configured via the report-to directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a report-uri directive.",reportingDestinationMissing:"No CSP configures a reporting destination. This makes it difficult to maintain the CSP over time and monitor for any breakages.",
797
797
  nonceLength:"Nonces should be at least 8 characters long.",nonceCharset:"Nonces should use the base64 charset.",missingSemicolon:"Did you forget the semicolon? {keyword} seems to be a directive, not a keyword.",unknownDirective:"Unknown CSP directive.",unknownKeyword:"{keyword} seems to be an invalid keyword.",deprecatedReflectedXSS:"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",deprecatedReferrer:"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",deprecatedDisownOpener:"disown-opener is deprecated since CSP3. Please, use the Cross-Origin-Opener-Policy header instead.",plainWildcards:"Avoid using plain wildcards ({keyword}) in this directive. Plain wildcards allow scripts to be sourced from an unsafe domain.",plainUrlScheme:"Avoid using plain URL schemes ({keyword}) in this directive. Plain URL schemes allow scripts to be sourced from an unsafe domain."
798
- },WE=qE.createMessageInstanceIdFn("lighthouse-core/lib/csp-evaluator.js",VE),GE={[UE.MISSING_SEMICOLON]:VE.missingSemicolon,[UE.UNKNOWN_DIRECTIVE]:WE(VE.unknownDirective),[UE.INVALID_KEYWORD]:VE.unknownKeyword,[UE.MISSING_DIRECTIVES]:{[BE.BASE_URI]:WE(VE.missingBaseUri),[BE.SCRIPT_SRC]:WE(VE.missingScriptSrc),[BE.OBJECT_SRC]:WE(VE.missingObjectSrc)},[UE.SCRIPT_UNSAFE_INLINE]:WE(VE.unsafeInline),[UE.PLAIN_WILDCARD]:VE.plainWildcards,[UE.PLAIN_URL_SCHEMES]:VE.plainUrlScheme,[UE.NONCE_LENGTH]:WE(VE.nonceLength),[UE.NONCE_CHARSET]:WE(VE.nonceCharset),[UE.DEPRECATED_DIRECTIVE]:{[BE.REFLECTED_XSS]:WE(VE.deprecatedReflectedXSS),[BE.REFERRER]:WE(VE.deprecatedReferrer),[BE.DISOWN_OPENER]:WE(VE.deprecatedDisownOpener)},[UE.STRICT_DYNAMIC]:WE(VE.strictDynamic),[UE.UNSAFE_INLINE_FALLBACK]:WE(VE.unsafeInlineFallback),[UE.ALLOWLIST_FALLBACK]:WE(VE.allowlistFallback),[UE.REPORTING_DESTINATION_MISSING]:WE(VE.reportingDestinationMissing),[UE.REPORT_TO_ONLY]:WE(VE.reportToOnly)};function parseCsp(e){
799
- return new jE(e).csp}var HE={getTranslatedDescription:function getTranslatedDescription$1(e){let t=GE[e.type];return t?zE(t)?t:"string"==typeof t?WE(t,{keyword:e.value||""}):(t=t[e.directive],t||($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)):($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)},evaluateRawCspsForXss:function evaluateRawCspsForXss$1(e){const t=e.map(parseCsp);return{bypasses:PE(t),warnings:FE(t),syntax:OE(t)}},parseCsp,UIStrings:VE};const YE=kc,KE=HT,JE=oi,{evaluateRawCspsForXss:XE,getTranslatedDescription:ZE}=HE,QE={title:"Ensure CSP is effective against XSS attacks",description:"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn more](https://web.dev/csp-xss/)",noCsp:"No CSP found in enforcement mode",
798
+ },WE=qE.createMessageInstanceIdFn("lighthouse-core/lib/csp-evaluator.js",VE),HE={[UE.MISSING_SEMICOLON]:VE.missingSemicolon,[UE.UNKNOWN_DIRECTIVE]:WE(VE.unknownDirective),[UE.INVALID_KEYWORD]:VE.unknownKeyword,[UE.MISSING_DIRECTIVES]:{[BE.BASE_URI]:WE(VE.missingBaseUri),[BE.SCRIPT_SRC]:WE(VE.missingScriptSrc),[BE.OBJECT_SRC]:WE(VE.missingObjectSrc)},[UE.SCRIPT_UNSAFE_INLINE]:WE(VE.unsafeInline),[UE.PLAIN_WILDCARD]:VE.plainWildcards,[UE.PLAIN_URL_SCHEMES]:VE.plainUrlScheme,[UE.NONCE_LENGTH]:WE(VE.nonceLength),[UE.NONCE_CHARSET]:WE(VE.nonceCharset),[UE.DEPRECATED_DIRECTIVE]:{[BE.REFLECTED_XSS]:WE(VE.deprecatedReflectedXSS),[BE.REFERRER]:WE(VE.deprecatedReferrer),[BE.DISOWN_OPENER]:WE(VE.deprecatedDisownOpener)},[UE.STRICT_DYNAMIC]:WE(VE.strictDynamic),[UE.UNSAFE_INLINE_FALLBACK]:WE(VE.unsafeInlineFallback),[UE.ALLOWLIST_FALLBACK]:WE(VE.allowlistFallback),[UE.REPORTING_DESTINATION_MISSING]:WE(VE.reportingDestinationMissing),[UE.REPORT_TO_ONLY]:WE(VE.reportToOnly)};function parseCsp(e){
799
+ return new jE(e).csp}var GE={getTranslatedDescription:function getTranslatedDescription$1(e){let t=HE[e.type];return t?zE(t)?t:"string"==typeof t?WE(t,{keyword:e.value||""}):(t=t[e.directive],t||($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)):($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)},evaluateRawCspsForXss:function evaluateRawCspsForXss$1(e){const t=e.map(parseCsp);return{bypasses:PE(t),warnings:FE(t),syntax:OE(t)}},parseCsp,UIStrings:VE};const YE=kc,KE=GT,JE=oi,{evaluateRawCspsForXss:XE,getTranslatedDescription:ZE}=GE,QE={title:"Ensure CSP is effective against XSS attacks",description:"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn more](https://web.dev/csp-xss/)",noCsp:"No CSP found in enforcement mode",
800
800
  metaTagMessage:"The page contains a CSP defined in a <meta> tag. Consider defining the CSP in an HTTP header if you can.",columnDirective:"Directive",columnSeverity:"Severity",itemSeveritySyntax:"Syntax"},ex=JE.createMessageInstanceIdFn("lighthouse-core/audits/csp-xss.js",QE);aE.exports=class CspXss extends YE{static get meta(){return{id:"csp-xss",scoreDisplayMode:YE.SCORING_MODES.INFORMATIVE,title:ex(QE.title),description:ex(QE.description),requiredArtifacts:["devtoolsLogs","MetaElements","URL"]}}static async getRawCsps(e,t){const r=e.devtoolsLogs[YE.DEFAULT_PASS],a=await KE.request({devtoolsLog:r,URL:e.URL},t),n=e.MetaElements.filter((e=>e.httpEquiv&&"content-security-policy"===e.httpEquiv.toLowerCase())).flatMap((e=>(e.content||"").split(","))).filter((e=>e.replace(/\s/g,"")));return{cspHeaders:a.responseHeaders.filter((e=>"content-security-policy"===e.name.toLowerCase())).flatMap((e=>e.value.split(","))).filter((e=>e.replace(/\s/g,""))),cspMetaTags:n}}
801
801
  static findingToTableItem(e,t){return{directive:e.directive,description:ZE(e),severity:t}}static constructSyntaxResults(e,t){const r=[];for(let a=0;a<e.length;++a){const n=e[a].map((e=>this.findingToTableItem(e)));n.length&&r.push({severity:ex(QE.itemSeveritySyntax),description:{type:"code",value:t[a]},subItems:{type:"subitems",items:n}})}return r}static constructResults(e,t){const r=[...e,...t];if(!r.length)return{score:0,results:[{severity:ex(JE.UIStrings.itemSeverityHigh),description:ex(QE.noCsp),directive:void 0}]};const{bypasses:a,warnings:n,syntax:i}=XE(r),o=[...this.constructSyntaxResults(i,r),...a.map((e=>this.findingToTableItem(e,ex(JE.UIStrings.itemSeverityHigh)))),...n.map((e=>this.findingToTableItem(e,ex(JE.UIStrings.itemSeverityMedium))))];return t.length&&o.push({severity:ex(JE.UIStrings.itemSeverityMedium),description:ex(QE.metaTagMessage),directive:void 0}),{score:a.length?0:1,results:o}}static async audit(e,t){
802
- const{cspHeaders:r,cspMetaTags:a}=await this.getRawCsps(e,t),{score:n,results:i}=this.constructResults(r,a),o=[{key:"description",itemType:"text",subItemsHeading:{key:"description"},text:ex(JE.UIStrings.columnDescription)},{key:"directive",itemType:"code",subItemsHeading:{key:"directive"},text:ex(QE.columnDirective)},{key:"severity",itemType:"text",subItemsHeading:{key:"severity"},text:ex(QE.columnSeverity)}],s=YE.makeTableDetails(o,i);return{score:n,notApplicable:!i.length,details:s}}},aE.exports.UIStrings=QE;var tx={exports:{}};const rx=kc,ax=jb,nx=oi,ix={title:"Avoids deprecated APIs",failureTitle:"Uses deprecated APIs",description:"Deprecated APIs will eventually be removed from the browser. [Learn more](https://web.dev/deprecations/).",displayValue:"{itemCount, plural,\n =1 {1 warning found}\n other {# warnings found}\n }",columnDeprecate:"Deprecation / Warning",columnLine:"Line",feature:"Check the feature status page for more details.",
803
- milestone:"This change will go into effect with milestone {milestone}.",authorizationCoveredByWildcard:"Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.",canRequestURLHTTPContainingNewline:"Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.",chromeLoadTimesConnectionInfo:"`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.",chromeLoadTimesFirstPaintAfterLoadTime:"`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.",chromeLoadTimesWasAlternateProtocolAvailable:"`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",
804
- cookieWithTruncatingChar:"Cookies containing a `(0|r|n)` character will be rejected instead of truncated.",crossOriginAccessBasedOnDocumentDomain:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.",crossOriginWindowAlert:"Triggering `window.alert` from cross origin iframes has been deprecated and will be removed in the future.",crossOriginWindowConfirm:"Triggering `window.confirm` from cross origin iframes has been deprecated and will be removed in the future.",cssSelectorInternalMediaControlsOverlayCastButton:"The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",customCursorIntersectsViewport:"Custom cursors with size greater than 32x32 DIP intersecting native UI is deprecated and will be removed.",
805
- documentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",eventPath:"`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.",geolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
806
- geolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",getUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",hostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",
807
- insecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",legacyConstraintGoogCpuOveruseDetection:"CPU overuse detection is enabled-by-default and the ability to disable it using `googCpuOveruseDetection` will soon be removed. Please stop using this legacy constraint.",legacyConstraintGoogIPv6:"IPv6 is enabled-by-default and the ability to disable it using `googIPv6` will soon be removed. Please stop using this legacy constraint.",
808
- legacyConstraintGoogScreencastMinBitrate:"Screencast min bitrate is now set to 100 kbps by default and `googScreencastMinBitrate` will soon be ignored in favor of this new default. Please stop using this legacy constraint.",legacyConstraintGoogSuspendBelowMinBitrate:"Support for the `googSuspendBelowMinBitrate` constraint is about to be removed. Please stop using this legacy constraint.",localCSSFileExtensionRejected:"CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.",mediaElementAudioSourceNode:"Creating a `MediaElementAudioSourceNode` on an `OfflineAudioContext` is deprecated and will be removed.",mediaSourceAbortRemove:"Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should instead await `updateend`. `abort()` is intended to only abort an asynchronous media append or reset parser state.",
809
- mediaSourceDurationTruncatingBuffered:"Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`.",noSysexWebMIDIWithoutPermission:"Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.",notificationInsecureOrigin:"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",notificationPermissionRequestedIframe:"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.",
810
- obsoleteWebRtcCipherSuite:"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.",paymentRequestBasicCard:"The `basic-card` payment method is deprecated and will be removed.",paymentRequestShowWithoutGesture:"Calling `PaymentRequest.show()` without user activation is deprecated and will be removed.",pictureSourceSrc:"`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead.",prefixedCancelAnimationFrame:"`webkitCancelAnimationFrame` is vendor-specific. Please use the standard `cancelAnimationFrame` instead.",prefixedRequestAnimationFrame:"`webkitRequestAnimationFrame` is vendor-specific. Please use the standard `requestAnimationFrame` instead.",prefixedStorageInfo:"`window.webkitStorageInfo` is deprecated. Please use `navigator.webkitTemporaryStorage` or `navigator.webkitPersistentStorage` instead.",
811
- prefixedVideoDisplayingFullscreen:"`HTMLVideoElement.webkitDisplayingFullscreen` is deprecated. Please use `Document.fullscreenElement` instead.",prefixedVideoEnterFullScreen:"`HTMLVideoElement.webkitEnterFullScreen()` is deprecated. Please use `Element.requestFullscreen()` instead.",prefixedVideoEnterFullscreen:"`HTMLVideoElement.webkitEnterFullscreen()` is deprecated. Please use `Element.requestFullscreen()` instead.",prefixedVideoExitFullScreen:"`HTMLVideoElement.webkitExitFullsSreen()` is deprecated. Please use `Document.exitFullscreen()` instead.",prefixedVideoExitFullscreen:"`HTMLVideoElement.webkitExitFullscreen()` is deprecated. Please use `Document.exitFullscreen()` instead.",prefixedVideoSupportsFullscreen:"`HTMLVideoElement.webkitSupportsFullscreen` is deprecated. Please use `Document.fullscreenEnabled` instead.",rangeExpand:"`Range.expand()` is deprecated. Please use `Selection.modify()` instead.",
812
- requestedSubresourceWithEmbeddedCredentials:"Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",rtcConstraintEnableDtlsSrtpFalse:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES` key negotiation method. This functionality is removed; use a service that supports DTLS key negotiation instead.",rtcConstraintEnableDtlsSrtpTrue:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.",
813
- rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics:"Complex Plan B SDP detected! Chrome will switch the default `sdpSemantics` from `plan-b` to the standardized `unified-plan` format and this peer connection is relying on the default `sdpSemantics`. This SDP is not compatible with Unified Plan and will be rejected by clients expecting Unified Plan. For more information about how to prepare for the switch, see https://webrtc.org/web-apis/chrome/unified-plan/.",rtcPeerConnectionLegacyCreateWithMediaConstraints:"The `mediaConstraints` version of `RTCOfferOptions/RTCAnswerOptions` are deprecated and will soon be removed, please migrate to the promise-based `createOffer`/`createAnswer` instead.",
814
- rtcPeerConnectionSdpSemanticsPlanB:"Plan B SDP semantics, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the Session Description Protocol that has been permanently deleted from the Web Platform. It is still available when building with IS_FUCHSIA, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status.",rtcpMuxPolicyNegotiate:"The `rtcpMuxPolicy` option is deprecated and will be removed.",rtpDataChannel:"RTP data channels are no longer supported. The `RtpDataChannels` constraint is currently ignored, and may cause an error at a later date.",selectionAddRangeIntersect:"The behavior that `Selection.addRange()` merges existing Range and the specified Range was removed.",sharedArrayBufferConstructedWithoutIsolation:"`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.",
815
- textToSpeech_DisallowedByAutoplay:"`speechSynthesis.speak()` without user activation is deprecated and will be removed.",v8SharedArrayBufferConstructedInExtensionWithoutIsolation:"Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",webCodecsVideoFrameDefaultTimestamp:"Constructing a `VideoFrame` without a timestamp is deprecated and support will be removed. Please provide a timestamp via `VideoFrameInit`.",xhrJSONEncodingDetection:"UTF-16 is not supported by response json in `XMLHttpRequest`",xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:"Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.",xrSupportsSession:"`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead.",
816
- unknownDeprecation:"..."},ox=nx.createMessageInstanceIdFn("lighthouse-core/audits/deprecations.js",ix);tx.exports=class Deprecations extends rx{static get meta(){return{id:"deprecations",title:ox(ix.title),failureTitle:ox(ix.failureTitle),description:ox(ix.description),requiredArtifacts:["InspectorIssues","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await ax.request(e,t),a=e.InspectorIssues.deprecationIssue.map((e=>{const{url:t,lineNumber:a,columnNumber:n}=e.sourceCodeLocation,i=r.find((e=>e.script.src===t)),o=function getMeta(e){let t,r=0,a=0;const n=e.message;switch(e.type){case"AuthorizationCoveredByWildcard":t=ox(ix.authorizationCoveredByWildcard),a=97;break;case"CanRequestURLHTTPContainingNewline":t=ox(ix.canRequestURLHTTPContainingNewline),r=5735596811091968;break;case"ChromeLoadTimesConnectionInfo":t=ox(ix.chromeLoadTimesConnectionInfo),r=5637885046816768;break;case"ChromeLoadTimesFirstPaintAfterLoadTime":t=ox(ix.chromeLoadTimesFirstPaintAfterLoadTime),
817
- r=5637885046816768;break;case"ChromeLoadTimesWasAlternateProtocolAvailable":t=ox(ix.chromeLoadTimesWasAlternateProtocolAvailable),r=5637885046816768;break;case"CookieWithTruncatingChar":t=ox(ix.cookieWithTruncatingChar),a=103;break;case"CrossOriginAccessBasedOnDocumentDomain":t=ox(ix.crossOriginAccessBasedOnDocumentDomain),a=106;break;case"CrossOriginWindowAlert":t=ox(ix.crossOriginWindowAlert);break;case"CrossOriginWindowConfirm":t=ox(ix.crossOriginWindowConfirm);break;case"CSSSelectorInternalMediaControlsOverlayCastButton":t=ox(ix.cssSelectorInternalMediaControlsOverlayCastButton),r=5714245488476160;break;case"CustomCursorIntersectsViewport":t=ox(ix.customCursorIntersectsViewport),r=5825971391299584,a=75;break;case"DocumentDomainSettingWithoutOriginAgentClusterHeader":t=ox(ix.documentDomainSettingWithoutOriginAgentClusterHeader),a=106;break;case"EventPath":t=ox(ix.eventPath),r=5726124632965120,a=109;break;case"GeolocationInsecureOrigin":t=ox(ix.geolocationInsecureOrigin);break
818
- ;case"GeolocationInsecureOriginDeprecatedNotRemoved":t=ox(ix.geolocationInsecureOriginDeprecatedNotRemoved);break;case"GetUserMediaInsecureOrigin":t=ox(ix.getUserMediaInsecureOrigin);break;case"HostCandidateAttributeGetter":t=ox(ix.hostCandidateAttributeGetter);break;case"InsecurePrivateNetworkSubresourceRequest":t=ox(ix.insecurePrivateNetworkSubresourceRequest),r=5436853517811712,a=92;break;case"LegacyConstraintGoogCpuOveruseDetection":t=ox(ix.legacyConstraintGoogCpuOveruseDetection),a=103;break;case"LegacyConstraintGoogIPv6":t=ox(ix.legacyConstraintGoogIPv6),a=103;break;case"LegacyConstraintGoogScreencastMinBitrate":t=ox(ix.legacyConstraintGoogScreencastMinBitrate),a=103;break;case"LegacyConstraintGoogSuspendBelowMinBitrate":t=ox(ix.legacyConstraintGoogSuspendBelowMinBitrate),a=103;break;case"LocalCSSFileExtensionRejected":t=ox(ix.localCSSFileExtensionRejected),a=64;break;case"MediaElementAudioSourceNode":t=ox(ix.mediaElementAudioSourceNode),r=5258622686724096,a=71;break
819
- ;case"MediaSourceAbortRemove":t=ox(ix.mediaSourceAbortRemove),r=6107495151960064;break;case"MediaSourceDurationTruncatingBuffered":t=ox(ix.mediaSourceDurationTruncatingBuffered),r=6107495151960064;break;case"NoSysexWebMIDIWithoutPermission":t=ox(ix.noSysexWebMIDIWithoutPermission),r=5138066234671104,a=82;break;case"NotificationInsecureOrigin":t=ox(ix.notificationInsecureOrigin);break;case"NotificationPermissionRequestedIframe":t=ox(ix.notificationPermissionRequestedIframe),r=6451284559265792;break;case"ObsoleteWebRtcCipherSuite":t=ox(ix.obsoleteWebRtcCipherSuite),a=81;break;case"PaymentRequestBasicCard":t=ox(ix.paymentRequestBasicCard),r=5730051011117056,a=100;break;case"PaymentRequestShowWithoutGesture":t=ox(ix.paymentRequestShowWithoutGesture),r=5948593429020672,a=102;break;case"PictureSourceSrc":t=ox(ix.pictureSourceSrc);break;case"PrefixedCancelAnimationFrame":t=ox(ix.prefixedCancelAnimationFrame);break;case"PrefixedRequestAnimationFrame":t=ox(ix.prefixedRequestAnimationFrame)
820
- ;break;case"PrefixedStorageInfo":t=ox(ix.prefixedStorageInfo);break;case"PrefixedVideoDisplayingFullscreen":t=ox(ix.prefixedVideoDisplayingFullscreen);break;case"PrefixedVideoEnterFullScreen":t=ox(ix.prefixedVideoEnterFullScreen);break;case"PrefixedVideoEnterFullscreen":t=ox(ix.prefixedVideoEnterFullscreen);break;case"PrefixedVideoExitFullScreen":t=ox(ix.prefixedVideoExitFullScreen);break;case"PrefixedVideoExitFullscreen":t=ox(ix.prefixedVideoExitFullscreen);break;case"PrefixedVideoSupportsFullscreen":t=ox(ix.prefixedVideoSupportsFullscreen);break;case"RangeExpand":t=ox(ix.rangeExpand);break;case"RequestedSubresourceWithEmbeddedCredentials":t=ox(ix.requestedSubresourceWithEmbeddedCredentials),r=5669008342777856;break;case"RTCConstraintEnableDtlsSrtpFalse":t=ox(ix.rtcConstraintEnableDtlsSrtpFalse),a=97;break;case"RTCConstraintEnableDtlsSrtpTrue":t=ox(ix.rtcConstraintEnableDtlsSrtpTrue),a=97;break;case"RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics":
821
- t=ox(ix.rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics),a=72;break;case"RTCPeerConnectionLegacyCreateWithMediaConstraints":t=ox(ix.rtcPeerConnectionLegacyCreateWithMediaConstraints),a=103;break;case"RTCPeerConnectionSdpSemanticsPlanB":t=ox(ix.rtcPeerConnectionSdpSemanticsPlanB),r=5823036655665152,a=93;break;case"RtcpMuxPolicyNegotiate":t=ox(ix.rtcpMuxPolicyNegotiate),r=5654810086866944,a=62;break;case"RTPDataChannel":t=ox(ix.rtpDataChannel),a=88;break;case"SelectionAddRangeIntersect":t=ox(ix.selectionAddRangeIntersect),r=6680566019653632;break;case"SharedArrayBufferConstructedWithoutIsolation":t=ox(ix.sharedArrayBufferConstructedWithoutIsolation),a=106;break;case"TextToSpeech_DisallowedByAutoplay":t=ox(ix.textToSpeech_DisallowedByAutoplay),r=5687444770914304,a=71;break;case"V8SharedArrayBufferConstructedInExtensionWithoutIsolation":t=ox(ix.v8SharedArrayBufferConstructedInExtensionWithoutIsolation),a=96;break;case"WebCodecsVideoFrameDefaultTimestamp":
822
- t=ox(ix.webCodecsVideoFrameDefaultTimestamp),r=5667793157488640,a=99;break;case"XHRJSONEncodingDetection":t=ox(ix.xhrJSONEncodingDetection),a=93;break;case"XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload":t=ox(ix.xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload);break;case"XRSupportsSession":t=ox(ix.xrSupportsSession),a=80;break;default:t=n||ox(ix.unknownDeprecation)}return{message:t,milestone:a,feature:r}}(e),s=[];let c;o.feature&&s.push({type:"link",url:`https://chromestatus.com/feature/${o.feature}`,text:ox(ix.feature)}),o.milestone&&s.push({type:"link",url:"https://chromiumdash.appspot.com/schedule",text:ox(ix.milestone,{milestone:o.milestone})}),s.length&&(c={type:"subitems",items:s});return{value:o.message||"",source:rx.makeSourceLocation(t,a,n-1,i),subItems:c}})),n=[{key:"value",itemType:"text",text:ox(ix.columnDeprecate)},{key:"source",itemType:"source-location",text:ox(nx.UIStrings.columnSource)}],i=rx.makeTableDetails(n,a);let o
823
- ;return a.length>0&&(o=ox(ix.displayValue,{itemCount:a.length})),{score:Number(0===a.length),displayValue:o,details:i}}},tx.exports.UIStrings=ix;const sx=kc,cx=Rv,lx=Lo,ux=xl,dx=Fo;var mx=class Diagnostics extends sx{static get meta(){return{id:"diagnostics",scoreDisplayMode:sx.SCORING_MODES.INFORMATIVE,title:"Diagnostics",description:"Collection of useful page vitals.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=e.traces[sx.DEFAULT_PASS],a=e.devtoolsLogs[sx.DEFAULT_PASS],n=await cx.request(r,t),i=await lx.request(a,t),o=await ux.request(a,t),s=n.filter((e=>!e.parent)),c=dx.findMainDocument(i).transferSize,l=i.reduce(((e,t)=>e+(t.transferSize||0)),0),u=s.reduce(((e,t)=>e+(t.duration||0)),0),d=Math.max(...o.additionalRttByOrigin.values())+o.rtt,m=Math.max(...o.serverResponseTimeByOrigin.values());return{score:1,details:{type:"debugdata",items:[{numRequests:i.length,numScripts:i.filter((e=>"Script"===e.resourceType)).length,
824
- numStylesheets:i.filter((e=>"Stylesheet"===e.resourceType)).length,numFonts:i.filter((e=>"Font"===e.resourceType)).length,numTasks:s.length,numTasksOver10ms:s.filter((e=>e.duration>10)).length,numTasksOver25ms:s.filter((e=>e.duration>25)).length,numTasksOver50ms:s.filter((e=>e.duration>50)).length,numTasksOver100ms:s.filter((e=>e.duration>100)).length,numTasksOver500ms:s.filter((e=>e.duration>500)).length,rtt:o.rtt,throughput:o.throughput,maxRtt:d,maxServerLatency:m,totalByteWeight:l,totalTaskTime:u,mainDocumentTransferSize:c}]}}}},px={exports:{}};const hx=kc,gx=HT,fx={title:"Properly defines charset",failureTitle:"Charset declaration is missing or occurs too late in the HTML",description:"A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more](https://web.dev/charset/)."
825
- },yx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/charset.js",fx),vx=/^[a-zA-Z0-9-_:.()]{2,}$/,bx=/<meta[^>]+charset[^<]+>/i,wx=/charset\s*=\s*[a-zA-Z0-9-_:.()]{2,}/i;px.exports=class CharsetDefined extends hx{static get meta(){return{id:"charset",title:yx(fx.title),failureTitle:yx(fx.failureTitle),description:yx(fx.description),requiredArtifacts:["MainDocumentContent","URL","devtoolsLogs","MetaElements"]}}static async audit(e,t){const r=e.devtoolsLogs[hx.DEFAULT_PASS],a=await gx.request({devtoolsLog:r,URL:e.URL},t);let n=!1;if(a.responseHeaders){const e=a.responseHeaders.find((e=>"content-type"===e.name.toLowerCase()));e&&(n=wx.test(e.value))}return n=n||65279===e.MainDocumentContent.charCodeAt(0),bx.test(e.MainDocumentContent.slice(0,1024))&&(n=n||e.MetaElements.some((e=>e.charset&&vx.test(e.charset)||"content-type"===e.httpEquiv&&e.content&&wx.test(e.content)))),{score:Number(n)}}},px.exports.UIStrings=fx,px.exports.CHARSET_HTML_REGEX=bx,
826
- px.exports.CHARSET_HTTP_REGEX=wx,px.exports.IANA_REGEX=vx;var Sx={exports:{}};const Tx=kc,Ex={title:"Page has the HTML doctype",failureTitle:"Page lacks the HTML doctype, thus triggering quirks-mode",description:"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more](https://web.dev/doctype/).",explanationNoDoctype:"Document must contain a doctype",explanationPublicId:"Expected publicId to be an empty string",explanationSystemId:"Expected systemId to be an empty string",explanationBadDoctype:"Doctype name must be the lowercase string `html`"},xx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/doctype.js",Ex);Sx.exports=class Doctype extends Tx{static get meta(){return{id:"doctype",title:xx(Ex.title),failureTitle:xx(Ex.failureTitle),description:xx(Ex.description),requiredArtifacts:["Doctype"]}}static audit(e){if(!e.Doctype)return{score:0,explanation:xx(Ex.explanationNoDoctype)}
827
- ;const t=e.Doctype.name.trim(),r=e.Doctype.publicId,a=e.Doctype.systemId;return""!==r?{score:0,explanation:xx(Ex.explanationPublicId)}:""!==a?{score:0,explanation:xx(Ex.explanationSystemId)}:"html"===t?{score:1}:{score:0,explanation:xx(Ex.explanationBadDoctype)}}},Sx.exports.UIStrings=Ex;var _x={exports:{}};const Ax=kc,Rx=oi,kx={title:"Avoids an excessive DOM size",failureTitle:"Avoid an excessive DOM size",description:"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).",columnStatistic:"Statistic",columnValue:"Value",displayValue:"{itemCount, plural,\n =1 {1 element}\n other {# elements}\n }",statisticDOMElements:"Total DOM Elements",statisticDOMDepth:"Maximum DOM Depth",
828
- statisticDOMWidth:"Maximum Child Elements"},Dx=Rx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/dom-size.js",kx);_x.exports=class DOMSize extends Ax{static get meta(){return{id:"dom-size",title:Dx(kx.title),failureTitle:Dx(kx.failureTitle),description:Dx(kx.description),scoreDisplayMode:Ax.SCORING_MODES.NUMERIC,requiredArtifacts:["DOMStats"]}}static get defaultOptions(){return{p10:818,median:1400}}static audit(e,t){const r=e.DOMStats,a=Ax.computeLogNormalScore({p10:t.options.p10,median:t.options.median},r.totalBodyElements),n=[{key:"statistic",itemType:"text",text:Dx(kx.columnStatistic)},{key:"node",itemType:"node",text:Dx(Rx.UIStrings.columnElement)},{key:"value",itemType:"numeric",text:Dx(kx.columnValue)}],i=[{statistic:Dx(kx.statisticDOMElements),value:r.totalBodyElements},{node:Ax.makeNodeItem(r.depth),statistic:Dx(kx.statisticDOMDepth),value:r.depth.max},{node:Ax.makeNodeItem(r.width),statistic:Dx(kx.statisticDOMWidth),value:r.width.max}];return{score:a,
829
- numericValue:r.totalBodyElements,numericUnit:"element",displayValue:Dx(kx.displayValue,{itemCount:r.totalBodyElements}),details:Ax.makeTableDetails(n,i)}}},_x.exports.UIStrings=kx;var Cx={exports:{}};const Ix=kc,Nx=jb;var Lx=class ViolationAudit$4 extends Ix{static async getViolationResults(e,t,r){const a=await Nx.request(e,t);const n=new Set;return e.ConsoleMessages.filter((e=>e.url&&"violation"===e.source&&r.test(e.text))).map((e=>{const t=a.find((t=>t.script.src===e.url));return Ix.makeSourceLocationFromConsoleMessage(e,t)})).filter((function filterUndefined(e){return void 0!==e})).filter((e=>{const t=`${e.url}!${e.line}!${e.column}`;return!n.has(t)&&(n.add(t),!0)})).map((e=>({source:e})))}};const Mx=Lx,Px=oi,Ox={title:"Avoids requesting the geolocation permission on page load",failureTitle:"Requests the geolocation permission on page load",
830
- description:"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more](https://web.dev/geolocation-on-start/)."},Fx=Px.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/geolocation-on-start.js",Ox);Cx.exports=class GeolocationOnStart extends Mx{static get meta(){return{id:"geolocation-on-start",title:Fx(Ox.title),failureTitle:Fx(Ox.failureTitle),description:Fx(Ox.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Mx.getViolationResults(e,t,/geolocation/),a=[{key:"source",itemType:"source-location",text:Fx(Px.UIStrings.columnSource)}],n=Mx.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Cx.exports.UIStrings=Ox;var Ux={exports:{}};const jx=kc,Bx={title:"No issues in the `Issues` panel in Chrome Devtools",
831
- failureTitle:"Issues were logged in the `Issues` panel in Chrome Devtools",description:"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",columnIssueType:"Issue type",issueTypeBlockedByResponse:"Blocked by cross-origin policy",issueTypeHeavyAds:"Heavy resource usage by ads"},$x=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/inspector-issues.js",Bx);Ux.exports=class IssuesPanelEntries extends jx{static get meta(){return{id:"inspector-issues",title:$x(Bx.title),failureTitle:$x(Bx.failureTitle),description:$x(Bx.description),requiredArtifacts:["InspectorIssues"]}}static getMixedContentRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.mainResourceURL;t.add(e)}return{issueType:"Mixed content",subItems:{type:"subitems",
832
- items:Array.from(t).map((e=>({url:e})))}}}static getCookieRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.cookieUrl;e&&t.add(e)}return{issueType:"Cookie",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getBlockedByResponseRow(e){const t=new Set;for(const r of e){const e=r.request?.url;e&&t.add(e)}return{issueType:$x(Bx.issueTypeBlockedByResponse),subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getContentSecurityPolicyRow(e){const t=new Set;for(const r of e){const e=r.blockedURL;e&&t.add(e)}return{issueType:"Content security policy",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static audit(e){const t=[{key:"issueType",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:$x(Bx.columnIssueType)}],r=e.InspectorIssues,a=[];r.mixedContentIssue.length&&a.push(this.getMixedContentRow(r.mixedContentIssue)),r.cookieIssue.length&&a.push(this.getCookieRow(r.cookieIssue)),
833
- r.blockedByResponseIssue.length&&a.push(this.getBlockedByResponseRow(r.blockedByResponseIssue)),r.heavyAdIssue.length&&a.push({issueType:$x(Bx.issueTypeHeavyAds)});const n=r.contentSecurityPolicyIssue.filter((e=>"kTrustedTypesSinkViolation"!==e.contentSecurityPolicyViolationType&&"kTrustedTypesPolicyViolation"!==e.contentSecurityPolicyViolationType));return n.length&&a.push(this.getContentSecurityPolicyRow(n)),{score:a.length>0?0:1,details:jx.makeTableDetails(t,a)}}},Ux.exports.UIStrings=Bx;var qx={exports:{}};const zx=kc,Vx=oi,Wx={title:"Detected JavaScript libraries",description:"All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).",columnVersion:"Version"},Gx=Vx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/js-libraries.js",Wx);qx.exports=class JsLibrariesAudit extends zx{static get meta(){return{id:"js-libraries",title:Gx(Wx.title),scoreDisplayMode:zx.SCORING_MODES.INFORMATIVE,description:Gx(Wx.description),
834
- requiredArtifacts:["Stacks"]}}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)).filter((e=>!e.id.endsWith("-fast"))).map((e=>({name:e.name,version:e.version,npm:e.npm}))),r=[{key:"name",itemType:"text",text:Gx(Vx.UIStrings.columnName)},{key:"version",itemType:"text",text:Gx(Wx.columnVersion)}],a=zx.makeTableDetails(r,t,{}),n={type:"debugdata",stacks:e.Stacks.map((e=>({id:e.id,version:e.version})))};return t.length?{score:1,details:{...a,debugData:n}}:{score:null,notApplicable:!0}}},qx.exports.UIStrings=Wx;var Hx={exports:{}};const Yx=Lx,Kx=oi,Jx={title:"Avoids `document.write()`",failureTitle:"Avoid `document.write()`",description:"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://web.dev/no-document-write/)."},Xx=Kx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-document-write.js",Jx);Hx.exports=class NoDocWriteAudit extends Yx{static get meta(){
835
- return{id:"no-document-write",title:Xx(Jx.title),failureTitle:Xx(Jx.failureTitle),description:Xx(Jx.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Yx.getViolationResults(e,t,/document\.write/),a=[{key:"source",itemType:"source-location",text:Xx(Kx.UIStrings.columnSource)}],n=Yx.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Hx.exports.UIStrings=Jx;var Zx={exports:{}},Qx={exports:{}};!function(e,t){var r;t=e.exports=SemVer,r="object"==typeof La&&La.env&&La.env.NODE_DEBUG&&/\bsemver\b/i.test(La.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var a=Number.MAX_SAFE_INTEGER||9007199254740991,n=t.re=[],i=t.src=[],o=0,s=o++;i[s]="0|[1-9]\\d*";var c=o++;i[c]="[0-9]+";var l=o++;i[l]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=o++;i[u]="("+i[s]+")\\.("+i[s]+")\\.("+i[s]+")";var d=o++
836
- ;i[d]="("+i[c]+")\\.("+i[c]+")\\.("+i[c]+")";var m=o++;i[m]="(?:"+i[s]+"|"+i[l]+")";var p=o++;i[p]="(?:"+i[c]+"|"+i[l]+")";var h=o++;i[h]="(?:-("+i[m]+"(?:\\."+i[m]+")*))";var f=o++;i[f]="(?:-?("+i[p]+"(?:\\."+i[p]+")*))";var y=o++;i[y]="[0-9A-Za-z-]+";var v=o++;i[v]="(?:\\+("+i[y]+"(?:\\."+i[y]+")*))";var b=o++,w="v?"+i[u]+i[h]+"?"+i[v]+"?";i[b]="^"+w+"$";var S="[v=\\s]*"+i[d]+i[f]+"?"+i[v]+"?",T=o++;i[T]="^"+S+"$";var E=o++;i[E]="((?:<|>)?=?)";var x=o++;i[x]=i[c]+"|x|X|\\*";var _=o++;i[_]=i[s]+"|x|X|\\*";var A=o++;i[A]="[v=\\s]*("+i[_]+")(?:\\.("+i[_]+")(?:\\.("+i[_]+")(?:"+i[h]+")?"+i[v]+"?)?)?";var R=o++;i[R]="[v=\\s]*("+i[x]+")(?:\\.("+i[x]+")(?:\\.("+i[x]+")(?:"+i[f]+")?"+i[v]+"?)?)?";var k=o++;i[k]="^"+i[E]+"\\s*"+i[A]+"$";var D=o++;i[D]="^"+i[E]+"\\s*"+i[R]+"$";var C=o++;i[C]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var I=o++;i[I]="(?:~>?)";var N=o++;i[N]="(\\s*)"+i[I]+"\\s+",n[N]=new RegExp(i[N],"g");var L=o++;i[L]="^"+i[I]+i[A]+"$";var M=o++
837
- ;i[M]="^"+i[I]+i[R]+"$";var P=o++;i[P]="(?:\\^)";var O=o++;i[O]="(\\s*)"+i[P]+"\\s+",n[O]=new RegExp(i[O],"g");var F=o++;i[F]="^"+i[P]+i[A]+"$";var U=o++;i[U]="^"+i[P]+i[R]+"$";var j=o++;i[j]="^"+i[E]+"\\s*("+S+")$|^$";var B=o++;i[B]="^"+i[E]+"\\s*("+w+")$|^$";var $=o++;i[$]="(\\s*)"+i[E]+"\\s*("+S+"|"+i[A]+")",n[$]=new RegExp(i[$],"g");var q=o++;i[q]="^\\s*("+i[A]+")\\s+-\\s+("+i[A]+")\\s*$";var z=o++;i[z]="^\\s*("+i[R]+")\\s+-\\s+("+i[R]+")\\s*$";var V=o++;i[V]="(<|>)?=?\\s*\\*";for(var W=0;W<35;W++)r(W,i[W]),n[W]||(n[W]=new RegExp(i[W]));function parse(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?n[T]:n[b]).test(e))return null;try{return new SemVer(e,t)}catch(e){return null}}function SemVer(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer){if(e.loose===t.loose)return e;e=e.version
838
- }else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof SemVer))return new SemVer(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var i=e.trim().match(t.loose?n[T]:n[b]);if(!i)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>a||this.major<0)throw new TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>a||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<a)return t}return e})):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}t.parse=parse,t.valid=function valid(e,t){var r=parse(e,t);return r?r.version:null},t.clean=function clean(e,t){var r=parse(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null},
839
- t.SemVer=SemVer,SemVer.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},SemVer.prototype.toString=function(){return this.version},SemVer.prototype.compare=function(e){return r("SemVer.compare",this.version,this.options,e),e instanceof SemVer||(e=new SemVer(e,this.options)),this.compareMain(e)||this.comparePre(e)},SemVer.prototype.compareMain=function(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)},SemVer.prototype.comparePre=function(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var a=this.prerelease[t],n=e.prerelease[t]
840
- ;if(r("prerelease compare",t,a,n),void 0===a&&void 0===n)return 0;if(void 0===n)return 1;if(void 0===a)return-1;if(a!==n)return compareIdentifiers(a,n)}while(++t)},SemVer.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{
841
- for(var r=this.prerelease.length;--r>=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function inc(e,t,r,a){"string"==typeof r&&(a=r,r=void 0);try{return new SemVer(e,r).inc(t,a).version}catch(e){return null}},t.diff=function diff(e,t){if(eq(e,t))return null;var r=parse(e),a=parse(t),n="";if(r.prerelease.length||a.prerelease.length){n="pre";var i="prerelease"}for(var o in r)if(("major"===o||"minor"===o||"patch"===o)&&r[o]!==a[o])return n+o;return i},t.compareIdentifiers=compareIdentifiers;var G=/^[0-9]+$/;function compareIdentifiers(e,t){var r=G.test(e),a=G.test(t);return r&&a&&(e=+e,t=+t),e===t?0:r&&!a?-1:a&&!r?1:e<t?-1:1}function compare(e,t,r){return new SemVer(e,r).compare(new SemVer(t,r))}function gt(e,t,r){
842
- return compare(e,t,r)>0}function lt(e,t,r){return compare(e,t,r)<0}function eq(e,t,r){return 0===compare(e,t,r)}function neq(e,t,r){return 0!==compare(e,t,r)}function gte(e,t,r){return compare(e,t,r)>=0}function lte(e,t,r){return compare(e,t,r)<=0}function cmp(e,t,r,a){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return eq(e,r,a);case"!=":return neq(e,r,a);case">":return gt(e,r,a);case">=":return gte(e,r,a);case"<":return lt(e,r,a);case"<=":return lte(e,r,a);default:throw new TypeError("Invalid operator: "+t)}}function Comparator(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof Comparator))return new Comparator(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),
843
- this.semver===H?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function rcompareIdentifiers(e,t){return compareIdentifiers(t,e)},t.major=function major(e,t){return new SemVer(e,t).major},t.minor=function minor(e,t){return new SemVer(e,t).minor},t.patch=function patch(e,t){return new SemVer(e,t).patch},t.compare=compare,t.compareLoose=function compareLoose(e,t){return compare(e,t,!0)},t.rcompare=function rcompare(e,t,r){return compare(t,e,r)},t.sort=function sort(e,r){return e.sort((function(e,a){return t.compare(e,a,r)}))},t.rsort=function rsort(e,r){return e.sort((function(e,a){return t.rcompare(e,a,r)}))},t.gt=gt,t.lt=lt,t.eq=eq,t.neq=neq,t.gte=gte,t.lte=lte,t.cmp=cmp,t.Comparator=Comparator;var H={};function Range(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Range)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new Range(e.raw,t)
844
- ;if(e instanceof Comparator)return new Range(e.value,t);if(!(this instanceof Range))return new Range(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function isX(e){return!e||"x"===e.toLowerCase()||"*"===e}function hyphenReplace(e,t,r,a,n,i,o,s,c,l,u,d,m){return((t=isX(r)?"":isX(a)?">="+r+".0.0":isX(n)?">="+r+"."+a+".0":">="+t)+" "+(s=isX(c)?"":isX(l)?"<"+(+c+1)+".0.0":isX(u)?"<"+c+"."+(+l+1)+".0":d?"<="+c+"."+l+"."+u+"-"+d:"<="+s)).trim()}function testSet(e,t,a){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!a.includePrerelease){for(n=0;n<e.length;n++)if(r(e[n].semver),e[n].semver!==H&&e[n].semver.prerelease.length>0){var i=e[n].semver
845
- ;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}function satisfies(e,t,r){try{t=new Range(t,r)}catch(e){return!1}return t.test(e)}function outside(e,t,r,a){var n,i,o,s,c;switch(e=new SemVer(e,a),t=new Range(t,a),r){case">":n=gt,i=lte,o=lt,s=">",c=">=";break;case"<":n=lt,i=gte,o=gt,s="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies(e,t,a))return!1;for(var l=0;l<t.set.length;++l){var u=t.set[l],d=null,m=null;if(u.forEach((function(e){e.semver===H&&(e=new Comparator(">=0.0.0")),d=d||e,m=m||e,n(e.semver,d.semver,a)?d=e:o(e.semver,m.semver,a)&&(m=e)})),d.operator===s||d.operator===c)return!1;if((!m.operator||m.operator===s)&&i(e,m.semver))return!1;if(m.operator===c&&o(e,m.semver))return!1}return!0}Comparator.prototype.parse=function(e){var t=this.options.loose?n[j]:n[B],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),
846
- r[2]?this.semver=new SemVer(r[2],this.options.loose):this.semver=H},Comparator.prototype.toString=function(){return this.value},Comparator.prototype.test=function(e){return r("Comparator.test",e,this.options.loose),this.semver===H||("string"==typeof e&&(e=new SemVer(e,this.options)),cmp(e,this.operator,this.semver,this.options))},Comparator.prototype.intersects=function(e,t){if(!(e instanceof Comparator))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return r=new Range(e.value,t),satisfies(this.value,r,t);if(""===e.operator)return r=new Range(this.value,t),satisfies(e.semver,r,t)
847
- ;var a=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,o=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=cmp(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=cmp(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return a||n||i&&o||s||c},t.Range=Range,Range.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},Range.prototype.toString=function(){return this.range},Range.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var a=t?n[z]:n[q];e=e.replace(a,hyphenReplace),r("hyphen replace",e),e=e.replace(n[$],"$1$2$3"),r("comparator trim",e,n[$]),
848
- e=(e=(e=e.replace(n[N],"$1~")).replace(n[O],"$1^")).split(/\s+/).join(" ");var i=t?n[j]:n[B],o=e.split(" ").map((function(e){return function parseComparator(e,t){return r("comp",e,t),e=function replaceCarets(e,t){return e.trim().split(/\s+/).map((function(e){return function replaceCaret(e,t){r("caret",e,t);var a=t.loose?n[U]:n[F];return e.replace(a,(function(t,a,n,i,o){var s;return r("caret",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s="0"===a?">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":">="+a+"."+n+".0 <"+(+a+1)+".0.0":o?(r("replaceCaret pr",o),s="0"===a?"0"===n?">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+"-"+o+" <"+(+a+1)+".0.0"):(r("no pr"),s="0"===a?"0"===n?">="+a+"."+n+"."+i+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+" <"+(+a+1)+".0.0"),r("caret return",s),s}))}(e,t)})).join(" ")}(e,t),r("caret",e),e=function replaceTildes(e,t){
849
- return e.trim().split(/\s+/).map((function(e){return function replaceTilde(e,t){var a=t.loose?n[M]:n[L];return e.replace(a,(function(t,a,n,i,o){var s;return r("tilde",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s=">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":o?(r("replaceTilde pr",o),s=">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0"):s=">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0",r("tilde return",s),s}))}(e,t)})).join(" ")}(e,t),r("tildes",e),e=function replaceXRanges(e,t){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function replaceXRange(e,t){e=e.trim();var a=t.loose?n[D]:n[k];return e.replace(a,(function(t,a,n,i,o,s){r("xRange",e,t,a,n,i,o,s);var c=isX(n),l=c||isX(i),u=l||isX(o);return"="===a&&u&&(a=""),c?t=">"===a||"<"===a?"<0.0.0":"*":a&&u?(l&&(i=0),o=0,">"===a?(a=">=",l?(n=+n+1,i=0,o=0):(i=+i+1,o=0)):"<="===a&&(a="<",l?n=+n+1:i=+i+1),t=a+n+"."+i+"."+o):l?t=">="+n+".0.0 <"+(+n+1)+".0.0":u&&(t=">="+n+"."+i+".0 <"+n+"."+(+i+1)+".0"),
850
- r("xRange return",t),t}))}(e,t)})).join(" ")}(e,t),r("xrange",e),e=function replaceStars(e,t){return r("replaceStars",e,t),e.trim().replace(n[V],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(o=o.filter((function(e){return!!e.match(i)}))),o=o.map((function(e){return new Comparator(e,this.options)}),this)},Range.prototype.intersects=function(e,t){if(!(e instanceof Range))throw new TypeError("a Range is required");return this.set.some((function(r){return r.every((function(r){return e.set.some((function(e){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function toComparators(e,t){return new Range(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},Range.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new SemVer(e,this.options));for(var t=0;t<this.set.length;t++)if(testSet(this.set[t],e,this.options))return!0;return!1},
851
- t.satisfies=satisfies,t.maxSatisfying=function maxSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&-1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minSatisfying=function minSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minVersion=function minVersion(e,t){e=new Range(e,t);var r=new SemVer("0.0.0");if(e.test(r))return r;if(r=new SemVer("0.0.0-0"),e.test(r))return r;r=null;for(var a=0;a<e.set.length;++a){e.set[a].forEach((function(e){var t=new SemVer(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!gt(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))return r;return null},t.validRange=function validRange(e,t){try{
852
- return new Range(e,t).range||"*"}catch(e){return null}},t.ltr=function ltr(e,t,r){return outside(e,t,"<",r)},t.gtr=function gtr(e,t,r){return outside(e,t,">",r)},t.outside=outside,t.prerelease=function prerelease(e,t){var r=parse(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function intersects(e,t,r){return e=new Range(e,r),t=new Range(t,r),e.intersects(t)},t.coerce=function coerce(e){if(e instanceof SemVer)return e;if("string"!=typeof e)return null;var t=e.match(n[C]);if(null==t)return null;return parse(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}}(Qx,Qx.exports);const e_=kc,t_=Jl,r_=Qx.exports,a_={npm:{"@angular/core":[{id:"SNYK-JS-ANGULARCORE-1070902",severity:"low",semver:{vulnerable:["<11.0.5",">=11.1.0-next.0 <11.1.0-next.3"]}}],angular:[{id:"SNYK-JS-ANGULAR-572020",severity:"high",semver:{vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-570058",severity:"medium",semver:{vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-534884",severity:"high",semver:{
853
- vulnerable:[">=1.4.0-beta.6 <1.7.9"]}},{id:"SNYK-JS-ANGULAR-471885",severity:"medium",semver:{vulnerable:["<1.6.3"]}},{id:"SNYK-JS-ANGULAR-471882",severity:"medium",semver:{vulnerable:["<1.6.5"]}},{id:"SNYK-JS-ANGULAR-471879",severity:"medium",semver:{vulnerable:["<1.6.0-rc.0"]}},{id:"npm:angular:20180202",severity:"medium",semver:{vulnerable:["<1.6.9"]}},{id:"npm:angular:20171018",severity:"medium",semver:{vulnerable:["<1.6.7"]}},{id:"npm:angular:20160527",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.30"]}},{id:"npm:angular:20160122",severity:"medium",semver:{vulnerable:[">=1.3.0 <1.5.0-rc.2"]}},{id:"npm:angular:20140608",severity:"low",semver:{vulnerable:["<1.3.0"]}},{id:"npm:angular:20131113",severity:"high",semver:{vulnerable:["<1.2.2"]}},{id:"npm:angular:20140908",severity:"medium",semver:{vulnerable:["<1.3.0-rc.5"]}},{id:"npm:angular:20161101",severity:"medium",semver:{vulnerable:[">=1.5.0 <1.5.9"]}},{id:"npm:angular:20150909",severity:"high",semver:{
854
- vulnerable:["<1.5.0-beta.2"]}},{id:"npm:angular:20151205",severity:"medium",semver:{vulnerable:["<1.5.0-rc.0"]}},{id:"npm:angular:20151130",severity:"medium",semver:{vulnerable:["<1.4.10"]}},{id:"npm:angular:20130622",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.0"]}},{id:"npm:angular:20150807-1",severity:"medium",semver:{vulnerable:[">=1.3.1 <1.5.0-beta.0"]}},{id:"npm:angular:20150807",severity:"high",semver:{vulnerable:[">=1.0.0 <1.5.0-beta.0"]}},{id:"npm:angular:20150315",severity:"medium",semver:{vulnerable:["<1.6.1"]}},{id:"npm:angular:20150310",severity:"high",semver:{vulnerable:["<1.4.0-beta.6"]}},{id:"npm:angular:20141104",severity:"medium",semver:{vulnerable:["<1.3.2"]}},{id:"npm:angular:20130621",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"npm:angular:20140909",severity:"high",semver:{vulnerable:[">=1.2.19 <1.2.27"]}},{id:"npm:angular:20130625",severity:"high",semver:{vulnerable:["<1.1.5"]}}],backbone:[{id:"npm:backbone:20160523",severity:"medium",semver:{
855
- vulnerable:["<0.1.2"]}},{id:"npm:backbone:20110701",severity:"medium",semver:{vulnerable:["<0.5.0"]}}],bootstrap:[{id:"SNYK-JS-BOOTSTRAP-173700",severity:"medium",semver:{vulnerable:["<3.4.1",">=4.0.0 <4.3.1"]}},{id:"SNYK-JS-BOOTSTRAP-73560",severity:"medium",semver:{vulnerable:[">=4.0.0 <4.1.2"]}},{id:"SNYK-JS-BOOTSTRAP-72890",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"SNYK-JS-BOOTSTRAP-72889",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:bootstrap:20180529",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0 <4.1.2"]}},{id:"npm:bootstrap:20160627",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0-alpha <4.0.0-beta.2"]}},{id:"npm:bootstrap:20120510",severity:"medium",semver:{vulnerable:["<2.1.0"]}}],dojo:[{id:"SNYK-JS-DOJO-1535223",severity:"high",semver:{vulnerable:["<1.17.0"]}},{id:"SNYK-JS-DOJO-559224",severity:"medium",semver:{vulnerable:["<1.11.10",">=1.12.1 <1.12.8",">=1.13.0 <1.13.7",">=1.14.0 <1.14.6",">=1.15.0 <1.15.3",">=1.16.0 <1.16.2"]}
856
- },{id:"SNYK-JS-DOJO-174934",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}},{id:"SNYK-JS-DOJO-174933",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"SNYK-JS-DOJO-72305",severity:"medium",semver:{vulnerable:[">=1.14.0-pre <1.14.0",">=1.13.0 <1.13.1",">=1.12.1 <1.12.4",">=1.11.0-rc1 <1.11.6","<1.10.10"]}},{id:"npm:dojo:20180818",severity:"medium",semver:{vulnerable:["<1.10.10",">=1.11.0 <1.11.6",">=1.12.0 <1.12.4",">=1.13.0 <1.13.1"]}},{id:"npm:dojo:20100614-6",severity:"medium",semver:{vulnerable:["<1.4.2"]}},{id:"npm:dojo:20100614",severity:"medium",semver:{vulnerable:[">=0.4.0 <0.4.4",">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}}],"foundation-sites":[{id:"npm:foundation-sites:20170802",severity:"medium",semver:{vulnerable:["<6.0.0"]}},{id:"npm:foundation-sites:20150619",severity:"medium",semver:{vulnerable:["<5.5.3"]}},{id:"npm:foundation-sites:20120717",
857
- severity:"medium",semver:{vulnerable:[">=3.0.0 <3.0.6"]}}],"google-closure-library":[{id:"SNYK-JS-GOOGLECLOSURELIBRARY-561341",severity:"medium",semver:{vulnerable:["<20200315.0.0"]}},{id:"SNYK-JS-GOOGLECLOSURELIBRARY-174519",severity:"medium",semver:{vulnerable:[">=20190121.0.0 <20190301.0.0"]}}],gsap:[{id:"SNYK-JS-GSAP-1054614",severity:"high",semver:{vulnerable:["<3.6.0"]}}],handlebars:[{id:"SNYK-JS-HANDLEBARS-1279029",severity:"medium",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-1056767",severity:"high",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-567742",severity:"medium",semver:{vulnerable:["<4.6.0"]}},{id:"SNYK-JS-HANDLEBARS-534988",severity:"critical",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-534478",severity:"high",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-480388",severity:"high",semver:{vulnerable:[">=4.0.0 <4.4.5"]}},{id:"SNYK-JS-HANDLEBARS-469063",severity:"high",semver:{
858
- vulnerable:[">=4.0.0 <4.3.0","<3.8.0"]}},{id:"SNYK-JS-HANDLEBARS-174183",severity:"high",semver:{vulnerable:[">=3.0.0 <3.0.7",">=4.1.0 <4.1.2",">=4.0.0 <4.0.14"]}},{id:"SNYK-JS-HANDLEBARS-173692",severity:"high",semver:{vulnerable:["<4.0.14",">=4.1.0 <4.1.2"]}},{id:"npm:handlebars:20151207",severity:"medium",semver:{vulnerable:["<4.0.0"]}},{id:"npm:handlebars:20110425",severity:"medium",semver:{vulnerable:["<=1.0.0-beta.3"]}}],highcharts:[{id:"SNYK-JS-HIGHCHARTS-1290057",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-1018906",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-571995",severity:"high",semver:{vulnerable:["<7.2.2",">=8.0.0 <8.1.1"]}},{id:"npm:highcharts:20180225",severity:"high",semver:{vulnerable:["<6.1.0"]}}],jquery:[{id:"SNYK-JS-JQUERY-569619",severity:"medium",semver:{vulnerable:["<1.9.0"]}},{id:"SNYK-JS-JQUERY-567880",severity:"medium",semver:{vulnerable:[">=1.2.0 <3.5.0"]}},{id:"SNYK-JS-JQUERY-565129",
859
- severity:"medium",semver:{vulnerable:[">=1.5.1 <3.5.0"]}},{id:"SNYK-JS-JQUERY-174006",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:jquery:20160529",severity:"low",semver:{vulnerable:[">=3.0.0-rc1 <3.0.0"]}},{id:"npm:jquery:20150627",severity:"medium",semver:{vulnerable:["<1.12.2",">=1.12.3 <2.2.0",">=2.2.3 <3.0.0"]}},{id:"npm:jquery:20140902",severity:"medium",semver:{vulnerable:[">=1.4.2 <1.6.2"]}},{id:"npm:jquery:20120206",severity:"medium",semver:{vulnerable:["<1.9.1"]}},{id:"npm:jquery:20110606",severity:"medium",semver:{vulnerable:["<1.6.3"]}}],"jquery-mobile":[{id:"SNYK-JS-JQUERYMOBILE-174599",severity:"medium",semver:{vulnerable:["<=1.5.0-alpha.1"]}},{id:"npm:jquery-mobile:20120802",severity:"medium",semver:{vulnerable:["<1.2.0"]}}],"jquery-ui":[{id:"SNYK-JS-JQUERYUI-1767767",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"SNYK-JS-JQUERYUI-1767175",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"SNYK-JS-JQUERYUI-1767167",severity:"high",semver:{
860
- vulnerable:["<1.13.0"]}},{id:"npm:jquery-ui:20121127",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20100903",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20160721",severity:"high",semver:{vulnerable:["<1.12.0"]}}],knockout:[{id:"npm:knockout:20180213",severity:"medium",semver:{vulnerable:["<3.5.0-beta"]}},{id:"npm:knockout:20130701",severity:"medium",semver:{vulnerable:[">=2.1.0-pre <3.0.0"]}}],lodash:[{id:"SNYK-JS-LODASH-1040724",severity:"high",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-1018905",severity:"medium",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-608086",severity:"high",semver:{vulnerable:["<4.17.17"]}},{id:"SNYK-JS-LODASH-567746",severity:"high",semver:{vulnerable:["<4.17.20"]}},{id:"SNYK-JS-LODASH-450202",severity:"high",semver:{vulnerable:["<4.17.12"]}},{id:"SNYK-JS-LODASH-73639",severity:"medium",semver:{vulnerable:["<4.17.11"]}},{id:"SNYK-JS-LODASH-73638",severity:"high",semver:{
861
- vulnerable:["<4.17.11"]}},{id:"npm:lodash:20180130",severity:"medium",semver:{vulnerable:["<4.17.5"]}}],moment:[{id:"SNYK-JS-MOMENT-2440688",severity:"high",semver:{vulnerable:["<2.29.2"]}},{id:"npm:moment:20170905",severity:"low",semver:{vulnerable:["<2.19.3"]}},{id:"npm:moment:20161019",severity:"medium",semver:{vulnerable:["<2.15.2"]}},{id:"npm:moment:20160126",severity:"medium",semver:{vulnerable:["<2.11.2"]}}],mustache:[{id:"npm:mustache:20151207",severity:"medium",semver:{vulnerable:["<2.2.1"]}},{id:"npm:mustache:20110814",severity:"medium",semver:{vulnerable:["< 0.3.1"]}}],next:[{id:"SNYK-JS-NEXT-2405694",severity:"medium",semver:{vulnerable:[">=10.0.0 <12.1.0"]}},{id:"SNYK-JS-NEXT-2388583",severity:"medium",semver:{vulnerable:[">=12.0.0 <12.0.9"]}},{id:"SNYK-JS-NEXT-2312745",severity:"high",semver:{vulnerable:[">=12.0.0 <12.0.5",">=11.1.0 <11.1.3"]}},{id:"SNYK-JS-NEXT-1577139",severity:"medium",semver:{vulnerable:[">=10.0.0 <11.1.1"]}},{id:"SNYK-JS-NEXT-1540422",
862
- severity:"medium",semver:{vulnerable:["<11.1.0"]}},{id:"SNYK-JS-NEXT-1063481",severity:"medium",semver:{vulnerable:[">=9.5.0 <9.5.4"]}},{id:"SNYK-JS-NEXT-571938",severity:"high",semver:{vulnerable:["<5.1.0"]}},{id:"SNYK-JS-NEXT-561584",severity:"medium",semver:{vulnerable:["<9.3.2"]}},{id:"SNYK-JS-NEXT-174590",severity:"high",semver:{vulnerable:["<2.4.1"]}},{id:"SNYK-JS-NEXT-72454",severity:"medium",semver:{vulnerable:[">=7.0.0 <7.0.2"]}},{id:"npm:next:20180124",severity:"high",semver:{vulnerable:["<4.2.3"]}},{id:"npm:next:20170607",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:next:20170601",severity:"high",semver:{vulnerable:["<2.4.1",">=3.0.0-beta1 <3.0.0-beta7"]}}],react:[{id:"npm:react:20150318",severity:"high",semver:{vulnerable:[">=0.0.1 <0.14.0"]}},{id:"npm:react:20131217",severity:"medium",semver:{vulnerable:[">=0.5.0 <0.5.2",">=0.4.0 <0.4.2"]}}],riot:[{id:"npm:riot:20131114",severity:"medium",semver:{vulnerable:["<0.9.6"]}}],"socket.io":[{
863
- id:"SNYK-JS-SOCKETIO-1024859",severity:"medium",semver:{vulnerable:["<2.4.0"]}},{id:"npm:socket.io:20120417",severity:"medium",semver:{vulnerable:["<0.9.6"]}},{id:"npm:socket.io:20120323",severity:"medium",semver:{vulnerable:["<0.9.7"]}}],three:[{id:"SNYK-JS-THREE-1064931",severity:"high",semver:{vulnerable:["<0.125.0"]}}],underscore:[{id:"SNYK-JS-UNDERSCORE-1080984",severity:"medium",semver:{vulnerable:[">=1.13.0-0 <1.13.0-2",">=1.3.2 <1.12.1"]}}],vue:[{id:"npm:vue:20170829",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:vue:20170401",severity:"medium",semver:{vulnerable:["<2.3.0-beta.1"]}},{id:"npm:vue:20180802",severity:"medium",semver:{vulnerable:["<2.5.17"]}},{id:"npm:vue:20180222",severity:"low",semver:{vulnerable:["<2.5.14"]}}],yui:[{id:"npm:yui:20130604",severity:"medium",semver:{vulnerable:[">=3.0.0 <3.10.1","=3.10.2"]}},{id:"npm:yui:20130515",severity:"medium",semver:{vulnerable:["<3.10.0 >=3.0.0"]}},{id:"npm:yui:20121030",severity:"medium",semver:{
864
- vulnerable:["<3.0.0 >=2.4.0"]}},{id:"npm:yui:20120428",severity:"medium",semver:{vulnerable:["<3.5.1 >=3.5.0-PR1"]}},{id:"npm:yui:20101025",severity:"medium",semver:{vulnerable:["<2.8.2 >=2.4.0"]}}]}},n_=oi,i_={title:"Avoids front-end JavaScript libraries with known security vulnerabilities",failureTitle:"Includes front-end JavaScript libraries with known security vulnerabilities",description:"Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://web.dev/no-vulnerable-libraries/).",displayValue:"{itemCount, plural,\n =1 {1 vulnerability detected}\n other {# vulnerabilities detected}\n }",columnVersion:"Library Version",columnVuln:"Vulnerability Count",columnSeverity:"Highest Severity"},o_=n_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js",i_),s_=/^(\d+\.\d+\.\d+)[^-0-9]+/,c_={low:o_(n_.UIStrings.itemSeverityLow),
865
- medium:o_(n_.UIStrings.itemSeverityMedium),high:o_(n_.UIStrings.itemSeverityHigh)};class NoVulnerableLibrariesAudit extends e_{static get meta(){return{id:"no-vulnerable-libraries",title:o_(i_.title),failureTitle:o_(i_.failureTitle),description:o_(i_.description),requiredArtifacts:["Stacks"]}}static get snykDB(){return a_}static get severityMap(){return{high:3,medium:2,low:1}}static normalizeVersion(e){if(!e)return e;if(r_.valid(e))return e;if(/^\d+\.\d+$/.test(e))return`${e}.0`;const t=e.match(s_);return t?t[1]:e}static getVulnerabilities(e,t,r){if(!t.npm||!r.npm[t.npm])return[];try{r_.satisfies(e,"*")}catch(e){return e.pkgName=t.npm,t_.captureException(e,{level:"warning"}),[]}return r.npm[t.npm].filter((t=>t.semver.vulnerable.some((t=>r_.satisfies(e,t))))).map((r=>({severity:c_[r.severity],numericSeverity:this.severityMap[r.severity],library:`${t.name}@${e}`,url:"https://snyk.io/vuln/"+r.id})))}static highestSeverity(e){
866
- return e.sort(((e,t)=>t.numericSeverity-e.numericSeverity))[0].severity}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)),r=NoVulnerableLibrariesAudit.snykDB;if(!t.length)return{score:1};let a=0;const n=[];for(const e of t){const t=this.normalizeVersion(e.version)||"",i=this.getVulnerabilities(t,e,r),o=i.length;let s;a+=o,i.length>0&&(s=this.highestSeverity(i),n.push({highestSeverity:s,vulnCount:o,detectedLib:{text:e.name+"@"+t,url:`https://snyk.io/vuln/npm:${e.npm}?lh=${t}&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit`,type:"link"}}))}let i;a>0&&(i=o_(i_.displayValue,{itemCount:a}));const o=[{key:"detectedLib",itemType:"link",text:o_(i_.columnVersion)},{key:"vulnCount",itemType:"text",text:o_(i_.columnVuln)},{key:"highestSeverity",itemType:"text",text:o_(i_.columnSeverity)}],s=e_.makeTableDetails(o,n,{});return{score:Number(0===a),displayValue:i,details:s}}}Zx.exports=NoVulnerableLibrariesAudit,Zx.exports.UIStrings=i_;var l_={exports:{}};const u_=Lx,d_=oi,m_={
867
- title:"Avoids requesting the notification permission on page load",failureTitle:"Requests the notification permission on page load",description:"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://web.dev/notification-on-start/)."},p_=d_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/notification-on-start.js",m_);l_.exports=class NotificationOnStart extends u_{static get meta(){return{id:"notification-on-start",title:p_(m_.title),failureTitle:p_(m_.failureTitle),description:p_(m_.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await u_.getViolationResults(e,t,/notification permission/),a=[{key:"source",itemType:"source-location",text:p_(d_.UIStrings.columnSource)}],n=u_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},
868
- l_.exports.UIStrings=m_;var h_={exports:{}};const g_=kc,f_=oi,y_={title:"Allows users to paste into password fields",failureTitle:"Prevents users to paste into password fields",description:"Preventing password pasting undermines good security policy. [Learn more](https://web.dev/password-inputs-can-be-pasted-into/)."},v_=f_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js",y_);h_.exports=class PasswordInputsCanBePastedIntoAudit extends g_{static get meta(){return{id:"password-inputs-can-be-pasted-into",title:v_(y_.title),failureTitle:v_(y_.failureTitle),description:v_(y_.description),requiredArtifacts:["PasswordInputsWithPreventedPaste"]}}static audit(e){const t=e.PasswordInputsWithPreventedPaste,r=[];t.forEach((e=>{r.push({node:g_.makeNodeItem(e.node)})}));const a=[{key:"node",itemType:"node",text:v_(f_.UIStrings.columnFailingElem)}];return{score:Number(0===t.length),details:g_.makeTableDetails(a,r)}}},h_.exports.UIStrings=y_;var b_={
869
- exports:{}};const w_=kc,S_=uw,T_=ji,E_=Ib,x_=Tb,A_=Ki,R_=Lo,k_=Dl,D_=eb,C_=oi,I_={title:"Use HTTP/2",description:"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more](https://web.dev/uses-http2/).",displayValue:"{itemCount, plural,\n =1 {1 request not served via HTTP/2}\n other {# requests not served via HTTP/2}\n }",columnProtocol:"Protocol"},N_=C_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-http2.js",I_),L_=new Set([A_.TYPES.Document,A_.TYPES.Font,A_.TYPES.Image,A_.TYPES.Stylesheet,A_.TYPES.Script,A_.TYPES.Media]);class UsesHTTP2Audit extends w_{static get meta(){return{id:"uses-http2",title:N_(I_.title),description:N_(I_.description),scoreDisplayMode:w_.SCORING_MODES.NUMERIC,supportedModes:["timespan","navigation"],requiredArtifacts:["URL","devtoolsLogs","traces","GatherContext"]}}static computeWasteWithTTIGraph(e,t,r){const a=new Set(e.map((e=>e.url))),n=r.simulate(t,{label:"uses-http2-before",
870
- flexibleOrdering:true}),i=new Map;t.traverse((e=>{"network"===e.type&&a.has(e.record.url)&&(i.set(e.record.requestId,e.record.protocol),e.record.protocol="h2")}));const o=r.simulate(t,{label:"uses-http2-after",flexibleOrdering:true});t.traverse((e=>{if("network"!==e.type)return;const t=i.get(e.record.requestId);void 0!==t&&(e.record.protocol=t)}));const s=n.timeInMs-o.timeInMs,c=x_.getLastLongTaskEndTime(n.nodeTimings)-x_.getLastLongTaskEndTime(o.nodeTimings),l=Math.max(c,s);return 10*Math.round(Math.max(l,0)/10)}static isStaticAsset(e){if(!L_.has(e.resourceType))return!1;if(e.resourceSize<100){if(S_.getEntity(e.url))return!1}return!0}static determineNonHttp2Resources(e){const t=[],r=new Set,a=new Map;for(const t of e){if(!UsesHTTP2Audit.isStaticAsset(t))continue;if(T_.isLikeLocalhost(t.parsedURL.host))continue;const e=a.get(t.parsedURL.securityOrigin)||[];e.push(t),a.set(t.parsedURL.securityOrigin,e)}for(const n of e){if(r.has(n.url))continue;if(n.fetchedViaServiceWorker)continue
871
- ;if(!/HTTP\/[01][.\d]?/i.test(n.protocol))continue;(a.get(n.parsedURL.securityOrigin)||[]).length<6||(r.add(n.url),t.push({protocol:n.protocol,url:n.url}))}return t}static async audit(e,t){const r=e.traces[w_.DEFAULT_PASS],a=e.devtoolsLogs[w_.DEFAULT_PASS],n=await R_.request(a,t),i=UsesHTTP2Audit.determineNonHttp2Resources(n);let o;if(i.length>0&&(o=N_(I_.displayValue,{itemCount:i.length})),"timespan"===e.GatherContext.gatherMode){const e=[{key:"url",itemType:"url",text:N_(C_.UIStrings.columnURL)},{key:"protocol",itemType:"text",text:N_(I_.columnProtocol)}],t=w_.makeTableDetails(e,i);return{displayValue:o,score:i.length?0:1,details:t}}const s={devtoolsLog:a,settings:t?.settings||{}},c=await D_.request({trace:r,devtoolsLog:a},t),l=await k_.request(s,t),u=UsesHTTP2Audit.computeWasteWithTTIGraph(i,c,l),d=[{key:"url",valueType:"url",label:N_(C_.UIStrings.columnURL)},{key:"protocol",valueType:"text",label:N_(I_.columnProtocol)}],m=w_.makeOpportunityDetails(d,i,u);return{displayValue:o,
872
- numericValue:u,numericUnit:"millisecond",score:E_.scoreForWastedMs(u),details:m}}}b_.exports=UsesHTTP2Audit,b_.exports.UIStrings=I_;var M_={exports:{}};const P_=Lx,O_=oi,F_={title:"Uses passive listeners to improve scrolling performance",failureTitle:"Does not use passive listeners to improve scrolling performance",description:"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://web.dev/uses-passive-event-listeners/)."},U_=O_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js",F_);M_.exports=class PassiveEventsAudit extends P_{static get meta(){return{id:"uses-passive-event-listeners",title:U_(F_.title),failureTitle:U_(F_.failureTitle),description:U_(F_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await P_.getViolationResults(e,t,/passive event listener/),a=[{key:"source",
873
- itemType:"source-location",text:U_(O_.UIStrings.columnSource)}],n=P_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},M_.exports.UIStrings=F_;var j_={exports:{}};const B_=on.default,$_=kc,q_=jb,z_=oi,V_={title:"No browser errors logged to the console",failureTitle:"Browser errors were logged to the console",description:"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more](https://web.dev/errors-in-console/)"},W_=z_.createMessageInstanceIdFn("lighthouse-core/audits/errors-in-console.js",V_);class ErrorLogs extends $_{static get meta(){return{id:"errors-in-console",title:W_(V_.title),failureTitle:W_(V_.failureTitle),description:W_(V_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static get defaultOptions(){return{ignoredPatterns:["ERR_BLOCKED_BY_CLIENT.Inspector"]}}static filterAccordingToOptions(e,t){
874
- const{ignoredPatterns:r,...a}=t,n=Object.keys(a);return n.length&&B_.warn(this.meta.id,"Unrecognized options",n),r?e.filter((({description:e})=>{if(!e)return!0;for(const t of r){if(t instanceof RegExp&&t.test(e))return!1;if("string"==typeof t&&e.includes(t))return!1}return!0})):e}static async audit(e,t){const r=t.options,a=await q_.request(e,t),n=e.ConsoleMessages.filter((e=>"error"===e.level)).map((e=>{const t=a.find((t=>t.script.src===e.url));return{source:e.source,description:e.text,sourceLocation:$_.makeSourceLocationFromConsoleMessage(e,t)}})),i=ErrorLogs.filterAccordingToOptions(n,r).sort(((e,t)=>(e.description||"").localeCompare(t.description||""))),o=[{key:"sourceLocation",itemType:"source-location",text:W_(z_.UIStrings.columnSource)},{key:"description",itemType:"code",text:W_(z_.UIStrings.columnDescription)}],s=$_.makeTableDetails(o,i),c=i.length;return{score:Number(0===c),details:s}}}j_.exports=ErrorLogs,j_.exports.UIStrings=V_;const G_=Ao;var H_=G_(class Screenshots$1{
875
- static async compute_(e){return e.traceEvents.filter((e=>"Screenshot"===e.name)).map((e=>({timestamp:e.ts,datauri:`data:image/jpeg;base64,${e.args.snapshot}`})))}},null);const Y_=kc,K_=vi.exports,J_=Yp,X_=H_;var Z_=class FinalScreenshot extends Y_{static get meta(){return{id:"final-screenshot",scoreDisplayMode:Y_.SCORING_MODES.INFORMATIVE,title:"Final Screenshot",description:"The last screenshot captured of the pageload.",requiredArtifacts:["traces","GatherContext"]}}static async audit(e,t){const r=e.traces[Y_.DEFAULT_PASS],a=await J_.request(r,t),n=await X_.request(r,t),{timeOrigin:i}=a.timestamps,o=n[n.length-1];if(!o){if("timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw new K_(K_.errors.NO_SCREENSHOTS)}return{score:1,details:{type:"screenshot",timing:Math.round((o.timestamp-i)/1e3),timestamp:o.timestamp,data:o.datauri}}}},Q_={exports:{}};const eA=kc,tA=ji,rA=/^(block|fallback|optional|swap)$/,aA=/url\((.*?)\)/,nA=new RegExp(aA,"g"),iA=oi,oA=Jl,sA=Lo,cA={
876
- title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},lA=iA.createMessageInstanceIdFn("lighthouse-core/audits/font-display.js",cA);class FontDisplay$1 extends eA{static get meta(){return{id:"font-display",title:lA(cA.title),failureTitle:lA(cA.failureTitle),description:lA(cA.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}static findFontDisplayDeclarations(e,t){const r=new Set,a=new Set;for(const n of e.CSSUsage.stylesheets){
877
- const i=n.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(const o of i){const i=o.match(nA);if(!i)continue;const s=o.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",c=t.test(s)?r:a,l=i.map((e=>e.match(aA)[1].trim())).map((e=>/^('|").*\1$/.test(e)?e.substr(1,e.length-2):e));for(const t of l)try{const r=tA.isValid(n.header.sourceURL)?n.header.sourceURL:e.URL.finalUrl,a=new tA(t,r);c.add(a.href)}catch(e){oA.captureException(e,{tags:{audit:this.meta.id}})}}}return{passingURLs:r,failingURLs:a}}static getWarningsForFontUrls(e){const t=new Map;for(const r of e){const e=tA.getOrigin(r);if(!e)continue;const a=t.get(e)||0;t.set(e,a+1)}return[...t].map((([e,t])=>lA(cA.undeclaredFontOriginWarning,{fontCountForOrigin:t,fontOrigin:e})))}static async audit(e,t){
878
- const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await sA.request(r,t),{passingURLs:n,failingURLs:i}=FontDisplay$1.findFontDisplayDeclarations(e,rA),o=[],s=a.filter((e=>"Font"===e.resourceType)).filter((e=>!/^data:/.test(e.url))).filter((e=>!/^blob:/.test(e.url))).filter((e=>!!i.has(e.url)||(n.has(e.url)||o.push(e.url),!1))).map((e=>{const t=Math.min(1e3*(e.endTime-e.startTime),3e3);return{url:e.url,wastedMs:t}})),c=[{key:"url",itemType:"url",text:lA(iA.UIStrings.columnURL)},{key:"wastedMs",itemType:"ms",text:lA(iA.UIStrings.columnWastedMs)}],l=eA.makeTableDetails(c,s);return{score:Number(0===s.length),details:l,warnings:FontDisplay$1.getWarningsForFontUrls(o)}}}Q_.exports=FontDisplay$1,Q_.exports.UIStrings=cA;
802
+ const{cspHeaders:r,cspMetaTags:a}=await this.getRawCsps(e,t),{score:n,results:i}=this.constructResults(r,a),o=[{key:"description",itemType:"text",subItemsHeading:{key:"description"},text:ex(JE.UIStrings.columnDescription)},{key:"directive",itemType:"code",subItemsHeading:{key:"directive"},text:ex(QE.columnDirective)},{key:"severity",itemType:"text",subItemsHeading:{key:"severity"},text:ex(QE.columnSeverity)}],s=YE.makeTableDetails(o,i);return{score:n,notApplicable:!i.length,details:s}}},aE.exports.UIStrings=QE;var tx={exports:{}};const rx={feature:"Check the feature status page for more details.",milestone:"This change will go into effect with milestone {milestone}.",title:"Deprecated Feature Used",authorizationCoveredByWildcard:"Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.",
803
+ canRequestURLHTTPContainingNewline:"Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.",chromeLoadTimesConnectionInfo:"`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.",chromeLoadTimesFirstPaintAfterLoadTime:"`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.",chromeLoadTimesWasAlternateProtocolAvailable:"`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",cookieWithTruncatingChar:"Cookies containing a `(0|r|n)` character will be rejected instead of truncated.",
804
+ crossOriginAccessBasedOnDocumentDomain:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.",crossOriginWindowApi:"Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future.",cssSelectorInternalMediaControlsOverlayCastButton:"The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",deprecationExample:"This is an example of a translated deprecation issue message.",
805
+ documentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",eventPath:"`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.",expectCTHeader:"The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018.",geolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
806
+ geolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",getUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",hostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",identityInCanMakePaymentEvent:"The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.",
807
+ insecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",legacyConstraintGoogIPv6:"IPv6 is enabled-by-default and the ability to disable it using `googIPv6` is targeted to be removed in M108, after which it will be ignored. Please stop using this legacy constraint.",localCSSFileExtensionRejected:"CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.",
808
+ mediaSourceAbortRemove:"Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state.",mediaSourceDurationTruncatingBuffered:"Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`.",noSysexWebMIDIWithoutPermission:"Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.",
809
+ notificationInsecureOrigin:"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",notificationPermissionRequestedIframe:"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.",obsoleteWebRtcCipherSuite:"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.",openWebDatabaseInsecureContext:"WebSQL in non-secure contexts is deprecated and will be removed soon. Please use Web Storage or Indexed Database.",persistentQuotaType:"`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.",pictureSourceSrc:"`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead.",
810
+ vendorSpecificApi:"{PH1} is vendor-specific. Please use the standard {PH2} instead.",prefixedStorageInfo:"`window.webkitStorageInfo` is deprecated. Please use standardized `navigator.storage` instead.",deprecatedWithReplacement:"{PH1} is deprecated. Please use {PH2} instead.",requestedSubresourceWithEmbeddedCredentials:"Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",rtcConstraintEnableDtlsSrtpFalse:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead.",rtcConstraintEnableDtlsSrtpTrue:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.",
811
+ rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics:"`Complex Plan B SDP` detected. This dialect of the `Session Description Protocol` is no longer supported. Please use `Unified Plan SDP` instead.",rtcPeerConnectionSdpSemanticsPlanB:"`Plan B SDP semantics`, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the `Session Description Protocol` that has been permanently deleted from the Web Platform. It is still available when building with `IS_FUCHSIA`, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status.",rtcpMuxPolicyNegotiate:"The `rtcpMuxPolicy` option is deprecated and will be removed.",sharedArrayBufferConstructedWithoutIsolation:"`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.",
812
+ textToSpeech_DisallowedByAutoplay:"`speechSynthesis.speak()` without user activation is deprecated and will be removed.",v8SharedArrayBufferConstructedInExtensionWithoutIsolation:"Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",xhrJSONEncodingDetection:"UTF-16 is not supported by response json in `XMLHttpRequest`",xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:"Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.",xrSupportsSession:"`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead."},ax=oi.createMessageInstanceIdFn("lighthouse-core/lib/deprecations-strings.js",rx);var nx={getIssueDetailDescription:function getDescription(e){let t,r=0,a=0;switch(e.type){
813
+ case"AuthorizationCoveredByWildcard":t=ax(rx.authorizationCoveredByWildcard),a=97;break;case"CanRequestURLHTTPContainingNewline":t=ax(rx.canRequestURLHTTPContainingNewline),r=5735596811091968;break;case"ChromeLoadTimesConnectionInfo":t=ax(rx.chromeLoadTimesConnectionInfo),r=5637885046816768;break;case"ChromeLoadTimesFirstPaintAfterLoadTime":t=ax(rx.chromeLoadTimesFirstPaintAfterLoadTime),r=5637885046816768;break;case"ChromeLoadTimesWasAlternateProtocolAvailable":t=ax(rx.chromeLoadTimesWasAlternateProtocolAvailable),r=5637885046816768;break;case"CookieWithTruncatingChar":t=ax(rx.cookieWithTruncatingChar),a=103;break;case"CrossOriginAccessBasedOnDocumentDomain":t=ax(rx.crossOriginAccessBasedOnDocumentDomain),a=109;break;case"CrossOriginWindowAlert":t=ax(rx.crossOriginWindowApi,{PH1:"window.alert"});break;case"CrossOriginWindowConfirm":t=ax(rx.crossOriginWindowApi,{PH1:"window.confirm"});break;case"CSSSelectorInternalMediaControlsOverlayCastButton":
814
+ t=ax(rx.cssSelectorInternalMediaControlsOverlayCastButton),r=5714245488476160;break;case"DeprecationExample":t=ax(rx.deprecationExample),r=5684289032159232,a=100;break;case"DocumentDomainSettingWithoutOriginAgentClusterHeader":t=ax(rx.documentDomainSettingWithoutOriginAgentClusterHeader),a=109;break;case"EventPath":t=ax(rx.eventPath),r=5726124632965120,a=109;break;case"ExpectCTHeader":t=ax(rx.expectCTHeader),r=6244547273687040,a=107;break;case"GeolocationInsecureOrigin":t=ax(rx.geolocationInsecureOrigin);break;case"GeolocationInsecureOriginDeprecatedNotRemoved":t=ax(rx.geolocationInsecureOriginDeprecatedNotRemoved);break;case"GetUserMediaInsecureOrigin":t=ax(rx.getUserMediaInsecureOrigin);break;case"HostCandidateAttributeGetter":t=ax(rx.hostCandidateAttributeGetter);break;case"IdentityInCanMakePaymentEvent":t=ax(rx.identityInCanMakePaymentEvent),r=5190978431352832;break;case"InsecurePrivateNetworkSubresourceRequest":t=ax(rx.insecurePrivateNetworkSubresourceRequest),r=5436853517811712,
815
+ a=92;break;case"LegacyConstraintGoogIPv6":t=ax(rx.legacyConstraintGoogIPv6),a=103;break;case"LocalCSSFileExtensionRejected":t=ax(rx.localCSSFileExtensionRejected),a=64;break;case"MediaSourceAbortRemove":t=ax(rx.mediaSourceAbortRemove),r=6107495151960064;break;case"MediaSourceDurationTruncatingBuffered":t=ax(rx.mediaSourceDurationTruncatingBuffered),r=6107495151960064;break;case"NavigateEventRestoreScroll":t=ax(rx.deprecatedWithReplacement,{PH1:"navigateEvent.restoreScroll()",PH2:"navigateEvent.scroll()"});break;case"NavigateEventTransitionWhile":t=ax(rx.deprecatedWithReplacement,{PH1:"navigateEvent.transitionWhile()",PH2:"navigateEvent.intercept()"});break;case"NoSysexWebMIDIWithoutPermission":t=ax(rx.noSysexWebMIDIWithoutPermission),r=5138066234671104,a=82;break;case"NotificationInsecureOrigin":t=ax(rx.notificationInsecureOrigin);break;case"NotificationPermissionRequestedIframe":t=ax(rx.notificationPermissionRequestedIframe),r=6451284559265792;break;case"ObsoleteWebRtcCipherSuite":
816
+ t=ax(rx.obsoleteWebRtcCipherSuite),a=81;break;case"OpenWebDatabaseInsecureContext":t=ax(rx.openWebDatabaseInsecureContext),r=5175124599767040,a=105;break;case"PersistentQuotaType":t=ax(rx.persistentQuotaType),r=5176235376246784,a=106;break;case"PictureSourceSrc":t=ax(rx.pictureSourceSrc);break;case"PrefixedCancelAnimationFrame":t=ax(rx.vendorSpecificApi,{PH1:"webkitCancelAnimationFrame",PH2:"cancelAnimationFrame"});break;case"PrefixedRequestAnimationFrame":t=ax(rx.vendorSpecificApi,{PH1:"webkitRequestAnimationFrame",PH2:"requestAnimationFrame"});break;case"PrefixedStorageInfo":t=ax(rx.prefixedStorageInfo);break;case"PrefixedVideoDisplayingFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitDisplayingFullscreen",PH2:"Document.fullscreenElement"});break;case"PrefixedVideoEnterFullScreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitEnterFullScreen()",PH2:"Element.requestFullscreen()"});break;case"PrefixedVideoEnterFullscreen":
817
+ t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitEnterFullscreen()",PH2:"Element.requestFullscreen()"});break;case"PrefixedVideoExitFullScreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitExitFullScreen()",PH2:"Document.exitFullscreen()"});break;case"PrefixedVideoExitFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitExitFullscreen()",PH2:"Document.exitFullscreen()"});break;case"PrefixedVideoSupportsFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitSupportsFullscreen",PH2:"Document.fullscreenEnabled"});break;case"RangeExpand":t=ax(rx.deprecatedWithReplacement,{PH1:"Range.expand()",PH2:"Selection.modify()"});break;case"RequestedSubresourceWithEmbeddedCredentials":t=ax(rx.requestedSubresourceWithEmbeddedCredentials),r=5669008342777856;break;case"RTCConstraintEnableDtlsSrtpFalse":t=ax(rx.rtcConstraintEnableDtlsSrtpFalse),a=97;break;case"RTCConstraintEnableDtlsSrtpTrue":
818
+ t=ax(rx.rtcConstraintEnableDtlsSrtpTrue),a=97;break;case"RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics":t=ax(rx.rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics),a=72;break;case"RTCPeerConnectionSdpSemanticsPlanB":t=ax(rx.rtcPeerConnectionSdpSemanticsPlanB),r=5823036655665152,a=93;break;case"RtcpMuxPolicyNegotiate":t=ax(rx.rtcpMuxPolicyNegotiate),r=5654810086866944,a=62;break;case"SharedArrayBufferConstructedWithoutIsolation":t=ax(rx.sharedArrayBufferConstructedWithoutIsolation),a=106;break;case"TextToSpeech_DisallowedByAutoplay":t=ax(rx.textToSpeech_DisallowedByAutoplay),r=5687444770914304,a=71;break;case"V8SharedArrayBufferConstructedInExtensionWithoutIsolation":t=ax(rx.v8SharedArrayBufferConstructedInExtensionWithoutIsolation),a=96;break;case"XHRJSONEncodingDetection":t=ax(rx.xhrJSONEncodingDetection),a=93;break;case"XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload":t=ax(rx.xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload);break
819
+ ;case"XRSupportsSession":t=ax(rx.xrSupportsSession),a=80}const n=[];return 0!==r&&n.push({link:`https://chromestatus.com/feature/${r}`,linkTitle:ax(rx.feature)}),0!==a&&n.push({link:"https://chromiumdash.appspot.com/schedule",linkTitle:ax(rx.milestone,{milestone:a})}),{file:"deprecation.md",substitutions:new Map([["PLACEHOLDER_title",ax(rx.title)],["PLACEHOLDER_message",t]]),links:n,message:t}},UIStrings:rx};const ix=kc,ox=jb,sx=oi,{getIssueDetailDescription:cx}=nx,lx={title:"Avoids deprecated APIs",failureTitle:"Uses deprecated APIs",description:"Deprecated APIs will eventually be removed from the browser. [Learn more](https://web.dev/deprecations/).",displayValue:"{itemCount, plural,\n =1 {1 warning found}\n other {# warnings found}\n }",columnDeprecate:"Deprecation / Warning",columnLine:"Line"},ux=sx.createMessageInstanceIdFn("lighthouse-core/audits/deprecations.js",lx);tx.exports=class Deprecations extends ix{static get meta(){return{id:"deprecations",title:ux(lx.title),
820
+ failureTitle:ux(lx.failureTitle),description:ux(lx.description),requiredArtifacts:["InspectorIssues","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await ox.request(e,t),a=e.InspectorIssues.deprecationIssue.map((e=>{const{url:t,lineNumber:a,columnNumber:n}=e.sourceCodeLocation,i=r.find((e=>e.script.src===t)),o=cx(e);let s;o.links.length&&(s={type:"subitems",items:o.links.map((e=>({type:"link",url:e.link,text:e.linkTitle})))});const c=e.message;return{value:o.message||c||e.type,source:ix.makeSourceLocation(t,a,n-1,i),subItems:s}})),n=[{key:"value",itemType:"text",text:ux(lx.columnDeprecate)},{key:"source",itemType:"source-location",text:ux(sx.UIStrings.columnSource)}],i=ix.makeTableDetails(n,a);let o;return a.length>0&&(o=ux(lx.displayValue,{itemCount:a.length})),{score:Number(0===a.length),displayValue:o,details:i}}},tx.exports.UIStrings=lx;const dx=kc,mx=Rv,px=Lo,hx=xl,gx=Fo;var fx=class Diagnostics extends dx{static get meta(){return{id:"diagnostics",
821
+ scoreDisplayMode:dx.SCORING_MODES.INFORMATIVE,title:"Diagnostics",description:"Collection of useful page vitals.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=e.traces[dx.DEFAULT_PASS],a=e.devtoolsLogs[dx.DEFAULT_PASS],n=await mx.request(r,t),i=await px.request(a,t),o=await hx.request(a,t),s=n.filter((e=>!e.parent)),c=gx.findMainDocument(i).transferSize,l=i.reduce(((e,t)=>e+(t.transferSize||0)),0),u=s.reduce(((e,t)=>e+(t.duration||0)),0),d=Math.max(...o.additionalRttByOrigin.values())+o.rtt,m=Math.max(...o.serverResponseTimeByOrigin.values());return{score:1,details:{type:"debugdata",items:[{numRequests:i.length,numScripts:i.filter((e=>"Script"===e.resourceType)).length,numStylesheets:i.filter((e=>"Stylesheet"===e.resourceType)).length,numFonts:i.filter((e=>"Font"===e.resourceType)).length,numTasks:s.length,numTasksOver10ms:s.filter((e=>e.duration>10)).length,numTasksOver25ms:s.filter((e=>e.duration>25)).length,
822
+ numTasksOver50ms:s.filter((e=>e.duration>50)).length,numTasksOver100ms:s.filter((e=>e.duration>100)).length,numTasksOver500ms:s.filter((e=>e.duration>500)).length,rtt:o.rtt,throughput:o.throughput,maxRtt:d,maxServerLatency:m,totalByteWeight:l,totalTaskTime:u,mainDocumentTransferSize:c}]}}}},yx={exports:{}};const vx=kc,bx=GT,wx={title:"Properly defines charset",failureTitle:"Charset declaration is missing or occurs too late in the HTML",description:"A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more](https://web.dev/charset/)."},Sx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/charset.js",wx),Tx=/^[a-zA-Z0-9-_:.()]{2,}$/,Ex=/<meta[^>]+charset[^<]+>/i,xx=/charset\s*=\s*[a-zA-Z0-9-_:.()]{2,}/i;yx.exports=class CharsetDefined extends vx{static get meta(){return{id:"charset",title:Sx(wx.title),failureTitle:Sx(wx.failureTitle),
823
+ description:Sx(wx.description),requiredArtifacts:["MainDocumentContent","URL","devtoolsLogs","MetaElements"]}}static async audit(e,t){const r=e.devtoolsLogs[vx.DEFAULT_PASS],a=await bx.request({devtoolsLog:r,URL:e.URL},t);let n=!1;if(a.responseHeaders){const e=a.responseHeaders.find((e=>"content-type"===e.name.toLowerCase()));e&&(n=xx.test(e.value))}return n=n||65279===e.MainDocumentContent.charCodeAt(0),Ex.test(e.MainDocumentContent.slice(0,1024))&&(n=n||e.MetaElements.some((e=>e.charset&&Tx.test(e.charset)||"content-type"===e.httpEquiv&&e.content&&xx.test(e.content)))),{score:Number(n)}}},yx.exports.UIStrings=wx,yx.exports.CHARSET_HTML_REGEX=Ex,yx.exports.CHARSET_HTTP_REGEX=xx,yx.exports.IANA_REGEX=Tx;var _x={exports:{}};const Ax=kc,Rx={title:"Page has the HTML doctype",failureTitle:"Page lacks the HTML doctype, thus triggering quirks-mode",description:"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more](https://web.dev/doctype/).",
824
+ explanationNoDoctype:"Document must contain a doctype",explanationPublicId:"Expected publicId to be an empty string",explanationSystemId:"Expected systemId to be an empty string",explanationBadDoctype:"Doctype name must be the lowercase string `html`"},kx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/doctype.js",Rx);_x.exports=class Doctype extends Ax{static get meta(){return{id:"doctype",title:kx(Rx.title),failureTitle:kx(Rx.failureTitle),description:kx(Rx.description),requiredArtifacts:["Doctype"]}}static audit(e){if(!e.Doctype)return{score:0,explanation:kx(Rx.explanationNoDoctype)};const t=e.Doctype.name.trim(),r=e.Doctype.publicId,a=e.Doctype.systemId;return""!==r?{score:0,explanation:kx(Rx.explanationPublicId)}:""!==a?{score:0,explanation:kx(Rx.explanationSystemId)}:"html"===t?{score:1}:{score:0,explanation:kx(Rx.explanationBadDoctype)}}},_x.exports.UIStrings=Rx;var Dx={exports:{}};const Cx=kc,Ix=oi,Nx={title:"Avoids an excessive DOM size",
825
+ failureTitle:"Avoid an excessive DOM size",description:"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).",columnStatistic:"Statistic",columnValue:"Value",displayValue:"{itemCount, plural,\n =1 {1 element}\n other {# elements}\n }",statisticDOMElements:"Total DOM Elements",statisticDOMDepth:"Maximum DOM Depth",statisticDOMWidth:"Maximum Child Elements"},Lx=Ix.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/dom-size.js",Nx);Dx.exports=class DOMSize extends Cx{static get meta(){return{id:"dom-size",title:Lx(Nx.title),failureTitle:Lx(Nx.failureTitle),description:Lx(Nx.description),scoreDisplayMode:Cx.SCORING_MODES.NUMERIC,requiredArtifacts:["DOMStats"]}}static get defaultOptions(){return{
826
+ p10:818,median:1400}}static audit(e,t){const r=e.DOMStats,a=Cx.computeLogNormalScore({p10:t.options.p10,median:t.options.median},r.totalBodyElements),n=[{key:"statistic",itemType:"text",text:Lx(Nx.columnStatistic)},{key:"node",itemType:"node",text:Lx(Ix.UIStrings.columnElement)},{key:"value",itemType:"numeric",text:Lx(Nx.columnValue)}],i=[{statistic:Lx(Nx.statisticDOMElements),value:r.totalBodyElements},{node:Cx.makeNodeItem(r.depth),statistic:Lx(Nx.statisticDOMDepth),value:r.depth.max},{node:Cx.makeNodeItem(r.width),statistic:Lx(Nx.statisticDOMWidth),value:r.width.max}];return{score:a,numericValue:r.totalBodyElements,numericUnit:"element",displayValue:Lx(Nx.displayValue,{itemCount:r.totalBodyElements}),details:Cx.makeTableDetails(n,i)}}},Dx.exports.UIStrings=Nx;var Mx={exports:{}};const Px=kc,Ox=jb;var Fx=class ViolationAudit$4 extends Px{static async getViolationResults(e,t,r){const a=await Ox.request(e,t);const n=new Set
827
+ ;return e.ConsoleMessages.filter((e=>e.url&&"violation"===e.source&&r.test(e.text))).map((e=>{const t=a.find((t=>t.script.src===e.url));return Px.makeSourceLocationFromConsoleMessage(e,t)})).filter((function filterUndefined(e){return void 0!==e})).filter((e=>{const t=`${e.url}!${e.line}!${e.column}`;return!n.has(t)&&(n.add(t),!0)})).map((e=>({source:e})))}};const Ux=Fx,jx=oi,Bx={title:"Avoids requesting the geolocation permission on page load",failureTitle:"Requests the geolocation permission on page load",description:"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more](https://web.dev/geolocation-on-start/)."},$x=jx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/geolocation-on-start.js",Bx);Mx.exports=class GeolocationOnStart extends Ux{static get meta(){return{id:"geolocation-on-start",title:$x(Bx.title),failureTitle:$x(Bx.failureTitle),
828
+ description:$x(Bx.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Ux.getViolationResults(e,t,/geolocation/),a=[{key:"source",itemType:"source-location",text:$x(jx.UIStrings.columnSource)}],n=Ux.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Mx.exports.UIStrings=Bx;var qx={exports:{}};const zx=kc,Vx={title:"No issues in the `Issues` panel in Chrome Devtools",failureTitle:"Issues were logged in the `Issues` panel in Chrome Devtools",description:"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",columnIssueType:"Issue type",issueTypeBlockedByResponse:"Blocked by cross-origin policy",issueTypeHeavyAds:"Heavy resource usage by ads"
829
+ },Wx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/inspector-issues.js",Vx);qx.exports=class IssuesPanelEntries extends zx{static get meta(){return{id:"inspector-issues",title:Wx(Vx.title),failureTitle:Wx(Vx.failureTitle),description:Wx(Vx.description),requiredArtifacts:["InspectorIssues"]}}static getMixedContentRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.mainResourceURL;t.add(e)}return{issueType:"Mixed content",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getCookieRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.cookieUrl;e&&t.add(e)}return{issueType:"Cookie",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getBlockedByResponseRow(e){const t=new Set;for(const r of e){const e=r.request?.url;e&&t.add(e)}return{issueType:Wx(Vx.issueTypeBlockedByResponse),subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getContentSecurityPolicyRow(e){const t=new Set
830
+ ;for(const r of e){const e=r.blockedURL;e&&t.add(e)}return{issueType:"Content security policy",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static audit(e){const t=[{key:"issueType",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:Wx(Vx.columnIssueType)}],r=e.InspectorIssues,a=[];r.mixedContentIssue.length&&a.push(this.getMixedContentRow(r.mixedContentIssue)),r.cookieIssue.length&&a.push(this.getCookieRow(r.cookieIssue)),r.blockedByResponseIssue.length&&a.push(this.getBlockedByResponseRow(r.blockedByResponseIssue)),r.heavyAdIssue.length&&a.push({issueType:Wx(Vx.issueTypeHeavyAds)});const n=r.contentSecurityPolicyIssue.filter((e=>"kTrustedTypesSinkViolation"!==e.contentSecurityPolicyViolationType&&"kTrustedTypesPolicyViolation"!==e.contentSecurityPolicyViolationType));return n.length&&a.push(this.getContentSecurityPolicyRow(n)),{score:a.length>0?0:1,details:zx.makeTableDetails(t,a)}}},qx.exports.UIStrings=Vx;var Hx={exports:{}}
831
+ ;const Gx=kc,Yx=oi,Kx={title:"Detected JavaScript libraries",description:"All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).",columnVersion:"Version"},Jx=Yx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/js-libraries.js",Kx);Hx.exports=class JsLibrariesAudit extends Gx{static get meta(){return{id:"js-libraries",title:Jx(Kx.title),scoreDisplayMode:Gx.SCORING_MODES.INFORMATIVE,description:Jx(Kx.description),requiredArtifacts:["Stacks"]}}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)).filter((e=>!e.id.endsWith("-fast"))).map((e=>({name:e.name,version:e.version,npm:e.npm}))),r=[{key:"name",itemType:"text",text:Jx(Yx.UIStrings.columnName)},{key:"version",itemType:"text",text:Jx(Kx.columnVersion)}],a=Gx.makeTableDetails(r,t,{}),n={type:"debugdata",stacks:e.Stacks.map((e=>({id:e.id,version:e.version})))};return t.length?{score:1,details:{...a,debugData:n}}:{score:null,notApplicable:!0}}},Hx.exports.UIStrings=Kx
832
+ ;var Xx={exports:{}};const Zx=Fx,Qx=oi,e_={title:"Avoids `document.write()`",failureTitle:"Avoid `document.write()`",description:"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://web.dev/no-document-write/)."},t_=Qx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-document-write.js",e_);Xx.exports=class NoDocWriteAudit extends Zx{static get meta(){return{id:"no-document-write",title:t_(e_.title),failureTitle:t_(e_.failureTitle),description:t_(e_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Zx.getViolationResults(e,t,/document\.write/),a=[{key:"source",itemType:"source-location",text:t_(Qx.UIStrings.columnSource)}],n=Zx.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Xx.exports.UIStrings=e_;var r_={exports:{}},a_={exports:{}};!function(e,t){var r;t=e.exports=SemVer,
833
+ r="object"==typeof La&&La.env&&La.env.NODE_DEBUG&&/\bsemver\b/i.test(La.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var a=Number.MAX_SAFE_INTEGER||9007199254740991,n=t.re=[],i=t.src=[],o=0,s=o++;i[s]="0|[1-9]\\d*";var c=o++;i[c]="[0-9]+";var l=o++;i[l]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=o++;i[u]="("+i[s]+")\\.("+i[s]+")\\.("+i[s]+")";var d=o++;i[d]="("+i[c]+")\\.("+i[c]+")\\.("+i[c]+")";var m=o++;i[m]="(?:"+i[s]+"|"+i[l]+")";var p=o++;i[p]="(?:"+i[c]+"|"+i[l]+")";var h=o++;i[h]="(?:-("+i[m]+"(?:\\."+i[m]+")*))";var f=o++;i[f]="(?:-?("+i[p]+"(?:\\."+i[p]+")*))";var y=o++;i[y]="[0-9A-Za-z-]+";var v=o++;i[v]="(?:\\+("+i[y]+"(?:\\."+i[y]+")*))";var b=o++,w="v?"+i[u]+i[h]+"?"+i[v]+"?";i[b]="^"+w+"$";var S="[v=\\s]*"+i[d]+i[f]+"?"+i[v]+"?",T=o++;i[T]="^"+S+"$";var E=o++;i[E]="((?:<|>)?=?)";var x=o++;i[x]=i[c]+"|x|X|\\*";var _=o++;i[_]=i[s]+"|x|X|\\*";var A=o++
834
+ ;i[A]="[v=\\s]*("+i[_]+")(?:\\.("+i[_]+")(?:\\.("+i[_]+")(?:"+i[h]+")?"+i[v]+"?)?)?";var R=o++;i[R]="[v=\\s]*("+i[x]+")(?:\\.("+i[x]+")(?:\\.("+i[x]+")(?:"+i[f]+")?"+i[v]+"?)?)?";var k=o++;i[k]="^"+i[E]+"\\s*"+i[A]+"$";var D=o++;i[D]="^"+i[E]+"\\s*"+i[R]+"$";var C=o++;i[C]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var I=o++;i[I]="(?:~>?)";var N=o++;i[N]="(\\s*)"+i[I]+"\\s+",n[N]=new RegExp(i[N],"g");var L=o++;i[L]="^"+i[I]+i[A]+"$";var M=o++;i[M]="^"+i[I]+i[R]+"$";var P=o++;i[P]="(?:\\^)";var O=o++;i[O]="(\\s*)"+i[P]+"\\s+",n[O]=new RegExp(i[O],"g");var F=o++;i[F]="^"+i[P]+i[A]+"$";var U=o++;i[U]="^"+i[P]+i[R]+"$";var j=o++;i[j]="^"+i[E]+"\\s*("+S+")$|^$";var B=o++;i[B]="^"+i[E]+"\\s*("+w+")$|^$";var $=o++;i[$]="(\\s*)"+i[E]+"\\s*("+S+"|"+i[A]+")",n[$]=new RegExp(i[$],"g");var q=o++;i[q]="^\\s*("+i[A]+")\\s+-\\s+("+i[A]+")\\s*$";var z=o++;i[z]="^\\s*("+i[R]+")\\s+-\\s+("+i[R]+")\\s*$";var V=o++;i[V]="(<|>)?=?\\s*\\*";for(var W=0;W<35;W++)r(W,i[W]),
835
+ n[W]||(n[W]=new RegExp(i[W]));function parse(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?n[T]:n[b]).test(e))return null;try{return new SemVer(e,t)}catch(e){return null}}function SemVer(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof SemVer))return new SemVer(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var i=e.trim().match(t.loose?n[T]:n[b]);if(!i)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>a||this.major<0)throw new TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw new TypeError("Invalid minor version")
836
+ ;if(this.patch>a||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<a)return t}return e})):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}t.parse=parse,t.valid=function valid(e,t){var r=parse(e,t);return r?r.version:null},t.clean=function clean(e,t){var r=parse(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null},t.SemVer=SemVer,SemVer.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},SemVer.prototype.toString=function(){return this.version},SemVer.prototype.compare=function(e){return r("SemVer.compare",this.version,this.options,e),e instanceof SemVer||(e=new SemVer(e,this.options)),this.compareMain(e)||this.comparePre(e)},SemVer.prototype.compareMain=function(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),
837
+ compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)},SemVer.prototype.comparePre=function(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var a=this.prerelease[t],n=e.prerelease[t];if(r("prerelease compare",t,a,n),void 0===a&&void 0===n)return 0;if(void 0===n)return 1;if(void 0===a)return-1;if(a!==n)return compareIdentifiers(a,n)}while(++t)},SemVer.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),
838
+ this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function inc(e,t,r,a){"string"==typeof r&&(a=r,r=void 0);try{return new SemVer(e,r).inc(t,a).version}catch(e){return null}},t.diff=function diff(e,t){if(eq(e,t))return null;var r=parse(e),a=parse(t),n=""
839
+ ;if(r.prerelease.length||a.prerelease.length){n="pre";var i="prerelease"}for(var o in r)if(("major"===o||"minor"===o||"patch"===o)&&r[o]!==a[o])return n+o;return i},t.compareIdentifiers=compareIdentifiers;var H=/^[0-9]+$/;function compareIdentifiers(e,t){var r=H.test(e),a=H.test(t);return r&&a&&(e=+e,t=+t),e===t?0:r&&!a?-1:a&&!r?1:e<t?-1:1}function compare(e,t,r){return new SemVer(e,r).compare(new SemVer(t,r))}function gt(e,t,r){return compare(e,t,r)>0}function lt(e,t,r){return compare(e,t,r)<0}function eq(e,t,r){return 0===compare(e,t,r)}function neq(e,t,r){return 0!==compare(e,t,r)}function gte(e,t,r){return compare(e,t,r)>=0}function lte(e,t,r){return compare(e,t,r)<=0}function cmp(e,t,r,a){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return eq(e,r,a);case"!=":return neq(e,r,a);case">":return gt(e,r,a);case">=":
840
+ return gte(e,r,a);case"<":return lt(e,r,a);case"<=":return lte(e,r,a);default:throw new TypeError("Invalid operator: "+t)}}function Comparator(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof Comparator))return new Comparator(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===G?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function rcompareIdentifiers(e,t){return compareIdentifiers(t,e)},t.major=function major(e,t){return new SemVer(e,t).major},t.minor=function minor(e,t){return new SemVer(e,t).minor},t.patch=function patch(e,t){return new SemVer(e,t).patch},t.compare=compare,t.compareLoose=function compareLoose(e,t){return compare(e,t,!0)},t.rcompare=function rcompare(e,t,r){return compare(t,e,r)},t.sort=function sort(e,r){return e.sort((function(e,a){return t.compare(e,a,r)}))},
841
+ t.rsort=function rsort(e,r){return e.sort((function(e,a){return t.rcompare(e,a,r)}))},t.gt=gt,t.lt=lt,t.eq=eq,t.neq=neq,t.gte=gte,t.lte=lte,t.cmp=cmp,t.Comparator=Comparator;var G={};function Range(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Range)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new Range(e.raw,t);if(e instanceof Comparator)return new Range(e.value,t);if(!(this instanceof Range))return new Range(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function isX(e){return!e||"x"===e.toLowerCase()||"*"===e}function hyphenReplace(e,t,r,a,n,i,o,s,c,l,u,d,m){
842
+ return((t=isX(r)?"":isX(a)?">="+r+".0.0":isX(n)?">="+r+"."+a+".0":">="+t)+" "+(s=isX(c)?"":isX(l)?"<"+(+c+1)+".0.0":isX(u)?"<"+c+"."+(+l+1)+".0":d?"<="+c+"."+l+"."+u+"-"+d:"<="+s)).trim()}function testSet(e,t,a){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!a.includePrerelease){for(n=0;n<e.length;n++)if(r(e[n].semver),e[n].semver!==G&&e[n].semver.prerelease.length>0){var i=e[n].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}function satisfies(e,t,r){try{t=new Range(t,r)}catch(e){return!1}return t.test(e)}function outside(e,t,r,a){var n,i,o,s,c;switch(e=new SemVer(e,a),t=new Range(t,a),r){case">":n=gt,i=lte,o=lt,s=">",c=">=";break;case"<":n=lt,i=gte,o=gt,s="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies(e,t,a))return!1;for(var l=0;l<t.set.length;++l){var u=t.set[l],d=null,m=null;if(u.forEach((function(e){e.semver===G&&(e=new Comparator(">=0.0.0")),d=d||e,
843
+ m=m||e,n(e.semver,d.semver,a)?d=e:o(e.semver,m.semver,a)&&(m=e)})),d.operator===s||d.operator===c)return!1;if((!m.operator||m.operator===s)&&i(e,m.semver))return!1;if(m.operator===c&&o(e,m.semver))return!1}return!0}Comparator.prototype.parse=function(e){var t=this.options.loose?n[j]:n[B],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),r[2]?this.semver=new SemVer(r[2],this.options.loose):this.semver=G},Comparator.prototype.toString=function(){return this.value},Comparator.prototype.test=function(e){return r("Comparator.test",e,this.options.loose),this.semver===G||("string"==typeof e&&(e=new SemVer(e,this.options)),cmp(e,this.operator,this.semver,this.options))},Comparator.prototype.intersects=function(e,t){if(!(e instanceof Comparator))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return r=new Range(e.value,t),
844
+ satisfies(this.value,r,t);if(""===e.operator)return r=new Range(this.value,t),satisfies(e.semver,r,t);var a=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,o=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=cmp(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=cmp(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return a||n||i&&o||s||c},t.Range=Range,Range.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},Range.prototype.toString=function(){return this.range},Range.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var a=t?n[z]:n[q];e=e.replace(a,hyphenReplace),
845
+ r("hyphen replace",e),e=e.replace(n[$],"$1$2$3"),r("comparator trim",e,n[$]),e=(e=(e=e.replace(n[N],"$1~")).replace(n[O],"$1^")).split(/\s+/).join(" ");var i=t?n[j]:n[B],o=e.split(" ").map((function(e){return function parseComparator(e,t){return r("comp",e,t),e=function replaceCarets(e,t){return e.trim().split(/\s+/).map((function(e){return function replaceCaret(e,t){r("caret",e,t);var a=t.loose?n[U]:n[F];return e.replace(a,(function(t,a,n,i,o){var s;return r("caret",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s="0"===a?">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":">="+a+"."+n+".0 <"+(+a+1)+".0.0":o?(r("replaceCaret pr",o),s="0"===a?"0"===n?">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+"-"+o+" <"+(+a+1)+".0.0"):(r("no pr"),s="0"===a?"0"===n?">="+a+"."+n+"."+i+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+" <"+(+a+1)+".0.0"),r("caret return",s),s}))}(e,t)
846
+ })).join(" ")}(e,t),r("caret",e),e=function replaceTildes(e,t){return e.trim().split(/\s+/).map((function(e){return function replaceTilde(e,t){var a=t.loose?n[M]:n[L];return e.replace(a,(function(t,a,n,i,o){var s;return r("tilde",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s=">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":o?(r("replaceTilde pr",o),s=">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0"):s=">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0",r("tilde return",s),s}))}(e,t)})).join(" ")}(e,t),r("tildes",e),e=function replaceXRanges(e,t){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function replaceXRange(e,t){e=e.trim();var a=t.loose?n[D]:n[k];return e.replace(a,(function(t,a,n,i,o,s){r("xRange",e,t,a,n,i,o,s);var c=isX(n),l=c||isX(i),u=l||isX(o);return"="===a&&u&&(a=""),c?t=">"===a||"<"===a?"<0.0.0":"*":a&&u?(l&&(i=0),o=0,">"===a?(a=">=",l?(n=+n+1,i=0,o=0):(i=+i+1,o=0)):"<="===a&&(a="<",l?n=+n+1:i=+i+1),
847
+ t=a+n+"."+i+"."+o):l?t=">="+n+".0.0 <"+(+n+1)+".0.0":u&&(t=">="+n+"."+i+".0 <"+n+"."+(+i+1)+".0"),r("xRange return",t),t}))}(e,t)})).join(" ")}(e,t),r("xrange",e),e=function replaceStars(e,t){return r("replaceStars",e,t),e.trim().replace(n[V],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(o=o.filter((function(e){return!!e.match(i)}))),o=o.map((function(e){return new Comparator(e,this.options)}),this)},Range.prototype.intersects=function(e,t){if(!(e instanceof Range))throw new TypeError("a Range is required");return this.set.some((function(r){return r.every((function(r){return e.set.some((function(e){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function toComparators(e,t){return new Range(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},Range.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new SemVer(e,this.options))
848
+ ;for(var t=0;t<this.set.length;t++)if(testSet(this.set[t],e,this.options))return!0;return!1},t.satisfies=satisfies,t.maxSatisfying=function maxSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&-1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minSatisfying=function minSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minVersion=function minVersion(e,t){e=new Range(e,t);var r=new SemVer("0.0.0");if(e.test(r))return r;if(r=new SemVer("0.0.0-0"),e.test(r))return r;r=null;for(var a=0;a<e.set.length;++a){e.set[a].forEach((function(e){var t=new SemVer(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!gt(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))
849
+ }if(r&&e.test(r))return r;return null},t.validRange=function validRange(e,t){try{return new Range(e,t).range||"*"}catch(e){return null}},t.ltr=function ltr(e,t,r){return outside(e,t,"<",r)},t.gtr=function gtr(e,t,r){return outside(e,t,">",r)},t.outside=outside,t.prerelease=function prerelease(e,t){var r=parse(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function intersects(e,t,r){return e=new Range(e,r),t=new Range(t,r),e.intersects(t)},t.coerce=function coerce(e){if(e instanceof SemVer)return e;if("string"!=typeof e)return null;var t=e.match(n[C]);if(null==t)return null;return parse(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}}(a_,a_.exports);const n_=kc,i_=Jl,o_=a_.exports,s_={npm:{"@angular/core":[{id:"SNYK-JS-ANGULARCORE-1070902",severity:"low",semver:{vulnerable:["<11.0.5",">=11.1.0-next.0 <11.1.0-next.3"]}}],angular:[{id:"SNYK-JS-ANGULAR-572020",severity:"high",semver:{vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-570058",severity:"medium",semver:{
850
+ vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-534884",severity:"high",semver:{vulnerable:[">=1.4.0-beta.6 <1.7.9"]}},{id:"SNYK-JS-ANGULAR-471885",severity:"medium",semver:{vulnerable:["<1.6.3"]}},{id:"SNYK-JS-ANGULAR-471882",severity:"medium",semver:{vulnerable:["<1.6.5"]}},{id:"SNYK-JS-ANGULAR-471879",severity:"medium",semver:{vulnerable:["<1.6.0-rc.0"]}},{id:"npm:angular:20180202",severity:"medium",semver:{vulnerable:["<1.6.9"]}},{id:"npm:angular:20171018",severity:"medium",semver:{vulnerable:["<1.6.7"]}},{id:"npm:angular:20160527",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.30"]}},{id:"npm:angular:20160122",severity:"medium",semver:{vulnerable:[">=1.3.0 <1.5.0-rc.2"]}},{id:"npm:angular:20140608",severity:"low",semver:{vulnerable:["<1.3.0"]}},{id:"npm:angular:20131113",severity:"high",semver:{vulnerable:["<1.2.2"]}},{id:"npm:angular:20140908",severity:"medium",semver:{vulnerable:["<1.3.0-rc.5"]}},{id:"npm:angular:20161101",severity:"medium",semver:{
851
+ vulnerable:[">=1.5.0 <1.5.9"]}},{id:"npm:angular:20150909",severity:"high",semver:{vulnerable:["<1.5.0-beta.2"]}},{id:"npm:angular:20151205",severity:"medium",semver:{vulnerable:["<1.5.0-rc.0"]}},{id:"npm:angular:20151130",severity:"medium",semver:{vulnerable:["<1.4.10"]}},{id:"npm:angular:20130622",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.0"]}},{id:"npm:angular:20150807-1",severity:"medium",semver:{vulnerable:[">=1.3.1 <1.5.0-beta.0"]}},{id:"npm:angular:20150807",severity:"high",semver:{vulnerable:[">=1.0.0 <1.5.0-beta.0"]}},{id:"npm:angular:20150315",severity:"medium",semver:{vulnerable:["<1.6.1"]}},{id:"npm:angular:20150310",severity:"high",semver:{vulnerable:["<1.4.0-beta.6"]}},{id:"npm:angular:20141104",severity:"medium",semver:{vulnerable:["<1.3.2"]}},{id:"npm:angular:20130621",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"npm:angular:20140909",severity:"high",semver:{vulnerable:[">=1.2.19 <1.2.27"]}},{id:"npm:angular:20130625",severity:"high",semver:{
852
+ vulnerable:["<1.1.5"]}}],backbone:[{id:"npm:backbone:20160523",severity:"medium",semver:{vulnerable:["<0.1.2"]}},{id:"npm:backbone:20110701",severity:"medium",semver:{vulnerable:["<0.5.0"]}}],bootstrap:[{id:"SNYK-JS-BOOTSTRAP-173700",severity:"medium",semver:{vulnerable:["<3.4.1",">=4.0.0 <4.3.1"]}},{id:"SNYK-JS-BOOTSTRAP-73560",severity:"medium",semver:{vulnerable:[">=4.0.0 <4.1.2"]}},{id:"SNYK-JS-BOOTSTRAP-72890",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"SNYK-JS-BOOTSTRAP-72889",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:bootstrap:20180529",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0 <4.1.2"]}},{id:"npm:bootstrap:20160627",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0-alpha <4.0.0-beta.2"]}},{id:"npm:bootstrap:20120510",severity:"medium",semver:{vulnerable:["<2.1.0"]}}],dojo:[{id:"SNYK-JS-DOJO-1535223",severity:"high",semver:{vulnerable:["<1.17.0"]}},{id:"SNYK-JS-DOJO-559224",severity:"medium",semver:{
853
+ vulnerable:["<1.11.10",">=1.12.1 <1.12.8",">=1.13.0 <1.13.7",">=1.14.0 <1.14.6",">=1.15.0 <1.15.3",">=1.16.0 <1.16.2"]}},{id:"SNYK-JS-DOJO-174934",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}},{id:"SNYK-JS-DOJO-174933",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"SNYK-JS-DOJO-72305",severity:"medium",semver:{vulnerable:[">=1.14.0-pre <1.14.0",">=1.13.0 <1.13.1",">=1.12.1 <1.12.4",">=1.11.0-rc1 <1.11.6","<1.10.10"]}},{id:"npm:dojo:20180818",severity:"medium",semver:{vulnerable:["<1.10.10",">=1.11.0 <1.11.6",">=1.12.0 <1.12.4",">=1.13.0 <1.13.1"]}},{id:"npm:dojo:20100614-6",severity:"medium",semver:{vulnerable:["<1.4.2"]}},{id:"npm:dojo:20100614",severity:"medium",semver:{vulnerable:[">=0.4.0 <0.4.4",">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}}],"foundation-sites":[{id:"npm:foundation-sites:20170802",severity:"medium",semver:{vulnerable:["<6.0.0"]}},{
854
+ id:"npm:foundation-sites:20150619",severity:"medium",semver:{vulnerable:["<5.5.3"]}},{id:"npm:foundation-sites:20120717",severity:"medium",semver:{vulnerable:[">=3.0.0 <3.0.6"]}}],"google-closure-library":[{id:"SNYK-JS-GOOGLECLOSURELIBRARY-561341",severity:"medium",semver:{vulnerable:["<20200315.0.0"]}},{id:"SNYK-JS-GOOGLECLOSURELIBRARY-174519",severity:"medium",semver:{vulnerable:[">=20190121.0.0 <20190301.0.0"]}}],gsap:[{id:"SNYK-JS-GSAP-1054614",severity:"high",semver:{vulnerable:["<3.6.0"]}}],handlebars:[{id:"SNYK-JS-HANDLEBARS-1279029",severity:"medium",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-1056767",severity:"high",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-567742",severity:"medium",semver:{vulnerable:["<4.6.0"]}},{id:"SNYK-JS-HANDLEBARS-534988",severity:"critical",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-534478",severity:"high",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-480388",
855
+ severity:"high",semver:{vulnerable:[">=4.0.0 <4.4.5"]}},{id:"SNYK-JS-HANDLEBARS-469063",severity:"high",semver:{vulnerable:[">=4.0.0 <4.3.0","<3.8.0"]}},{id:"SNYK-JS-HANDLEBARS-174183",severity:"high",semver:{vulnerable:[">=3.0.0 <3.0.7",">=4.1.0 <4.1.2",">=4.0.0 <4.0.14"]}},{id:"SNYK-JS-HANDLEBARS-173692",severity:"high",semver:{vulnerable:["<4.0.14",">=4.1.0 <4.1.2"]}},{id:"npm:handlebars:20151207",severity:"medium",semver:{vulnerable:["<4.0.0"]}},{id:"npm:handlebars:20110425",severity:"medium",semver:{vulnerable:["<=1.0.0-beta.3"]}}],highcharts:[{id:"SNYK-JS-HIGHCHARTS-1290057",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-1018906",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-571995",severity:"high",semver:{vulnerable:["<7.2.2",">=8.0.0 <8.1.1"]}},{id:"npm:highcharts:20180225",severity:"high",semver:{vulnerable:["<6.1.0"]}}],jquery:[{id:"SNYK-JS-JQUERY-569619",severity:"medium",semver:{vulnerable:["<1.9.0"]}},{
856
+ id:"SNYK-JS-JQUERY-567880",severity:"medium",semver:{vulnerable:[">=1.2.0 <3.5.0"]}},{id:"SNYK-JS-JQUERY-565129",severity:"medium",semver:{vulnerable:[">=1.5.1 <3.5.0"]}},{id:"SNYK-JS-JQUERY-174006",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:jquery:20160529",severity:"low",semver:{vulnerable:[">=3.0.0-rc1 <3.0.0"]}},{id:"npm:jquery:20150627",severity:"medium",semver:{vulnerable:["<1.12.2",">=1.12.3 <2.2.0",">=2.2.3 <3.0.0"]}},{id:"npm:jquery:20140902",severity:"medium",semver:{vulnerable:[">=1.4.2 <1.6.2"]}},{id:"npm:jquery:20120206",severity:"medium",semver:{vulnerable:["<1.9.1"]}},{id:"npm:jquery:20110606",severity:"medium",semver:{vulnerable:["<1.6.3"]}}],"jquery-mobile":[{id:"SNYK-JS-JQUERYMOBILE-174599",severity:"medium",semver:{vulnerable:["<=1.5.0-alpha.1"]}},{id:"npm:jquery-mobile:20120802",severity:"medium",semver:{vulnerable:["<1.2.0"]}}],"jquery-ui":[{id:"SNYK-JS-JQUERYUI-1767767",severity:"high",semver:{vulnerable:["<1.13.0"]}},{
857
+ id:"SNYK-JS-JQUERYUI-1767175",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"SNYK-JS-JQUERYUI-1767167",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"npm:jquery-ui:20121127",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20100903",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20160721",severity:"high",semver:{vulnerable:["<1.12.0"]}}],knockout:[{id:"npm:knockout:20180213",severity:"medium",semver:{vulnerable:["<3.5.0-beta"]}},{id:"npm:knockout:20130701",severity:"medium",semver:{vulnerable:[">=2.1.0-pre <3.0.0"]}}],lodash:[{id:"SNYK-JS-LODASH-1040724",severity:"high",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-1018905",severity:"medium",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-608086",severity:"high",semver:{vulnerable:["<4.17.17"]}},{id:"SNYK-JS-LODASH-567746",severity:"high",semver:{vulnerable:["<4.17.20"]}},{id:"SNYK-JS-LODASH-450202",severity:"high",semver:{vulnerable:["<4.17.12"]}},{
858
+ id:"SNYK-JS-LODASH-73639",severity:"medium",semver:{vulnerable:["<4.17.11"]}},{id:"SNYK-JS-LODASH-73638",severity:"high",semver:{vulnerable:["<4.17.11"]}},{id:"npm:lodash:20180130",severity:"medium",semver:{vulnerable:["<4.17.5"]}}],moment:[{id:"SNYK-JS-MOMENT-2440688",severity:"high",semver:{vulnerable:["<2.29.2"]}},{id:"npm:moment:20170905",severity:"low",semver:{vulnerable:["<2.19.3"]}},{id:"npm:moment:20161019",severity:"medium",semver:{vulnerable:["<2.15.2"]}},{id:"npm:moment:20160126",severity:"medium",semver:{vulnerable:["<2.11.2"]}}],mustache:[{id:"npm:mustache:20151207",severity:"medium",semver:{vulnerable:["<2.2.1"]}},{id:"npm:mustache:20110814",severity:"medium",semver:{vulnerable:["< 0.3.1"]}}],next:[{id:"SNYK-JS-NEXT-2405694",severity:"medium",semver:{vulnerable:[">=10.0.0 <12.1.0"]}},{id:"SNYK-JS-NEXT-2388583",severity:"medium",semver:{vulnerable:[">=12.0.0 <12.0.9"]}},{id:"SNYK-JS-NEXT-2312745",severity:"high",semver:{vulnerable:[">=12.0.0 <12.0.5",">=11.1.0 <11.1.3"]}
859
+ },{id:"SNYK-JS-NEXT-1577139",severity:"medium",semver:{vulnerable:[">=10.0.0 <11.1.1"]}},{id:"SNYK-JS-NEXT-1540422",severity:"medium",semver:{vulnerable:["<11.1.0"]}},{id:"SNYK-JS-NEXT-1063481",severity:"medium",semver:{vulnerable:[">=9.5.0 <9.5.4"]}},{id:"SNYK-JS-NEXT-571938",severity:"high",semver:{vulnerable:["<5.1.0"]}},{id:"SNYK-JS-NEXT-561584",severity:"medium",semver:{vulnerable:["<9.3.2"]}},{id:"SNYK-JS-NEXT-174590",severity:"high",semver:{vulnerable:["<2.4.1"]}},{id:"SNYK-JS-NEXT-72454",severity:"medium",semver:{vulnerable:[">=7.0.0 <7.0.2"]}},{id:"npm:next:20180124",severity:"high",semver:{vulnerable:["<4.2.3"]}},{id:"npm:next:20170607",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:next:20170601",severity:"high",semver:{vulnerable:["<2.4.1",">=3.0.0-beta1 <3.0.0-beta7"]}}],react:[{id:"npm:react:20150318",severity:"high",semver:{vulnerable:[">=0.0.1 <0.14.0"]}},{id:"npm:react:20131217",severity:"medium",semver:{vulnerable:[">=0.5.0 <0.5.2",">=0.4.0 <0.4.2"]}}],
860
+ riot:[{id:"npm:riot:20131114",severity:"medium",semver:{vulnerable:["<0.9.6"]}}],"socket.io":[{id:"SNYK-JS-SOCKETIO-1024859",severity:"medium",semver:{vulnerable:["<2.4.0"]}},{id:"npm:socket.io:20120417",severity:"medium",semver:{vulnerable:["<0.9.6"]}},{id:"npm:socket.io:20120323",severity:"medium",semver:{vulnerable:["<0.9.7"]}}],three:[{id:"SNYK-JS-THREE-1064931",severity:"high",semver:{vulnerable:["<0.125.0"]}}],underscore:[{id:"SNYK-JS-UNDERSCORE-1080984",severity:"medium",semver:{vulnerable:[">=1.13.0-0 <1.13.0-2",">=1.3.2 <1.12.1"]}}],vue:[{id:"npm:vue:20170829",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:vue:20170401",severity:"medium",semver:{vulnerable:["<2.3.0-beta.1"]}},{id:"npm:vue:20180802",severity:"medium",semver:{vulnerable:["<2.5.17"]}},{id:"npm:vue:20180222",severity:"low",semver:{vulnerable:["<2.5.14"]}}],yui:[{id:"npm:yui:20130604",severity:"medium",semver:{vulnerable:[">=3.0.0 <3.10.1","=3.10.2"]}},{id:"npm:yui:20130515",severity:"medium",semver:{
861
+ vulnerable:["<3.10.0 >=3.0.0"]}},{id:"npm:yui:20121030",severity:"medium",semver:{vulnerable:["<3.0.0 >=2.4.0"]}},{id:"npm:yui:20120428",severity:"medium",semver:{vulnerable:["<3.5.1 >=3.5.0-PR1"]}},{id:"npm:yui:20101025",severity:"medium",semver:{vulnerable:["<2.8.2 >=2.4.0"]}}]}},c_=oi,l_={title:"Avoids front-end JavaScript libraries with known security vulnerabilities",failureTitle:"Includes front-end JavaScript libraries with known security vulnerabilities",description:"Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://web.dev/no-vulnerable-libraries/).",displayValue:"{itemCount, plural,\n =1 {1 vulnerability detected}\n other {# vulnerabilities detected}\n }",columnVersion:"Library Version",columnVuln:"Vulnerability Count",columnSeverity:"Highest Severity"
862
+ },u_=c_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js",l_),d_=/^(\d+\.\d+\.\d+)[^-0-9]+/,m_={low:u_(c_.UIStrings.itemSeverityLow),medium:u_(c_.UIStrings.itemSeverityMedium),high:u_(c_.UIStrings.itemSeverityHigh)};class NoVulnerableLibrariesAudit extends n_{static get meta(){return{id:"no-vulnerable-libraries",title:u_(l_.title),failureTitle:u_(l_.failureTitle),description:u_(l_.description),requiredArtifacts:["Stacks"]}}static get snykDB(){return s_}static get severityMap(){return{high:3,medium:2,low:1}}static normalizeVersion(e){if(!e)return e;if(o_.valid(e))return e;if(/^\d+\.\d+$/.test(e))return`${e}.0`;const t=e.match(d_);return t?t[1]:e}static getVulnerabilities(e,t,r){if(!t.npm||!r.npm[t.npm])return[];try{o_.satisfies(e,"*")}catch(e){return e.pkgName=t.npm,i_.captureException(e,{level:"warning"}),[]}return r.npm[t.npm].filter((t=>t.semver.vulnerable.some((t=>o_.satisfies(e,t))))).map((r=>({severity:m_[r.severity],
863
+ numericSeverity:this.severityMap[r.severity],library:`${t.name}@${e}`,url:"https://snyk.io/vuln/"+r.id})))}static highestSeverity(e){return e.sort(((e,t)=>t.numericSeverity-e.numericSeverity))[0].severity}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)),r=NoVulnerableLibrariesAudit.snykDB;if(!t.length)return{score:1};let a=0;const n=[];for(const e of t){const t=this.normalizeVersion(e.version)||"",i=this.getVulnerabilities(t,e,r),o=i.length;let s;a+=o,i.length>0&&(s=this.highestSeverity(i),n.push({highestSeverity:s,vulnCount:o,detectedLib:{text:e.name+"@"+t,url:`https://snyk.io/vuln/npm:${e.npm}?lh=${t}&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit`,type:"link"}}))}let i;a>0&&(i=u_(l_.displayValue,{itemCount:a}));const o=[{key:"detectedLib",itemType:"link",text:u_(l_.columnVersion)},{key:"vulnCount",itemType:"text",text:u_(l_.columnVuln)},{key:"highestSeverity",itemType:"text",text:u_(l_.columnSeverity)}],s=n_.makeTableDetails(o,n,{});return{
864
+ score:Number(0===a),displayValue:i,details:s}}}r_.exports=NoVulnerableLibrariesAudit,r_.exports.UIStrings=l_;var p_={exports:{}};const h_=Fx,g_=oi,f_={title:"Avoids requesting the notification permission on page load",failureTitle:"Requests the notification permission on page load",description:"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://web.dev/notification-on-start/)."},y_=g_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/notification-on-start.js",f_);p_.exports=class NotificationOnStart extends h_{static get meta(){return{id:"notification-on-start",title:y_(f_.title),failureTitle:y_(f_.failureTitle),description:y_(f_.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await h_.getViolationResults(e,t,/notification permission/),a=[{key:"source",
865
+ itemType:"source-location",text:y_(g_.UIStrings.columnSource)}],n=h_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},p_.exports.UIStrings=f_;var v_={exports:{}};const b_=kc,w_=oi,S_={title:"Allows users to paste into password fields",failureTitle:"Prevents users to paste into password fields",description:"Preventing password pasting undermines good security policy. [Learn more](https://web.dev/password-inputs-can-be-pasted-into/)."},T_=w_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js",S_);v_.exports=class PasswordInputsCanBePastedIntoAudit extends b_{static get meta(){return{id:"password-inputs-can-be-pasted-into",title:T_(S_.title),failureTitle:T_(S_.failureTitle),description:T_(S_.description),requiredArtifacts:["PasswordInputsWithPreventedPaste"]}}static audit(e){const t=e.PasswordInputsWithPreventedPaste,r=[];t.forEach((e=>{r.push({node:b_.makeNodeItem(e.node)})}));const a=[{key:"node",itemType:"node",
866
+ text:T_(w_.UIStrings.columnFailingElem)}];return{score:Number(0===t.length),details:b_.makeTableDetails(a,r)}}},v_.exports.UIStrings=S_;var E_={exports:{}};const x_=kc,A_=uw,R_=ji,k_=Ib,D_=Tb,C_=Ki,I_=Lo,N_=Dl,L_=eb,M_=oi,P_={title:"Use HTTP/2",description:"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more](https://web.dev/uses-http2/).",displayValue:"{itemCount, plural,\n =1 {1 request not served via HTTP/2}\n other {# requests not served via HTTP/2}\n }",columnProtocol:"Protocol"},O_=M_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-http2.js",P_),F_=new Set([C_.TYPES.Document,C_.TYPES.Font,C_.TYPES.Image,C_.TYPES.Stylesheet,C_.TYPES.Script,C_.TYPES.Media]);class UsesHTTP2Audit extends x_{static get meta(){return{id:"uses-http2",title:O_(P_.title),description:O_(P_.description),scoreDisplayMode:x_.SCORING_MODES.NUMERIC,supportedModes:["timespan","navigation"],
867
+ requiredArtifacts:["URL","devtoolsLogs","traces","GatherContext"]}}static computeWasteWithTTIGraph(e,t,r){const a=new Set(e.map((e=>e.url))),n=r.simulate(t,{label:"uses-http2-before",flexibleOrdering:true}),i=new Map;t.traverse((e=>{"network"===e.type&&a.has(e.record.url)&&(i.set(e.record.requestId,e.record.protocol),e.record.protocol="h2")}));const o=r.simulate(t,{label:"uses-http2-after",flexibleOrdering:true});t.traverse((e=>{if("network"!==e.type)return;const t=i.get(e.record.requestId);void 0!==t&&(e.record.protocol=t)}));const s=n.timeInMs-o.timeInMs,c=D_.getLastLongTaskEndTime(n.nodeTimings)-D_.getLastLongTaskEndTime(o.nodeTimings),l=Math.max(c,s);return 10*Math.round(Math.max(l,0)/10)}static isStaticAsset(e){if(!F_.has(e.resourceType))return!1;if(e.resourceSize<100){if(A_.getEntity(e.url))return!1}return!0}static determineNonHttp2Resources(e){const t=[],r=new Set,a=new Map;for(const t of e){if(!UsesHTTP2Audit.isStaticAsset(t))continue
868
+ ;if(R_.isLikeLocalhost(t.parsedURL.host))continue;const e=a.get(t.parsedURL.securityOrigin)||[];e.push(t),a.set(t.parsedURL.securityOrigin,e)}for(const n of e){if(r.has(n.url))continue;if(n.fetchedViaServiceWorker)continue;if(!/HTTP\/[01][.\d]?/i.test(n.protocol))continue;(a.get(n.parsedURL.securityOrigin)||[]).length<6||(r.add(n.url),t.push({protocol:n.protocol,url:n.url}))}return t}static async audit(e,t){const r=e.traces[x_.DEFAULT_PASS],a=e.devtoolsLogs[x_.DEFAULT_PASS],n=await I_.request(a,t),i=UsesHTTP2Audit.determineNonHttp2Resources(n);let o;if(i.length>0&&(o=O_(P_.displayValue,{itemCount:i.length})),"timespan"===e.GatherContext.gatherMode){const e=[{key:"url",itemType:"url",text:O_(M_.UIStrings.columnURL)},{key:"protocol",itemType:"text",text:O_(P_.columnProtocol)}],t=x_.makeTableDetails(e,i);return{displayValue:o,score:i.length?0:1,details:t}}const s={devtoolsLog:a,settings:t?.settings||{}},c=await L_.request({trace:r,devtoolsLog:a
869
+ },t),l=await N_.request(s,t),u=UsesHTTP2Audit.computeWasteWithTTIGraph(i,c,l),d=[{key:"url",valueType:"url",label:O_(M_.UIStrings.columnURL)},{key:"protocol",valueType:"text",label:O_(P_.columnProtocol)}],m=x_.makeOpportunityDetails(d,i,u);return{displayValue:o,numericValue:u,numericUnit:"millisecond",score:k_.scoreForWastedMs(u),details:m}}}E_.exports=UsesHTTP2Audit,E_.exports.UIStrings=P_;var U_={exports:{}};const j_=Fx,B_=oi,$_={title:"Uses passive listeners to improve scrolling performance",failureTitle:"Does not use passive listeners to improve scrolling performance",description:"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://web.dev/uses-passive-event-listeners/)."},q_=B_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js",$_);U_.exports=class PassiveEventsAudit extends j_{static get meta(){return{id:"uses-passive-event-listeners",title:q_($_.title),
870
+ failureTitle:q_($_.failureTitle),description:q_($_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await j_.getViolationResults(e,t,/passive event listener/),a=[{key:"source",itemType:"source-location",text:q_(B_.UIStrings.columnSource)}],n=j_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},U_.exports.UIStrings=$_;var z_={exports:{}};const V_=on.default,W_=kc,H_=jb,G_=oi,Y_={title:"No browser errors logged to the console",failureTitle:"Browser errors were logged to the console",description:"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more](https://web.dev/errors-in-console/)"},K_=G_.createMessageInstanceIdFn("lighthouse-core/audits/errors-in-console.js",Y_);class ErrorLogs extends W_{static get meta(){return{id:"errors-in-console",title:K_(Y_.title),failureTitle:K_(Y_.failureTitle),
871
+ description:K_(Y_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static get defaultOptions(){return{ignoredPatterns:["ERR_BLOCKED_BY_CLIENT.Inspector"]}}static filterAccordingToOptions(e,t){const{ignoredPatterns:r,...a}=t,n=Object.keys(a);return n.length&&V_.warn(this.meta.id,"Unrecognized options",n),r?e.filter((({description:e})=>{if(!e)return!0;for(const t of r){if(t instanceof RegExp&&t.test(e))return!1;if("string"==typeof t&&e.includes(t))return!1}return!0})):e}static async audit(e,t){const r=t.options,a=await H_.request(e,t),n=e.ConsoleMessages.filter((e=>"error"===e.level)).map((e=>{const t=a.find((t=>t.script.src===e.url));return{source:e.source,description:e.text,sourceLocation:W_.makeSourceLocationFromConsoleMessage(e,t)}})),i=ErrorLogs.filterAccordingToOptions(n,r).sort(((e,t)=>(e.description||"").localeCompare(t.description||""))),o=[{key:"sourceLocation",itemType:"source-location",text:K_(G_.UIStrings.columnSource)},{key:"description",
872
+ itemType:"code",text:K_(G_.UIStrings.columnDescription)}],s=W_.makeTableDetails(o,i),c=i.length;return{score:Number(0===c),details:s}}}z_.exports=ErrorLogs,z_.exports.UIStrings=Y_;const J_=Ao;var X_=J_(class Screenshots$1{static async compute_(e){return e.traceEvents.filter((e=>"Screenshot"===e.name)).map((e=>({timestamp:e.ts,datauri:`data:image/jpeg;base64,${e.args.snapshot}`})))}},null);const Z_=kc,Q_=vi.exports,eA=Yp,tA=X_;var rA=class FinalScreenshot extends Z_{static get meta(){return{id:"final-screenshot",scoreDisplayMode:Z_.SCORING_MODES.INFORMATIVE,title:"Final Screenshot",description:"The last screenshot captured of the pageload.",requiredArtifacts:["traces","GatherContext"]}}static async audit(e,t){const r=e.traces[Z_.DEFAULT_PASS],a=await eA.request(r,t),n=await tA.request(r,t),{timeOrigin:i}=a.timestamps,o=n[n.length-1];if(!o){if("timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw new Q_(Q_.errors.NO_SCREENSHOTS)}return{score:1,details:{
873
+ type:"screenshot",timing:Math.round((o.timestamp-i)/1e3),timestamp:o.timestamp,data:o.datauri}}}},aA={exports:{}};const nA=kc,iA=ji,oA=/^(block|fallback|optional|swap)$/,sA=/url\((.*?)\)/,cA=new RegExp(sA,"g"),lA=oi,uA=Jl,dA=Lo,mA={title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},pA=lA.createMessageInstanceIdFn("lighthouse-core/audits/font-display.js",mA);class FontDisplay$1 extends nA{static get meta(){return{id:"font-display",title:pA(mA.title),failureTitle:pA(mA.failureTitle),
874
+ description:pA(mA.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}static findFontDisplayDeclarations(e,t){const r=new Set,a=new Set;for(const n of e.CSSUsage.stylesheets){const i=n.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(const o of i){const i=o.match(cA);if(!i)continue;const s=o.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",c=t.test(s)?r:a,l=i.map((e=>e.match(sA)[1].trim())).map((e=>/^('|").*\1$/.test(e)?e.substr(1,e.length-2):e));for(const t of l)try{const r=iA.isValid(n.header.sourceURL)?n.header.sourceURL:e.URL.finalUrl,a=new iA(t,r);c.add(a.href)}catch(e){uA.captureException(e,{tags:{audit:this.meta.id}})}}}return{passingURLs:r,failingURLs:a}}static getWarningsForFontUrls(e){const t=new Map;for(const r of e){const e=iA.getOrigin(r);if(!e)continue;const a=t.get(e)||0;t.set(e,a+1)}return[...t].map((([e,t])=>pA(mA.undeclaredFontOriginWarning,{fontCountForOrigin:t,fontOrigin:e})))}
875
+ static async audit(e,t){const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await dA.request(r,t),{passingURLs:n,failingURLs:i}=FontDisplay$1.findFontDisplayDeclarations(e,oA),o=[],s=a.filter((e=>"Font"===e.resourceType)).filter((e=>!/^data:/.test(e.url))).filter((e=>!/^blob:/.test(e.url))).filter((e=>!!i.has(e.url)||(n.has(e.url)||o.push(e.url),!1))).map((e=>{const t=Math.min(1e3*(e.endTime-e.startTime),3e3);return{url:e.url,wastedMs:t}})),c=[{key:"url",itemType:"url",text:pA(lA.UIStrings.columnURL)},{key:"wastedMs",itemType:"ms",text:pA(lA.UIStrings.columnWastedMs)}],l=nA.makeTableDetails(c,s);return{score:Number(0===s.length),details:l,warnings:FontDisplay$1.getWarningsForFontUrls(o)}}}aA.exports=FontDisplay$1,aA.exports.UIStrings=mA;
879
876
  /**
880
877
  * @license Copyright 2020 Google Inc. All Rights Reserved.
881
878
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
882
879
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
883
880
  */
884
- const uA=kc;var dA=class FullPageScreenshot extends uA{static get meta(){return{id:"full-page-screenshot",scoreDisplayMode:uA.SCORING_MODES.INFORMATIVE,title:"Full-page screenshot",description:"A full-height screenshot of the final rendered page",requiredArtifacts:["FullPageScreenshot"]}}static async audit(e){return e.FullPageScreenshot?{score:1,details:{type:"full-page-screenshot",...e.FullPageScreenshot}}:{score:0,notApplicable:!0}}},mA={exports:{}};const pA=kc,hA=ji,gA=oi,fA={title:"Displays images with correct aspect ratio",failureTitle:"Displays images with incorrect aspect ratio",description:"Image display dimensions should match natural aspect ratio. [Learn more](https://web.dev/image-aspect-ratio/).",columnDisplayed:"Aspect Ratio (Displayed)",columnActual:"Aspect Ratio (Actual)"},yA=gA.createMessageInstanceIdFn("lighthouse-core/audits/image-aspect-ratio.js",fA);class ImageAspectRatio extends pA{static get meta(){return{id:"image-aspect-ratio",title:yA(fA.title),
885
- failureTitle:yA(fA.failureTitle),description:yA(fA.description),requiredArtifacts:["ImageElements"]}}static computeAspectRatios(e){const t=hA.elideDataURI(e.src),r=e.naturalDimensions.width/e.naturalDimensions.height,a=e.displayedWidth/e.displayedHeight,n=e.displayedWidth/r,i=Math.abs(n-e.displayedHeight)<2;return{url:t,node:pA.makeNodeItem(e.node),displayedAspectRatio:`${e.displayedWidth} x ${e.displayedHeight}\n (${a.toFixed(2)})`,actualAspectRatio:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}\n (${r.toFixed(2)})`,doRatiosMatch:i}}static audit(e){const t=e.ImageElements,r=[];t.filter((e=>!e.isCss&&"image/svg+xml"!==hA.guessMimeType(e.src)&&e.naturalDimensions&&e.naturalDimensions.height>5&&e.naturalDimensions.width>5&&e.displayedWidth&&e.displayedHeight&&"fill"===e.computedStyles.objectFit)).forEach((e=>{const t=e,a=ImageAspectRatio.computeAspectRatios(t);a.doRatiosMatch||r.push(a)}));const a=[{key:"node",itemType:"node",text:""},{key:"url",
886
- itemType:"url",text:yA(gA.UIStrings.columnURL)},{key:"displayedAspectRatio",itemType:"text",text:yA(fA.columnDisplayed)},{key:"actualAspectRatio",itemType:"text",text:yA(fA.columnActual)}];return{score:Number(0===r.length),details:pA.makeTableDetails(a,r)}}}mA.exports=ImageAspectRatio,mA.exports.UIStrings=fA;var vA={exports:{}};const bA=kc,wA=ji,SA=oi,TA={title:"Serves images with appropriate resolution",failureTitle:"Serves images with low resolution",description:"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).",columnDisplayed:"Displayed size",columnActual:"Actual size",columnExpected:"Expected size"},EA=SA.createMessageInstanceIdFn("lighthouse-core/audits/image-size-responsive.js",TA);function isCandidate(e){
887
- return!(e.displayedWidth<=1||e.displayedHeight<=1)&&(!!(e.naturalDimensions&&e.naturalDimensions.width&&e.naturalDimensions.height)&&("image/svg+xml"!==wA.guessMimeType(e.src)&&(!e.isCss&&("fill"===e.computedStyles.objectFit&&(!["pixelated","crisp-edges"].includes(e.computedStyles.imageRendering)&&!/ \d+(\.\d+)?x/.test(e.srcset))))))}function imageHasNaturalDimensions(e){return!!e.naturalDimensions}function imageHasRightSize(e,t){const[r,a]=function allowedImageSize(e,t,r){let a=1;(e>64||t>64)&&(a=.75);const n=quantizeDpr(r),i=Math.ceil(a*n*e),o=Math.ceil(a*n*t);return[i,o]}(e.displayedWidth,e.displayedHeight,t);return e.naturalDimensions.width>=r&&e.naturalDimensions.height>=a}function getResult(e,t){const[r,a]=function expectedImageSize(e,t,r){const a=Math.ceil(quantizeDpr(r)*e),n=Math.ceil(quantizeDpr(r)*t);return[a,n]}(e.displayedWidth,e.displayedHeight,t);return{url:wA.elideDataURI(e.src),node:bA.makeNodeItem(e.node),displayedSize:`${e.displayedWidth} x ${e.displayedHeight}`,
888
- actualSize:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}`,actualPixels:e.naturalDimensions.width*e.naturalDimensions.height,expectedSize:`${r} x ${a}`,expectedPixels:r*a}}function quantizeDpr(e){return e>=2?2:e>=1.5?1.5:1}vA.exports=class ImageSizeResponsive extends bA{static get meta(){return{id:"image-size-responsive",title:EA(TA.title),failureTitle:EA(TA.failureTitle),description:EA(TA.description),requiredArtifacts:["ImageElements","ViewportDimensions"]}}static audit(e){const t=e.ViewportDimensions.devicePixelRatio,r=Array.from(e.ImageElements).filter(isCandidate).filter(imageHasNaturalDimensions).filter((e=>!imageHasRightSize(e,t))).filter((t=>function isVisible(e,t){return(e.bottom-e.top)*(e.right-e.left)>0&&e.top<=t.innerHeight&&e.bottom>=0&&e.left<=t.innerWidth&&e.right>=0}(t.clientRect,e.ViewportDimensions))).filter((t=>function isSmallerThanViewport(e,t){return e.bottom-e.top<=t.innerHeight&&e.right-e.left<=t.innerWidth
889
- }(t.clientRect,e.ViewportDimensions))).map((e=>getResult(e,t))),a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:EA(SA.UIStrings.columnURL)},{key:"displayedSize",itemType:"text",text:EA(TA.columnDisplayed)},{key:"actualSize",itemType:"text",text:EA(TA.columnActual)},{key:"expectedSize",itemType:"text",text:EA(TA.columnExpected)}],n=function sortResultsBySizeDelta(e){return e.sort(((e,t)=>t.expectedPixels-t.actualPixels-(e.expectedPixels-e.actualPixels)))}(function deduplicateResultsByUrl(e){e.sort(((e,t)=>e.url===t.url?0:e.url<t.url?-1:1));const t=[];for(const r of e){const e=t[t.length-1];e&&e.url===r.url?e.expectedPixels<r.expectedPixels&&(t[t.length-1]=r):t.push(r)}return t}(r));return{score:Number(0===r.length),details:bA.makeTableDetails(a,n)}}},vA.exports.UIStrings=TA;var xA={exports:{}};const _A=ji;const AA=Ao,RA={doExist:function doExist(e){return!(!e||!e.icons)&&0!==e.icons.value.length},pngSizedAtLeast:function pngSizedAtLeast(e,t){
890
- const r=t.icons.value,a=[];return r.filter((e=>{const t=e.value.type.value;if(t)return"image/png"===t;const r=e.value.src.value;return r&&new _A(r).pathname.endsWith(".png")})).forEach((e=>{e.value.sizes.value&&a.push(...e.value.sizes.value)})),a.filter((e=>/\d+x\d+/.test(e))).filter((t=>{const r=t.split(/x/i),a=[parseFloat(r[0]),parseFloat(r[1])];return a[0]>=e&&a[1]>=e&&a[0]===a[1]}))},containsMaskableIcon:function containsMaskableIcon(e){return e.icons.value.some((e=>e.value.purpose?.value&&e.value.purpose.value.includes("maskable")))}},kA=["minimal-ui","fullscreen","standalone"];class ManifestValues$4{static get manifestChecks(){return[{id:"hasStartUrl",failureText:"Manifest does not contain a `start_url`",validate:e=>!!e.start_url.value},{id:"hasIconsAtLeast144px",failureText:"Manifest does not have a PNG icon of at least 144px",validate:e=>RA.doExist(e)&&RA.pngSizedAtLeast(144,e).length>0},{id:"hasIconsAtLeast512px",
891
- failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>RA.doExist(e)&&RA.pngSizedAtLeast(512,e).length>0},{id:"fetchesIcon",failureText:"Manifest icon failed to be fetched",validate:(e,t)=>{const r=["cannot-download-icon","no-icon-available"];return RA.doExist(e)&&!t.some((e=>r.includes(e.errorId)))}},{id:"hasPWADisplayValue",failureText:"Manifest's `display` value is not one of: "+kA.join(" | "),validate:e=>kA.includes(e.display.value)},{id:"hasBackgroundColor",failureText:"Manifest does not have `background_color`",validate:e=>!!e.background_color.value},{id:"hasThemeColor",failureText:"Manifest does not have `theme_color`",validate:e=>!!e.theme_color.value},{id:"hasShortName",failureText:"Manifest does not have `short_name`",validate:e=>!!e.short_name.value},{id:"shortNameLength",failureText:"Manifest's `short_name` is too long (>12 characters) to be displayed on a homescreen without truncation",validate:e=>!!e.short_name.value&&e.short_name.value.length<=12
892
- },{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>RA.doExist(e)&&RA.containsMaskableIcon(e)}]}static async compute_({WebAppManifest:e,InstallabilityErrors:t}){if(null===e)return{isParseFailure:!0,parseFailureReason:"No manifest was fetched",allChecks:[]};const r=e.value;if(void 0===r)return{isParseFailure:!0,parseFailureReason:"Manifest failed to parse as valid JSON",allChecks:[]};return{isParseFailure:!1,allChecks:ManifestValues$4.manifestChecks.map((e=>({id:e.id,failureText:e.failureText,passing:e.validate(r,t.errors)})))}}}var DA=AA(ManifestValues$4,["InstallabilityErrors","WebAppManifest"]);const CA=kc,IA=DA,NA={title:"Web app manifest and service worker meet the installability requirements",failureTitle:"Web app manifest or service worker do not meet the installability requirements",
881
+ const hA=kc;var gA=class FullPageScreenshot extends hA{static get meta(){return{id:"full-page-screenshot",scoreDisplayMode:hA.SCORING_MODES.INFORMATIVE,title:"Full-page screenshot",description:"A full-height screenshot of the final rendered page",requiredArtifacts:["FullPageScreenshot"]}}static async audit(e){return e.FullPageScreenshot?{score:1,details:{type:"full-page-screenshot",...e.FullPageScreenshot}}:{score:0,notApplicable:!0}}},fA={exports:{}};const yA=kc,vA=ji,bA=oi,wA={title:"Displays images with correct aspect ratio",failureTitle:"Displays images with incorrect aspect ratio",description:"Image display dimensions should match natural aspect ratio. [Learn more](https://web.dev/image-aspect-ratio/).",columnDisplayed:"Aspect Ratio (Displayed)",columnActual:"Aspect Ratio (Actual)"},SA=bA.createMessageInstanceIdFn("lighthouse-core/audits/image-aspect-ratio.js",wA);class ImageAspectRatio extends yA{static get meta(){return{id:"image-aspect-ratio",title:SA(wA.title),
882
+ failureTitle:SA(wA.failureTitle),description:SA(wA.description),requiredArtifacts:["ImageElements"]}}static computeAspectRatios(e){const t=vA.elideDataURI(e.src),r=e.naturalDimensions.width/e.naturalDimensions.height,a=e.displayedWidth/e.displayedHeight,n=e.displayedWidth/r,i=Math.abs(n-e.displayedHeight)<2;return{url:t,node:yA.makeNodeItem(e.node),displayedAspectRatio:`${e.displayedWidth} x ${e.displayedHeight}\n (${a.toFixed(2)})`,actualAspectRatio:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}\n (${r.toFixed(2)})`,doRatiosMatch:i}}static audit(e){const t=e.ImageElements,r=[];t.filter((e=>!e.isCss&&"image/svg+xml"!==vA.guessMimeType(e.src)&&e.naturalDimensions&&e.naturalDimensions.height>5&&e.naturalDimensions.width>5&&e.displayedWidth&&e.displayedHeight&&"fill"===e.computedStyles.objectFit)).forEach((e=>{const t=e,a=ImageAspectRatio.computeAspectRatios(t);a.doRatiosMatch||r.push(a)}));const a=[{key:"node",itemType:"node",text:""},{key:"url",
883
+ itemType:"url",text:SA(bA.UIStrings.columnURL)},{key:"displayedAspectRatio",itemType:"text",text:SA(wA.columnDisplayed)},{key:"actualAspectRatio",itemType:"text",text:SA(wA.columnActual)}];return{score:Number(0===r.length),details:yA.makeTableDetails(a,r)}}}fA.exports=ImageAspectRatio,fA.exports.UIStrings=wA;var TA={exports:{}};const EA=kc,xA=ji,_A=oi,AA={title:"Serves images with appropriate resolution",failureTitle:"Serves images with low resolution",description:"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).",columnDisplayed:"Displayed size",columnActual:"Actual size",columnExpected:"Expected size"},RA=_A.createMessageInstanceIdFn("lighthouse-core/audits/image-size-responsive.js",AA);function isCandidate(e){
884
+ return!(e.displayedWidth<=1||e.displayedHeight<=1)&&(!!(e.naturalDimensions&&e.naturalDimensions.width&&e.naturalDimensions.height)&&("image/svg+xml"!==xA.guessMimeType(e.src)&&(!e.isCss&&("fill"===e.computedStyles.objectFit&&(!["pixelated","crisp-edges"].includes(e.computedStyles.imageRendering)&&!/ \d+(\.\d+)?x/.test(e.srcset))))))}function imageHasNaturalDimensions(e){return!!e.naturalDimensions}function imageHasRightSize(e,t){const[r,a]=function allowedImageSize(e,t,r){let a=1;(e>64||t>64)&&(a=.75);const n=quantizeDpr(r),i=Math.ceil(a*n*e),o=Math.ceil(a*n*t);return[i,o]}(e.displayedWidth,e.displayedHeight,t);return e.naturalDimensions.width>=r&&e.naturalDimensions.height>=a}function getResult(e,t){const[r,a]=function expectedImageSize(e,t,r){const a=Math.ceil(quantizeDpr(r)*e),n=Math.ceil(quantizeDpr(r)*t);return[a,n]}(e.displayedWidth,e.displayedHeight,t);return{url:xA.elideDataURI(e.src),node:EA.makeNodeItem(e.node),displayedSize:`${e.displayedWidth} x ${e.displayedHeight}`,
885
+ actualSize:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}`,actualPixels:e.naturalDimensions.width*e.naturalDimensions.height,expectedSize:`${r} x ${a}`,expectedPixels:r*a}}function quantizeDpr(e){return e>=2?2:e>=1.5?1.5:1}TA.exports=class ImageSizeResponsive extends EA{static get meta(){return{id:"image-size-responsive",title:RA(AA.title),failureTitle:RA(AA.failureTitle),description:RA(AA.description),requiredArtifacts:["ImageElements","ViewportDimensions"]}}static audit(e){const t=e.ViewportDimensions.devicePixelRatio,r=Array.from(e.ImageElements).filter(isCandidate).filter(imageHasNaturalDimensions).filter((e=>!imageHasRightSize(e,t))).filter((t=>function isVisible(e,t){return(e.bottom-e.top)*(e.right-e.left)>0&&e.top<=t.innerHeight&&e.bottom>=0&&e.left<=t.innerWidth&&e.right>=0}(t.clientRect,e.ViewportDimensions))).filter((t=>function isSmallerThanViewport(e,t){return e.bottom-e.top<=t.innerHeight&&e.right-e.left<=t.innerWidth
886
+ }(t.clientRect,e.ViewportDimensions))).map((e=>getResult(e,t))),a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:RA(_A.UIStrings.columnURL)},{key:"displayedSize",itemType:"text",text:RA(AA.columnDisplayed)},{key:"actualSize",itemType:"text",text:RA(AA.columnActual)},{key:"expectedSize",itemType:"text",text:RA(AA.columnExpected)}],n=function sortResultsBySizeDelta(e){return e.sort(((e,t)=>t.expectedPixels-t.actualPixels-(e.expectedPixels-e.actualPixels)))}(function deduplicateResultsByUrl(e){e.sort(((e,t)=>e.url===t.url?0:e.url<t.url?-1:1));const t=[];for(const r of e){const e=t[t.length-1];e&&e.url===r.url?e.expectedPixels<r.expectedPixels&&(t[t.length-1]=r):t.push(r)}return t}(r));return{score:Number(0===r.length),details:EA.makeTableDetails(a,n)}}},TA.exports.UIStrings=AA;var kA={exports:{}};const DA=ji;const CA=Ao,IA={doExist:function doExist(e){return!(!e||!e.icons)&&0!==e.icons.value.length},pngSizedAtLeast:function pngSizedAtLeast(e,t){
887
+ const r=t.icons.value,a=[];return r.filter((e=>{const t=e.value.type.value;if(t)return"image/png"===t;const r=e.value.src.value;return r&&new DA(r).pathname.endsWith(".png")})).forEach((e=>{e.value.sizes.value&&a.push(...e.value.sizes.value)})),a.filter((e=>/\d+x\d+/.test(e))).filter((t=>{const r=t.split(/x/i),a=[parseFloat(r[0]),parseFloat(r[1])];return a[0]>=e&&a[1]>=e&&a[0]===a[1]}))},containsMaskableIcon:function containsMaskableIcon(e){return e.icons.value.some((e=>e.value.purpose?.value&&e.value.purpose.value.includes("maskable")))}},NA=["minimal-ui","fullscreen","standalone"];class ManifestValues$4{static get manifestChecks(){return[{id:"hasStartUrl",failureText:"Manifest does not contain a `start_url`",validate:e=>!!e.start_url.value},{id:"hasIconsAtLeast144px",failureText:"Manifest does not have a PNG icon of at least 144px",validate:e=>IA.doExist(e)&&IA.pngSizedAtLeast(144,e).length>0},{id:"hasIconsAtLeast512px",
888
+ failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>IA.doExist(e)&&IA.pngSizedAtLeast(512,e).length>0},{id:"fetchesIcon",failureText:"Manifest icon failed to be fetched",validate:(e,t)=>{const r=["cannot-download-icon","no-icon-available"];return IA.doExist(e)&&!t.some((e=>r.includes(e.errorId)))}},{id:"hasPWADisplayValue",failureText:"Manifest's `display` value is not one of: "+NA.join(" | "),validate:e=>NA.includes(e.display.value)},{id:"hasBackgroundColor",failureText:"Manifest does not have `background_color`",validate:e=>!!e.background_color.value},{id:"hasThemeColor",failureText:"Manifest does not have `theme_color`",validate:e=>!!e.theme_color.value},{id:"hasShortName",failureText:"Manifest does not have `short_name`",validate:e=>!!e.short_name.value},{id:"shortNameLength",failureText:"Manifest's `short_name` is too long (>12 characters) to be displayed on a homescreen without truncation",validate:e=>!!e.short_name.value&&e.short_name.value.length<=12
889
+ },{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>IA.doExist(e)&&IA.containsMaskableIcon(e)}]}static async compute_({WebAppManifest:e,InstallabilityErrors:t}){if(null===e)return{isParseFailure:!0,parseFailureReason:"No manifest was fetched",allChecks:[]};const r=e.value;if(void 0===r)return{isParseFailure:!0,parseFailureReason:"Manifest failed to parse as valid JSON",allChecks:[]};return{isParseFailure:!1,allChecks:ManifestValues$4.manifestChecks.map((e=>({id:e.id,failureText:e.failureText,passing:e.validate(r,t.errors)})))}}}var LA=CA(ManifestValues$4,["InstallabilityErrors","WebAppManifest"]);const MA=kc,PA=LA,OA={title:"Web app manifest and service worker meet the installability requirements",failureTitle:"Web app manifest or service worker do not meet the installability requirements",
893
890
  description:"Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://web.dev/installable-manifest/).",columnValue:"Failure reason",displayValue:"{itemCount, plural,\n =1 {1 reason}\n other {# reasons}\n }",noErrorId:"Installability error id '{errorId}' is not recognized","not-in-main-frame":"Page is not loaded in the main frame","not-from-secure-origin":"Page is not served from a secure origin","no-manifest":"Page has no manifest <link> URL","start-url-not-valid":"Manifest start URL is not valid","manifest-missing-name-or-short-name":"Manifest does not contain a 'name' or 'short_name' field",
894
891
  "manifest-display-not-supported":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-empty":"Manifest could not be fetched, is empty, or could not be parsed","no-matching-service-worker":"No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest.","manifest-missing-suitable-icon":'Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {value0} px is required, the sizes attribute must be set, and the purpose attribute, if set, must include "any".',"no-acceptable-icon":'No supplied icon is at least {value0} px square in PNG, SVG or WebP format, with the purpose attribute unset or set to "any"',"cannot-download-icon":"Could not download a required icon from the manifest","no-icon-available":"Downloaded icon was empty or corrupted",
895
892
  "platform-not-supported-on-android":"The specified application platform is not supported on Android","no-id-specified":"No Play store ID provided","ids-do-not-match":"The Play Store app URL and Play Store ID do not match","already-installed":"The app is already installed","url-not-supported-for-webapk":"A URL in the manifest contains a username, password, or port","in-incognito":"Page is loaded in an incognito window","not-offline-capable":"Page does not work offline","no-url-for-service-worker":"Could not check service worker without a 'start_url' field in the manifest","prefer-related-applications":"Manifest specifies prefer_related_applications: true","prefer-related-applications-only-beta-stable":"prefer_related_applications is only supported on Chrome Beta and Stable channels on Android.","manifest-display-override-not-supported":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'",
896
- "manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},LA=oi.createMessageInstanceIdFn("lighthouse-core/audits/installable-manifest.js",NA);class InstallableManifest extends CA{static get meta(){return{id:"installable-manifest",title:LA(NA.title),failureTitle:LA(NA.failureTitle),description:LA(NA.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static getInstallabilityErrors(e){const t=e.InstallabilityErrors.errors,r=[],a=[],n=/{([^}]+)}/g
897
- ;for(const i of t){if("in-incognito"===i.errorId)continue;if("warn-not-offline-capable"===i.errorId){a.push(LA(NA[i.errorId]));continue}if("pipeline-restarted"===i.errorId)continue;const t=NA[i.errorId];if("scheme-not-supported-for-webapk"===i.errorId){const a=e.WebAppManifest?.url;if(!a)continue;const n=new URL(a).protocol;r.push(LA(t,{scheme:n}));continue}if(void 0===t){r.push(LA(NA.noErrorId,{errorId:i.errorId}));continue}const o=t.match(n)||[],s=i.errorArguments?.length&&i.errorArguments[0].value;if(t&&i.errorArguments.length!==o.length){const e=JSON.stringify(i.errorArguments),t=i.errorArguments.length>o.length?`${i.errorId} has unexpected arguments ${e}`:`${i.errorId} does not have the expected number of arguments.`;r.push(t)}else t&&s?r.push(LA(t,{value0:s})):t&&r.push(LA(t))}return{i18nErrors:r,warnings:a}}static async audit(e,t){const{i18nErrors:r,warnings:a}=InstallableManifest.getInstallabilityErrors(e),n=e.WebAppManifest?e.WebAppManifest.url:null,i=[{key:"reason",
898
- itemType:"text",text:LA(NA.columnValue)}],o=r.map((e=>({reason:e})));if(!o.length){const r=await IA.request(e,t);r.isParseFailure&&o.push({reason:r.parseFailureReason})}const s={type:"debugdata",manifestUrl:n};return o.length>0?{score:0,warnings:a,numericValue:o.length,numericUnit:"element",displayValue:LA(NA.displayValue,{itemCount:o.length}),details:{...CA.makeTableDetails(i,o),debugData:s}}:{score:1,warnings:a,details:{...CA.makeTableDetails(i,o),debugData:s}}}}xA.exports=InstallableManifest,xA.exports.UIStrings=NA;var MA={exports:{}};const PA=kc,OA=ji,FA=Ki,UA=Lo,jA={title:"Uses HTTPS",failureTitle:"Does not use HTTPS",
899
- description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).",displayValue:"{itemCount, plural,\n =1 {1 insecure request found}\n other {# insecure requests found}\n }",columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},BA={MixedContentAutomaticallyUpgraded:jA.upgraded,MixedContentBlocked:jA.blocked,MixedContentWarning:jA.warning
900
- },$A=oi.createMessageInstanceIdFn("lighthouse-core/audits/is-on-https.js",jA);MA.exports=class HTTPS extends PA{static get meta(){return{id:"is-on-https",title:$A(jA.title),failureTitle:$A(jA.failureTitle),description:$A(jA.description),requiredArtifacts:["devtoolsLogs","InspectorIssues"]}}static audit(e,t){const r=e.devtoolsLogs[PA.DEFAULT_PASS];return UA.request(r,t).then((t=>{const r=t.filter((e=>!FA.isSecureRequest(e))).map((e=>OA.elideDataURI(e.url))),a=Array.from(new Set(r)).map((e=>({url:e,resolution:void 0}))),n=[{key:"url",itemType:"url",text:$A(jA.columnInsecureURL)},{key:"resolution",itemType:"text",text:$A(jA.columnResolution)}];for(const t of e.InspectorIssues.mixedContentIssue){let e=a.find((e=>e.url===t.insecureURL));e||(e={url:t.insecureURL},a.push(e)),e.resolution=BA[t.resolutionStatus]?$A(BA[t.resolutionStatus]):t.resolutionStatus}for(const e of a)e.resolution||(e.resolution=$A(jA.allowed));let i;return a.length>0&&(i=$A(jA.displayValue,{itemCount:a.length})),{
901
- score:Number(0===a.length),displayValue:i,details:PA.makeTableDetails(n,a)}}))}},MA.exports.UIStrings=jA;var qA={exports:{}};const zA=kc,VA=oi,WA={title:"Largest Contentful Paint element",description:"This is the largest contentful element painted within the viewport. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)"},GA=VA.createMessageInstanceIdFn("lighthouse-core/audits/largest-contentful-paint-element.js",WA);qA.exports=class LargestContentfulPaintElement extends zA{static get meta(){return{id:"largest-contentful-paint-element",title:GA(WA.title),description:GA(WA.description),scoreDisplayMode:zA.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),r=[];t&&r.push({node:zA.makeNodeItem(t.node)});const a=[{key:"node",itemType:"node",text:GA(VA.UIStrings.columnElement)
902
- }],n=zA.makeTableDetails(a,r),i=GA(VA.UIStrings.displayValueElementsFound,{nodeCount:r.length});return{score:1,notApplicable:0===r.length,displayValue:i,details:n}}},qA.exports.UIStrings=WA;var HA={exports:{}};
893
+ "manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},FA=oi.createMessageInstanceIdFn("lighthouse-core/audits/installable-manifest.js",OA);class InstallableManifest extends MA{static get meta(){return{id:"installable-manifest",title:FA(OA.title),failureTitle:FA(OA.failureTitle),description:FA(OA.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static getInstallabilityErrors(e){const t=e.InstallabilityErrors.errors,r=[],a=[],n=/{([^}]+)}/g
894
+ ;for(const i of t){if("in-incognito"===i.errorId)continue;if("warn-not-offline-capable"===i.errorId){a.push(FA(OA[i.errorId]));continue}if("pipeline-restarted"===i.errorId)continue;const t=OA[i.errorId];if("scheme-not-supported-for-webapk"===i.errorId){const a=e.WebAppManifest?.url;if(!a)continue;const n=new URL(a).protocol;r.push(FA(t,{scheme:n}));continue}if(void 0===t){r.push(FA(OA.noErrorId,{errorId:i.errorId}));continue}const o=t.match(n)||[],s=i.errorArguments?.length&&i.errorArguments[0].value;if(t&&i.errorArguments.length!==o.length){const e=JSON.stringify(i.errorArguments),t=i.errorArguments.length>o.length?`${i.errorId} has unexpected arguments ${e}`:`${i.errorId} does not have the expected number of arguments.`;r.push(t)}else t&&s?r.push(FA(t,{value0:s})):t&&r.push(FA(t))}return{i18nErrors:r,warnings:a}}static async audit(e,t){const{i18nErrors:r,warnings:a}=InstallableManifest.getInstallabilityErrors(e),n=e.WebAppManifest?e.WebAppManifest.url:null,i=[{key:"reason",
895
+ itemType:"text",text:FA(OA.columnValue)}],o=r.map((e=>({reason:e})));if(!o.length){const r=await PA.request(e,t);r.isParseFailure&&o.push({reason:r.parseFailureReason})}const s={type:"debugdata",manifestUrl:n};return o.length>0?{score:0,warnings:a,numericValue:o.length,numericUnit:"element",displayValue:FA(OA.displayValue,{itemCount:o.length}),details:{...MA.makeTableDetails(i,o),debugData:s}}:{score:1,warnings:a,details:{...MA.makeTableDetails(i,o),debugData:s}}}}kA.exports=InstallableManifest,kA.exports.UIStrings=OA;var UA={exports:{}};const jA=kc,BA=ji,$A=Ki,qA=Lo,zA={title:"Uses HTTPS",failureTitle:"Does not use HTTPS",
896
+ description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).",displayValue:"{itemCount, plural,\n =1 {1 insecure request found}\n other {# insecure requests found}\n }",columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},VA={MixedContentAutomaticallyUpgraded:zA.upgraded,MixedContentBlocked:zA.blocked,MixedContentWarning:zA.warning
897
+ },WA=oi.createMessageInstanceIdFn("lighthouse-core/audits/is-on-https.js",zA);UA.exports=class HTTPS extends jA{static get meta(){return{id:"is-on-https",title:WA(zA.title),failureTitle:WA(zA.failureTitle),description:WA(zA.description),requiredArtifacts:["devtoolsLogs","InspectorIssues"]}}static audit(e,t){const r=e.devtoolsLogs[jA.DEFAULT_PASS];return qA.request(r,t).then((t=>{const r=t.filter((e=>!$A.isSecureRequest(e))).map((e=>BA.elideDataURI(e.url))),a=Array.from(new Set(r)).map((e=>({url:e,resolution:void 0}))),n=[{key:"url",itemType:"url",text:WA(zA.columnInsecureURL)},{key:"resolution",itemType:"text",text:WA(zA.columnResolution)}];for(const t of e.InspectorIssues.mixedContentIssue){let e=a.find((e=>e.url===t.insecureURL));e||(e={url:t.insecureURL},a.push(e)),e.resolution=VA[t.resolutionStatus]?WA(VA[t.resolutionStatus]):t.resolutionStatus}for(const e of a)e.resolution||(e.resolution=WA(zA.allowed));let i;return a.length>0&&(i=WA(zA.displayValue,{itemCount:a.length})),{
898
+ score:Number(0===a.length),displayValue:i,details:jA.makeTableDetails(n,a)}}))}},UA.exports.UIStrings=zA;var HA={exports:{}};const GA=kc,YA=oi,KA={title:"Largest Contentful Paint element",description:"This is the largest contentful element painted within the viewport. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)"},JA=YA.createMessageInstanceIdFn("lighthouse-core/audits/largest-contentful-paint-element.js",KA);HA.exports=class LargestContentfulPaintElement extends GA{static get meta(){return{id:"largest-contentful-paint-element",title:JA(KA.title),description:JA(KA.description),scoreDisplayMode:GA.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),r=[];t&&r.push({node:GA.makeNodeItem(t.node)});const a=[{key:"node",itemType:"node",text:JA(YA.UIStrings.columnElement)
899
+ }],n=GA.makeTableDetails(a,r),i=JA(YA.UIStrings.displayValueElementsFound,{nodeCount:r.length});return{score:1,notApplicable:0===r.length,displayValue:i,details:n}}},HA.exports.UIStrings=KA;var XA={exports:{}};
903
900
  /**
904
901
  * @license Copyright 2020 Google Inc. All Rights Reserved.
905
902
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
906
903
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
907
- */const YA=kc,KA=oi,JA={title:"Avoid large layout shifts",description:"These DOM elements contribute most to the CLS of the page.",columnContribution:"CLS Contribution"},XA=KA.createMessageInstanceIdFn("lighthouse-core/audits/layout-shift-elements.js",JA);HA.exports=class LayoutShiftElements extends YA{static get meta(){return{id:"layout-shift-elements",title:XA(JA.title),description:XA(JA.description),scoreDisplayMode:YA.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.filter((e=>"layout-shift"===e.traceEventType)).map((e=>({node:YA.makeNodeItem(e.node),score:e.score}))),r=[{key:"node",itemType:"node",text:XA(KA.UIStrings.columnElement)},{key:"score",itemType:"numeric",granularity:.001,text:XA(JA.columnContribution)}],a=YA.makeTableDetails(r,t);let n;return t.length>0&&(n=XA(KA.UIStrings.displayValueElementsFound,{nodeCount:t.length})),{score:1,notApplicable:0===a.items.length,displayValue:n,details:a}}},
908
- HA.exports.UIStrings=JA;var ZA={exports:{}};const QA=kc,eR=oi,tR={title:"Largest Contentful Paint image was not lazily loaded",failureTitle:"Largest Contentful Paint image was lazily loaded",description:"Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more](https://web.dev/lcp-lazy-loading/)."},rR=eR.createMessageInstanceIdFn("lighthouse-core/audits/lcp-lazy-loaded.js",tR);ZA.exports=class LargestContentfulPaintLazyLoaded extends QA{static get meta(){return{id:"lcp-lazy-loaded",title:rR(tR.title),failureTitle:rR(tR.failureTitle),description:rR(tR.description),supportedModes:["navigation"],requiredArtifacts:["TraceElements","ViewportDimensions","ImageElements"]}}static isImageInViewport(e,t){return e.clientRect.top<t.innerHeight}static audit(e){
909
- const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),r=t?e.ImageElements.find((e=>e.node.devtoolsNodePath===t.node.devtoolsNodePath)):void 0;if(!r||!this.isImageInViewport(r,e.ViewportDimensions))return{score:1,notApplicable:!0};const a=[{key:"node",itemType:"node",text:rR(eR.UIStrings.columnElement)}],n=QA.makeTableDetails(a,[{node:QA.makeNodeItem(r.node)}]);return{score:"lazy"===r.loading?0:1,details:n}}},ZA.exports.UIStrings=tR;var aR={exports:{}};const nR=kc,iR=Lo,oR=oi,sR=Rv,cR=eb,lR=Dl,{getJavaScriptURLs:uR,getAttributableURLForTask:dR}=Iv,mR={startTime:0,endTime:0,duration:0},pR={title:"Avoid long main-thread tasks",description:"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn more](https://web.dev/long-tasks-devtools/)",displayValue:"{itemCount, plural,\n =1 {# long task found}\n other {# long tasks found}\n }"},hR=oR.createMessageInstanceIdFn("lighthouse-core/audits/long-tasks.js",pR)
910
- ;class LongTasks$3 extends nR{static get meta(){return{id:"long-tasks",scoreDisplayMode:nR.SCORING_MODES.INFORMATIVE,title:hR(pR.title),description:hR(pR.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=t.settings||{},a=e.traces[nR.DEFAULT_PASS],n=await sR.request(a,t),i=e.devtoolsLogs[LongTasks$3.DEFAULT_PASS],o=await iR.request(i,t),s=new Map;if("simulate"===r.throttlingMethod){const e={devtoolsLog:i,settings:t.settings},r=await cR.request({trace:a,devtoolsLog:i},t),n=await lR.request(e,t),o=await n.simulate(r,{label:"long-tasks-diagnostic"});for(const[e,t]of o.nodeTimings.entries())"cpu"===e.type&&s.set(e.event,t)}else for(const e of n)e.unbounded||e.parent||s.set(e.event,e);const c=uR(o),l=n.map((e=>{const t=s.get(e.event)||mR;return{...e,duration:t.duration,startTime:t.startTime}})).filter((e=>e.duration>=50&&!e.unbounded&&!e.parent)).sort(((e,t)=>t.duration-e.duration)).slice(0,20).map((e=>({url:dR(e,c),duration:e.duration,
911
- startTime:e.startTime}))),u=[{key:"url",itemType:"url",text:hR(oR.UIStrings.columnURL)},{key:"startTime",itemType:"ms",granularity:1,text:hR(oR.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:1,text:hR(oR.UIStrings.columnDuration)}],d=nR.makeTableDetails(u,l);let m;return l.length>0&&(m=hR(pR.displayValue,{itemCount:l.length})),{score:0===l.length?1:0,notApplicable:0===l.length,details:d,displayValue:m}}}aR.exports=LongTasks$3,aR.exports.UIStrings=pR;const gR=kc,fR=Rv;var yR=class MainThreadTasks$5 extends gR{static get meta(){return{id:"main-thread-tasks",scoreDisplayMode:gR.SCORING_MODES.INFORMATIVE,title:"Tasks",description:"Lists the toplevel main thread tasks that executed during page load.",requiredArtifacts:["traces"]}}static async audit(e,t){const r=e.traces[gR.DEFAULT_PASS],a=(await fR.request(r,t)).filter((e=>e.duration>5&&!e.parent)).map((e=>({duration:e.duration,startTime:e.startTime})));return{score:1,details:gR.makeTableDetails([{key:"startTime",
912
- itemType:"ms",granularity:1,text:"Start Time"},{key:"duration",itemType:"ms",granularity:1,text:"End Time"}],a)}}},vR={exports:{}};const bR=kc,{taskGroups:wR}=wv,SR=oi,TR=Rv,ER={title:"Minimizes main-thread work",failureTitle:"Minimize main-thread work",description:"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/mainthread-work-breakdown/)",columnCategory:"Category"},xR=SR.createMessageInstanceIdFn("lighthouse-core/audits/mainthread-work-breakdown.js",ER);class MainThreadWorkBreakdown extends bR{static get meta(){return{id:"mainthread-work-breakdown",title:xR(ER.title),failureTitle:xR(ER.failureTitle),description:xR(ER.description),scoreDisplayMode:bR.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:2017,median:4e3}}static getExecutionTimingsByGroup(e){const t=new Map;for(const r of e){const e=t.get(r.group.id)||0
913
- ;t.set(r.group.id,e+r.selfTime)}return t}static async audit(e,t){const r=t.settings||{},a=e.traces[MainThreadWorkBreakdown.DEFAULT_PASS],n=await TR.request(a,t),i="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,o=MainThreadWorkBreakdown.getExecutionTimingsByGroup(n);let s=0;const c={},l=Array.from(o).map((([e,t])=>{const r=t*i;s+=r;const a=c[e]||0;return c[e]=a+r,{group:e,groupLabel:wR[e].label,duration:r}})),u=[{key:"groupLabel",itemType:"text",text:xR(ER.columnCategory)},{key:"duration",itemType:"ms",granularity:1,text:xR(SR.UIStrings.columnTimeSpent)}];l.sort(((e,t)=>c[t.group]-c[e.group]));const d=MainThreadWorkBreakdown.makeTableDetails(u,l);return{score:bR.computeLogNormalScore({p10:t.options.p10,median:t.options.median},s),numericValue:s,numericUnit:"millisecond",displayValue:xR(SR.UIStrings.seconds,{timeInMs:s}),details:d}}}vR.exports=MainThreadWorkBreakdown,vR.exports.UIStrings=ER;var _R={exports:{}};const AR=iy,RR={title:"Site works cross-browser",
914
- description:"To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/)."},kR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-cross-browser.js",RR);_R.exports=class PWACrossBrowser extends AR{static get meta(){return Object.assign({id:"pwa-cross-browser",title:kR(RR.title),description:kR(RR.description)},super.partialMeta)}},_R.exports.UIStrings=RR;var DR={exports:{}};const CR=iy,IR={title:"Each page has a URL",description:"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/)."},NR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-each-page-has-url.js",IR);DR.exports=class PWAEachPageHasURL extends CR{static get meta(){return Object.assign({id:"pwa-each-page-has-url",title:NR(IR.title),description:NR(IR.description)},super.partialMeta)}},DR.exports.UIStrings=IR
915
- ;var LR={exports:{}};const MR=iy,PR={title:"Page transitions don't feel like they block on the network",description:"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more](https://web.dev/pwa-page-transitions/)."},OR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-page-transitions.js",PR);LR.exports=class PWAPageTransitions extends MR{static get meta(){return Object.assign({id:"pwa-page-transitions",title:OR(PR.title),description:OR(PR.description)},super.partialMeta)}},LR.exports.UIStrings=PR;var FR={exports:{}};const UR=kc,jR=DA,BR={title:"Manifest has a maskable icon",failureTitle:"Manifest doesn't have a maskable icon",description:"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn more](https://web.dev/maskable-icon-audit/)."
916
- },$R=oi.createMessageInstanceIdFn("lighthouse-core/audits/maskable-icon.js",BR);FR.exports=class MaskableIcon extends UR{static get meta(){return{id:"maskable-icon",title:$R(BR.title),failureTitle:$R(BR.failureTitle),description:$R(BR.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static async audit(e,t){const r=await jR.request(e,t);if(r.isParseFailure)return{score:0,explanation:r.parseFailureReason};return{score:r.allChecks.find((e=>"hasMaskableIcon"===e.id))?.passing?1:0}}},FR.exports.UIStrings=BR;var qR={exports:{}};!function(e){function JPEGEncoder(e){
904
+ */const ZA=kc,QA=oi,eR={title:"Avoid large layout shifts",description:"These DOM elements contribute most to the CLS of the page.",columnContribution:"CLS Contribution"},tR=QA.createMessageInstanceIdFn("lighthouse-core/audits/layout-shift-elements.js",eR);XA.exports=class LayoutShiftElements extends ZA{static get meta(){return{id:"layout-shift-elements",title:tR(eR.title),description:tR(eR.description),scoreDisplayMode:ZA.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.filter((e=>"layout-shift"===e.traceEventType)).map((e=>({node:ZA.makeNodeItem(e.node),score:e.score}))),r=[{key:"node",itemType:"node",text:tR(QA.UIStrings.columnElement)},{key:"score",itemType:"numeric",granularity:.001,text:tR(eR.columnContribution)}],a=ZA.makeTableDetails(r,t);let n;return t.length>0&&(n=tR(QA.UIStrings.displayValueElementsFound,{nodeCount:t.length})),{score:1,notApplicable:0===a.items.length,displayValue:n,details:a}}},
905
+ XA.exports.UIStrings=eR;var rR={exports:{}};const aR=kc,nR=oi,iR={title:"Largest Contentful Paint image was not lazily loaded",failureTitle:"Largest Contentful Paint image was lazily loaded",description:"Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more](https://web.dev/lcp-lazy-loading/)."},oR=nR.createMessageInstanceIdFn("lighthouse-core/audits/lcp-lazy-loaded.js",iR);rR.exports=class LargestContentfulPaintLazyLoaded extends aR{static get meta(){return{id:"lcp-lazy-loaded",title:oR(iR.title),failureTitle:oR(iR.failureTitle),description:oR(iR.description),supportedModes:["navigation"],requiredArtifacts:["TraceElements","ViewportDimensions","ImageElements"]}}static isImageInViewport(e,t){return e.clientRect.top<t.innerHeight}static audit(e){
906
+ const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType&&"image"===e.type)),r=t?e.ImageElements.find((e=>e.node.devtoolsNodePath===t.node.devtoolsNodePath)):void 0;if(!r||!this.isImageInViewport(r,e.ViewportDimensions))return{score:null,notApplicable:!0};const a=[{key:"node",itemType:"node",text:oR(nR.UIStrings.columnElement)}],n=aR.makeTableDetails(a,[{node:aR.makeNodeItem(r.node)}]);return{score:"lazy"===r.loading?0:1,details:n}}},rR.exports.UIStrings=iR;var sR={exports:{}};const cR=kc,lR=Lo,uR=oi,dR=Rv,mR=eb,pR=Dl,{getJavaScriptURLs:hR,getAttributableURLForTask:gR}=Iv,fR={startTime:0,endTime:0,duration:0},yR={title:"Avoid long main-thread tasks",description:"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn more](https://web.dev/long-tasks-devtools/)",displayValue:"{itemCount, plural,\n =1 {# long task found}\n other {# long tasks found}\n }"
907
+ },vR=uR.createMessageInstanceIdFn("lighthouse-core/audits/long-tasks.js",yR);class LongTasks$3 extends cR{static get meta(){return{id:"long-tasks",scoreDisplayMode:cR.SCORING_MODES.INFORMATIVE,title:vR(yR.title),description:vR(yR.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=t.settings||{},a=e.traces[cR.DEFAULT_PASS],n=await dR.request(a,t),i=e.devtoolsLogs[LongTasks$3.DEFAULT_PASS],o=await lR.request(i,t),s=new Map;if("simulate"===r.throttlingMethod){const e={devtoolsLog:i,settings:t.settings},r=await mR.request({trace:a,devtoolsLog:i},t),n=await pR.request(e,t),o=await n.simulate(r,{label:"long-tasks-diagnostic"});for(const[e,t]of o.nodeTimings.entries())"cpu"===e.type&&s.set(e.event,t)}else for(const e of n)e.unbounded||e.parent||s.set(e.event,e);const c=hR(o),l=n.map((e=>{const t=s.get(e.event)||fR;return{...e,duration:t.duration,startTime:t.startTime}
908
+ })).filter((e=>e.duration>=50&&!e.unbounded&&!e.parent)).sort(((e,t)=>t.duration-e.duration)).slice(0,20).map((e=>({url:gR(e,c),duration:e.duration,startTime:e.startTime}))),u=[{key:"url",itemType:"url",text:vR(uR.UIStrings.columnURL)},{key:"startTime",itemType:"ms",granularity:1,text:vR(uR.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:1,text:vR(uR.UIStrings.columnDuration)}],d=cR.makeTableDetails(u,l);let m;return l.length>0&&(m=vR(yR.displayValue,{itemCount:l.length})),{score:0===l.length?1:0,notApplicable:0===l.length,details:d,displayValue:m}}}sR.exports=LongTasks$3,sR.exports.UIStrings=yR;const bR=kc,wR=Rv;var SR=class MainThreadTasks$5 extends bR{static get meta(){return{id:"main-thread-tasks",scoreDisplayMode:bR.SCORING_MODES.INFORMATIVE,title:"Tasks",description:"Lists the toplevel main thread tasks that executed during page load.",requiredArtifacts:["traces"]}}static async audit(e,t){
909
+ const r=e.traces[bR.DEFAULT_PASS],a=(await wR.request(r,t)).filter((e=>e.duration>5&&!e.parent)).map((e=>({duration:e.duration,startTime:e.startTime})));return{score:1,details:bR.makeTableDetails([{key:"startTime",itemType:"ms",granularity:1,text:"Start Time"},{key:"duration",itemType:"ms",granularity:1,text:"End Time"}],a)}}},TR={exports:{}};const ER=kc,{taskGroups:xR}=wv,_R=oi,AR=Rv,RR={title:"Minimizes main-thread work",failureTitle:"Minimize main-thread work",description:"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/mainthread-work-breakdown/)",columnCategory:"Category"},kR=_R.createMessageInstanceIdFn("lighthouse-core/audits/mainthread-work-breakdown.js",RR);class MainThreadWorkBreakdown extends ER{static get meta(){return{id:"mainthread-work-breakdown",title:kR(RR.title),failureTitle:kR(RR.failureTitle),description:kR(RR.description),
910
+ scoreDisplayMode:ER.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:2017,median:4e3}}static getExecutionTimingsByGroup(e){const t=new Map;for(const r of e){const e=t.get(r.group.id)||0;t.set(r.group.id,e+r.selfTime)}return t}static async audit(e,t){const r=t.settings||{},a=e.traces[MainThreadWorkBreakdown.DEFAULT_PASS],n=await AR.request(a,t),i="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,o=MainThreadWorkBreakdown.getExecutionTimingsByGroup(n);let s=0;const c={},l=Array.from(o).map((([e,t])=>{const r=t*i;s+=r;const a=c[e]||0;return c[e]=a+r,{group:e,groupLabel:xR[e].label,duration:r}})),u=[{key:"groupLabel",itemType:"text",text:kR(RR.columnCategory)},{key:"duration",itemType:"ms",granularity:1,text:kR(_R.UIStrings.columnTimeSpent)}];l.sort(((e,t)=>c[t.group]-c[e.group]));const d=MainThreadWorkBreakdown.makeTableDetails(u,l);return{score:ER.computeLogNormalScore({p10:t.options.p10,median:t.options.median},s),
911
+ numericValue:s,numericUnit:"millisecond",displayValue:kR(_R.UIStrings.seconds,{timeInMs:s}),details:d}}}TR.exports=MainThreadWorkBreakdown,TR.exports.UIStrings=RR;var DR={exports:{}};const CR=iy,IR={title:"Site works cross-browser",description:"To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/)."},NR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-cross-browser.js",IR);DR.exports=class PWACrossBrowser extends CR{static get meta(){return Object.assign({id:"pwa-cross-browser",title:NR(IR.title),description:NR(IR.description)},super.partialMeta)}},DR.exports.UIStrings=IR;var LR={exports:{}};const MR=iy,PR={title:"Each page has a URL",description:"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/)."
912
+ },OR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-each-page-has-url.js",PR);LR.exports=class PWAEachPageHasURL extends MR{static get meta(){return Object.assign({id:"pwa-each-page-has-url",title:OR(PR.title),description:OR(PR.description)},super.partialMeta)}},LR.exports.UIStrings=PR;var FR={exports:{}};const UR=iy,jR={title:"Page transitions don't feel like they block on the network",description:"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more](https://web.dev/pwa-page-transitions/)."},BR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-page-transitions.js",jR);FR.exports=class PWAPageTransitions extends UR{static get meta(){return Object.assign({id:"pwa-page-transitions",title:BR(jR.title),description:BR(jR.description)},super.partialMeta)}},FR.exports.UIStrings=jR;var $R={exports:{}};const qR=kc,zR=LA,VR={title:"Manifest has a maskable icon",
913
+ failureTitle:"Manifest doesn't have a maskable icon",description:"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn more](https://web.dev/maskable-icon-audit/)."},WR=oi.createMessageInstanceIdFn("lighthouse-core/audits/maskable-icon.js",VR);$R.exports=class MaskableIcon extends qR{static get meta(){return{id:"maskable-icon",title:WR(VR.title),failureTitle:WR(VR.failureTitle),description:WR(VR.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static async audit(e,t){const r=await zR.request(e,t);if(r.isParseFailure)return{score:0,explanation:r.parseFailureReason};return{score:r.allChecks.find((e=>"hasMaskableIcon"===e.id))?.passing?1:0}}},$R.exports.UIStrings=VR;var HR={exports:{}};!function(e){function JPEGEncoder(e){
917
914
  var t,r,a,n,i,o=Math.floor,s=new Array(64),c=new Array(64),l=new Array(64),u=new Array(64),d=new Array(65535),m=new Array(65535),p=new Array(64),h=new Array(64),f=[],y=0,v=7,b=new Array(64),w=new Array(64),S=new Array(64),T=new Array(256),E=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],R=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],k=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],D=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],N=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250]
918
915
  ;function computeHuffmanTbl(e,t){for(var r=0,a=0,n=new Array,i=1;i<=16;i++){for(var o=1;o<=e[i];o++)n[t[a]]=[],n[t[a]][0]=r,n[t[a]][1]=i,a++,r++;r*=2}return n}function writeBits(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1<<r&&(y|=1<<v),r--,--v<0&&(255==y?(writeByte(255),writeByte(0)):writeByte(y),v=7,y=0)}function writeByte(e){f.push(e)}function writeWord(e){writeByte(e>>8&255),writeByte(255&e)}function processDU(e,t,r,a,n){for(var i,o=n[0],s=n[240],c=function fDCTQuant(e,t){var r,a,n,i,o,s,c,l,u,d,m=0;for(u=0;u<8;++u){r=e[m],a=e[m+1],n=e[m+2],i=e[m+3],o=e[m+4],s=e[m+5],c=e[m+6];var h=r+(l=e[m+7]),f=r-l,y=a+c,v=a-c,b=n+s,w=n-s,S=i+o,T=i-o,E=h+S,x=h-S,_=y+b,A=y-b;e[m]=E+_,e[m+4]=E-_;var R=.707106781*(A+x);e[m+2]=x+R,e[m+6]=x-R;var k=.382683433*((E=T+w)-(A=v+f)),D=.5411961*E+k,C=1.306562965*A+k,I=.707106781*(_=w+v),N=f+I,L=f-I;e[m+5]=L+D,e[m+3]=L-D,e[m+1]=N+C,e[m+7]=N-C,m+=8}for(m=0,u=0;u<8;++u){r=e[m],a=e[m+8],n=e[m+16],i=e[m+24],o=e[m+32],s=e[m+40],c=e[m+48]
919
- ;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var G=.707106781*(W+z);e[m+16]=z+G,e[m+48]=z-G;var H=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+H,K=1.306562965*W+H,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
916
+ ;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var H=.707106781*(W+z);e[m+16]=z+H,e[m+48]=z-H;var G=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+G,K=1.306562965*W+G,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
920
917
  for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var a=o((t[r]*e+50)/100);a<1?a=1:a>255&&(a=255),s[x[r]]=a}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var d=o((n[i]*e+50)/100);d<1?d=1:d>255&&(d=255),c[x[i]]=d}for(var m=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,h=0;h<8;h++)for(var f=0;f<8;f++)l[p]=1/(s[x[p]]*m[h]*m[f]*8),u[p]=1/(c[x[p]]*m[h]*m[f]*8),p++})(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),i=e}}this.encode=function(e,i){(new Date).getTime(),i&&setQuality(i),f=new Array,y=0,v=7,writeWord(65496),function writeAPP0(){writeWord(65504),writeWord(16),writeByte(74),writeByte(70),writeByte(73),
921
918
  writeByte(70),writeByte(0),writeByte(1),writeByte(1),writeByte(0),writeWord(1),writeWord(1),writeByte(0),writeByte(0)}(),function writeAPP1(e){if(e){writeWord(65505),69===e[0]&&120===e[1]&&105===e[2]&&102===e[3]?writeWord(e.length+2):(writeWord(e.length+5+2),writeByte(69),writeByte(120),writeByte(105),writeByte(102),writeByte(0));for(var t=0;t<e.length;t++)writeByte(e[t])}}(e.exifBuffer),function writeDQT(){writeWord(65499),writeWord(132),writeByte(0);for(var e=0;e<64;e++)writeByte(s[e]);writeByte(1);for(var t=0;t<64;t++)writeByte(c[t])}(),function writeSOF0(e,t){writeWord(65472),writeWord(17),writeByte(8),writeWord(t),writeWord(e),writeByte(3),writeByte(1),writeByte(17),writeByte(0),writeByte(2),writeByte(17),writeByte(1),writeByte(3),writeByte(17),writeByte(1)}(e.width,e.height),function writeDHT(){writeWord(65476),writeWord(418),writeByte(0);for(var e=0;e<16;e++)writeByte(_[e+1]);for(var t=0;t<=11;t++)writeByte(A[t]);writeByte(16);for(var r=0;r<16;r++)writeByte(R[r+1])
922
919
  ;for(var a=0;a<=161;a++)writeByte(k[a]);writeByte(1);for(var n=0;n<16;n++)writeByte(D[n+1]);for(var i=0;i<=11;i++)writeByte(C[i]);writeByte(17);for(var o=0;o<16;o++)writeByte(I[o+1]);for(var s=0;s<=161;s++)writeByte(N[s])}(),function writeSOS(){writeWord(65498),writeWord(12),writeByte(3),writeByte(1),writeByte(0),writeByte(2),writeByte(17),writeByte(3),writeByte(17),writeByte(0),writeByte(63),writeByte(0)}();var o=0,d=0,m=0;y=0,v=7,this.encode.displayName="_encode_";for(var p,h,T,x,L,M,P,O,F,U=e.data,j=e.width,B=e.height,$=4*j,q=0;q<B;){for(p=0;p<$;){for(M=L=$*q+p,P=-1,O=0,F=0;F<64;F++)M=L+(O=F>>3)*$+(P=4*(7&F)),q+O>=B&&(M-=$*(q+1+O-B)),p+P>=$&&(M-=p+P-$+4),h=U[M++],T=U[M++],x=U[M++],b[F]=(E[h]+E[T+256>>0]+E[x+512>>0]>>16)-128,w[F]=(E[h+768>>0]+E[T+1024>>0]+E[x+1280>>0]>>16)-128,S[F]=(E[h+1280>>0]+E[T+1536>>0]+E[x+1792>>0]>>16)-128;o=processDU(b,l,o,t,a),d=processDU(w,u,d,r,n),m=processDU(S,u,m,r,n),p+=32}q+=8}if(v>=0){var z=[];z[1]=v+1,z[0]=(1<<v+1)-1,writeBits(z)}
923
- return writeWord(65497),new Buffer$2(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(qR);var zR,VR,WR={exports:{}};zR=WR,VR=function jpegImage(){
920
+ return writeWord(65497),new Buffer$2(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(HR);var GR,YR,KR={exports:{}};GR=KR,YR=function jpegImage(){
924
921
  var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,a=3406,n=2276,i=1567,o=3784,s=5793,c=2896;function constructor(){}function buildHuffmanTable(e,t){for(var r,a,n=0,i=[],o=16;o>0&&!e[o-1];)o--;i.push({children:[],index:0});var s,c=i[0];for(r=0;r<o;r++){for(a=0;a<e[r];a++){for((c=i.pop()).children[c.index]=t[n];c.index>0;){if(0===i.length)throw new Error("Could not recreate Huffman Table");c=i.pop()}for(c.index++,i.push(c);i.length<=r;)i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s;n++}r+1<o&&(i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s)}return i[0].children}function decodeScan(t,r,a,n,i,o,s,c,l,u){a.precision,a.samplesPerLine,a.scanLines;var d=a.mcusPerLine,m=a.progressive;a.maxH,a.maxV;var p=r,h=0,f=0;function readBit(){if(f>0)return f--,h>>f&1;if(255==(h=t[r++])){var e=t[r++]
925
922
  ;if(e)throw new Error("unexpected marker: "+(h<<8|e).toString(16))}return f=7,h>>>7}function decodeHuffman(e){for(var t,r=e;null!==(t=readBit());){if("number"==typeof(r=r[t]))return r;if("object"!=typeof r)throw new Error("invalid huffman sequence")}return null}function receive(e){for(var t=0;e>0;){var r=readBit();if(null===r)return;t=t<<1|r,e--}return t}function receiveAndExtend(e){var t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}var y,v=0,b=0;function decodeMcu(e,t,r,a,n){var i=r%d,o=(r/d|0)*e.v+a,s=i*e.h+n;void 0===e.blocks[o]&&u.tolerantDecoding||t(e,e.blocks[o][s])}function decodeBlock(e,t,r){var a=r/e.blocksPerLine|0,n=r%e.blocksPerLine;void 0===e.blocks[a]&&u.tolerantDecoding||t(e,e.blocks[a][n])}var w,S,T,E,x,_,A=n.length;_=m?0===o?0===c?function decodeDCFirst(e,t){var r=decodeHuffman(e.huffmanTableDC),a=0===r?0:receiveAndExtend(r)<<l;t[0]=e.pred+=a}:function decodeDCSuccessive(e,t){t[0]|=readBit()<<l}:0===c?function decodeACFirst(t,r){if(v>0)v--;else for(var a=o,n=s;a<=n;){
926
923
  var i=decodeHuffman(t.huffmanTableAC),c=15&i,u=i>>4;if(0!==c)r[e[a+=u]]=receiveAndExtend(c)*(1<<l),a++;else{if(u<15){v=receive(u)+(1<<u)-1;break}a+=16}}}:function decodeACSuccessive(t,r){for(var a=o,n=s,i=0;a<=n;){var c=e[a],u=r[c]<0?-1:1;switch(b){case 0:var d=decodeHuffman(t.huffmanTableAC),m=15&d;if(i=d>>4,0===m)i<15?(v=receive(i)+(1<<i),b=4):(i=16,b=1);else{if(1!==m)throw new Error("invalid ACn encoding");y=receiveAndExtend(m),b=i?2:3}continue;case 1:case 2:r[c]?r[c]+=(readBit()<<l)*u:0==--i&&(b=2==b?3:0);break;case 3:r[c]?r[c]+=(readBit()<<l)*u:(r[c]=y<<l,b=0);break;case 4:r[c]&&(r[c]+=(readBit()<<l)*u)}a++}4===b&&0==--v&&(b=0)}:function decodeBaseline(t,r){var a=decodeHuffman(t.huffmanTableDC),n=0===a?0:receiveAndExtend(a);r[0]=t.pred+=n;for(var i=1;i<64;){var o=decodeHuffman(t.huffmanTableAC),s=15&o,c=o>>4;if(0!==s)r[e[i+=c]]=receiveAndExtend(s),i++;else{if(c<15)break;i+=16}}};var R,k,D,C,I=0;for(k=1==A?n[0].blocksPerLine*n[0].blocksPerColumn:d*a.mcusPerColumn,i||(i=k);I<k;){
@@ -933,10 +930,10 @@ n.samplesPerLine=readUint16(),n.components={},n.componentsOrder=[];var b=n.scanL
933
930
  if(255==t[a-3]&&t[a-2]>=192&&t[a-2]<=254){a-=3;break}throw new Error("unknown JPEG marker "+m.toString(16))}m=readUint16()}if(1!=l.length)throw new Error("only single frame JPEGs supported");for(var U=0;U<l.length;U++){var j=l[U].components;for(var B in j)j[B].quantizationTable=c[j[B].quantizationIdx],delete j[B].quantizationIdx}for(this.width=n.samplesPerLine,this.height=n.scanLines,this.jfif=o,this.adobe=s,this.components=[],U=0;U<n.componentsOrder.length;U++){var $=n.components[n.componentsOrder[U]];this.components.push({lines:buildComponentData(0,$),scaleX:$.h/n.maxH,scaleY:$.v/n.maxV})}},getData:function getData(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x=this.width/e,_=this.height/t,A=0,R=e*t*this.components.length;requestMemoryAllocation(R);var k=new Uint8Array(R);switch(this.components.length){case 1:for(r=this.components[0],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m;break;case 2:for(r=this.components[0],a=this.components[1],
934
931
  d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m,m=s[0|u*a.scaleX*x],k[A++]=m;break;case 3:for(E=!0,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],w=clampTo8bit(m+1.402*((h=c[0|u*n.scaleX*x])-128)),S=clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),T=clampTo8bit(m+1.772*(p-128))):(w=o[0|u*r.scaleX*x],S=s[0|u*a.scaleX*x],T=c[0|u*n.scaleX*x]),k[A++]=w,k[A++]=S,k[A++]=T;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(E=!1,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],i=this.components[3],
935
932
  d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],l=i.lines[0|d*i.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],h=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x],y=255-clampTo8bit(m+1.402*(h-128)),v=255-clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),b=255-clampTo8bit(m+1.772*(p-128))):(y=o[0|u*r.scaleX*x],v=s[0|u*a.scaleX*x],b=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x]),k[A++]=255-y,k[A++]=255-v,k[A++]=255-b,k[A++]=255-f;break;default:throw new Error("Unsupported color mode")}return k},copyToImageData:function copyToImageData(e,t){var r,a,n,i,o,s,c,l,u,d=e.width,m=e.height,p=e.data,h=this.getData(d,m),f=0,y=0;switch(this.components.length){case 1:for(a=0;a<m;a++)for(r=0;r<d;r++)n=h[f++],p[y++]=n,p[y++]=n,p[y++]=n,t&&(p[y++]=255);break;case 3:for(a=0;a<m;a++)for(r=0;r<d;r++)c=h[f++],l=h[f++],u=h[f++],p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;case 4:for(a=0;a<m;a++)for(r=0;r<d;r++)o=h[f++],s=h[f++],n=h[f++],
936
- c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}(),zR.exports=function decode(e,t={}){var r={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...t},a=new Uint8Array(e),n=new VR;n.opts=r,VR.resetMaxMemoryUsage(1024*r.maxMemoryUsageInMB*1024),n.parse(a);var i=r.formatAsRGBA?4:3,o=n.width*n.height*i;try{VR.requestMemoryAllocation(o);var s={width:n.width,height:n.height,exifBuffer:n.exifBuffer,
937
- data:r.useTArray?new Uint8Array(o):new Buffer$2(o)};n.comments.length>0&&(s.comments=n.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+o):e}return n.copyToImageData(s,r.formatAsRGBA),s};const GR=wn,HR={encode:qR.exports,decode:WR.exports};function getPixel(e,t,r,a,n){return n[4*(e+t*a)+r]}function isWhitePixel(e,t,r){return getPixel(e,t,0,r.width,r.data)>=249&&getPixel(e,t,1,r.width,r.data)>=249&&getPixel(e,t,2,r.width,r.data)>=249}function frame$1(e,t){let r=null,a=null,n=null,i=null,o=null,s=null;return{getHistogram:function(){if(r)return r;const e=this.getParsedImage();return r=function convertPixelsToHistogram(e){const createHistogramArray=function(){const e=[];for(let t=0;t<256;t++)e[t]=0;return e},t=e.width,r=e.height,a=[createHistogramArray(),createHistogramArray(),createHistogramArray()];for(let n=0;n<r;n++)for(let r=0;r<t;r++)if(!isWhitePixel(r,n,e))for(let i=0;i<a.length;i++){
938
- const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function(){return t},setProgress:function(e,t){a=e,n=Boolean(t)},setPerceptualProgress:function(e,t){i=e,o=Boolean(t)},getImage:function(){return e},getParsedImage:function(){return s||(s=HR.decode(e)),s},getProgress:function(){return a},isProgressInterpolated:function(){return n},getPerceptualProgress:function(){return i},isPerceptualProgressInterpolated:function(){return o}}}var YR,KR={extractFramesFromTimeline:function extractFramesFromTimeline(e,t){let r;t=t||{},e="string"==typeof e?GR.readFileSync(e,"utf-8"):e;try{r="string"==typeof e?JSON.parse(e):e}catch(e){throw new Error("Speedline: Invalid JSON"+e.message)}let a=r.traceEvents||r,n=Number.MAX_VALUE,i=-Number.MAX_VALUE;a.forEach((e=>{0!==e.ts&&(n=Math.min(n,e.ts),i=Math.max(i,e.ts))})),n=(t.timeOrigin||n)/1e3,i/=1e3;let o=null;const s=a.filter((e=>e.cat.includes("disabled-by-default-devtools.screenshot")&&e.ts>=1e3*n));s.sort(((e,t)=>e.ts-t.ts))
939
- ;const c=s.map((function(e){const t=e.args&&e.args.snapshot,r=e.ts/1e3;if(t===o)return null;o=t;return frame$1(Buffer$2.from(t,"base64"),r)})).filter(Boolean);if(0===c.length)return Promise.reject(new Error("No screenshots found in trace"));const l=frame$1(function synthesizeWhiteFrame(e){const t=HR.decode(e[0].getImage()),r=t.width,a=t.height,n=Buffer$2.alloc(r*a*4);let i=0;for(;i<n.length;)n[i++]=255,n[i++]=255,n[i++]=255,n[i++]=255;return HR.encode({data:n,width:r,height:a}).data}(c),n);c.unshift(l);const u={startTs:n,endTs:i,frames:c};return Promise.resolve(u)},create:frame$1};
933
+ c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}(),GR.exports=function decode(e,t={}){var r={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...t},a=new Uint8Array(e),n=new YR;n.opts=r,YR.resetMaxMemoryUsage(1024*r.maxMemoryUsageInMB*1024),n.parse(a);var i=r.formatAsRGBA?4:3,o=n.width*n.height*i;try{YR.requestMemoryAllocation(o);var s={width:n.width,height:n.height,exifBuffer:n.exifBuffer,
934
+ data:r.useTArray?new Uint8Array(o):new Buffer$2(o)};n.comments.length>0&&(s.comments=n.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+o):e}return n.copyToImageData(s,r.formatAsRGBA),s};const JR=wn,XR={encode:HR.exports,decode:KR.exports};function getPixel(e,t,r,a,n){return n[4*(e+t*a)+r]}function isWhitePixel(e,t,r){return getPixel(e,t,0,r.width,r.data)>=249&&getPixel(e,t,1,r.width,r.data)>=249&&getPixel(e,t,2,r.width,r.data)>=249}function frame$1(e,t){let r=null,a=null,n=null,i=null,o=null,s=null;return{getHistogram:function(){if(r)return r;const e=this.getParsedImage();return r=function convertPixelsToHistogram(e){const createHistogramArray=function(){const e=[];for(let t=0;t<256;t++)e[t]=0;return e},t=e.width,r=e.height,a=[createHistogramArray(),createHistogramArray(),createHistogramArray()];for(let n=0;n<r;n++)for(let r=0;r<t;r++)if(!isWhitePixel(r,n,e))for(let i=0;i<a.length;i++){
935
+ const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function(){return t},setProgress:function(e,t){a=e,n=Boolean(t)},setPerceptualProgress:function(e,t){i=e,o=Boolean(t)},getImage:function(){return e},getParsedImage:function(){return s||(s=XR.decode(e)),s},getProgress:function(){return a},isProgressInterpolated:function(){return n},getPerceptualProgress:function(){return i},isPerceptualProgressInterpolated:function(){return o}}}var ZR,QR={extractFramesFromTimeline:function extractFramesFromTimeline(e,t){let r;t=t||{},e="string"==typeof e?JR.readFileSync(e,"utf-8"):e;try{r="string"==typeof e?JSON.parse(e):e}catch(e){throw new Error("Speedline: Invalid JSON"+e.message)}let a=r.traceEvents||r,n=Number.MAX_VALUE,i=-Number.MAX_VALUE;a.forEach((e=>{0!==e.ts&&(n=Math.min(n,e.ts),i=Math.max(i,e.ts))})),n=(t.timeOrigin||n)/1e3,i/=1e3;let o=null;const s=a.filter((e=>e.cat.includes("disabled-by-default-devtools.screenshot")&&e.ts>=1e3*n));s.sort(((e,t)=>e.ts-t.ts))
936
+ ;const c=s.map((function(e){const t=e.args&&e.args.snapshot,r=e.ts/1e3;if(t===o)return null;o=t;return frame$1(Buffer$2.from(t,"base64"),r)})).filter(Boolean);if(0===c.length)return Promise.reject(new Error("No screenshots found in trace"));const l=frame$1(function synthesizeWhiteFrame(e){const t=XR.decode(e[0].getImage()),r=t.width,a=t.height,n=Buffer$2.alloc(r*a*4);let i=0;for(;i<n.length;)n[i++]=255,n[i++]=255,n[i++]=255,n[i++]=255;return XR.encode({data:n,width:r,height:a}).data}(c),n);c.unshift(l);const u={startTs:n,endTs:i,frames:c};return Promise.resolve(u)},create:frame$1};
940
937
  /**
941
938
  * @preserve
942
939
  * Copyright 2015 Igor Bezkrovny
@@ -944,68 +941,68 @@ const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function
944
941
  *
945
942
  * ssim.ts - part of Image Quantization Library
946
943
  */!function(e){var t,r;(t=e.Channels||(e.Channels={}))[t.Grey=1]="Grey",t[t.GreyAlpha=2]="GreyAlpha",t[t.RGB=3]="RGB",t[t.RGBAlpha=4]="RGBAlpha",e.Channels,e.compare=function compare(e,t,a,n,i,o,s){if(void 0===a&&(a=8),void 0===n&&(n=.01),void 0===i&&(i=.03),void 0===o&&(o=!0),void 0===s&&(s=8),e.width!==t.width||e.height!==t.height)throw new Error("Images have different sizes!");var c=(1<<s)-1,l=Math.pow(n*c,2),u=Math.pow(i*c,2),d=0,m=0,p=0;return r._iterate(e,t,a,o,(function iteration(e,t,r,a){var n,i,o;n=i=o=0;for(var s=0;s<e.length;s++)i+=Math.pow(e[s]-r,2),o+=Math.pow(t[s]-a,2),n+=(e[s]-r)*(t[s]-a);var c=e.length-1;i/=c,o/=c;var h=(2*r*a+l)*(2*(n/=c)+u),f=(Math.pow(r,2)+Math.pow(a,2)+l)*(i+o+u);m+=h/f,p+=(2*n+u)/(i+o+u),d++})),{ssim:m/d,mcs:p/d}},function(e){function _lumaValuesForWindow(e,t,r,a,n,i){for(var o=e.data,s=new Float32Array(new ArrayBuffer(a*n*4)),c=0,l=r+n,u=r;u<l;u++){var d=u*e.width,m=(d+t)*e.channels,p=(d+t+a)*e.channels;switch(e.channels){case 1:
947
- for(;m<p;)s[c++]=o[m++];break;case 2:for(;m<p;)s[c++]=o[m++]*(o[m++]/255);break;case 3:if(i)for(;m<p;)s[c++]=.212655*o[m++]+.715158*o[m++]+.072187*o[m++];else for(;m<p;)s[c++]=o[m++]+o[m++]+o[m++];break;case 4:if(i)for(;m<p;)s[c++]=(.212655*o[m++]+.715158*o[m++]+.072187*o[m++])*(o[m++]/255);else for(;m<p;)s[c++]=(o[m++]+o[m++]+o[m++])*(o[m++]/255)}}return s}function _averageLuma(e){for(var t=0,r=0;r<e.length;r++)t+=e[r];return t/e.length}e._iterate=function _iterate(e,t,r,a,n){for(var i=e.width,o=e.height,s=0;s<o;s+=r)for(var c=0;c<i;c+=r){var l=Math.min(r,i-c),u=Math.min(r,o-s),d=_lumaValuesForWindow(e,c,s,l,u,a),m=_lumaValuesForWindow(t,c,s,l,u,a);n(d,m,_averageLuma(d),_averageLuma(m))}}}(r||(r={}))}(YR||(YR={}));const JR=YR,XR=Math.log(4/6);function calculateFastModeAllowableChange(e){const t=e/1e3;return 6*Math.exp(XR*t)-1}function calculateProgressBetweenFrames(e,t,r,a,n,i){if(!a)return void e.forEach((e=>i(e,n(e),!1)))
948
- ;const o=e[t],s=e[r],c=s.getTimeStamp()-o.getTimeStamp(),l=n(o),u=n(s);if(i(o,l,!1),i(s,u,!1),Math.abs(l-u)<calculateFastModeAllowableChange(c))for(let a=t+1;a<r;a++)i(e[a],l,!0);else if(r-t>1){const o=Math.floor((t+r)/2);calculateProgressBetweenFrames(e,t,o,a,n,i),calculateProgressBetweenFrames(e,o,r,a,n,i)}}function calculateFrameSimilarity(e,t){const r={channels:4},a=Object.assign(e.getParsedImage(),r),n=Object.assign(t.getParsedImage(),r);return JR.compare(a,n).ssim}var ZR={calculateFastModeAllowableChange,calculateFrameSimilarity,calculateVisualProgress:function calculateVisualProgress(e,t){const r=e[0],a=e[e.length-1];return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){return"number"==typeof e.getProgress()?e.getProgress():function calculateFrameProgress(e,t,r){let a=0,n=0;const i=e.getHistogram(),o=t.getHistogram(),s=r.getHistogram();for(let e=0;e<3;e++)for(let t=0;t<256;t++){
944
+ for(;m<p;)s[c++]=o[m++];break;case 2:for(;m<p;)s[c++]=o[m++]*(o[m++]/255);break;case 3:if(i)for(;m<p;)s[c++]=.212655*o[m++]+.715158*o[m++]+.072187*o[m++];else for(;m<p;)s[c++]=o[m++]+o[m++]+o[m++];break;case 4:if(i)for(;m<p;)s[c++]=(.212655*o[m++]+.715158*o[m++]+.072187*o[m++])*(o[m++]/255);else for(;m<p;)s[c++]=(o[m++]+o[m++]+o[m++])*(o[m++]/255)}}return s}function _averageLuma(e){for(var t=0,r=0;r<e.length;r++)t+=e[r];return t/e.length}e._iterate=function _iterate(e,t,r,a,n){for(var i=e.width,o=e.height,s=0;s<o;s+=r)for(var c=0;c<i;c+=r){var l=Math.min(r,i-c),u=Math.min(r,o-s),d=_lumaValuesForWindow(e,c,s,l,u,a),m=_lumaValuesForWindow(t,c,s,l,u,a);n(d,m,_averageLuma(d),_averageLuma(m))}}}(r||(r={}))}(ZR||(ZR={}));const ek=ZR,tk=Math.log(4/6);function calculateFastModeAllowableChange(e){const t=e/1e3;return 6*Math.exp(tk*t)-1}function calculateProgressBetweenFrames(e,t,r,a,n,i){if(!a)return void e.forEach((e=>i(e,n(e),!1)))
945
+ ;const o=e[t],s=e[r],c=s.getTimeStamp()-o.getTimeStamp(),l=n(o),u=n(s);if(i(o,l,!1),i(s,u,!1),Math.abs(l-u)<calculateFastModeAllowableChange(c))for(let a=t+1;a<r;a++)i(e[a],l,!0);else if(r-t>1){const o=Math.floor((t+r)/2);calculateProgressBetweenFrames(e,t,o,a,n,i),calculateProgressBetweenFrames(e,o,r,a,n,i)}}function calculateFrameSimilarity(e,t){const r={channels:4},a=Object.assign(e.getParsedImage(),r),n=Object.assign(t.getParsedImage(),r);return ek.compare(a,n).ssim}var rk={calculateFastModeAllowableChange,calculateFrameSimilarity,calculateVisualProgress:function calculateVisualProgress(e,t){const r=e[0],a=e[e.length-1];return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){return"number"==typeof e.getProgress()?e.getProgress():function calculateFrameProgress(e,t,r){let a=0,n=0;const i=e.getHistogram(),o=t.getHistogram(),s=r.getHistogram();for(let e=0;e<3;e++)for(let t=0;t<256;t++){
949
946
  const r=i[e][t],c=o[e][t],l=s[e][t],u=Math.abs(r-c),d=Math.abs(l-c);n+=Math.min(u,d),a+=d}let c;return c=0===n&&0===a?100:Math.floor(n/a*100),c}(e,r,a)}),(function setProgress(e,t,r){return e.setProgress(t,r)})),e},calculatePerceptualProgress:function calculatePerceptualProgress(e,t){const r=e[0],a=e[e.length-1],n=calculateFrameSimilarity(r,a);return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){if("number"==typeof e.getPerceptualProgress())return e.getPerceptualProgress();const t=calculateFrameSimilarity(e,a);return Math.max(100*(t-n)/(1-n),0)}),(function setProgress(e,t,r){return e.setPerceptualProgress(t,r)})),e},calculateSpeedIndexes:function calculateSpeedIndexes(e,t){const r="number"==typeof e[0].getProgress(),a="number"==typeof e[0].getPerceptualProgress(),n=r?"getProgress":"getPerceptualProgress",i=t.startTs;let o,s;for(let t=0;t<e.length&&!s;t++)e[t][n]()>0&&(s=e[t].getTimeStamp())
950
- ;for(let t=0;t<e.length&&!o;t++)e[t][n]()>=100&&(o=e[t].getTimeStamp());let c=e[0].getTimeStamp(),l=e[0].getProgress(),u=e[0].getPerceptualProgress(),d=s-i,m=s-i;return e.forEach((function(e){if(e.getTimeStamp()>s){const t=e.getTimeStamp()-c;d+=t*(1-l),m+=t*(1-u)}c=e.getTimeStamp(),l=e.getProgress()/100,u=e.getPerceptualProgress()/100})),d=r?d:void 0,m=a?m:void 0,{firstPaintTs:s,visuallyCompleteTs:o,speedIndex:d,perceptualSpeedIndex:m}}};const QR=KR,ek=ZR;const tk={All:"all",pSI:"perceptualSpeedIndex",SI:"speedIndex"};const rk=Ao,speedline=function(e,t){const r=t&&t.include||tk.All;if(!Object.keys(tk).some((e=>tk[e]===r)))throw new Error(`Unrecognized include option: ${r}`);return QR.extractFramesFromTimeline(e,t).then((function(e){const a=e.frames;return r!==tk.All&&r!==tk.SI||ek.calculateVisualProgress(a,t),r!==tk.All&&r!==tk.pSI||ek.calculatePerceptualProgress(a,t),function calculateValues(e,t){
951
- const r=ek.calculateSpeedIndexes(e,t),a=Math.floor(t.endTs-t.startTs),n=Math.floor(r.firstPaintTs-t.startTs),i=Math.floor(r.visuallyCompleteTs-t.startTs);return{beginning:t.startTs,end:t.endTs,frames:e,first:n,complete:i,duration:a,speedIndex:r.speedIndex,perceptualSpeedIndex:r.perceptualSpeedIndex}}(a,e)}))},ak=vi.exports,nk=Yp;var ik=rk(class Speedline$4{static async compute_(e,t){return nk.request(e,t).then((t=>{const r=e.traceEvents.slice(),a=t.timestamps.timeOrigin;return speedline(r,{timeOrigin:a,fastMode:!0,include:"speedIndex"})})).catch((e=>{if(/No screenshots found in trace/.test(e.message))throw new ak(ak.errors.NO_SCREENSHOTS);throw e})).then((e=>{if(0===e.frames.length)throw new ak(ak.errors.NO_SPEEDLINE_FRAMES);if(0===e.speedIndex)throw new ak(ak.errors.SPEEDINDEX_OF_ZERO);return e}))}},null);const ok=Ao,sk=_w;var ck=ok(class FirstContentfulPaintAllFrames$1 extends sk{static computeSimulatedMetric(){throw new Error("FCP All Frames not implemented in lantern")}
952
- static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaintAllFrames,timestamp:t.timestamps.firstContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const lk=Ao,uk=_w,dk=vi.exports,mk=fb;var pk=lk(class FirstMeaningfulPaint$2 extends uk{static computeSimulatedMetric(e,t){const r=uk.getMetricComputationInput(e);return mk.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.firstMeaningfulPaint)throw new dk(dk.errors.NO_FMP);return{timing:t.timings.firstMeaningfulPaint,timestamp:t.timestamps.firstMeaningfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const hk=Ao,gk=sb,fk=vi.exports,yk=db;class LanternLargestContentfulPaint$1 extends gk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(e){if("network"!==e.type)return!0
953
- ;const t="Image"===e.record.resourceType,r="Low"===e.record.priority||"VeryLow"===e.record.priority;return!t||!r}static getOptimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new fk(fk.errors.NO_LCP);return yk.getFirstPaintBasedGraph(e,r,LanternLargestContentfulPaint$1.isNotLowPriorityImageNode)}static getPessimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new fk(fk.errors.NO_LCP);return yk.getFirstPaintBasedGraph(e,r,(e=>!0),(e=>e.didPerformLayout()))}static getEstimateFromSimulation(e){const t=Array.from(e.nodeTimings.entries()).filter((e=>LanternLargestContentfulPaint$1.isNotLowPriorityImageNode(e[0]))).map((e=>e[1].endTime));return{timeInMs:Math.max(...t),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await yk.request(e,t),a=await this.computeMetricWithGraphs(e,t);return a.timing=Math.max(a.timing,r.timing),a}}var vk=hk(LanternLargestContentfulPaint$1,["devtoolsLog","gatherContext","settings","simulator","trace"])
954
- ;const bk=Ao,wk=_w,Sk=vi.exports,Tk=vk;var Ek=bk(class LargestContentfulPaint$2 extends wk{static computeSimulatedMetric(e,t){const r=wk.getMetricComputationInput(e);return Tk.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaint)throw new Sk(Sk.errors.NO_LCP);return{timing:t.timings.largestContentfulPaint,timestamp:t.timestamps.largestContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const xk=Ao,_k=_w,Ak=vi.exports;var Rk=xk(class LargestContentfulPaintAllFrames$1 extends _k{static async computeSimulatedMetric(){throw new Error("LCP All Frames not implemented in lantern")}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaintAllFrames)throw new Ak(Ak.errors.NO_LCP_ALL_FRAMES);return{timing:t.timings.largestContentfulPaintAllFrames,timestamp:t.timestamps.largestContentfulPaintAllFrames}}
955
- },["devtoolsLog","gatherContext","settings","simulator","trace"]);const kk=Ao,Dk=Yp,Ck=vi.exports;class CumulativeLayoutShift$2{static getLayoutShiftEvents(e){const t=[];let r=!0;for(const a of e)if("LayoutShift"===a.name&&a.args.data&&void 0!==a.args.data.is_main_frame){if(void 0===a.args.data.weighted_score_delta)throw new Ck(Ck.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Cumulative Layout Shift"});if(a.args.data.had_recent_input){if(!r)continue}else r=!1;t.push({ts:a.ts,isMainFrame:a.args.data.is_main_frame,weightedScore:a.args.data.weighted_score_delta})}return t}static calculate(e){let t=0,r=0,a=Number.NEGATIVE_INFINITY,n=Number.NEGATIVE_INFINITY;for(const i of e)(i.ts-a>5e6||i.ts-n>1e6)&&(a=i.ts,r=0),n=i.ts,r+=i.weightedScore,t=Math.max(t,r);return t}static calculateTotalCumulativeLayoutShift(e){return e.reduce(((e,t)=>e+t.weightedScore),0)}static async compute_(e,t){
956
- const r=await Dk.request(e,t),a=CumulativeLayoutShift$2.getLayoutShiftEvents(r.frameTreeEvents),n=a.filter((e=>e.isMainFrame)),i=CumulativeLayoutShift$2.calculateTotalCumulativeLayoutShift(n);return{cumulativeLayoutShift:CumulativeLayoutShift$2.calculate(a),cumulativeLayoutShiftMainFrame:CumulativeLayoutShift$2.calculate(n),totalCumulativeLayoutShift:i}}}var Ik=kk(CumulativeLayoutShift$2,null);const Nk=Ao,Lk=sb,Mk=Zc,Pk=ik,Ok=db,Fk=mn.throttling;class LanternSpeedIndex$2 extends Lk{static get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:.65}}static getScaledCoefficients(e){const t=this.COEFFICIENTS,r=Fk.mobileSlow4G.rttMs-30,a=Math.max((e-30)/r,0);return{intercept:t.intercept*a,optimistic:.5+(t.optimistic-.5)*a,pessimistic:.5+(t.pessimistic-.5)*a}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.speedline)throw new Error("missing speedline")
957
- ;const r=t.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:t.optimistic?t.speedline.speedIndex:LanternSpeedIndex$2.computeLayoutBasedSpeedIndex(e.nodeTimings,r),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Pk.request(e.trace,t),a=await Ok.request(e,t),n=await this.computeMetricWithGraphs(e,t,{speedline:r,fcpResult:a});return n.timing=Math.max(n.timing,a.timing),n}static computeLayoutBasedSpeedIndex(e,t){const r=[];for(const[t,a]of e.entries())if(t.type===Mk.TYPES.CPU&&t.childEvents.some((e=>"Layout"===e.name))){const e=Math.max(Math.log2(a.endTime-a.startTime),0);r.push({time:a.endTime,weight:e})}const a=r.map((e=>e.weight*Math.max(e.time,t))).reduce(((e,t)=>e+t),0),n=r.map((e=>e.weight)).reduce(((e,t)=>e+t),0);return n?a/n:t}}var Uk=Nk(LanternSpeedIndex$2,["devtoolsLog","gatherContext","settings","simulator","trace"]);const jk=Ao,Bk=_w,$k=Uk,qk=ik;var zk=jk(class SpeedIndex$2 extends Bk{static computeSimulatedMetric(e,t){
958
- const r=Bk.getMetricComputationInput(e);return $k.request(r,t)}static async computeObservedMetric(e,t){const r=await qk.request(e.trace,t),a=Math.round(r.speedIndex),n=1e3*(a+r.beginning);return Promise.resolve({timing:a,timestamp:n})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Vk=Ao,Wk=sb,Gk=Zc,Hk=db;class LanternMaxPotentialFID$1 extends Wk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=LanternMaxPotentialFID$1.getTimingsAfterFCP(e.nodeTimings,r);return{timeInMs:Math.max(...a.map((e=>e.duration)),16),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Hk.request(e,t);return super.computeMetricWithGraphs(e,t,{fcpResult:r})}
959
- static getTimingsAfterFCP(e,t){return Array.from(e.entries()).filter((([e,r])=>e.type===Gk.TYPES.CPU&&r.endTime>t)).map((([e,t])=>t))}}var Yk=Vk(LanternMaxPotentialFID$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const Kk=Ao,Jk=_w,Xk=Yk,Zk=ao;var Qk=Kk(class MaxPotentialFID$2 extends Jk{static computeSimulatedMetric(e,t){const r=Jk.getMetricComputationInput(e);return Xk.request(r,t)}static computeObservedMetric(e){const{firstContentfulPaint:t}=e.processedNavigation.timings,r=Zk.getMainThreadTopLevelEvents(e.processedTrace,t).filter((e=>e.duration>=1));return Promise.resolve({timing:Math.max(...r.map((e=>e.duration)),16)})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);var eD={BLOCKING_TIME_THRESHOLD:50,calculateSumOfBlockingTime:function calculateSumOfBlockingTime$2(e,t,r){if(r<=t)return 0;let a=0;for(const n of e){if(n.duration<50)continue;if(n.end<t)continue;if(n.start>r)continue;const e=Math.max(n.start,t),i=Math.min(n.end,r)-e;i<50||(a+=i-50)
960
- }return a}};const tD=Ao,rD=sb,aD=Zc,nD=db,iD=Tb,{BLOCKING_TIME_THRESHOLD:oD,calculateSumOfBlockingTime:sD}=eD;class LanternTotalBlockingTime$1 extends rD{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.interactiveResult)throw new Error("missing interactiveResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=t.optimistic?t.interactiveResult.optimisticEstimate.timeInMs:t.interactiveResult.pessimisticEstimate.timeInMs,n=oD,i=LanternTotalBlockingTime$1.getTopLevelEvents(e.nodeTimings,n);return{timeInMs:sD(i,r,a),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await nD.request(e,t),a=await iD.request(e,t);return this.computeMetricWithGraphs(e,t,{fcpResult:r,interactiveResult:a})}static getTopLevelEvents(e,t){const r=[]
961
- ;for(const[a,n]of e.entries())a.type===aD.TYPES.CPU&&(n.duration<t||r.push({start:n.startTime,end:n.endTime,duration:n.duration}));return r}}var cD=tD(LanternTotalBlockingTime$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const lD=Ao,uD=Ew,dD=ao,mD=cD,pD=Lw,{calculateSumOfBlockingTime:hD}=eD;var gD=lD(class TotalBlockingTime$2 extends uD{static computeSimulatedMetric(e,t){const r=uD.getMetricComputationInput(e);return mD.request(r,t)}static async computeObservedMetric(e,t){const r=dD.getMainThreadTopLevelEvents(e.processedTrace);if(e.processedNavigation){const{firstContentfulPaint:a}=e.processedNavigation.timings,n=uD.getMetricComputationInput(e),i=(await pD.request(n,t)).timing;return{timing:hD(r,a,i)}}return{timing:hD(r,0,e.processedTrace.timestamps.traceEnd)}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const fD=Yp,yD=Xp,vD=ik,bD=Zw,wD=ck,SD=pk,TD=Ek,ED=Rk,xD=Lw,_D=Ik,AD=zk,RD=Qk,kD=gD,DD=Ao;class TimingSummary$1{
962
- static async summarize(e,t,r,a,n){const i={trace:e,devtoolsLog:t,gatherContext:r,settings:a},requestOrUndefined=(e,t)=>e.request(t,n).catch((e=>{})),o=await fD.request(e,n),s=await requestOrUndefined(yD,o),c=await vD.request(e,n),l=await requestOrUndefined(bD,i),u=await requestOrUndefined(wD,i),d=await requestOrUndefined(SD,i),m=await requestOrUndefined(TD,i),p=await requestOrUndefined(ED,i),h=await requestOrUndefined(xD,i),f=await requestOrUndefined(_D,e),y=await requestOrUndefined(RD,i),v=await requestOrUndefined(AD,i),b=await requestOrUndefined(kD,i),{cumulativeLayoutShift:w,cumulativeLayoutShiftMainFrame:S,totalCumulativeLayoutShift:T}=f||{};return{metrics:{firstContentfulPaint:l?.timing,firstContentfulPaintTs:l?.timestamp,firstContentfulPaintAllFrames:u?.timing,firstContentfulPaintAllFramesTs:u?.timestamp,firstMeaningfulPaint:d?.timing,firstMeaningfulPaintTs:d?.timestamp,largestContentfulPaint:m?.timing,largestContentfulPaintTs:m?.timestamp,
947
+ ;for(let t=0;t<e.length&&!o;t++)e[t][n]()>=100&&(o=e[t].getTimeStamp());let c=e[0].getTimeStamp(),l=e[0].getProgress(),u=e[0].getPerceptualProgress(),d=s-i,m=s-i;return e.forEach((function(e){if(e.getTimeStamp()>s){const t=e.getTimeStamp()-c;d+=t*(1-l),m+=t*(1-u)}c=e.getTimeStamp(),l=e.getProgress()/100,u=e.getPerceptualProgress()/100})),d=r?d:void 0,m=a?m:void 0,{firstPaintTs:s,visuallyCompleteTs:o,speedIndex:d,perceptualSpeedIndex:m}}};const ak=QR,nk=rk;const ik={All:"all",pSI:"perceptualSpeedIndex",SI:"speedIndex"};const ok=Ao,speedline=function(e,t){const r=t&&t.include||ik.All;if(!Object.keys(ik).some((e=>ik[e]===r)))throw new Error(`Unrecognized include option: ${r}`);return ak.extractFramesFromTimeline(e,t).then((function(e){const a=e.frames;return r!==ik.All&&r!==ik.SI||nk.calculateVisualProgress(a,t),r!==ik.All&&r!==ik.pSI||nk.calculatePerceptualProgress(a,t),function calculateValues(e,t){
948
+ const r=nk.calculateSpeedIndexes(e,t),a=Math.floor(t.endTs-t.startTs),n=Math.floor(r.firstPaintTs-t.startTs),i=Math.floor(r.visuallyCompleteTs-t.startTs);return{beginning:t.startTs,end:t.endTs,frames:e,first:n,complete:i,duration:a,speedIndex:r.speedIndex,perceptualSpeedIndex:r.perceptualSpeedIndex}}(a,e)}))},sk=vi.exports,ck=Yp;var lk=ok(class Speedline$4{static async compute_(e,t){return ck.request(e,t).then((t=>{const r=e.traceEvents.slice(),a=t.timestamps.timeOrigin;return speedline(r,{timeOrigin:a,fastMode:!0,include:"speedIndex"})})).catch((e=>{if(/No screenshots found in trace/.test(e.message))throw new sk(sk.errors.NO_SCREENSHOTS);throw e})).then((e=>{if(0===e.frames.length)throw new sk(sk.errors.NO_SPEEDLINE_FRAMES);if(0===e.speedIndex)throw new sk(sk.errors.SPEEDINDEX_OF_ZERO);return e}))}},null);const uk=Ao,dk=_w;var mk=uk(class FirstContentfulPaintAllFrames$1 extends dk{static computeSimulatedMetric(){throw new Error("FCP All Frames not implemented in lantern")}
949
+ static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaintAllFrames,timestamp:t.timestamps.firstContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const pk=Ao,hk=_w,gk=vi.exports,fk=fb;var yk=pk(class FirstMeaningfulPaint$2 extends hk{static computeSimulatedMetric(e,t){const r=hk.getMetricComputationInput(e);return fk.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.firstMeaningfulPaint)throw new gk(gk.errors.NO_FMP);return{timing:t.timings.firstMeaningfulPaint,timestamp:t.timestamps.firstMeaningfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const vk=Ao,bk=sb,wk=vi.exports,Sk=db;class LanternLargestContentfulPaint$1 extends bk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(e){if("network"!==e.type)return!0
950
+ ;const t="Image"===e.record.resourceType,r="Low"===e.record.priority||"VeryLow"===e.record.priority;return!t||!r}static getOptimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new wk(wk.errors.NO_LCP);return Sk.getFirstPaintBasedGraph(e,r,LanternLargestContentfulPaint$1.isNotLowPriorityImageNode)}static getPessimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new wk(wk.errors.NO_LCP);return Sk.getFirstPaintBasedGraph(e,r,(e=>!0),(e=>e.didPerformLayout()))}static getEstimateFromSimulation(e){const t=Array.from(e.nodeTimings.entries()).filter((e=>LanternLargestContentfulPaint$1.isNotLowPriorityImageNode(e[0]))).map((e=>e[1].endTime));return{timeInMs:Math.max(...t),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Sk.request(e,t),a=await this.computeMetricWithGraphs(e,t);return a.timing=Math.max(a.timing,r.timing),a}}var Tk=vk(LanternLargestContentfulPaint$1,["devtoolsLog","gatherContext","settings","simulator","trace"])
951
+ ;const Ek=Ao,xk=_w,_k=vi.exports,Ak=Tk;var Rk=Ek(class LargestContentfulPaint$2 extends xk{static computeSimulatedMetric(e,t){const r=xk.getMetricComputationInput(e);return Ak.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaint)throw new _k(_k.errors.NO_LCP);return{timing:t.timings.largestContentfulPaint,timestamp:t.timestamps.largestContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const kk=Ao,Dk=_w,Ck=vi.exports;var Ik=kk(class LargestContentfulPaintAllFrames$1 extends Dk{static async computeSimulatedMetric(){throw new Error("LCP All Frames not implemented in lantern")}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaintAllFrames)throw new Ck(Ck.errors.NO_LCP_ALL_FRAMES);return{timing:t.timings.largestContentfulPaintAllFrames,timestamp:t.timestamps.largestContentfulPaintAllFrames}}
952
+ },["devtoolsLog","gatherContext","settings","simulator","trace"]);const Nk=Ao,Lk=Yp,Mk=vi.exports;class CumulativeLayoutShift$2{static getLayoutShiftEvents(e){const t=[];let r=!0;for(const a of e)if("LayoutShift"===a.name&&a.args.data&&void 0!==a.args.data.is_main_frame){if(void 0===a.args.data.weighted_score_delta)throw new Mk(Mk.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Cumulative Layout Shift"});if(a.args.data.had_recent_input){if(!r)continue}else r=!1;t.push({ts:a.ts,isMainFrame:a.args.data.is_main_frame,weightedScore:a.args.data.weighted_score_delta})}return t}static calculate(e){let t=0,r=0,a=Number.NEGATIVE_INFINITY,n=Number.NEGATIVE_INFINITY;for(const i of e)(i.ts-a>5e6||i.ts-n>1e6)&&(a=i.ts,r=0),n=i.ts,r+=i.weightedScore,t=Math.max(t,r);return t}static calculateTotalCumulativeLayoutShift(e){return e.reduce(((e,t)=>e+t.weightedScore),0)}static async compute_(e,t){
953
+ const r=await Lk.request(e,t),a=CumulativeLayoutShift$2.getLayoutShiftEvents(r.frameTreeEvents),n=a.filter((e=>e.isMainFrame)),i=CumulativeLayoutShift$2.calculateTotalCumulativeLayoutShift(n);return{cumulativeLayoutShift:CumulativeLayoutShift$2.calculate(a),cumulativeLayoutShiftMainFrame:CumulativeLayoutShift$2.calculate(n),totalCumulativeLayoutShift:i}}}var Pk=Nk(CumulativeLayoutShift$2,null);const Ok=Ao,Fk=sb,Uk=Zc,jk=lk,Bk=db,$k=mn.throttling;class LanternSpeedIndex$2 extends Fk{static get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:.65}}static getScaledCoefficients(e){const t=this.COEFFICIENTS,r=$k.mobileSlow4G.rttMs-30,a=Math.max((e-30)/r,0);return{intercept:t.intercept*a,optimistic:.5+(t.optimistic-.5)*a,pessimistic:.5+(t.pessimistic-.5)*a}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.speedline)throw new Error("missing speedline")
954
+ ;const r=t.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:t.optimistic?t.speedline.speedIndex:LanternSpeedIndex$2.computeLayoutBasedSpeedIndex(e.nodeTimings,r),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await jk.request(e.trace,t),a=await Bk.request(e,t),n=await this.computeMetricWithGraphs(e,t,{speedline:r,fcpResult:a});return n.timing=Math.max(n.timing,a.timing),n}static computeLayoutBasedSpeedIndex(e,t){const r=[];for(const[t,a]of e.entries())if(t.type===Uk.TYPES.CPU&&t.childEvents.some((e=>"Layout"===e.name))){const e=Math.max(Math.log2(a.endTime-a.startTime),0);r.push({time:a.endTime,weight:e})}const a=r.map((e=>e.weight*Math.max(e.time,t))).reduce(((e,t)=>e+t),0),n=r.map((e=>e.weight)).reduce(((e,t)=>e+t),0);return n?a/n:t}}var qk=Ok(LanternSpeedIndex$2,["devtoolsLog","gatherContext","settings","simulator","trace"]);const zk=Ao,Vk=_w,Wk=qk,Hk=lk;var Gk=zk(class SpeedIndex$2 extends Vk{static computeSimulatedMetric(e,t){
955
+ const r=Vk.getMetricComputationInput(e);return Wk.request(r,t)}static async computeObservedMetric(e,t){const r=await Hk.request(e.trace,t),a=Math.round(r.speedIndex),n=1e3*(a+r.beginning);return Promise.resolve({timing:a,timestamp:n})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Yk=Ao,Kk=sb,Jk=Zc,Xk=db;class LanternMaxPotentialFID$1 extends Kk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=LanternMaxPotentialFID$1.getTimingsAfterFCP(e.nodeTimings,r);return{timeInMs:Math.max(...a.map((e=>e.duration)),16),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Xk.request(e,t);return super.computeMetricWithGraphs(e,t,{fcpResult:r})}
956
+ static getTimingsAfterFCP(e,t){return Array.from(e.entries()).filter((([e,r])=>e.type===Jk.TYPES.CPU&&r.endTime>t)).map((([e,t])=>t))}}var Zk=Yk(LanternMaxPotentialFID$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const Qk=Ao,eD=_w,tD=Zk,rD=ao;var aD=Qk(class MaxPotentialFID$2 extends eD{static computeSimulatedMetric(e,t){const r=eD.getMetricComputationInput(e);return tD.request(r,t)}static computeObservedMetric(e){const{firstContentfulPaint:t}=e.processedNavigation.timings,r=rD.getMainThreadTopLevelEvents(e.processedTrace,t).filter((e=>e.duration>=1));return Promise.resolve({timing:Math.max(...r.map((e=>e.duration)),16)})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);var nD={BLOCKING_TIME_THRESHOLD:50,calculateSumOfBlockingTime:function calculateSumOfBlockingTime$2(e,t,r){if(r<=t)return 0;let a=0;for(const n of e){if(n.duration<50)continue;if(n.end<t)continue;if(n.start>r)continue;const e=Math.max(n.start,t),i=Math.min(n.end,r)-e;i<50||(a+=i-50)
957
+ }return a}};const iD=Ao,oD=sb,sD=Zc,cD=db,lD=Tb,{BLOCKING_TIME_THRESHOLD:uD,calculateSumOfBlockingTime:dD}=nD;class LanternTotalBlockingTime$1 extends oD{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.interactiveResult)throw new Error("missing interactiveResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=t.optimistic?t.interactiveResult.optimisticEstimate.timeInMs:t.interactiveResult.pessimisticEstimate.timeInMs,n=uD,i=LanternTotalBlockingTime$1.getTopLevelEvents(e.nodeTimings,n);return{timeInMs:dD(i,r,a),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await cD.request(e,t),a=await lD.request(e,t);return this.computeMetricWithGraphs(e,t,{fcpResult:r,interactiveResult:a})}static getTopLevelEvents(e,t){const r=[]
958
+ ;for(const[a,n]of e.entries())a.type===sD.TYPES.CPU&&(n.duration<t||r.push({start:n.startTime,end:n.endTime,duration:n.duration}));return r}}var mD=iD(LanternTotalBlockingTime$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const pD=Ao,hD=Ew,gD=ao,fD=mD,yD=Lw,{calculateSumOfBlockingTime:vD}=nD;var bD=pD(class TotalBlockingTime$2 extends hD{static computeSimulatedMetric(e,t){const r=hD.getMetricComputationInput(e);return fD.request(r,t)}static async computeObservedMetric(e,t){const r=gD.getMainThreadTopLevelEvents(e.processedTrace);if(e.processedNavigation){const{firstContentfulPaint:a}=e.processedNavigation.timings,n=hD.getMetricComputationInput(e),i=(await yD.request(n,t)).timing;return{timing:vD(r,a,i)}}return{timing:vD(r,0,e.processedTrace.timestamps.traceEnd)}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const wD=Yp,SD=Xp,TD=lk,ED=Zw,xD=mk,_D=yk,AD=Rk,RD=Ik,kD=Lw,DD=Pk,CD=Gk,ID=aD,ND=bD,LD=Ao;class TimingSummary$1{
959
+ static async summarize(e,t,r,a,n){const i={trace:e,devtoolsLog:t,gatherContext:r,settings:a},requestOrUndefined=(e,t)=>e.request(t,n).catch((e=>{})),o=await wD.request(e,n),s=await requestOrUndefined(SD,o),c=await TD.request(e,n),l=await requestOrUndefined(ED,i),u=await requestOrUndefined(xD,i),d=await requestOrUndefined(_D,i),m=await requestOrUndefined(AD,i),p=await requestOrUndefined(RD,i),h=await requestOrUndefined(kD,i),f=await requestOrUndefined(DD,e),y=await requestOrUndefined(ID,i),v=await requestOrUndefined(CD,i),b=await requestOrUndefined(ND,i),{cumulativeLayoutShift:w,cumulativeLayoutShiftMainFrame:S,totalCumulativeLayoutShift:T}=f||{};return{metrics:{firstContentfulPaint:l?.timing,firstContentfulPaintTs:l?.timestamp,firstContentfulPaintAllFrames:u?.timing,firstContentfulPaintAllFramesTs:u?.timestamp,firstMeaningfulPaint:d?.timing,firstMeaningfulPaintTs:d?.timestamp,largestContentfulPaint:m?.timing,largestContentfulPaintTs:m?.timestamp,
963
960
  largestContentfulPaintAllFrames:p?.timing,largestContentfulPaintAllFramesTs:p?.timestamp,interactive:h?.timing,interactiveTs:h?.timestamp,speedIndex:v?.timing,speedIndexTs:v?.timestamp,totalBlockingTime:b?.timing,maxPotentialFID:y?.timing,cumulativeLayoutShift:w,cumulativeLayoutShiftMainFrame:S,totalCumulativeLayoutShift:T,observedTimeOrigin:o.timings.timeOrigin,observedTimeOriginTs:o.timestamps.timeOrigin,observedNavigationStart:s?.timings.timeOrigin,observedNavigationStartTs:s?.timestamps.timeOrigin,observedFirstPaint:s?.timings.firstPaint,observedFirstPaintTs:s?.timestamps.firstPaint,observedFirstContentfulPaint:s?.timings.firstContentfulPaint,observedFirstContentfulPaintTs:s?.timestamps.firstContentfulPaint,observedFirstContentfulPaintAllFrames:s?.timings.firstContentfulPaintAllFrames,observedFirstContentfulPaintAllFramesTs:s?.timestamps.firstContentfulPaintAllFrames,observedFirstMeaningfulPaint:s?.timings.firstMeaningfulPaint,
964
961
  observedFirstMeaningfulPaintTs:s?.timestamps.firstMeaningfulPaint,observedLargestContentfulPaint:s?.timings.largestContentfulPaint,observedLargestContentfulPaintTs:s?.timestamps.largestContentfulPaint,observedLargestContentfulPaintAllFrames:s?.timings.largestContentfulPaintAllFrames,observedLargestContentfulPaintAllFramesTs:s?.timestamps.largestContentfulPaintAllFrames,observedTraceEnd:o.timings.traceEnd,observedTraceEndTs:o.timestamps.traceEnd,observedLoad:s?.timings.load,observedLoadTs:s?.timestamps.load,observedDomContentLoaded:s?.timings.domContentLoaded,observedDomContentLoadedTs:s?.timestamps.domContentLoaded,observedCumulativeLayoutShift:w,observedCumulativeLayoutShiftMainFrame:S,observedTotalCumulativeLayoutShift:T,observedFirstVisualChange:c.first,observedFirstVisualChangeTs:1e3*(c.first+c.beginning),observedLastVisualChange:c.complete,observedLastVisualChangeTs:1e3*(c.complete+c.beginning),observedSpeedIndex:c.speedIndex,observedSpeedIndexTs:1e3*(c.speedIndex+c.beginning)},
965
- debugInfo:{lcpInvalidated:!!s?.lcpInvalidated}}}static async compute_(e,t){return TimingSummary$1.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,t)}}var CD=DD(TimingSummary$1,["devtoolsLog","gatherContext","settings","trace"]);const ID=kc,ND=CD,LD=new Set(["cumulativeLayoutShift","cumulativeLayoutShiftMainFrame","totalCumulativeLayoutShift","observedCumulativeLayoutShift","observedCumulativeLayoutShiftMainFrame","observedTotalCumulativeLayoutShift"]);var MD=class Metrics extends ID{static get meta(){return{id:"metrics",scoreDisplayMode:ID.SCORING_MODES.INFORMATIVE,title:"Metrics",description:"Collects all available metrics.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[ID.DEFAULT_PASS],n=e.devtoolsLogs[ID.DEFAULT_PASS],i=await ND.request({trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},t),o=i.metrics,s=i.debugInfo;for(const[e,t]of Object.entries(o)){const r=e
966
- ;"number"!=typeof t||LD.has(r)||(o[r]=Math.round(t))}const c={type:"debugdata",items:[o,s]};return{score:1,numericValue:o.interactive||0,numericUnit:"millisecond",details:c}}},PD={exports:{}};const OD=kc,FD=Ik,UD=oi,jD={description:"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more](https://web.dev/cls/)."},BD=UD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/cumulative-layout-shift.js",jD);PD.exports=class CumulativeLayoutShift extends OD{static get meta(){return{id:"cumulative-layout-shift",title:BD(UD.UIStrings.cumulativeLayoutShiftMetric),description:BD(jD.description),scoreDisplayMode:OD.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:.1,median:.25}}static async audit(e,t){const r=e.traces[OD.DEFAULT_PASS],{cumulativeLayoutShift:a,...n}=await FD.request(r,t),i={type:"debugdata",items:[n]};return{score:OD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),
967
- numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(t.settings.locale),details:i}}},PD.exports.UIStrings=jD;var $D={exports:{}};const qD=kc,zD=ah,VD=oi,WD={description:"Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more](https://web.dev/inp/)."},GD=VD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/experimental-interaction-to-next-paint.js",WD);$D.exports=class ExperimentalInteractionToNextPaint extends qD{static get meta(){return{id:"experimental-interaction-to-next-paint",title:GD(VD.UIStrings.interactionToNextPaint),description:GD(WD.description),scoreDisplayMode:qD.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:200,median:500}}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a={trace:e.traces[qD.DEFAULT_PASS],settings:r
968
- },n=await zD.request(a,t);if(null===n)return{score:null,notApplicable:!0};const i="FallbackTiming"===n.name?n.duration:n.args.data.duration;return{score:qD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},i),numericValue:i,numericUnit:"millisecond",displayValue:GD(VD.UIStrings.ms,{timeInMs:i})}}},$D.exports.UIStrings=WD;const HD=kc,YD=mn.throttling.mobileRegular3G,KD=Zw;var JD=class FirstContentfulPaint3G extends HD{static get meta(){return{id:"first-contentful-paint-3g",title:"First Contentful Paint (3G)",description:"First Contentful Paint 3G marks the time at which the first text or image is painted while on a 3G network. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint).",scoreDisplayMode:HD.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:2700,median:4500}}static async audit(e,t){const r=e.GatherContext,a={
969
- trace:e.traces[HD.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[HD.DEFAULT_PASS],gatherContext:r,settings:{...t.settings,throttlingMethod:"simulate",throttling:YD}},n=await KD.request(a,t);return{score:HD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},n.timing),numericValue:n.timing,numericUnit:"millisecond",displayValue:`${n.timing} ms`}}},XD={exports:{}};const ZD=kc,QD=oi,eC=Zw,tC={description:"First Contentful Paint marks the time at which the first text or image is painted. [Learn more](https://web.dev/first-contentful-paint/)."},rC=QD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-contentful-paint.js",tC);XD.exports=class FirstContentfulPaint extends ZD{static get meta(){return{id:"first-contentful-paint",title:rC(QD.UIStrings.firstContentfulPaintMetric),description:rC(tC.description),scoreDisplayMode:ZD.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{
970
- mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[ZD.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[ZD.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await eC.request(r,t),n=t.options[t.settings.formFactor];return{score:ZD.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:rC(QD.UIStrings.seconds,{timeInMs:a.timing})}}},XD.exports.UIStrings=tC;var aC={exports:{}};const nC=kc,iC=oi,oC=pk,sC={description:"First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://web.dev/first-meaningful-paint/)."},cC=iC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-meaningful-paint.js",sC);aC.exports=class FirstMeaningfulPaint extends nC{static get meta(){return{id:"first-meaningful-paint",title:cC(iC.UIStrings.firstMeaningfulPaintMetric),description:cC(sC.description),
971
- scoreDisplayMode:nC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2336,median:4e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[nC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[nC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await oC.request(r,t),n=t.options[t.settings.formFactor];return{score:nC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:cC(iC.UIStrings.seconds,{timeInMs:a.timing})}}},aC.exports.UIStrings=sC;var lC={exports:{}};const uC=kc,dC=oi,mC=Lw,pC={description:"Time to interactive is the amount of time it takes for the page to become fully interactive. [Learn more](https://web.dev/interactive/)."},hC=dC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/interactive.js",pC);lC.exports=class InteractiveMetric extends uC{
972
- static get meta(){return{id:"interactive",title:hC(dC.UIStrings.interactiveMetric),description:hC(pC.description),scoreDisplayMode:uC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3785,median:7300}},desktop:{scoring:{p10:2468,median:4500}}}}static async audit(e,t){const r={trace:e.traces[uC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[uC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=(await mC.request(r,t)).timing,n=t.options[t.settings.formFactor];return{score:uC.computeLogNormalScore(n.scoring,a),numericValue:a,numericUnit:"millisecond",displayValue:hC(dC.UIStrings.seconds,{timeInMs:a})}}},lC.exports.UIStrings=pC;var gC={exports:{}};const fC=kc,yC=oi,vC=Ek,bC=vi.exports,wC={description:"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more](https://web.dev/lighthouse-largest-contentful-paint/)"
973
- },SC=yC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/largest-contentful-paint.js",wC);gC.exports=class LargestContentfulPaint extends fC{static get meta(){return{id:"largest-contentful-paint",title:SC(yC.UIStrings.largestContentfulPaintMetric),description:SC(wC.description),scoreDisplayMode:fC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["HostUserAgent","traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2500,median:4e3}},desktop:{scoring:{p10:1200,median:2400}}}}static async audit(e,t){const r={trace:e.traces[fC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[fC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings};let a;try{a=await vC.request(r,t)}catch(t){const r=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!r)throw t;if(Number(r[1])<79&&"NO_LCP"===t.code)throw new bC(bC.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Largest Contentful Paint"});throw t}const n=t.options[t.settings.formFactor];return{
974
- score:fC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:SC(yC.UIStrings.seconds,{timeInMs:a.timing})}}},gC.exports.UIStrings=wC;var TC={exports:{}};const EC=kc,xC=Qk,_C=oi,AC={description:"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more](https://web.dev/lighthouse-max-potential-fid/)."},RC=_C.createMessageInstanceIdFn("lighthouse-core/audits/metrics/max-potential-fid.js",AC);TC.exports=class MaxPotentialFID extends EC{static get meta(){return{id:"max-potential-fid",title:RC(_C.UIStrings.maxPotentialFIDMetric),description:RC(AC.description),scoreDisplayMode:EC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:130,median:250}}static async audit(e,t){const r={trace:e.traces[EC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[EC.DEFAULT_PASS],
975
- gatherContext:e.GatherContext,settings:t.settings},a=await xC.request(r,t);return{score:EC.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:RC(_C.UIStrings.ms,{timeInMs:a.timing})}}},TC.exports.UIStrings=AC;var kC={exports:{}};const DC=kc,CC=oi,IC=zk,NC={description:"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://web.dev/speed-index/)."},LC=CC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/speed-index.js",NC);kC.exports=class SpeedIndex extends DC{static get meta(){return{id:"speed-index",title:LC(CC.UIStrings.speedIndexMetric),description:LC(NC.description),scoreDisplayMode:DC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3387,median:5800}},desktop:{scoring:{p10:1311,median:2300}}}}static async audit(e,t){const r={
976
- trace:e.traces[DC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[DC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await IC.request(r,t),n=t.options[t.settings.formFactor];return{score:DC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:LC(CC.UIStrings.seconds,{timeInMs:a.timing})}}},kC.exports.UIStrings=NC;var MC={exports:{}};const PC=kc,OC=gD,FC=oi,UC={description:"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more](https://web.dev/lighthouse-total-blocking-time/)."},jC=FC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/total-blocking-time.js",UC);MC.exports=class TotalBlockingTime extends PC{static get meta(){return{id:"total-blocking-time",title:jC(FC.UIStrings.totalBlockingTimeMetric),description:jC(UC.description),scoreDisplayMode:PC.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}
977
- static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,t){const r=e.traces[PC.DEFAULT_PASS],a=e.devtoolsLogs[PC.DEFAULT_PASS],n=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:n,settings:t.settings};if("timespan"===n.gatherMode&&"simulate"===t.settings.throttlingMethod)return{score:1,notApplicable:!0};const o=await OC.request(i,t),s=t.options[t.settings.formFactor];return{score:PC.computeLogNormalScore(s.scoring,o.timing),numericValue:o.timing,numericUnit:"millisecond",displayValue:jC(FC.UIStrings.ms,{timeInMs:o.timing})}}},MC.exports.UIStrings=UC;const BC=kc,$C=ji,qC=Lo,zC=HT;var VC=class NetworkRequests extends BC{static get meta(){return{id:"network-requests",scoreDisplayMode:BC.SCORING_MODES.INFORMATIVE,title:"Network Requests",description:"Lists the network requests that were made during page load.",requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static async audit(e,t){
978
- const r=e.devtoolsLogs[BC.DEFAULT_PASS],a=await qC.request(r,t),n=a.reduce(((e,t)=>Math.min(e,t.startTime)),1/0);let i;if("navigation"===e.GatherContext.gatherMode){const a=await zC.request({devtoolsLog:r,URL:e.URL},t);i=a.frameId}const timeToMs=e=>e<n||!Number.isFinite(e)?void 0:1e3*(e-n),o=a.map((e=>{const t=e.lrStatistics?.endTimeDeltaMs,r=e.lrStatistics?.TCPMs,a=e.lrStatistics?.requestMs,n=e.lrStatistics?.responseMs,o=e.isLinkPreload||void 0,s=i&&e.frameId===i||void 0;return{url:$C.elideDataURI(e.url),protocol:e.protocol,startTime:timeToMs(e.startTime),endTime:timeToMs(e.endTime),finished:e.finished,transferSize:e.transferSize,resourceSize:e.resourceSize,statusCode:e.statusCode,mimeType:e.mimeType,resourceType:e.resourceType,isLinkPreload:o,experimentalFromMainFrame:s,lrEndTimeDeltaMs:t,lrTCPMs:r,lrRequestMs:a,lrResponseMs:n}})),s=BC.makeTableDetails([{key:"url",itemType:"url",text:"URL"},{key:"protocol",itemType:"text",text:"Protocol"},{key:"startTime",itemType:"ms",granularity:1,
979
- text:"Start Time"},{key:"endTime",itemType:"ms",granularity:1,text:"End Time"},{key:"transferSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Transfer Size"},{key:"resourceSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Resource Size"},{key:"statusCode",itemType:"text",text:"Status Code"},{key:"mimeType",itemType:"text",text:"MIME Type"},{key:"resourceType",itemType:"text",text:"Resource Type"}],o),c=Number.isFinite(n)?1e6*n:void 0;return s.debugData={type:"debugdata",networkStartTimeTs:c},{score:1,details:s}}},WC={exports:{}};const GC=kc,HC=oi,YC=Lo,KC=xl,JC={title:"Network Round Trip Times",description:"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more](https://hpbn.co/primer-on-latency-and-bandwidth/)."},XC=HC.createMessageInstanceIdFn("lighthouse-core/audits/network-rtt.js",JC);WC.exports=class NetworkRTT extends GC{
980
- static get meta(){return{id:"network-rtt",scoreDisplayMode:GC.SCORING_MODES.INFORMATIVE,title:XC(JC.title),description:XC(JC.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[GC.DEFAULT_PASS];if(!(await YC.request(r,t)).length)return{score:1,notApplicable:!0};const a=await KC.request(r,t);let n=0;const i=a.rtt,o=[];for(const[e,t]of a.additionalRttByOrigin.entries()){if(!e.startsWith("http"))continue;const r=t+i;o.push({origin:e,rtt:r}),n=Number.isFinite(r)?Math.max(r,n):n}o.sort(((e,t)=>t.rtt-e.rtt));const s=[{key:"origin",itemType:"text",text:XC(HC.UIStrings.columnURL)},{key:"rtt",itemType:"ms",granularity:1,text:XC(HC.UIStrings.columnTimeSpent)}],c=GC.makeTableDetails(s,o);return{score:1,numericValue:n,numericUnit:"millisecond",displayValue:XC(HC.UIStrings.ms,{timeInMs:n}),details:c}}},WC.exports.UIStrings=JC;var ZC={exports:{}};const QC=kc,eI=oi,tI=Lo,rI=xl,aI={title:"Server Backend Latencies",
981
- description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},nI=eI.createMessageInstanceIdFn("lighthouse-core/audits/network-server-latency.js",aI);ZC.exports=class NetworkServerLatency extends QC{static get meta(){return{id:"network-server-latency",scoreDisplayMode:QC.SCORING_MODES.INFORMATIVE,title:nI(aI.title),description:nI(aI.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[QC.DEFAULT_PASS];if(!(await tI.request(r,t)).length)return{score:1,notApplicable:!0};const a=await rI.request(r,t);let n=0;const i=[];for(const[e,t]of a.serverResponseTimeByOrigin.entries())e.startsWith("http")&&(n=Math.max(t,n),i.push({origin:e,serverResponseTime:t}));i.sort(((e,t)=>t.serverResponseTime-e.serverResponseTime));const o=[{key:"origin",
982
- itemType:"text",text:nI(eI.UIStrings.columnURL)},{key:"serverResponseTime",itemType:"ms",granularity:1,text:nI(eI.UIStrings.columnTimeSpent)}],s=QC.makeTableDetails(o,i);return{score:Math.max(1-n/500,0),numericValue:n,numericUnit:"millisecond",displayValue:nI(eI.UIStrings.ms,{timeInMs:n}),details:s}}},ZC.exports.UIStrings=aI;var iI={exports:{}};const oI=kc,sI=jb,cI=oi,lI={title:"Avoids `unload` event listeners",failureTitle:"Registers an `unload` listener",description:"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Use `pagehide` or `visibilitychange` events instead. [Learn more](https://web.dev/bfcache/#never-use-the-unload-event)"},uI=cI.createMessageInstanceIdFn("lighthouse-core/audits/no-unload-listeners.js",lI);iI.exports=class NoUnloadListeners extends oI{static get meta(){return{id:"no-unload-listeners",title:uI(lI.title),failureTitle:uI(lI.failureTitle),description:uI(lI.description),
983
- requiredArtifacts:["GlobalListeners","JsUsage","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=e.GlobalListeners.filter((e=>"unload"===e.type));if(!r.length)return{score:1};const a=await sI.request(e,t),n=[{key:"source",itemType:"source-location",text:uI(cI.UIStrings.columnSource)}],i=new Map;for(const[t,r]of Object.entries(e.JsUsage))for(const e of r)i.set(e.scriptId,t);const o=r.map((e=>{const t=i.get(e.scriptId);if(!t)return{source:{type:"url",value:"(unknown)"}};const r=a.find((e=>e.script.src===t));return{source:oI.makeSourceLocation(t,e.lineNumber,e.columnNumber,r)}}));return{score:0,details:oI.makeTableDetails(n,o)}}},iI.exports.UIStrings=lI;var dI={exports:{}};const mI=kc,pI=oi,hI={title:"Avoid non-composited animations",description:"Animations which are not composited can be janky and increase CLS. [Learn more](https://web.dev/non-composited-animations)",
984
- displayValue:"{itemCount, plural,\n =1 {# animated element found}\n other {# animated elements found}\n }",unsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS Property: {properties}}\n other {Unsupported CSS Properties: {properties}}\n }",transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",unsupportedTimingParameters:"Effect has unsupported timing parameters"},gI=pI.createMessageInstanceIdFn("lighthouse-core/audits/non-composited-animations.js",hI),fI=[{flag:8192,text:hI.unsupportedCSSProperty},{flag:2048,text:hI.transformDependsBoxSize},{flag:4096,text:hI.filterMayMovePixels},{flag:16,text:hI.nonReplaceCompositeMode},{flag:64,text:hI.incompatibleAnimations},{flag:8,text:hI.unsupportedTimingParameters}]
985
- ;function getActionableFailureReasons(e,t){return fI.filter((t=>e&t.flag)).map((e=>e.text===hI.unsupportedCSSProperty?gI(e.text,{propertyCount:t.length,properties:t.join(", ")}):gI(e.text)))}dI.exports=class NonCompositedAnimations extends mI{static get meta(){return{id:"non-composited-animations",scoreDisplayMode:mI.SCORING_MODES.INFORMATIVE,title:gI(hI.title),description:gI(hI.description),requiredArtifacts:["TraceElements","HostUserAgent"]}}static async audit(e){const t=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!t||Number(t[1])<86)return{score:1,notApplicable:!0};const r=[];let a=!1;e.TraceElements.forEach((e=>{if("animation"!==e.traceEventType)return;const t=e.animations||[],n=new Map;for(const{name:e,failureReasonsMask:r,unsupportedProperties:i}of t){if(!r)continue;const t=getActionableFailureReasons(r,i||[]);for(const r of t){e&&(a=!0);const t=n.get(e)||new Set;t.add(r),n.set(e,t)}}if(!n.size)return;const i=[];for(const[e,t]of n)for(const r of t)i.push({failureReason:r,
986
- animation:e});r.push({node:mI.makeNodeItem(e.node),subItems:{type:"subitems",items:i}})}));const n=[{key:"node",itemType:"node",subItemsHeading:{key:"failureReason",itemType:"text"},text:gI(pI.UIStrings.columnElement)}];a&&n.push({key:null,itemType:"text",subItemsHeading:{key:"animation",itemType:"text"},text:gI(pI.UIStrings.columnName)});const i=mI.makeTableDetails(n,r);let o;return r.length>0&&(o=gI(hI.displayValue,{itemCount:r.length})),{score:0===r.length?1:0,notApplicable:0===r.length,details:i,displayValue:o}}},dI.exports.UIStrings=hI;var yI={exports:{}};const vI=Ao,bI=Lo,wI=ji,SI=Ki,TI=Tu,{Util:EI}=Ni;class ResourceSummary$2{static determineResourceType(e){if(!e.resourceType)return"other";return{Stylesheet:"stylesheet",Image:"image",Media:"media",Font:"font",Script:"script",Document:"document"}[e.resourceType]||"other"}static summarize(e,t,r){const a={stylesheet:{count:0,resourceSize:0,transferSize:0},image:{count:0,resourceSize:0,transferSize:0},media:{count:0,resourceSize:0,
987
- transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}},n=TI.getMatchingBudget(r,t);let i=[];if(n?.options?.firstPartyHostnames)i=n.options.firstPartyHostnames;else{const e=EI.getRootDomain(t);i=[`*.${e}`]}return e.filter((e=>("other"!==this.determineResourceType(e)||!e.url.endsWith("/favicon.ico"))&&!SI.isNonNetworkRequest(e))).forEach((e=>{const t=this.determineResourceType(e);a[t].count++,a[t].resourceSize+=e.resourceSize,a[t].transferSize+=e.transferSize,a.total.count++,a.total.resourceSize+=e.resourceSize,a.total.transferSize+=e.transferSize;i.some((t=>{const r=new wI(e.url);return t.startsWith("*.")?r.hostname.endsWith(t.slice(2)):r.hostname===t}))||(a["third-party"].count++,a["third-party"].resourceSize+=e.resourceSize,
988
- a["third-party"].transferSize+=e.transferSize)})),a}static async compute_(e,t){const r=await bI.request(e.devtoolsLog,t);return ResourceSummary$2.summarize(r,e.URL.finalUrl,e.budgets)}}var xI=vI(ResourceSummary$2,["URL","devtoolsLog","budgets"]);const _I=kc,AI=xI,RI=HT,kI=Tu,DI=oi,CI={title:"Performance budget",description:"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",requestCountOverBudget:"{count, plural,\n =1 {1 request}\n other {# requests}\n }"},II=DI.createMessageInstanceIdFn("lighthouse-core/audits/performance-budget.js",CI);yI.exports=class ResourceBudget extends _I{static get meta(){return{id:"performance-budget",title:II(CI.title),description:II(CI.description),scoreDisplayMode:_I.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL"]}}static getRowLabel(e){return{
989
- total:DI.UIStrings.totalResourceType,document:DI.UIStrings.documentResourceType,script:DI.UIStrings.scriptResourceType,stylesheet:DI.UIStrings.stylesheetResourceType,image:DI.UIStrings.imageResourceType,media:DI.UIStrings.mediaResourceType,font:DI.UIStrings.fontResourceType,other:DI.UIStrings.otherResourceType,"third-party":DI.UIStrings.thirdPartyResourceType}[e]}static tableItems(e,t){return Object.keys(t).map((r=>{const a=II(this.getRowLabel(r)),n=t[r].count,i=t[r].transferSize;let o,s;if(e.resourceSizes){const t=e.resourceSizes.find((e=>e.resourceType===r));t&&i>1024*t.budget&&(o=i-1024*t.budget)}if(e.resourceCounts){const t=e.resourceCounts.find((e=>e.resourceType===r));if(t&&n>t.budget){const e=n-t.budget;s=II(CI.requestCountOverBudget,{count:e})}}return{resourceType:r,label:a,requestCount:n,transferSize:i,countOverBudget:s,sizeOverBudget:o}
990
- })).filter((t=>!(!e.resourceSizes||!e.resourceSizes.some((e=>e.resourceType===t.resourceType)))||!(!e.resourceCounts||!e.resourceCounts.some((e=>e.resourceType===t.resourceType))))).sort(((e,t)=>(t.sizeOverBudget||0)-(e.sizeOverBudget||0)))}static async audit(e,t){const r=e.devtoolsLogs[_I.DEFAULT_PASS],a={devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},n=await AI.request(a,t),i=await RI.request({URL:e.URL,devtoolsLog:r},t),o=kI.getMatchingBudget(t.settings.budgets,i.url);if(!o)return{score:0,notApplicable:!0};const s=[{key:"label",itemType:"text",text:II(DI.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:II(DI.UIStrings.columnRequests)},{key:"transferSize",itemType:"bytes",text:II(DI.UIStrings.columnTransferSize)},{key:"countOverBudget",itemType:"text",text:""},{key:"sizeOverBudget",itemType:"bytes",text:II(DI.UIStrings.columnOverBudget)}];return{details:_I.makeTableDetails(s,this.tableItems(o,n)),score:1}}},yI.exports.UIStrings=CI
991
- ;const NI=kc,LI=oi,MI=db,PI=fb,OI=Tb,FI=Uk,UI=vk,jI=LI.createMessageInstanceIdFn("lighthouse-core/audits/predictive-perf.js",{});var BI=class PredictivePerf extends NI{static get meta(){return{id:"predictive-perf",title:"Predicted Performance (beta)",description:"Predicted performance evaluates how your site will perform under a cellular connection on a mobile device.",scoreDisplayMode:NI.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a={trace:e.traces[NI.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[NI.DEFAULT_PASS],gatherContext:r,settings:{}},n=await MI.request(a,t),i=await PI.request(a,t),o=await OI.request(a,t),s=await FI.request(a,t),c=await UI.request(a,t),l={roughEstimateOfFCP:n.timing,optimisticFCP:n.optimisticEstimate.timeInMs,pessimisticFCP:n.pessimisticEstimate.timeInMs,roughEstimateOfFMP:i.timing,optimisticFMP:i.optimisticEstimate.timeInMs,
992
- pessimisticFMP:i.pessimisticEstimate.timeInMs,roughEstimateOfTTI:o.timing,optimisticTTI:o.optimisticEstimate.timeInMs,pessimisticTTI:o.pessimisticEstimate.timeInMs,roughEstimateOfSI:s.timing,optimisticSI:s.optimisticEstimate.timeInMs,pessimisticSI:s.pessimisticEstimate.timeInMs,roughEstimateOfLCP:c.timing,optimisticLCP:c.optimisticEstimate.timeInMs,pessimisticLCP:c.pessimisticEstimate.timeInMs};return{score:NI.computeLogNormalScore({p10:3651,median:1e4},l.roughEstimateOfTTI),numericValue:l.roughEstimateOfTTI,numericUnit:"millisecond",displayValue:jI(LI.UIStrings.ms,{timeInMs:l.roughEstimateOfTTI}),details:{type:"debugdata",items:[l]}}}},$I={exports:{}};const qI=kc,zI=oi,VI=Q_.exports,WI=/^(optional)$/,GI=Lo,HI={title:"Fonts with `font-display: optional` are preloaded",failureTitle:"Fonts with `font-display: optional` are not preloaded",description:"Preload `optional` fonts so first-time visitors may use them. [Learn more](https://web.dev/preload-optional-fonts/)"
993
- },YI=zI.createMessageInstanceIdFn("lighthouse-core/audits/preload-fonts.js",HI);class PreloadFontsAudit extends qI{static get meta(){return{id:"preload-fonts",title:YI(HI.title),failureTitle:YI(HI.failureTitle),description:YI(HI.description),requiredArtifacts:["devtoolsLogs","URL","CSSUsage"]}}static getURLsAttemptedToPreload(e){const t=e.filter((e=>"Font"===e.resourceType)).filter((e=>e.isLinkPreload)).map((e=>e.url));return new Set(t)}static async audit_(e,t){const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await GI.request(r,t),n=VI.findFontDisplayDeclarations(e,WI).passingURLs,i=PreloadFontsAudit.getURLsAttemptedToPreload(a),o=Array.from(n).filter((e=>!i.has(e))).map((e=>({url:e}))),s=[{key:"url",itemType:"url",text:YI(zI.UIStrings.columnURL)}];return{score:o.length>0?0:1,details:qI.makeTableDetails(s,o),notApplicable:0===n.size}}static async audit(){return{score:1,notApplicable:!0}}}$I.exports=PreloadFontsAudit,$I.exports.UIStrings=HI;var KI={exports:{}}
994
- ;const JI=kc,XI=oi,ZI=Ki,QI=HT,eN=vk,tN=Dl,rN=Ib,aN={title:"Preload Largest Contentful Paint image",description:"Preload the image used by the LCP element in order to improve your LCP time. [Learn more](https://web.dev/optimize-lcp/#preload-important-resources)."},nN=XI.createMessageInstanceIdFn("lighthouse-core/audits/preload-lcp-image.js",aN);class PreloadLCPImageAudit extends JI{static get meta(){return{id:"preload-lcp-image",title:nN(aN.title),description:nN(aN.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL","TraceElements","ImageElements"],scoreDisplayMode:JI.SCORING_MODES.NUMERIC}}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!ZI.isNonNetworkRequest(e)&&(!(r.length<=a)&&e.frameId===t.frameId))}static findLCPNode(e,t){let r,a;return e.traverse(((e,n)=>{"network"===e.type&&e.record.url===t&&(r=e,a=n.slice(1).filter((e=>"network"===e.type)))})),{lcpNode:r,path:a}}
995
- static getLCPNodeToPreload(e,t,r,a){if(!r)return{};const n=a.find((e=>e.node.devtoolsNodePath===r.node.devtoolsNodePath));if(!n)return{};const i=n.src,{lcpNode:o,path:s}=PreloadLCPImageAudit.findLCPNode(t,i);if(!o||!s)return{};return{lcpNodeToPreload:PreloadLCPImageAudit.shouldPreloadRequest(o.record,e,s)?o:void 0,initiatorPath:[{url:o.record.url,initiatorType:o.initiatorType},...s.map((e=>({url:e.record.url,initiatorType:e.initiatorType})))]}}static computeWasteWithGraph(e,t,r,a){if(!e||!t)return{wastedMs:0,results:[]};const n=r.cloneWithRelationships(),i=new Set;for(const e of t.getDependencies())i.add(e.id);let o=null,s=null;for(const{node:e}of n.traverseGenerator())"network"===e.type&&(e.isMainDocument()?s=e:e.id===t.id&&(o=e));if(!s)throw new Error("Could not find main document node");if(!o)throw new Error("Could not find the LCP node");o.removeAllDependencies(),o.addDependency(s);const c=a.simulate(r,{flexibleOrdering:!0}),l=a.simulate(n,{flexibleOrdering:!0
996
- }),u=c.nodeTimings.get(t);if(!u)throw new Error("Impossible - node timings should never be undefined");const d=l.nodeTimings.get(o);if(!d)throw new Error("Impossible - node timings should never be undefined");const m=Array.from(l.nodeTimings.keys()).reduce(((e,t)=>e.set(t.id,t)),new Map);let p=0;for(const e of Array.from(i)){const t=m.get(e);if(!t)throw new Error("Impossible - node should never be undefined");const r=l.nodeTimings.get(t)?.endTime||0;p=Math.max(p,r)}const h=u.endTime-Math.max(d.endTime,p);return{wastedMs:h,results:[{node:JI.makeNodeItem(e.node),url:t.record.url,wastedMs:h}]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[PreloadLCPImageAudit.DEFAULT_PASS],n=e.devtoolsLogs[PreloadLCPImageAudit.DEFAULT_PASS],i=e.URL,o={trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},s=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),[c,l,u]=await Promise.all([QI.request({devtoolsLog:n,URL:i},t),eN.request(o,t),tN.request({devtoolsLog:n,
997
- settings:t.settings},t)]),d=l.pessimisticGraph,{lcpNodeToPreload:m,initiatorPath:p}=PreloadLCPImageAudit.getLCPNodeToPreload(c,d,s,e.ImageElements),{results:h,wastedMs:f}=PreloadLCPImageAudit.computeWasteWithGraph(s,m,d,u),y=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:nN(XI.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:nN(XI.UIStrings.columnWastedMs)}],v=JI.makeOpportunityDetails(y,h,f);return p&&(v.debugData={type:"debugdata",initiatorPath:p,pathLength:p.length}),{score:rN.scoreForWastedMs(f),numericValue:f,numericUnit:"millisecond",displayValue:f?nN(XI.UIStrings.displayValueMsSavings,{wastedMs:f}):"",details:v}}}KI.exports=PreloadLCPImageAudit,KI.exports.UIStrings=aN;var iN={exports:{}};const oN=kc,sN=Ib,cN=oi,lN=Yp,uN=Lo,dN=HT,mN=Tb,pN={title:"Avoid multiple page redirects",description:"Redirects introduce additional delays before the page can be loaded. [Learn more](https://web.dev/redirects/)."
998
- },hN=cN.createMessageInstanceIdFn("lighthouse-core/audits/redirects.js",pN);class Redirects extends oN{static get meta(){return{id:"redirects",title:hN(pN.title),description:hN(pN.description),scoreDisplayMode:oN.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["URL","GatherContext","devtoolsLogs","traces"]}}static getDocumentRequestChain(e,t,r){const a=[];for(const e of r.processEvents){if("navigationStart"!==e.name)continue;const r=e.args.data||{};if(!r.documentLoaderURL||!r.isLoadingMainFrame)continue;let n=t.find((e=>e.url===r.documentLoaderURL));for(;n;)a.push(n),n=n.redirectDestination}return a.length?a:(e.redirects||[]).concat(e)}static async audit(e,t){const r=t.settings,a=e.traces[oN.DEFAULT_PASS],n=e.devtoolsLogs[oN.DEFAULT_PASS],i=e.GatherContext,o=await lN.request(a,t),s=await uN.request(n,t),c=await dN.request({URL:e.URL,devtoolsLog:n},t),l={trace:a,devtoolsLog:n,gatherContext:i,settings:r},u=await mN.request(l,t),d=new Map
999
- ;for(const[e,t]of u.pessimisticEstimate.nodeTimings.entries())"network"===e.type&&d.set(e.record.url,t);const m=Redirects.getDocumentRequestChain(c,s,o);let p=0;const h=[];for(let e=0;e<m.length&&!(m.length<2);e++){const t=m[e],a=m[e+1]||t,n=d.get(t.url),i=d.get(a.url);if(!n||!i)throw new Error("Could not find redirects in graph");const o=i.startTime-n.startTime,s=a.startTime-t.startTime,c="simulate"===r.throttlingMethod?o:1e3*s;p+=c,h.push({url:t.url,wastedMs:c})}const f=[{key:"url",valueType:"url",label:hN(cN.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:hN(cN.UIStrings.columnTimeSpent)}],y=oN.makeOpportunityDetails(f,h,p);return{score:m.length<=2?1:sN.scoreForWastedMs(p),numericValue:p,numericUnit:"millisecond",displayValue:p?hN(cN.UIStrings.displayValueMsSavings,{wastedMs:p}):"",details:y}}}iN.exports=Redirects,iN.exports.UIStrings=pN;var gN={exports:{}};const fN=kc,yN=xI,vN=oi,bN={title:"Keep request counts low and transfer sizes small",
1000
- description:"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).",displayValue:"{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"},wN=vN.createMessageInstanceIdFn("lighthouse-core/audits/resource-summary.js",bN);gN.exports=class ResourceSummary extends fN{static get meta(){return{id:"resource-summary",title:wN(bN.title),description:wN(bN.description),scoreDisplayMode:fN.SCORING_MODES.INFORMATIVE,requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[fN.DEFAULT_PASS],a=await yN.request({devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},t),n=[{key:"label",itemType:"text",text:wN(vN.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:wN(vN.UIStrings.columnRequests)},{key:"transferSize",itemType:"bytes",text:wN(vN.UIStrings.columnTransferSize)}],i={
1001
- total:wN(vN.UIStrings.totalResourceType),document:wN(vN.UIStrings.documentResourceType),script:wN(vN.UIStrings.scriptResourceType),stylesheet:wN(vN.UIStrings.stylesheetResourceType),image:wN(vN.UIStrings.imageResourceType),media:wN(vN.UIStrings.mediaResourceType),font:wN(vN.UIStrings.fontResourceType),other:wN(vN.UIStrings.otherResourceType),"third-party":wN(vN.UIStrings.thirdPartyResourceType)},o=Object.keys(a).map((e=>({resourceType:e,label:i[e],requestCount:a[e].count,transferSize:a[e].transferSize}))),s=o.find((e=>"third-party"===e.resourceType))||[],c=o.filter((e=>"third-party"!==e.resourceType)).sort(((e,t)=>t.transferSize-e.transferSize)).concat(s);return{details:fN.makeTableDetails(n,c),score:1,displayValue:wN(bN.displayValue,{requestCount:a.total.count,byteCount:a.total.transferSize})}}},gN.exports.UIStrings=bN;var SN={exports:{}};!function(e){function JPEGEncoder(e){
962
+ debugInfo:{lcpInvalidated:!!s?.lcpInvalidated}}}static async compute_(e,t){return TimingSummary$1.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,t)}}var MD=LD(TimingSummary$1,["devtoolsLog","gatherContext","settings","trace"]);const PD=kc,OD=MD,FD=new Set(["cumulativeLayoutShift","cumulativeLayoutShiftMainFrame","totalCumulativeLayoutShift","observedCumulativeLayoutShift","observedCumulativeLayoutShiftMainFrame","observedTotalCumulativeLayoutShift"]);var UD=class Metrics extends PD{static get meta(){return{id:"metrics",scoreDisplayMode:PD.SCORING_MODES.INFORMATIVE,title:"Metrics",description:"Collects all available metrics.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[PD.DEFAULT_PASS],n=e.devtoolsLogs[PD.DEFAULT_PASS],i=await OD.request({trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},t),o=i.metrics,s=i.debugInfo;for(const[e,t]of Object.entries(o)){const r=e
963
+ ;"number"!=typeof t||FD.has(r)||(o[r]=Math.round(t))}const c={type:"debugdata",items:[o,s]};return{score:1,numericValue:o.interactive||0,numericUnit:"millisecond",details:c}}},jD={exports:{}};const BD=kc,$D=Pk,qD=oi,zD={description:"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more](https://web.dev/cls/)."},VD=qD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/cumulative-layout-shift.js",zD);jD.exports=class CumulativeLayoutShift extends BD{static get meta(){return{id:"cumulative-layout-shift",title:VD(qD.UIStrings.cumulativeLayoutShiftMetric),description:VD(zD.description),scoreDisplayMode:BD.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:.1,median:.25}}static async audit(e,t){const r=e.traces[BD.DEFAULT_PASS],{cumulativeLayoutShift:a,...n}=await $D.request(r,t),i={type:"debugdata",items:[n]};return{score:BD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),
964
+ numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(t.settings.locale),details:i}}},jD.exports.UIStrings=zD;var WD={exports:{}};const HD=kc,GD=ah,YD=oi,KD={description:"Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more](https://web.dev/inp/)."},JD=YD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/experimental-interaction-to-next-paint.js",KD);WD.exports=class ExperimentalInteractionToNextPaint extends HD{static get meta(){return{id:"experimental-interaction-to-next-paint",title:JD(YD.UIStrings.interactionToNextPaint),description:JD(KD.description),scoreDisplayMode:HD.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:200,median:500}}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a={trace:e.traces[HD.DEFAULT_PASS],settings:r
965
+ },n=await GD.request(a,t);if(null===n)return{score:null,notApplicable:!0};const i="FallbackTiming"===n.name?n.duration:n.args.data.duration;return{score:HD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},i),numericValue:i,numericUnit:"millisecond",displayValue:JD(YD.UIStrings.ms,{timeInMs:i})}}},WD.exports.UIStrings=KD;const XD=kc,ZD=mn.throttling.mobileRegular3G,QD=Zw;var eC=class FirstContentfulPaint3G extends XD{static get meta(){return{id:"first-contentful-paint-3g",title:"First Contentful Paint (3G)",description:"First Contentful Paint 3G marks the time at which the first text or image is painted while on a 3G network. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint).",scoreDisplayMode:XD.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:2700,median:4500}}static async audit(e,t){const r=e.GatherContext,a={
966
+ trace:e.traces[XD.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[XD.DEFAULT_PASS],gatherContext:r,settings:{...t.settings,throttlingMethod:"simulate",throttling:ZD}},n=await QD.request(a,t);return{score:XD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},n.timing),numericValue:n.timing,numericUnit:"millisecond",displayValue:`${n.timing} ms`}}},tC={exports:{}};const rC=kc,aC=oi,nC=Zw,iC={description:"First Contentful Paint marks the time at which the first text or image is painted. [Learn more](https://web.dev/first-contentful-paint/)."},oC=aC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-contentful-paint.js",iC);tC.exports=class FirstContentfulPaint extends rC{static get meta(){return{id:"first-contentful-paint",title:oC(aC.UIStrings.firstContentfulPaintMetric),description:oC(iC.description),scoreDisplayMode:rC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{
967
+ mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[rC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[rC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await nC.request(r,t),n=t.options[t.settings.formFactor];return{score:rC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:oC(aC.UIStrings.seconds,{timeInMs:a.timing})}}},tC.exports.UIStrings=iC;var sC={exports:{}};const cC=kc,lC=oi,uC=yk,dC={description:"First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://web.dev/first-meaningful-paint/)."},mC=lC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-meaningful-paint.js",dC);sC.exports=class FirstMeaningfulPaint extends cC{static get meta(){return{id:"first-meaningful-paint",title:mC(lC.UIStrings.firstMeaningfulPaintMetric),description:mC(dC.description),
968
+ scoreDisplayMode:cC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2336,median:4e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[cC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[cC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await uC.request(r,t),n=t.options[t.settings.formFactor];return{score:cC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:mC(lC.UIStrings.seconds,{timeInMs:a.timing})}}},sC.exports.UIStrings=dC;var pC={exports:{}};const hC=kc,gC=oi,fC=Lw,yC={description:"Time to interactive is the amount of time it takes for the page to become fully interactive. [Learn more](https://web.dev/interactive/)."},vC=gC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/interactive.js",yC);pC.exports=class InteractiveMetric extends hC{
969
+ static get meta(){return{id:"interactive",title:vC(gC.UIStrings.interactiveMetric),description:vC(yC.description),scoreDisplayMode:hC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3785,median:7300}},desktop:{scoring:{p10:2468,median:4500}}}}static async audit(e,t){const r={trace:e.traces[hC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[hC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=(await fC.request(r,t)).timing,n=t.options[t.settings.formFactor];return{score:hC.computeLogNormalScore(n.scoring,a),numericValue:a,numericUnit:"millisecond",displayValue:vC(gC.UIStrings.seconds,{timeInMs:a})}}},pC.exports.UIStrings=yC;var bC={exports:{}};const wC=kc,SC=oi,TC=Rk,EC=vi.exports,xC={description:"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more](https://web.dev/lighthouse-largest-contentful-paint/)"
970
+ },_C=SC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/largest-contentful-paint.js",xC);bC.exports=class LargestContentfulPaint extends wC{static get meta(){return{id:"largest-contentful-paint",title:_C(SC.UIStrings.largestContentfulPaintMetric),description:_C(xC.description),scoreDisplayMode:wC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["HostUserAgent","traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2500,median:4e3}},desktop:{scoring:{p10:1200,median:2400}}}}static async audit(e,t){const r={trace:e.traces[wC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[wC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings};let a;try{a=await TC.request(r,t)}catch(t){const r=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!r)throw t;if(Number(r[1])<79&&"NO_LCP"===t.code)throw new EC(EC.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Largest Contentful Paint"});throw t}const n=t.options[t.settings.formFactor];return{
971
+ score:wC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:_C(SC.UIStrings.seconds,{timeInMs:a.timing})}}},bC.exports.UIStrings=xC;var AC={exports:{}};const RC=kc,kC=aD,DC=oi,CC={description:"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more](https://web.dev/lighthouse-max-potential-fid/)."},IC=DC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/max-potential-fid.js",CC);AC.exports=class MaxPotentialFID extends RC{static get meta(){return{id:"max-potential-fid",title:IC(DC.UIStrings.maxPotentialFIDMetric),description:IC(CC.description),scoreDisplayMode:RC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:130,median:250}}static async audit(e,t){const r={trace:e.traces[RC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[RC.DEFAULT_PASS],
972
+ gatherContext:e.GatherContext,settings:t.settings},a=await kC.request(r,t);return{score:RC.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:IC(DC.UIStrings.ms,{timeInMs:a.timing})}}},AC.exports.UIStrings=CC;var NC={exports:{}};const LC=kc,MC=oi,PC=Gk,OC={description:"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://web.dev/speed-index/)."},FC=MC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/speed-index.js",OC);NC.exports=class SpeedIndex extends LC{static get meta(){return{id:"speed-index",title:FC(MC.UIStrings.speedIndexMetric),description:FC(OC.description),scoreDisplayMode:LC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3387,median:5800}},desktop:{scoring:{p10:1311,median:2300}}}}static async audit(e,t){const r={
973
+ trace:e.traces[LC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[LC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await PC.request(r,t),n=t.options[t.settings.formFactor];return{score:LC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:FC(MC.UIStrings.seconds,{timeInMs:a.timing})}}},NC.exports.UIStrings=OC;var UC={exports:{}};const jC=kc,BC=bD,$C=oi,qC={description:"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more](https://web.dev/lighthouse-total-blocking-time/)."},zC=$C.createMessageInstanceIdFn("lighthouse-core/audits/metrics/total-blocking-time.js",qC);UC.exports=class TotalBlockingTime extends jC{static get meta(){return{id:"total-blocking-time",title:zC($C.UIStrings.totalBlockingTimeMetric),description:zC(qC.description),scoreDisplayMode:jC.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}
974
+ static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,t){const r=e.traces[jC.DEFAULT_PASS],a=e.devtoolsLogs[jC.DEFAULT_PASS],n=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:n,settings:t.settings};if("timespan"===n.gatherMode&&"simulate"===t.settings.throttlingMethod)return{score:1,notApplicable:!0};const o=await BC.request(i,t),s=t.options[t.settings.formFactor];return{score:jC.computeLogNormalScore(s.scoring,o.timing),numericValue:o.timing,numericUnit:"millisecond",displayValue:zC($C.UIStrings.ms,{timeInMs:o.timing})}}},UC.exports.UIStrings=qC;const VC=kc,WC=ji,HC=Lo,GC=GT;var YC=class NetworkRequests extends VC{static get meta(){return{id:"network-requests",scoreDisplayMode:VC.SCORING_MODES.INFORMATIVE,title:"Network Requests",description:"Lists the network requests that were made during page load.",requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static async audit(e,t){
975
+ const r=e.devtoolsLogs[VC.DEFAULT_PASS],a=await HC.request(r,t),n=a.reduce(((e,t)=>Math.min(e,t.rendererStartTime)),1/0);let i;if("navigation"===e.GatherContext.gatherMode){const a=await GC.request({devtoolsLog:r,URL:e.URL},t);i=a.frameId}const timeToMs=e=>e<n||!Number.isFinite(e)?void 0:1e3*(e-n),o=a.map((e=>{const t=e.lrStatistics?.endTimeDeltaMs,r=e.lrStatistics?.TCPMs,a=e.lrStatistics?.requestMs,n=e.lrStatistics?.responseMs,o=e.isLinkPreload||void 0,s=i&&e.frameId===i||void 0;return{url:WC.elideDataURI(e.url),protocol:e.protocol,rendererStartTime:timeToMs(e.rendererStartTime),startTime:timeToMs(e.startTime),endTime:timeToMs(e.endTime),finished:e.finished,transferSize:e.transferSize,resourceSize:e.resourceSize,statusCode:e.statusCode,mimeType:e.mimeType,resourceType:e.resourceType,priority:e.priority,isLinkPreload:o,experimentalFromMainFrame:s,lrEndTimeDeltaMs:t,lrTCPMs:r,lrRequestMs:a,lrResponseMs:n}})),s=VC.makeTableDetails([{key:"url",itemType:"url",text:"URL"},{key:"protocol",
976
+ itemType:"text",text:"Protocol"},{key:"startTime",itemType:"ms",granularity:1,text:"Start Time"},{key:"endTime",itemType:"ms",granularity:1,text:"End Time"},{key:"transferSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Transfer Size"},{key:"resourceSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Resource Size"},{key:"statusCode",itemType:"text",text:"Status Code"},{key:"mimeType",itemType:"text",text:"MIME Type"},{key:"resourceType",itemType:"text",text:"Resource Type"}],o),c=Number.isFinite(n)?1e6*n:void 0;return s.debugData={type:"debugdata",networkStartTimeTs:c},{score:1,details:s}}},KC={exports:{}};const JC=kc,XC=oi,ZC=Lo,QC=xl,eI={title:"Network Round Trip Times",description:"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more](https://hpbn.co/primer-on-latency-and-bandwidth/)."
977
+ },tI=XC.createMessageInstanceIdFn("lighthouse-core/audits/network-rtt.js",eI);KC.exports=class NetworkRTT extends JC{static get meta(){return{id:"network-rtt",scoreDisplayMode:JC.SCORING_MODES.INFORMATIVE,title:tI(eI.title),description:tI(eI.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[JC.DEFAULT_PASS];if(!(await ZC.request(r,t)).length)return{score:1,notApplicable:!0};const a=await QC.request(r,t);let n=0;const i=a.rtt,o=[];for(const[e,t]of a.additionalRttByOrigin.entries()){if(!e.startsWith("http"))continue;const r=t+i;o.push({origin:e,rtt:r}),n=Number.isFinite(r)?Math.max(r,n):n}o.sort(((e,t)=>t.rtt-e.rtt));const s=[{key:"origin",itemType:"text",text:tI(XC.UIStrings.columnURL)},{key:"rtt",itemType:"ms",granularity:1,text:tI(XC.UIStrings.columnTimeSpent)}],c=JC.makeTableDetails(s,o);return{score:1,numericValue:n,numericUnit:"millisecond",displayValue:tI(XC.UIStrings.ms,{timeInMs:n}),details:c}}},KC.exports.UIStrings=eI;var rI={
978
+ exports:{}};const aI=kc,nI=oi,iI=Lo,oI=xl,sI={title:"Server Backend Latencies",description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},cI=nI.createMessageInstanceIdFn("lighthouse-core/audits/network-server-latency.js",sI);rI.exports=class NetworkServerLatency extends aI{static get meta(){return{id:"network-server-latency",scoreDisplayMode:aI.SCORING_MODES.INFORMATIVE,title:cI(sI.title),description:cI(sI.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[aI.DEFAULT_PASS];if(!(await iI.request(r,t)).length)return{score:1,notApplicable:!0};const a=await oI.request(r,t);let n=0;const i=[];for(const[e,t]of a.serverResponseTimeByOrigin.entries())e.startsWith("http")&&(n=Math.max(t,n),i.push({origin:e,serverResponseTime:t}))
979
+ ;i.sort(((e,t)=>t.serverResponseTime-e.serverResponseTime));const o=[{key:"origin",itemType:"text",text:cI(nI.UIStrings.columnURL)},{key:"serverResponseTime",itemType:"ms",granularity:1,text:cI(nI.UIStrings.columnTimeSpent)}],s=aI.makeTableDetails(o,i);return{score:Math.max(1-n/500,0),numericValue:n,numericUnit:"millisecond",displayValue:cI(nI.UIStrings.ms,{timeInMs:n}),details:s}}},rI.exports.UIStrings=sI;var lI={exports:{}};const uI=kc,dI=jb,mI=oi,pI={title:"Avoids `unload` event listeners",failureTitle:"Registers an `unload` listener",description:"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Use `pagehide` or `visibilitychange` events instead. [Learn more](https://web.dev/bfcache/#never-use-the-unload-event)"},hI=mI.createMessageInstanceIdFn("lighthouse-core/audits/no-unload-listeners.js",pI);lI.exports=class NoUnloadListeners extends uI{static get meta(){return{id:"no-unload-listeners",
980
+ title:hI(pI.title),failureTitle:hI(pI.failureTitle),description:hI(pI.description),requiredArtifacts:["GlobalListeners","JsUsage","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=e.GlobalListeners.filter((e=>"unload"===e.type));if(!r.length)return{score:1};const a=await dI.request(e,t),n=[{key:"source",itemType:"source-location",text:hI(mI.UIStrings.columnSource)}],i=new Map;for(const[t,r]of Object.entries(e.JsUsage))for(const e of r)i.set(e.scriptId,t);const o=r.map((e=>{const t=i.get(e.scriptId);if(!t)return{source:{type:"url",value:"(unknown)"}};const r=a.find((e=>e.script.src===t));return{source:uI.makeSourceLocation(t,e.lineNumber,e.columnNumber,r)}}));return{score:0,details:uI.makeTableDetails(n,o)}}},lI.exports.UIStrings=pI;var gI={exports:{}};const fI=kc,yI=oi,vI={title:"Avoid non-composited animations",description:"Animations which are not composited can be janky and increase CLS. [Learn more](https://web.dev/non-composited-animations)",
981
+ displayValue:"{itemCount, plural,\n =1 {# animated element found}\n other {# animated elements found}\n }",unsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS Property: {properties}}\n other {Unsupported CSS Properties: {properties}}\n }",transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",unsupportedTimingParameters:"Effect has unsupported timing parameters"},bI=yI.createMessageInstanceIdFn("lighthouse-core/audits/non-composited-animations.js",vI),wI=[{flag:8192,text:vI.unsupportedCSSProperty},{flag:2048,text:vI.transformDependsBoxSize},{flag:4096,text:vI.filterMayMovePixels},{flag:16,text:vI.nonReplaceCompositeMode},{flag:64,text:vI.incompatibleAnimations},{flag:8,text:vI.unsupportedTimingParameters}]
982
+ ;function getActionableFailureReasons(e,t){return wI.filter((t=>e&t.flag)).map((e=>e.text===vI.unsupportedCSSProperty?bI(e.text,{propertyCount:t.length,properties:t.join(", ")}):bI(e.text)))}gI.exports=class NonCompositedAnimations extends fI{static get meta(){return{id:"non-composited-animations",scoreDisplayMode:fI.SCORING_MODES.INFORMATIVE,title:bI(vI.title),description:bI(vI.description),requiredArtifacts:["TraceElements","HostUserAgent"]}}static async audit(e){const t=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!t||Number(t[1])<86)return{score:1,notApplicable:!0};const r=[];let a=!1;e.TraceElements.forEach((e=>{if("animation"!==e.traceEventType)return;const t=e.animations||[],n=new Map;for(const{name:e,failureReasonsMask:r,unsupportedProperties:i}of t){if(!r)continue;const t=getActionableFailureReasons(r,i||[]);for(const r of t){e&&(a=!0);const t=n.get(e)||new Set;t.add(r),n.set(e,t)}}if(!n.size)return;const i=[];for(const[e,t]of n)for(const r of t)i.push({failureReason:r,
983
+ animation:e});r.push({node:fI.makeNodeItem(e.node),subItems:{type:"subitems",items:i}})}));const n=[{key:"node",itemType:"node",subItemsHeading:{key:"failureReason",itemType:"text"},text:bI(yI.UIStrings.columnElement)}];a&&n.push({key:null,itemType:"text",subItemsHeading:{key:"animation",itemType:"text"},text:bI(yI.UIStrings.columnName)});const i=fI.makeTableDetails(n,r);let o;return r.length>0&&(o=bI(vI.displayValue,{itemCount:r.length})),{score:0===r.length?1:0,notApplicable:0===r.length,details:i,displayValue:o}}},gI.exports.UIStrings=vI;var SI={exports:{}};const TI=Ao,EI=Lo,xI=ji,_I=Ki,AI=Tu,{Util:RI}=Ni;class ResourceSummary$2{static determineResourceType(e){if(!e.resourceType)return"other";return{Stylesheet:"stylesheet",Image:"image",Media:"media",Font:"font",Script:"script",Document:"document"}[e.resourceType]||"other"}static summarize(e,t,r){const a={stylesheet:{count:0,resourceSize:0,transferSize:0},image:{count:0,resourceSize:0,transferSize:0},media:{count:0,resourceSize:0,
984
+ transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}},n=AI.getMatchingBudget(r,t);let i=[];if(n?.options?.firstPartyHostnames)i=n.options.firstPartyHostnames;else{const e=RI.getRootDomain(t);i=[`*.${e}`]}return e.filter((e=>("other"!==this.determineResourceType(e)||!e.url.endsWith("/favicon.ico"))&&!_I.isNonNetworkRequest(e))).forEach((e=>{const t=this.determineResourceType(e);a[t].count++,a[t].resourceSize+=e.resourceSize,a[t].transferSize+=e.transferSize,a.total.count++,a.total.resourceSize+=e.resourceSize,a.total.transferSize+=e.transferSize;i.some((t=>{const r=new xI(e.url);return t.startsWith("*.")?r.hostname.endsWith(t.slice(2)):r.hostname===t}))||(a["third-party"].count++,a["third-party"].resourceSize+=e.resourceSize,
985
+ a["third-party"].transferSize+=e.transferSize)})),a}static async compute_(e,t){const r=await EI.request(e.devtoolsLog,t);return ResourceSummary$2.summarize(r,e.URL.finalUrl,e.budgets)}}var kI=TI(ResourceSummary$2,["URL","devtoolsLog","budgets"]);const DI=kc,CI=kI,II=GT,NI=Tu,LI=oi,MI={title:"Performance budget",description:"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",requestCountOverBudget:"{count, plural,\n =1 {1 request}\n other {# requests}\n }"},PI=LI.createMessageInstanceIdFn("lighthouse-core/audits/performance-budget.js",MI);SI.exports=class ResourceBudget extends DI{static get meta(){return{id:"performance-budget",title:PI(MI.title),description:PI(MI.description),scoreDisplayMode:DI.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL"]}}static getRowLabel(e){return{
986
+ total:LI.UIStrings.totalResourceType,document:LI.UIStrings.documentResourceType,script:LI.UIStrings.scriptResourceType,stylesheet:LI.UIStrings.stylesheetResourceType,image:LI.UIStrings.imageResourceType,media:LI.UIStrings.mediaResourceType,font:LI.UIStrings.fontResourceType,other:LI.UIStrings.otherResourceType,"third-party":LI.UIStrings.thirdPartyResourceType}[e]}static tableItems(e,t){return Object.keys(t).map((r=>{const a=PI(this.getRowLabel(r)),n=t[r].count,i=t[r].transferSize;let o,s;if(e.resourceSizes){const t=e.resourceSizes.find((e=>e.resourceType===r));t&&i>1024*t.budget&&(o=i-1024*t.budget)}if(e.resourceCounts){const t=e.resourceCounts.find((e=>e.resourceType===r));if(t&&n>t.budget){const e=n-t.budget;s=PI(MI.requestCountOverBudget,{count:e})}}return{resourceType:r,label:a,requestCount:n,transferSize:i,countOverBudget:s,sizeOverBudget:o}
987
+ })).filter((t=>!(!e.resourceSizes||!e.resourceSizes.some((e=>e.resourceType===t.resourceType)))||!(!e.resourceCounts||!e.resourceCounts.some((e=>e.resourceType===t.resourceType))))).sort(((e,t)=>(t.sizeOverBudget||0)-(e.sizeOverBudget||0)))}static async audit(e,t){const r=e.devtoolsLogs[DI.DEFAULT_PASS],a={devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},n=await CI.request(a,t),i=await II.request({URL:e.URL,devtoolsLog:r},t),o=NI.getMatchingBudget(t.settings.budgets,i.url);if(!o)return{score:0,notApplicable:!0};const s=[{key:"label",itemType:"text",text:PI(LI.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:PI(LI.UIStrings.columnRequests)},{key:"transferSize",itemType:"bytes",text:PI(LI.UIStrings.columnTransferSize)},{key:"countOverBudget",itemType:"text",text:""},{key:"sizeOverBudget",itemType:"bytes",text:PI(LI.UIStrings.columnOverBudget)}];return{details:DI.makeTableDetails(s,this.tableItems(o,n)),score:1}}},SI.exports.UIStrings=MI
988
+ ;const OI=kc,FI=oi,UI=db,jI=fb,BI=Tb,$I=qk,qI=Tk,zI=FI.createMessageInstanceIdFn("lighthouse-core/audits/predictive-perf.js",{});var VI=class PredictivePerf extends OI{static get meta(){return{id:"predictive-perf",title:"Predicted Performance (beta)",description:"Predicted performance evaluates how your site will perform under a cellular connection on a mobile device.",scoreDisplayMode:OI.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a={trace:e.traces[OI.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[OI.DEFAULT_PASS],gatherContext:r,settings:{}},n=await UI.request(a,t),i=await jI.request(a,t),o=await BI.request(a,t),s=await $I.request(a,t),c=await qI.request(a,t),l={roughEstimateOfFCP:n.timing,optimisticFCP:n.optimisticEstimate.timeInMs,pessimisticFCP:n.pessimisticEstimate.timeInMs,roughEstimateOfFMP:i.timing,optimisticFMP:i.optimisticEstimate.timeInMs,
989
+ pessimisticFMP:i.pessimisticEstimate.timeInMs,roughEstimateOfTTI:o.timing,optimisticTTI:o.optimisticEstimate.timeInMs,pessimisticTTI:o.pessimisticEstimate.timeInMs,roughEstimateOfSI:s.timing,optimisticSI:s.optimisticEstimate.timeInMs,pessimisticSI:s.pessimisticEstimate.timeInMs,roughEstimateOfLCP:c.timing,optimisticLCP:c.optimisticEstimate.timeInMs,pessimisticLCP:c.pessimisticEstimate.timeInMs};return{score:OI.computeLogNormalScore({p10:3651,median:1e4},l.roughEstimateOfTTI),numericValue:l.roughEstimateOfTTI,numericUnit:"millisecond",displayValue:zI(FI.UIStrings.ms,{timeInMs:l.roughEstimateOfTTI}),details:{type:"debugdata",items:[l]}}}},WI={exports:{}};const HI=kc,GI=oi,YI=aA.exports,KI=/^(optional)$/,JI=Lo,XI={title:"Fonts with `font-display: optional` are preloaded",failureTitle:"Fonts with `font-display: optional` are not preloaded",description:"Preload `optional` fonts so first-time visitors may use them. [Learn more](https://web.dev/preload-optional-fonts/)"
990
+ },ZI=GI.createMessageInstanceIdFn("lighthouse-core/audits/preload-fonts.js",XI);class PreloadFontsAudit extends HI{static get meta(){return{id:"preload-fonts",title:ZI(XI.title),failureTitle:ZI(XI.failureTitle),description:ZI(XI.description),requiredArtifacts:["devtoolsLogs","URL","CSSUsage"]}}static getURLsAttemptedToPreload(e){const t=e.filter((e=>"Font"===e.resourceType)).filter((e=>e.isLinkPreload)).map((e=>e.url));return new Set(t)}static async audit_(e,t){const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await JI.request(r,t),n=YI.findFontDisplayDeclarations(e,KI).passingURLs,i=PreloadFontsAudit.getURLsAttemptedToPreload(a),o=Array.from(n).filter((e=>!i.has(e))).map((e=>({url:e}))),s=[{key:"url",itemType:"url",text:ZI(GI.UIStrings.columnURL)}];return{score:o.length>0?0:1,details:HI.makeTableDetails(s,o),notApplicable:0===n.size}}static async audit(){return{score:1,notApplicable:!0}}}WI.exports=PreloadFontsAudit,WI.exports.UIStrings=XI;var QI={exports:{}}
991
+ ;const eN=kc,tN=oi,rN=Ki,aN=GT,nN=Tk,iN=Dl,oN=Ib,sN={title:"Preload Largest Contentful Paint image",description:"Preload the image used by the LCP element in order to improve your LCP time. [Learn more](https://web.dev/optimize-lcp/#preload-important-resources)."},cN=tN.createMessageInstanceIdFn("lighthouse-core/audits/preload-lcp-image.js",sN);class PreloadLCPImageAudit extends eN{static get meta(){return{id:"preload-lcp-image",title:cN(sN.title),description:cN(sN.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL","TraceElements","ImageElements"],scoreDisplayMode:eN.SCORING_MODES.NUMERIC}}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!rN.isNonNetworkRequest(e)&&(!(r.length<=a)&&e.frameId===t.frameId))}static findLCPNode(e,t){let r,a;return e.traverse(((e,n)=>{"network"===e.type&&e.record.url===t&&(r=e,a=n.slice(1).filter((e=>"network"===e.type)))})),{lcpNode:r,path:a}}
992
+ static getLCPNodeToPreload(e,t,r,a){if(!r)return{};const n=a.find((e=>e.node.devtoolsNodePath===r.node.devtoolsNodePath));if(!n)return{};const i=n.src,{lcpNode:o,path:s}=PreloadLCPImageAudit.findLCPNode(t,i);if(!o||!s)return{};return{lcpNodeToPreload:PreloadLCPImageAudit.shouldPreloadRequest(o.record,e,s)?o:void 0,initiatorPath:[{url:o.record.url,initiatorType:o.initiatorType},...s.map((e=>({url:e.record.url,initiatorType:e.initiatorType})))]}}static computeWasteWithGraph(e,t,r,a){if(!t)return{wastedMs:0,results:[]};const n=r.cloneWithRelationships(),i=new Set;for(const e of t.getDependencies())i.add(e.id);let o=null,s=null;for(const{node:e}of n.traverseGenerator())"network"===e.type&&(e.isMainDocument()?s=e:e.id===t.id&&(o=e));if(!s)throw new Error("Could not find main document node");if(!o)throw new Error("Could not find the LCP node");o.removeAllDependencies(),o.addDependency(s);const c=a.simulate(r,{flexibleOrdering:!0}),l=a.simulate(n,{flexibleOrdering:!0}),u=c.nodeTimings.get(t)
993
+ ;if(!u)throw new Error("Impossible - node timings should never be undefined");const d=l.nodeTimings.get(o);if(!d)throw new Error("Impossible - node timings should never be undefined");const m=Array.from(l.nodeTimings.keys()).reduce(((e,t)=>e.set(t.id,t)),new Map);let p=0;for(const e of Array.from(i)){const t=m.get(e);if(!t)throw new Error("Impossible - node should never be undefined");const r=l.nodeTimings.get(t)?.endTime||0;p=Math.max(p,r)}const h=u.endTime-Math.max(d.endTime,p);return{wastedMs:h,results:[{node:eN.makeNodeItem(e.node),url:t.record.url,wastedMs:h}]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[PreloadLCPImageAudit.DEFAULT_PASS],n=e.devtoolsLogs[PreloadLCPImageAudit.DEFAULT_PASS],i=e.URL,o={trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},s=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType));if(!s||"image"!==s.type)return{score:null,notApplicable:!0};const[c,l,u]=await Promise.all([aN.request({devtoolsLog:n,URL:i
994
+ },t),nN.request(o,t),iN.request({devtoolsLog:n,settings:t.settings},t)]),d=l.pessimisticGraph,{lcpNodeToPreload:m,initiatorPath:p}=PreloadLCPImageAudit.getLCPNodeToPreload(c,d,s,e.ImageElements),{results:h,wastedMs:f}=PreloadLCPImageAudit.computeWasteWithGraph(s,m,d,u),y=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:cN(tN.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:cN(tN.UIStrings.columnWastedMs)}],v=eN.makeOpportunityDetails(y,h,f);return p&&(v.debugData={type:"debugdata",initiatorPath:p,pathLength:p.length}),{score:oN.scoreForWastedMs(f),numericValue:f,numericUnit:"millisecond",displayValue:f?cN(tN.UIStrings.displayValueMsSavings,{wastedMs:f}):"",details:v}}}QI.exports=PreloadLCPImageAudit,QI.exports.UIStrings=sN;var lN={exports:{}};const uN=kc,dN=Ib,mN=oi,pN=Yp,hN=Lo,gN=GT,fN=Tb,yN={title:"Avoid multiple page redirects",
995
+ description:"Redirects introduce additional delays before the page can be loaded. [Learn more](https://web.dev/redirects/)."},vN=mN.createMessageInstanceIdFn("lighthouse-core/audits/redirects.js",yN);class Redirects extends uN{static get meta(){return{id:"redirects",title:vN(yN.title),description:vN(yN.description),scoreDisplayMode:uN.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["URL","GatherContext","devtoolsLogs","traces"]}}static getDocumentRequestChain(e,t,r){const a=[];for(const e of r.processEvents){if("navigationStart"!==e.name)continue;const r=e.args.data||{};if(!r.documentLoaderURL||!r.isLoadingMainFrame)continue;let n=t.find((e=>e.url===r.documentLoaderURL));for(;n;)a.push(n),n=n.redirectDestination}return a.length?a:(e.redirects||[]).concat(e)}static async audit(e,t){const r=t.settings,a=e.traces[uN.DEFAULT_PASS],n=e.devtoolsLogs[uN.DEFAULT_PASS],i=e.GatherContext,o=await pN.request(a,t),s=await hN.request(n,t),c=await gN.request({URL:e.URL,
996
+ devtoolsLog:n},t),l={trace:a,devtoolsLog:n,gatherContext:i,settings:r},u=await fN.request(l,t),d=new Map;for(const[e,t]of u.pessimisticEstimate.nodeTimings.entries())"network"===e.type&&d.set(e.record.url,t);const m=Redirects.getDocumentRequestChain(c,s,o);let p=0;const h=[];for(let e=0;e<m.length&&!(m.length<2);e++){const t=m[e],a=m[e+1]||t,n=d.get(t.url),i=d.get(a.url);if(!n||!i)throw new Error("Could not find redirects in graph");const o=i.startTime-n.startTime,s=a.startTime-t.startTime,c="simulate"===r.throttlingMethod?o:1e3*s;p+=c,h.push({url:t.url,wastedMs:c})}const f=[{key:"url",valueType:"url",label:vN(mN.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:vN(mN.UIStrings.columnTimeSpent)}],y=uN.makeOpportunityDetails(f,h,p);return{score:m.length<=2?1:dN.scoreForWastedMs(p),numericValue:p,numericUnit:"millisecond",displayValue:p?vN(mN.UIStrings.displayValueMsSavings,{wastedMs:p}):"",details:y}}}lN.exports=Redirects,lN.exports.UIStrings=yN;var bN={exports:{}}
997
+ ;const wN=kc,SN=kI,TN=oi,EN={title:"Keep request counts low and transfer sizes small",description:"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).",displayValue:"{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"},xN=TN.createMessageInstanceIdFn("lighthouse-core/audits/resource-summary.js",EN);bN.exports=class ResourceSummary extends wN{static get meta(){return{id:"resource-summary",title:xN(EN.title),description:xN(EN.description),scoreDisplayMode:wN.SCORING_MODES.INFORMATIVE,requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[wN.DEFAULT_PASS],a=await SN.request({devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},t),n=[{key:"label",itemType:"text",text:xN(TN.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:xN(TN.UIStrings.columnRequests)},{
998
+ key:"transferSize",itemType:"bytes",text:xN(TN.UIStrings.columnTransferSize)}],i={total:xN(TN.UIStrings.totalResourceType),document:xN(TN.UIStrings.documentResourceType),script:xN(TN.UIStrings.scriptResourceType),stylesheet:xN(TN.UIStrings.stylesheetResourceType),image:xN(TN.UIStrings.imageResourceType),media:xN(TN.UIStrings.mediaResourceType),font:xN(TN.UIStrings.fontResourceType),other:xN(TN.UIStrings.otherResourceType),"third-party":xN(TN.UIStrings.thirdPartyResourceType)},o=Object.keys(a).map((e=>({resourceType:e,label:i[e],requestCount:a[e].count,transferSize:a[e].transferSize}))),s=o.find((e=>"third-party"===e.resourceType))||[],c=o.filter((e=>"third-party"!==e.resourceType)).sort(((e,t)=>t.transferSize-e.transferSize)).concat(s);return{details:wN.makeTableDetails(n,c),score:1,displayValue:xN(EN.displayValue,{requestCount:a.total.count,byteCount:a.total.transferSize})}}},bN.exports.UIStrings=EN;var _N={exports:{}};!function(e){function JPEGEncoder(e){
1002
999
  var t,r,a,n,i,o=Math.floor,s=new Array(64),c=new Array(64),l=new Array(64),u=new Array(64),d=new Array(65535),m=new Array(65535),p=new Array(64),h=new Array(64),f=[],y=0,v=7,b=new Array(64),w=new Array(64),S=new Array(64),T=new Array(256),E=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],R=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],k=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],D=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],N=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250]
1003
1000
  ;function computeHuffmanTbl(e,t){for(var r=0,a=0,n=new Array,i=1;i<=16;i++){for(var o=1;o<=e[i];o++)n[t[a]]=[],n[t[a]][0]=r,n[t[a]][1]=i,a++,r++;r*=2}return n}function writeBits(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1<<r&&(y|=1<<v),r--,--v<0&&(255==y?(writeByte(255),writeByte(0)):writeByte(y),v=7,y=0)}function writeByte(e){f.push(e)}function writeWord(e){writeByte(e>>8&255),writeByte(255&e)}function processDU(e,t,r,a,n){for(var i,o=n[0],s=n[240],c=function fDCTQuant(e,t){var r,a,n,i,o,s,c,l,u,d,m=0;for(u=0;u<8;++u){r=e[m],a=e[m+1],n=e[m+2],i=e[m+3],o=e[m+4],s=e[m+5],c=e[m+6];var h=r+(l=e[m+7]),f=r-l,y=a+c,v=a-c,b=n+s,w=n-s,S=i+o,T=i-o,E=h+S,x=h-S,_=y+b,A=y-b;e[m]=E+_,e[m+4]=E-_;var R=.707106781*(A+x);e[m+2]=x+R,e[m+6]=x-R;var k=.382683433*((E=T+w)-(A=v+f)),D=.5411961*E+k,C=1.306562965*A+k,I=.707106781*(_=w+v),N=f+I,L=f-I;e[m+5]=L+D,e[m+3]=L-D,e[m+1]=N+C,e[m+7]=N-C,m+=8}for(m=0,u=0;u<8;++u){r=e[m],a=e[m+8],n=e[m+16],i=e[m+24],o=e[m+32],s=e[m+40],c=e[m+48]
1004
- ;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var G=.707106781*(W+z);e[m+16]=z+G,e[m+48]=z-G;var H=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+H,K=1.306562965*W+H,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
1001
+ ;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var H=.707106781*(W+z);e[m+16]=z+H,e[m+48]=z-H;var G=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+G,K=1.306562965*W+G,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
1005
1002
  for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var a=o((t[r]*e+50)/100);a<1?a=1:a>255&&(a=255),s[x[r]]=a}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var d=o((n[i]*e+50)/100);d<1?d=1:d>255&&(d=255),c[x[i]]=d}for(var m=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,h=0;h<8;h++)for(var f=0;f<8;f++)l[p]=1/(s[x[p]]*m[h]*m[f]*8),u[p]=1/(c[x[p]]*m[h]*m[f]*8),p++})(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),i=e}}this.encode=function(e,i){(new Date).getTime(),i&&setQuality(i),f=new Array,y=0,v=7,writeWord(65496),function writeAPP0(){writeWord(65504),writeWord(16),writeByte(74),writeByte(70),writeByte(73),
1006
1003
  writeByte(70),writeByte(0),writeByte(1),writeByte(1),writeByte(0),writeWord(1),writeWord(1),writeByte(0),writeByte(0)}(),function writeAPP1(e){if(e){writeWord(65505),69===e[0]&&120===e[1]&&105===e[2]&&102===e[3]?writeWord(e.length+2):(writeWord(e.length+5+2),writeByte(69),writeByte(120),writeByte(105),writeByte(102),writeByte(0));for(var t=0;t<e.length;t++)writeByte(e[t])}}(e.exifBuffer),function writeDQT(){writeWord(65499),writeWord(132),writeByte(0);for(var e=0;e<64;e++)writeByte(s[e]);writeByte(1);for(var t=0;t<64;t++)writeByte(c[t])}(),function writeSOF0(e,t){writeWord(65472),writeWord(17),writeByte(8),writeWord(t),writeWord(e),writeByte(3),writeByte(1),writeByte(17),writeByte(0),writeByte(2),writeByte(17),writeByte(1),writeByte(3),writeByte(17),writeByte(1)}(e.width,e.height),function writeDHT(){writeWord(65476),writeWord(418),writeByte(0);for(var e=0;e<16;e++)writeByte(_[e+1]);for(var t=0;t<=11;t++)writeByte(A[t]);writeByte(16);for(var r=0;r<16;r++)writeByte(R[r+1])
1007
1004
  ;for(var a=0;a<=161;a++)writeByte(k[a]);writeByte(1);for(var n=0;n<16;n++)writeByte(D[n+1]);for(var i=0;i<=11;i++)writeByte(C[i]);writeByte(17);for(var o=0;o<16;o++)writeByte(I[o+1]);for(var s=0;s<=161;s++)writeByte(N[s])}(),function writeSOS(){writeWord(65498),writeWord(12),writeByte(3),writeByte(1),writeByte(0),writeByte(2),writeByte(17),writeByte(3),writeByte(17),writeByte(0),writeByte(63),writeByte(0)}();var o=0,d=0,m=0;y=0,v=7,this.encode.displayName="_encode_";for(var p,h,T,x,L,M,P,O,F,U=e.data,j=e.width,B=e.height,$=4*j,q=0;q<B;){for(p=0;p<$;){for(M=L=$*q+p,P=-1,O=0,F=0;F<64;F++)M=L+(O=F>>3)*$+(P=4*(7&F)),q+O>=B&&(M-=$*(q+1+O-B)),p+P>=$&&(M-=p+P-$+4),h=U[M++],T=U[M++],x=U[M++],b[F]=(E[h]+E[T+256>>0]+E[x+512>>0]>>16)-128,w[F]=(E[h+768>>0]+E[T+1024>>0]+E[x+1280>>0]>>16)-128,S[F]=(E[h+1280>>0]+E[T+1536>>0]+E[x+1792>>0]>>16)-128;o=processDU(b,l,o,t,a),d=processDU(w,u,d,r,n),m=processDU(S,u,m,r,n),p+=32}q+=8}if(v>=0){var z=[];z[1]=v+1,z[0]=(1<<v+1)-1,writeBits(z)}
1008
- return writeWord(65497),Buffer$2.from(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(SN);var TN={exports:{}};!function(e){
1005
+ return writeWord(65497),Buffer$2.from(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(_N);var AN={exports:{}};!function(e){
1009
1006
  var t=function jpegImage(){var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,a=3406,n=2276,i=1567,o=3784,s=5793,c=2896;function constructor(){}function buildHuffmanTable(e,t){for(var r,a,n=0,i=[],o=16;o>0&&!e[o-1];)o--;i.push({children:[],index:0});var s,c=i[0];for(r=0;r<o;r++){for(a=0;a<e[r];a++){for((c=i.pop()).children[c.index]=t[n];c.index>0;){if(0===i.length)throw new Error("Could not recreate Huffman Table");c=i.pop()}for(c.index++,i.push(c);i.length<=r;)i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s;n++}r+1<o&&(i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s)}return i[0].children}function decodeScan(t,r,a,n,i,o,s,c,l,u){a.precision,a.samplesPerLine,a.scanLines;var d=a.mcusPerLine,m=a.progressive;a.maxH,a.maxV;var p=r,h=0,f=0;function readBit(){if(f>0)return f--,h>>f&1
1010
1007
  ;if(255==(h=t[r++])){var e=t[r++];if(e)throw new Error("unexpected marker: "+(h<<8|e).toString(16))}return f=7,h>>>7}function decodeHuffman(e){for(var t,r=e;null!==(t=readBit());){if("number"==typeof(r=r[t]))return r;if("object"!=typeof r)throw new Error("invalid huffman sequence")}return null}function receive(e){for(var t=0;e>0;){var r=readBit();if(null===r)return;t=t<<1|r,e--}return t}function receiveAndExtend(e){var t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}var y=0;var v,b=0;function decodeMcu(e,t,r,a,n){var i=r%d,o=(r/d|0)*e.v+a,s=i*e.h+n;void 0===e.blocks[o]&&u.tolerantDecoding||t(e,e.blocks[o][s])}function decodeBlock(e,t,r){var a=r/e.blocksPerLine|0,n=r%e.blocksPerLine;void 0===e.blocks[a]&&u.tolerantDecoding||t(e,e.blocks[a][n])}var w,S,T,E,x,_,A=n.length;_=m?0===o?0===c?function decodeDCFirst(e,t){var r=decodeHuffman(e.huffmanTableDC),a=0===r?0:receiveAndExtend(r)<<l;t[0]=e.pred+=a}:function decodeDCSuccessive(e,t){t[0]|=readBit()<<l}:0===c?function decodeACFirst(t,r){
1011
1008
  if(y>0)y--;else for(var a=o,n=s;a<=n;){var i=decodeHuffman(t.huffmanTableAC),c=15&i,u=i>>4;if(0!==c)r[e[a+=u]]=receiveAndExtend(c)*(1<<l),a++;else{if(u<15){y=receive(u)+(1<<u)-1;break}a+=16}}}:function decodeACSuccessive(t,r){for(var a=o,n=s,i=0;a<=n;){var c=e[a],u=r[c]<0?-1:1;switch(b){case 0:var d=decodeHuffman(t.huffmanTableAC),m=15&d;if(i=d>>4,0===m)i<15?(y=receive(i)+(1<<i),b=4):(i=16,b=1);else{if(1!==m)throw new Error("invalid ACn encoding");v=receiveAndExtend(m),b=i?2:3}continue;case 1:case 2:r[c]?r[c]+=(readBit()<<l)*u:0==--i&&(b=2==b?3:0);break;case 3:r[c]?r[c]+=(readBit()<<l)*u:(r[c]=v<<l,b=0);break;case 4:r[c]&&(r[c]+=(readBit()<<l)*u)}a++}4===b&&0==--y&&(b=0)}:function decodeBaseline(t,r){var a=decodeHuffman(t.huffmanTableDC),n=0===a?0:receiveAndExtend(a);r[0]=t.pred+=n;for(var i=1;i<64;){var o=decodeHuffman(t.huffmanTableAC),s=15&o,c=o>>4;if(0!==s)r[e[i+=c]]=receiveAndExtend(s),i++;else{if(c<15)break;i+=16}}};var R,k,D,C,I=0
@@ -1019,213 +1016,213 @@ n.samplesPerLine=readUint16(),n.components={},n.componentsOrder=[];var w=n.scanL
1019
1016
  var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x=this.width/e,_=this.height/t,A=0,R=e*t*this.components.length;requestMemoryAllocation(R);var k=new Uint8Array(R);switch(this.components.length){case 1:for(r=this.components[0],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m;break;case 2:for(r=this.components[0],a=this.components[1],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m,m=s[0|u*a.scaleX*x],k[A++]=m;break;case 3:for(E=!0,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],w=clampTo8bit(m+1.402*((h=c[0|u*n.scaleX*x])-128)),S=clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),
1020
1017
  T=clampTo8bit(m+1.772*(p-128))):(w=o[0|u*r.scaleX*x],S=s[0|u*a.scaleX*x],T=c[0|u*n.scaleX*x]),k[A++]=w,k[A++]=S,k[A++]=T;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(E=!1,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],i=this.components[3],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],l=i.lines[0|d*i.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],h=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x],y=255-clampTo8bit(m+1.402*(h-128)),v=255-clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),b=255-clampTo8bit(m+1.772*(p-128))):(y=o[0|u*r.scaleX*x],v=s[0|u*a.scaleX*x],b=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x]),k[A++]=255-y,k[A++]=255-v,k[A++]=255-b,k[A++]=255-f;break;default:throw new Error("Unsupported color mode")}return k},copyToImageData:function copyToImageData(e,t){
1021
1018
  var r,a,n,i,o,s,c,l,u,d=e.width,m=e.height,p=e.data,h=this.getData(d,m),f=0,y=0;switch(this.components.length){case 1:for(a=0;a<m;a++)for(r=0;r<d;r++)n=h[f++],p[y++]=n,p[y++]=n,p[y++]=n,t&&(p[y++]=255);break;case 3:for(a=0;a<m;a++)for(r=0;r<d;r++)c=h[f++],l=h[f++],u=h[f++],p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;case 4:for(a=0;a<m;a++)for(r=0;r<d;r++)o=h[f++],s=h[f++],n=h[f++],c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}();e.exports=function decode(e,r={}){
1022
- var a={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...r},n=new Uint8Array(e),i=new t;i.opts=a,t.resetMaxMemoryUsage(1024*a.maxMemoryUsageInMB*1024),i.parse(n);var o=a.formatAsRGBA?4:3,s=i.width*i.height*o;try{t.requestMemoryAllocation(s);var c={width:i.width,height:i.height,exifBuffer:i.exifBuffer,data:a.useTArray?new Uint8Array(s):Buffer$2.alloc(s)};i.comments.length>0&&(c.comments=i.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+s):e}return i.copyToImageData(c,a.formatAsRGBA),c}}(TN);var EN={encode:SN.exports,decode:TN.exports};const xN=kc,_N=vi.exports,AN=EN,RN=ik;class ScreenshotThumbnails extends xN{static get meta(){return{id:"screenshot-thumbnails",scoreDisplayMode:xN.SCORING_MODES.INFORMATIVE,title:"Screenshot Thumbnails",description:"This is what the load of your site looked like.",requiredArtifacts:["traces","GatherContext"]}}
1023
- static scaleImageToThumbnail(e){const t=120,r=e.width/t,a=Math.floor(e.height/r),n=new Uint8Array(t*a*4);for(let i=0;i<t;i++)for(let o=0;o<a;o++){const a=Math.floor(i*r),s=4*(Math.floor(o*r)*e.width+a),c=4*(o*t+i);n[c]=e.data[s],n[c+1]=e.data[s+1],n[c+2]=e.data[s+2],n[c+3]=e.data[s+3]}return{width:t,height:a,data:n}}static async _audit(e,t){const r=e.traces[xN.DEFAULT_PASS],a=new Map,n=await RN.request(r,t),i=t.options.minimumTimelineDuration||3e3,o=[],s=n.frames.filter((e=>!e.isProgressInterpolated())),c=n.complete||Math.max(...n.frames.map((e=>e.getTimeStamp()-n.beginning))),l=Math.max(c,i);if(!s.length||!Number.isFinite(l))throw new _N(_N.errors.INVALID_SPEEDLINE);for(let e=1;e<=10;e++){const t=n.beginning+l*e/10;let r,i=null;10===e?i=s[s.length-1]:s.forEach((e=>{e.getTimeStamp()<=t&&(i=e)}));const c=a.get(i);if(c)r=c;else{const e=i.getParsedImage(),t=ScreenshotThumbnails.scaleImageToThumbnail(e);r=AN.encode(t,90).data.toString("base64"),a.set(i,r)}o.push({
1024
- timing:Math.round(t-n.beginning),timestamp:1e3*t,data:`data:image/jpeg;base64,${r}`})}return{score:1,details:{type:"filmstrip",scale:l,items:o}}}static async audit(e,t){try{return await this._audit(e,t)}catch(t){if(new Set([_N.errors.NO_SCREENSHOTS.code,_N.errors.SPEEDINDEX_OF_ZERO.code,_N.errors.NO_SPEEDLINE_FRAMES.code,_N.errors.INVALID_SPEEDLINE.code]).has(t.code)&&"timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw t}}}var kN=ScreenshotThumbnails;const DN=kc,CN=jb,IN=zS,NN=qb;class ScriptTreemapDataAudit extends DN{static get meta(){return{id:"script-treemap-data",scoreDisplayMode:DN.SCORING_MODES.INFORMATIVE,title:"Script Treemap Data",description:"Used for treemap app",requiredArtifacts:["traces","devtoolsLogs","SourceMaps","ScriptElements","JsUsage","URL"]}}static makeScriptNode(e,t,r){function newNode(e){return{name:e,resourceBytes:0}}const a=newNode(t);function addAllNodesInSourcePath(e,r){let n=a;a.resourceBytes+=r.resourceBytes,
1019
+ var a={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...r},n=new Uint8Array(e),i=new t;i.opts=a,t.resetMaxMemoryUsage(1024*a.maxMemoryUsageInMB*1024),i.parse(n);var o=a.formatAsRGBA?4:3,s=i.width*i.height*o;try{t.requestMemoryAllocation(s);var c={width:i.width,height:i.height,exifBuffer:i.exifBuffer,data:a.useTArray?new Uint8Array(s):Buffer$2.alloc(s)};i.comments.length>0&&(c.comments=i.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+s):e}return i.copyToImageData(c,a.formatAsRGBA),c}}(AN);var RN={encode:_N.exports,decode:AN.exports};const kN=kc,DN=vi.exports,CN=RN,IN=lk;class ScreenshotThumbnails extends kN{static get meta(){return{id:"screenshot-thumbnails",scoreDisplayMode:kN.SCORING_MODES.INFORMATIVE,title:"Screenshot Thumbnails",description:"This is what the load of your site looked like.",requiredArtifacts:["traces","GatherContext"]}}
1020
+ static scaleImageToThumbnail(e){const t=120,r=e.width/t,a=Math.floor(e.height/r),n=new Uint8Array(t*a*4);for(let i=0;i<t;i++)for(let o=0;o<a;o++){const a=Math.floor(i*r),s=4*(Math.floor(o*r)*e.width+a),c=4*(o*t+i);n[c]=e.data[s],n[c+1]=e.data[s+1],n[c+2]=e.data[s+2],n[c+3]=e.data[s+3]}return{width:t,height:a,data:n}}static async _audit(e,t){const r=e.traces[kN.DEFAULT_PASS],a=new Map,n=await IN.request(r,t),i=t.options.minimumTimelineDuration||3e3,o=[],s=n.frames.filter((e=>!e.isProgressInterpolated())),c=n.complete||Math.max(...n.frames.map((e=>e.getTimeStamp()-n.beginning))),l=Math.max(c,i);if(!s.length||!Number.isFinite(l))throw new DN(DN.errors.INVALID_SPEEDLINE);for(let e=1;e<=10;e++){const t=n.beginning+l*e/10;let r,i=null;10===e?i=s[s.length-1]:s.forEach((e=>{e.getTimeStamp()<=t&&(i=e)}));const c=a.get(i);if(c)r=c;else{const e=i.getParsedImage(),t=ScreenshotThumbnails.scaleImageToThumbnail(e);r=CN.encode(t,90).data.toString("base64"),a.set(i,r)}o.push({
1021
+ timing:Math.round(t-n.beginning),timestamp:1e3*t,data:`data:image/jpeg;base64,${r}`})}return{score:1,details:{type:"filmstrip",scale:l,items:o}}}static async audit(e,t){try{return await this._audit(e,t)}catch(t){if(new Set([DN.errors.NO_SCREENSHOTS.code,DN.errors.SPEEDINDEX_OF_ZERO.code,DN.errors.NO_SPEEDLINE_FRAMES.code,DN.errors.INVALID_SPEEDLINE.code]).has(t.code)&&"timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw t}}}var NN=ScreenshotThumbnails;const LN=kc,MN=jb,PN=zS,ON=qb;class ScriptTreemapDataAudit extends LN{static get meta(){return{id:"script-treemap-data",scoreDisplayMode:LN.SCORING_MODES.INFORMATIVE,title:"Script Treemap Data",description:"Used for treemap app",requiredArtifacts:["traces","devtoolsLogs","SourceMaps","ScriptElements","JsUsage","URL"]}}static makeScriptNode(e,t,r){function newNode(e){return{name:e,resourceBytes:0}}const a=newNode(t);function addAllNodesInSourcePath(e,r){let n=a;a.resourceBytes+=r.resourceBytes,
1025
1022
  r.unusedBytes&&(a.unusedBytes=(a.unusedBytes||0)+r.unusedBytes);const i=e.replace(t,"").split(/\/+/);i.forEach(((e,t)=>{if(0===e.length)return;const a=t===i.length-1;let o=n.children&&n.children.find((t=>t.name===e));o||(o=newNode(e),n.children=n.children||[],n.children.push(o)),n=o,n.resourceBytes+=r.resourceBytes,r.unusedBytes&&(n.unusedBytes=(n.unusedBytes||0)+r.unusedBytes),a&&void 0!==r.duplicatedNormalizedModuleName&&(n.duplicatedNormalizedModuleName=r.duplicatedNormalizedModuleName)}))}for(const[e,t]of Object.entries(r))addAllNodesInSourcePath(e,t);if(function collapseAll(e){for(;e.children&&1===e.children.length;)e.name+="/"+e.children[0].name,e.children=e.children[0].children;if(e.children)for(const t of e.children)collapseAll(t)}(a),!a.name)return{...a,name:e,children:a.children};const n={...a};return n.name=e,n.children=[a],n}static async makeNodes(e,t){const r=[];let a=0;for(const t of e.ScriptElements)t.src||(a+=(t.content||"").length);if(a){const t=e.URL.finalUrl;r.push({
1026
- name:t,resourceBytes:a})}const n=await CN.request(e,t),i=await NN.request(e,t);for(const a of e.ScriptElements){if(!a.src)continue;const o=a.src,s=n.find((e=>a.src===e.script.src)),c=e.JsUsage[a.src]||[];if(!s&&0===c.length){r.push({name:o,resourceBytes:a.content?.length||0});continue}const l=await IN.request({url:a.src,scriptCoverages:c,bundle:s},t);let u;if(s&&!("errorMessage"in s.sizes)){const e={};for(const t of Object.keys(s.sizes.files)){const r={resourceBytes:s.sizes.files[t]};l.sourcesWastedBytes&&(r.unusedBytes=l.sourcesWastedBytes[t]);let a=t;s.rawMap.sourceRoot&&t.startsWith(s.rawMap.sourceRoot)&&(a=t.replace(s.rawMap.sourceRoot,""));const n=NN.normalizeSource(a);i.has(n)&&(r.duplicatedNormalizedModuleName=n),e[t]=r}if(s.sizes.unmappedBytes){const t={resourceBytes:s.sizes.unmappedBytes};l.sourcesWastedBytes&&(t.unusedBytes=l.sourcesWastedBytes["(unmapped)"]),e["(unmapped)"]=t}u=this.makeScriptNode(a.src,s.rawMap.sourceRoot||"",e)}else u={name:o,resourceBytes:l.totalBytes,
1027
- unusedBytes:l.wastedBytes};r.push(u)}return r}static async audit(e,t){return{score:1,details:{type:"treemap-data",nodes:await ScriptTreemapDataAudit.makeNodes(e,t)}}}}var LN=ScriptTreemapDataAudit,MN={exports:{}};const PN=kc,ON=ji,FN=HT,UN={title:"Document has a valid `rel=canonical`",failureTitle:"Document does not have a valid `rel=canonical`",description:"Canonical links suggest which URL to show in search results. [Learn more](https://web.dev/canonical/).",explanationConflict:"Multiple conflicting URLs ({urlList})",explanationInvalid:"Invalid URL ({url})",explanationRelative:"Is not an absolute URL ({url})",explanationPointsElsewhere:"Points to another `hreflang` location ({url})",explanationRoot:"Points to the domain's root URL (the homepage), instead of an equivalent page of content"},jN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/canonical.js",UN);class Canonical extends PN{static get meta(){return{id:"canonical",title:jN(UN.title),failureTitle:jN(UN.failureTitle),
1028
- description:jN(UN.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL","devtoolsLogs"]}}static collectCanonicalURLs(e){const t=new Set,r=new Set;let a,n;for(const i of e)if("body"!==i.source)if("canonical"===i.rel){if(!i.hrefRaw)continue;i.href?ON.isValid(i.hrefRaw)?t.add(i.href):n=i:a=i}else"alternate"===i.rel&&i.href&&i.hreflang&&r.add(i.href);return{uniqueCanonicalURLs:t,hreflangURLs:r,invalidCanonicalLink:a,relativeCanonicallink:n}}static findInvalidCanonicalURLReason(e){const{uniqueCanonicalURLs:t,invalidCanonicalLink:r,relativeCanonicallink:a}=e;if(r)return{score:0,explanation:jN(UN.explanationInvalid,{url:r.hrefRaw})};if(a)return{score:0,explanation:jN(UN.explanationRelative,{url:a.hrefRaw})};const n=Array.from(t);return 0===n.length?{score:1,notApplicable:!0}:n.length>1?{score:0,explanation:jN(UN.explanationConflict,{urlList:n.join(", ")})}:void 0}static findCommonCanonicalURLMistakes(e,t,r){const{hreflangURLs:a}=e
1029
- ;return a.has(r.href)&&a.has(t.href)&&r.href!==t.href?{score:0,explanation:jN(UN.explanationPointsElsewhere,{url:r.href})}:t.origin===r.origin&&"/"===t.pathname&&"/"!==r.pathname?{score:0,explanation:jN(UN.explanationRoot)}:void 0}static async audit(e,t){const r=e.devtoolsLogs[PN.DEFAULT_PASS],a=await FN.request({devtoolsLog:r,URL:e.URL},t),n=new ON(a.url),i=Canonical.collectCanonicalURLs(e.LinkElements),o=Canonical.findInvalidCanonicalURLReason(i);if(o)return o;const s=new ON([...i.uniqueCanonicalURLs][0]),c=Canonical.findCommonCanonicalURLMistakes(i,s,n);return c||{score:1}}}MN.exports=Canonical,MN.exports.UIStrings=UN;var BN={exports:{}};const $N=kc,qN={title:"Links are crawlable",failureTitle:"Links are not crawlable",
1030
- description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},zN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/crawlable-anchors.js",qN);BN.exports=class CrawlableAnchors extends $N{static get meta(){return{id:"crawlable-anchors",title:zN(qN.title),failureTitle:zN(qN.failureTitle),description:zN(qN.description),requiredArtifacts:["AnchorElements","URL"]}}static audit({AnchorElements:e,URL:t}){const r=e.filter((({rawHref:e,name:r="",role:a=""})=>{if(e=e.replace(/\s/g,""),r=r.trim(),(a=a.trim()).length>0)return;if(e.startsWith("mailto:"))return;if(e.startsWith("file:"))return!0;if(!(r.length>0)){if(""===e)return!0;if(/javascript:void(\(|)0(\)|)/.test(e))return!0;try{new URL(e,t.finalUrl)}catch(e){return!0}}})),a=[{
1031
- key:"node",itemType:"node",text:zN(qN.columnFailingLink)}],n=r.map((e=>({node:$N.makeNodeItem(e.node)})));return{score:Number(0===r.length),details:$N.makeTableDetails(a,n)}}},BN.exports.UIStrings=qN;var VN={exports:{}},WN={};function min(e,t){return null===e?t:null===t?e:Math.min(e,t)}function max(e,t){return null===e?t:null===t?e:Math.max(e,t)}function translateLengthProperty(e,t,r){return"number"==typeof e?e>=0?clamp(e,1,1e4):void 0:"device-width"===e?100*t:"device-height"===e?100*r:1}function translateZoomProperty(e){return"number"==typeof e?e>=0?clamp(e,.1,10):void 0:"yes"===e?1:"device-width"===e||"device-height"===e?10:"no"===e||null===e?.1:void 0}function clamp(e,t,r){return max(min(e,r),t)}WN.getRenderingDataFromViewport=function(e,t,r,a,n){var i=t/100,o=r/100,s=null,c=null,l=null,u=null,d=null,m=null,p=null,h=null,f=null,y=t,v=r,b="zoom";if(void 0!==e["maximum-scale"]&&(s=translateZoomProperty(e["maximum-scale"])),
1023
+ name:t,resourceBytes:a})}const n=await MN.request(e,t),i=await ON.request(e,t);for(const a of e.ScriptElements){if(!a.src)continue;const o=a.src,s=n.find((e=>a.src===e.script.src)),c=e.JsUsage[a.src]||[];if(!s&&0===c.length){r.push({name:o,resourceBytes:a.content?.length||0});continue}const l=await PN.request({url:a.src,scriptCoverages:c,bundle:s},t);let u;if(s&&!("errorMessage"in s.sizes)){const e={};for(const t of Object.keys(s.sizes.files)){const r={resourceBytes:s.sizes.files[t]};l.sourcesWastedBytes&&(r.unusedBytes=l.sourcesWastedBytes[t]);let a=t;s.rawMap.sourceRoot&&t.startsWith(s.rawMap.sourceRoot)&&(a=t.replace(s.rawMap.sourceRoot,""));const n=ON.normalizeSource(a);i.has(n)&&(r.duplicatedNormalizedModuleName=n),e[t]=r}if(s.sizes.unmappedBytes){const t={resourceBytes:s.sizes.unmappedBytes};l.sourcesWastedBytes&&(t.unusedBytes=l.sourcesWastedBytes["(unmapped)"]),e["(unmapped)"]=t}u=this.makeScriptNode(a.src,s.rawMap.sourceRoot||"",e)}else u={name:o,resourceBytes:l.totalBytes,
1024
+ unusedBytes:l.wastedBytes};r.push(u)}return r}static async audit(e,t){return{score:1,details:{type:"treemap-data",nodes:await ScriptTreemapDataAudit.makeNodes(e,t)}}}}var FN=ScriptTreemapDataAudit,UN={exports:{}};const jN=kc,BN=ji,$N=GT,qN={title:"Document has a valid `rel=canonical`",failureTitle:"Document does not have a valid `rel=canonical`",description:"Canonical links suggest which URL to show in search results. [Learn more](https://web.dev/canonical/).",explanationConflict:"Multiple conflicting URLs ({urlList})",explanationInvalid:"Invalid URL ({url})",explanationRelative:"Is not an absolute URL ({url})",explanationPointsElsewhere:"Points to another `hreflang` location ({url})",explanationRoot:"Points to the domain's root URL (the homepage), instead of an equivalent page of content"},zN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/canonical.js",qN);class Canonical extends jN{static get meta(){return{id:"canonical",title:zN(qN.title),failureTitle:zN(qN.failureTitle),
1025
+ description:zN(qN.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL","devtoolsLogs"]}}static collectCanonicalURLs(e){const t=new Set,r=new Set;let a,n;for(const i of e)if("body"!==i.source)if("canonical"===i.rel){if(!i.hrefRaw)continue;i.href?BN.isValid(i.hrefRaw)?t.add(i.href):n=i:a=i}else"alternate"===i.rel&&i.href&&i.hreflang&&r.add(i.href);return{uniqueCanonicalURLs:t,hreflangURLs:r,invalidCanonicalLink:a,relativeCanonicallink:n}}static findInvalidCanonicalURLReason(e){const{uniqueCanonicalURLs:t,invalidCanonicalLink:r,relativeCanonicallink:a}=e;if(r)return{score:0,explanation:zN(qN.explanationInvalid,{url:r.hrefRaw})};if(a)return{score:0,explanation:zN(qN.explanationRelative,{url:a.hrefRaw})};const n=Array.from(t);return 0===n.length?{score:1,notApplicable:!0}:n.length>1?{score:0,explanation:zN(qN.explanationConflict,{urlList:n.join(", ")})}:void 0}static findCommonCanonicalURLMistakes(e,t,r){const{hreflangURLs:a}=e
1026
+ ;return a.has(r.href)&&a.has(t.href)&&r.href!==t.href?{score:0,explanation:zN(qN.explanationPointsElsewhere,{url:r.href})}:t.origin===r.origin&&"/"===t.pathname&&"/"!==r.pathname?{score:0,explanation:zN(qN.explanationRoot)}:void 0}static async audit(e,t){const r=e.devtoolsLogs[jN.DEFAULT_PASS],a=await $N.request({devtoolsLog:r,URL:e.URL},t),n=new BN(a.url),i=Canonical.collectCanonicalURLs(e.LinkElements),o=Canonical.findInvalidCanonicalURLReason(i);if(o)return o;const s=new BN([...i.uniqueCanonicalURLs][0]),c=Canonical.findCommonCanonicalURLMistakes(i,s,n);return c||{score:1}}}UN.exports=Canonical,UN.exports.UIStrings=qN;var VN={exports:{}};const WN=kc,HN={title:"Links are crawlable",failureTitle:"Links are not crawlable",
1027
+ description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},GN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/crawlable-anchors.js",HN);VN.exports=class CrawlableAnchors extends WN{static get meta(){return{id:"crawlable-anchors",title:GN(HN.title),failureTitle:GN(HN.failureTitle),description:GN(HN.description),requiredArtifacts:["AnchorElements","URL"]}}static audit({AnchorElements:e,URL:t}){const r=e.filter((({rawHref:e,name:r="",role:a=""})=>{if(e=e.replace(/\s/g,""),r=r.trim(),(a=a.trim()).length>0)return;if(e.startsWith("mailto:"))return;if(e.startsWith("file:"))return!0;if(!(r.length>0)){if(""===e)return!0;if(/javascript:void(\(|)0(\)|)/.test(e))return!0;try{new URL(e,t.finalUrl)}catch(e){return!0}}})),a=[{
1028
+ key:"node",itemType:"node",text:GN(HN.columnFailingLink)}],n=r.map((e=>({node:WN.makeNodeItem(e.node)})));return{score:Number(0===r.length),details:WN.makeTableDetails(a,n)}}},VN.exports.UIStrings=HN;var YN={exports:{}},KN={};function min(e,t){return null===e?t:null===t?e:Math.min(e,t)}function max(e,t){return null===e?t:null===t?e:Math.max(e,t)}function translateLengthProperty(e,t,r){return"number"==typeof e?e>=0?clamp(e,1,1e4):void 0:"device-width"===e?100*t:"device-height"===e?100*r:1}function translateZoomProperty(e){return"number"==typeof e?e>=0?clamp(e,.1,10):void 0:"yes"===e?1:"device-width"===e||"device-height"===e?10:"no"===e||null===e?.1:void 0}function clamp(e,t,r){return max(min(e,r),t)}KN.getRenderingDataFromViewport=function(e,t,r,a,n){var i=t/100,o=r/100,s=null,c=null,l=null,u=null,d=null,m=null,p=null,h=null,f=null,y=t,v=r,b="zoom";if(void 0!==e["maximum-scale"]&&(s=translateZoomProperty(e["maximum-scale"])),
1032
1029
  void 0!==e["minimum-scale"]&&(c=translateZoomProperty(e["minimum-scale"])),void 0!==e["initial-scale"]&&(l=translateZoomProperty(e["initial-scale"])),null!==c&&null===s&&(c=min(a,translateZoomProperty(e["minimum-scale"]))),void 0!==e.width&&(u="extend-to-zoom",m=translateLengthProperty(e.width,i,o)),void 0!==e.height&&(d="extend-to-zoom",p=translateLengthProperty(e.height,i,o)),void 0!==e["user-scalable"])if("number"==typeof(b=e["user-scalable"]))b=b>=1||b<=-1?"zoom":"fixed";else switch(b){case"yes":case"device-width":case"device-height":b="zoom";break;case"no":default:b="fixed"}null===l||void 0!==e.width&&void 0!==h||(void 0!==e.height?(u=null,m=null):(u="extend-to-zoom",m="extend-to-zoom")),null!==c&&null!==s&&(s=max(c,s)),null!==l&&(l=clamp(l,c,s));var w,S,T=null===l&&null===s?null:min(l,s);return null===T?("extend-to-zoom"===m&&(m=null),"extend-to-zoom"===p&&(p=null),"extend-to-zoom"===u&&(u=m),"extend-to-zoom"===d&&(d=p)):(w=y/T,S=v/T,"extend-to-zoom"===m&&(m=w),
1033
- "extend-to-zoom"===p&&(p=S),"extend-to-zoom"===u&&(u=max(w,m)),"extend-to-zoom"===d&&(d=max(S,p))),null===u&&null===m||(h=max(u,min(m,y))),null===d&&null===p||(f=max(d,min(p,v))),null===h&&(h=null===f?y:0!==v?Math.round(f*(y/v)):y),null===f&&(f=0!==y?Math.round(h*(v/y)):v),{zoom:l,width:h,height:f,userZoom:b}},WN.parseMetaViewPortContent=function(e){for(var t={validProperties:{},unknownProperties:{},invalidValues:{}},r=1;r<=e.length;){for(;r<=e.length&&RegExp(" |\n|\t|\0d|,|;|=").test(e[r-1]);)r++;r<=e.length&&(r=parseProperty(t,e,r))}return t};var GN=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit"];function parseProperty(e,t,r){for(var a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(var n=t.slice(a-1,r-1);r<=t.length&&!RegExp(",|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r
1034
- ;for(;r<=t.length&&RegExp(" |\n|\t|\0d|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;return function setProperty(e,t,r){if(GN.indexOf(t)>=0){var a=parseFloat(r);if(!isNaN(a))return void(e.validProperties[t]=a);var n=r.toLowerCase();if("yes"===n||"no"===n||"device-width"===n||"device-height"===n||"viewport-fit"===t.toLowerCase()&&("auto"===n||"cover"===n))return void(e.validProperties[t]=n);e.validProperties[t]=null,e.invalidValues[t]=r}else e.unknownProperties[t]=r}(e,n,t.slice(a-1,r-1)),r}WN.expectedValues={width:["device-width","device-height","a positive number"],height:["device-width","device-height","a positive number"],"initial-scale":["a positive number"],"minimum-scale":["a positive number"],"maximum-scale":["a positive number"],"user-scalable":["yes","no","0","1"],"shrink-to-fit":["yes","no"],"viewport-fit":["auto","cover"]};const HN=WN,YN=Ao;var KN=YN(class ViewportMeta{
1035
- static async compute_(e){const t=e.find((e=>"viewport"===e.name));if(!t)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]};const r=[],a=HN.parseMetaViewPortContent(t.content||"");Object.keys(a.unknownProperties).length&&r.push(`Invalid properties found: ${JSON.stringify(a.unknownProperties)}`),Object.keys(a.invalidValues).length&&r.push(`Invalid values found: ${JSON.stringify(a.invalidValues)}`);const n=a.validProperties;return{hasViewportTag:!0,isMobileOptimized:Boolean(n.width||n["initial-scale"]),parserWarnings:r}}},null);const JN=oi,XN=kc,ZN=KN,QN={title:"Document uses legible font sizes",failureTitle:"Document doesn't use legible font sizes",description:"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://web.dev/font-size/).",displayValue:"{decimalProportion, number, extendedPercent} legible text",
1036
- explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},eL=JN.createMessageInstanceIdFn("lighthouse-core/audits/seo/font-size.js",QN);function getSelector(e){const t=function getAttributeMap(e=[]){const t=new Map;for(let r=0;r<e.length;r+=2){const a=e[r],n=e[r+1];if(!a||!n)continue;const i=n.trim();i&&t.set(a.toLowerCase(),i)}return t}(e.attributes);if(t.has("id"))return"#"+t.get("id");{const e=t.get("class");if(e)return"."+e.split(/\s+/).join(".")}return e.nodeName.toLowerCase()}function nodeToTableNode(e){const t=(e.attributes||[]).map(((e,t)=>t%2==0?` ${e}`:`="${e}"`)).join("");return{type:"node",selector:e.parentNode?getSelector(e.parentNode):"",snippet:`<${e.nodeName.toLowerCase()}${t}>`}}VN.exports=class FontSize extends XN{static get meta(){return{id:"font-size",
1037
- title:eL(QN.title),failureTitle:eL(QN.failureTitle),description:eL(QN.description),requiredArtifacts:["FontSize","URL","MetaElements"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await ZN.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:eL(QN.explanationViewport)};const{analyzedFailingNodesData:r,analyzedFailingTextLength:a,failingTextLength:n,totalTextLength:i}=e.FontSize;if(0===i)return{score:1};const o=function getUniqueFailingRules(e){const t=new Map;return e.forEach((e=>{const{nodeId:r,cssRule:a,fontSize:n,textLength:i,parentNode:o}=e,s=function getFontArtifactId(e,t){if(e&&"Regular"===e.type){const t=e.range?e.range.startLine:0,r=e.range?e.range.startColumn:0;return`${e.styleSheetId}@${t}:${r}`}return`node_${t}`}(a,r),c=t.get(s);c?c.textLength+=i:t.set(s,{nodeId:r,parentNode:o,cssRule:a,fontSize:n,textLength:i})})),[...t.values()]}(r),s=(i-n)/i*100,c=e.URL.finalUrl,l=[{key:"source",
1038
- itemType:"source-location",text:eL(JN.UIStrings.columnSource)},{key:"selector",itemType:"code",text:eL(QN.columnSelector)},{key:"coverage",itemType:"text",text:eL(QN.columnPercentPageText)},{key:"fontSize",itemType:"text",text:eL(QN.columnFontSize)}],u=o.sort(((e,t)=>t.textLength-e.textLength)).map((({cssRule:e,textLength:t,fontSize:r,parentNode:a})=>{const n=t/i*100,o=function findStyleRuleSource(e,t,r){if(!t||"Attributes"===t.type||"Inline"===t.type)return{source:{type:"url",value:e},selector:nodeToTableNode(r)};if(t.parentRule&&"user-agent"===t.parentRule.origin)return{source:{type:"code",value:"User Agent Stylesheet"},selector:t.parentRule.selectors.map((e=>e.text)).join(", ")};let a="";t.parentRule&&(a=t.parentRule.selectors.map((e=>e.text)).join(", "));if(t.stylesheet&&!t.stylesheet.sourceURL)return{source:{type:"code",value:"dynamic"},selector:a};if(t.stylesheet&&t.range){const{range:e,stylesheet:r}=t,n=r.hasSourceURL?"comment":"network";let i=e.startLine,o=e.startColumn
1039
- ;r.isInline&&"comment"!==n&&(i+=r.startLine,0===e.startLine&&(o+=r.startColumn));const s=XN.makeSourceLocation(r.sourceURL,i,o);return s.urlProvider=n,{source:s,selector:a}}return{selector:a,source:{type:"code",value:"Unknown"}}}(c,e,a);return{source:o.source,selector:o.selector,coverage:`${n.toFixed(2)}%`,fontSize:`${r}px`}}));if(a<n){const e=(n-a)/i*100;u.push({source:{type:"code",value:eL(QN.additionalIllegibleText)},selector:"",coverage:`${e.toFixed(2)}%`,fontSize:"< 12px"})}s>0&&u.push({source:{type:"code",value:eL(QN.legibleText)},selector:"",coverage:`${s.toFixed(2)}%`,fontSize:"≥ 12px"});const d=eL(QN.displayValue,{decimalProportion:s/100}),m=XN.makeTableDetails(l,u);return{score:Number(s>=60),details:m,displayValue:d}}},VN.exports.UIStrings=QN;var tL={exports:{}}
1040
- ;const rL=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]]
1041
- ;var aL={isValidLang:function isValidLang$1(e){let t=rL;for(;e.length<3;)e+="`";for(let r=0;r<=e.length-1;r++){if(t=t[e.charCodeAt(r)-96],!t)return!1}return!0}};const nL=kc,iL=oi,{isValidLang:oL}=aL,sL={title:"Document has a valid `hreflang`",failureTitle:"Document doesn't have a valid `hreflang`",description:"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://web.dev/hreflang/).",unexpectedLanguage:"Unexpected language code",notFullyQualified:"Relative href value"},cL=iL.createMessageInstanceIdFn("lighthouse-core/audits/seo/hreflang.js",sL);function isExpectedLanguageCode(e){if("x-default"===e.toLowerCase())return!0;const[t]=e.split("-");return oL(t.toLowerCase())}tL.exports=class Hreflang extends nL{static get meta(){return{id:"hreflang",title:cL(sL.title),failureTitle:cL(sL.failureTitle),description:cL(sL.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL"]}}
1042
- static audit({LinkElements:e}){const t=[],r=e.filter((e=>{const t="alternate"===e.rel,r=e.hreflang,a="body"===e.source;return t&&r&&!a}));for(const e of r){const r=[];let n;isExpectedLanguageCode(e.hreflang)||r.push(cL(sL.unexpectedLanguage)),(a=e.hrefRaw.toLowerCase()).startsWith("http:")||a.startsWith("https:")||r.push(cL(sL.notFullyQualified)),"head"===e.source?n=e.node?{...nL.makeNodeItem(e.node),snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:{type:"node",snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:"headers"===e.source&&(n=`Link: <${e.hrefRaw}>; rel="alternate"; hreflang="${e.hreflang}"`),n&&r.length&&t.push({source:n,subItems:{type:"subitems",items:r.map((e=>({reason:e})))}})}var a;const n=nL.makeTableDetails([{key:"source",itemType:"code",subItemsHeading:{key:"reason",itemType:"text"},text:""}],t);return{score:Number(0===t.length),details:n}}},tL.exports.UIStrings=sL;var lL={exports:{}}
1043
- ;const uL=kc,dL=Lo,mL=Fo,pL={title:"Page has successful HTTP status code",failureTitle:"Page has unsuccessful HTTP status code",description:"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://web.dev/http-status-code/)."},hL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/http-status-code.js",pL);lL.exports=class HTTPStatusCode extends uL{static get meta(){return{id:"http-status-code",title:hL(pL.title),failureTitle:hL(pL.failureTitle),description:hL(pL.description),requiredArtifacts:["devtoolsLogs","URL","GatherContext"],supportedModes:["navigation"]}}static async audit(e,t){const r=e.devtoolsLogs[uL.DEFAULT_PASS],a=e.URL,n=await dL.request(r,t),i=mL.findMainDocument(n,a.finalUrl).statusCode;return i>=400&&i<=599?{score:0,displayValue:`${i}`}:{score:1}}},lL.exports.UIStrings=pL;var gL={exports:{}};function trimLine(e){return e?Array.isArray(e)?e.map(trimLine):String(e).trim():null}function removeComments(e){var t=e.indexOf("#")
1030
+ "extend-to-zoom"===p&&(p=S),"extend-to-zoom"===u&&(u=max(w,m)),"extend-to-zoom"===d&&(d=max(S,p))),null===u&&null===m||(h=max(u,min(m,y))),null===d&&null===p||(f=max(d,min(p,v))),null===h&&(h=null===f?y:0!==v?Math.round(f*(y/v)):y),null===f&&(f=0!==y?Math.round(h*(v/y)):v),{zoom:l,width:h,height:f,userZoom:b}},KN.parseMetaViewPortContent=function(e){for(var t={validProperties:{},unknownProperties:{},invalidValues:{}},r=1;r<=e.length;){for(;r<=e.length&&RegExp(" |\n|\t|\0d|,|;|=").test(e[r-1]);)r++;r<=e.length&&(r=parseProperty(t,e,r))}return t};var JN=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit"];function parseProperty(e,t,r){for(var a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(var n=t.slice(a-1,r-1);r<=t.length&&!RegExp(",|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r
1031
+ ;for(;r<=t.length&&RegExp(" |\n|\t|\0d|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;return function setProperty(e,t,r){if(JN.indexOf(t)>=0){var a=parseFloat(r);if(!isNaN(a))return void(e.validProperties[t]=a);var n=r.toLowerCase();if("yes"===n||"no"===n||"device-width"===n||"device-height"===n||"viewport-fit"===t.toLowerCase()&&("auto"===n||"cover"===n))return void(e.validProperties[t]=n);e.validProperties[t]=null,e.invalidValues[t]=r}else e.unknownProperties[t]=r}(e,n,t.slice(a-1,r-1)),r}KN.expectedValues={width:["device-width","device-height","a positive number"],height:["device-width","device-height","a positive number"],"initial-scale":["a positive number"],"minimum-scale":["a positive number"],"maximum-scale":["a positive number"],"user-scalable":["yes","no","0","1"],"shrink-to-fit":["yes","no"],"viewport-fit":["auto","cover"]};const XN=KN,ZN=Ao;var QN=ZN(class ViewportMeta{
1032
+ static async compute_(e){const t=e.find((e=>"viewport"===e.name));if(!t)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]};const r=[],a=XN.parseMetaViewPortContent(t.content||"");Object.keys(a.unknownProperties).length&&r.push(`Invalid properties found: ${JSON.stringify(a.unknownProperties)}`),Object.keys(a.invalidValues).length&&r.push(`Invalid values found: ${JSON.stringify(a.invalidValues)}`);const n=a.validProperties;return{hasViewportTag:!0,isMobileOptimized:Boolean(n.width||n["initial-scale"]),parserWarnings:r}}},null);const eL=oi,tL=kc,rL=QN,aL={title:"Document uses legible font sizes",failureTitle:"Document doesn't use legible font sizes",description:"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://web.dev/font-size/).",displayValue:"{decimalProportion, number, extendedPercent} legible text",
1033
+ explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},nL=eL.createMessageInstanceIdFn("lighthouse-core/audits/seo/font-size.js",aL);function getSelector(e){const t=function getAttributeMap(e=[]){const t=new Map;for(let r=0;r<e.length;r+=2){const a=e[r],n=e[r+1];if(!a||!n)continue;const i=n.trim();i&&t.set(a.toLowerCase(),i)}return t}(e.attributes);if(t.has("id"))return"#"+t.get("id");{const e=t.get("class");if(e)return"."+e.split(/\s+/).join(".")}return e.nodeName.toLowerCase()}function nodeToTableNode(e){const t=(e.attributes||[]).map(((e,t)=>t%2==0?` ${e}`:`="${e}"`)).join("");return{type:"node",selector:e.parentNode?getSelector(e.parentNode):"",snippet:`<${e.nodeName.toLowerCase()}${t}>`}}YN.exports=class FontSize extends tL{static get meta(){return{id:"font-size",
1034
+ title:nL(aL.title),failureTitle:nL(aL.failureTitle),description:nL(aL.description),requiredArtifacts:["FontSize","URL","MetaElements"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await rL.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:nL(aL.explanationViewport)};const{analyzedFailingNodesData:r,analyzedFailingTextLength:a,failingTextLength:n,totalTextLength:i}=e.FontSize;if(0===i)return{score:1};const o=function getUniqueFailingRules(e){const t=new Map;return e.forEach((e=>{const{nodeId:r,cssRule:a,fontSize:n,textLength:i,parentNode:o}=e,s=function getFontArtifactId(e,t){if(e&&"Regular"===e.type){const t=e.range?e.range.startLine:0,r=e.range?e.range.startColumn:0;return`${e.styleSheetId}@${t}:${r}`}return`node_${t}`}(a,r),c=t.get(s);c?c.textLength+=i:t.set(s,{nodeId:r,parentNode:o,cssRule:a,fontSize:n,textLength:i})})),[...t.values()]}(r),s=(i-n)/i*100,c=e.URL.finalUrl,l=[{key:"source",
1035
+ itemType:"source-location",text:nL(eL.UIStrings.columnSource)},{key:"selector",itemType:"code",text:nL(aL.columnSelector)},{key:"coverage",itemType:"text",text:nL(aL.columnPercentPageText)},{key:"fontSize",itemType:"text",text:nL(aL.columnFontSize)}],u=o.sort(((e,t)=>t.textLength-e.textLength)).map((({cssRule:e,textLength:t,fontSize:r,parentNode:a})=>{const n=t/i*100,o=function findStyleRuleSource(e,t,r){if(!t||"Attributes"===t.type||"Inline"===t.type)return{source:{type:"url",value:e},selector:nodeToTableNode(r)};if(t.parentRule&&"user-agent"===t.parentRule.origin)return{source:{type:"code",value:"User Agent Stylesheet"},selector:t.parentRule.selectors.map((e=>e.text)).join(", ")};let a="";t.parentRule&&(a=t.parentRule.selectors.map((e=>e.text)).join(", "));if(t.stylesheet&&!t.stylesheet.sourceURL)return{source:{type:"code",value:"dynamic"},selector:a};if(t.stylesheet&&t.range){const{range:e,stylesheet:r}=t,n=r.hasSourceURL?"comment":"network";let i=e.startLine,o=e.startColumn
1036
+ ;r.isInline&&"comment"!==n&&(i+=r.startLine,0===e.startLine&&(o+=r.startColumn));const s=tL.makeSourceLocation(r.sourceURL,i,o);return s.urlProvider=n,{source:s,selector:a}}return{selector:a,source:{type:"code",value:"Unknown"}}}(c,e,a);return{source:o.source,selector:o.selector,coverage:`${n.toFixed(2)}%`,fontSize:`${r}px`}}));if(a<n){const e=(n-a)/i*100;u.push({source:{type:"code",value:nL(aL.additionalIllegibleText)},selector:"",coverage:`${e.toFixed(2)}%`,fontSize:"< 12px"})}s>0&&u.push({source:{type:"code",value:nL(aL.legibleText)},selector:"",coverage:`${s.toFixed(2)}%`,fontSize:"≥ 12px"});const d=nL(aL.displayValue,{decimalProportion:s/100}),m=tL.makeTableDetails(l,u);return{score:Number(s>=60),details:m,displayValue:d}}},YN.exports.UIStrings=aL;var iL={exports:{}}
1037
+ ;const oL=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]]
1038
+ ;var sL={isValidLang:function isValidLang$1(e){let t=oL;for(;e.length<3;)e+="`";for(let r=0;r<=e.length-1;r++){if(t=t[e.charCodeAt(r)-96],!t)return!1}return!0}};const cL=kc,lL=oi,{isValidLang:uL}=sL,dL={title:"Document has a valid `hreflang`",failureTitle:"Document doesn't have a valid `hreflang`",description:"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://web.dev/hreflang/).",unexpectedLanguage:"Unexpected language code",notFullyQualified:"Relative href value"},mL=lL.createMessageInstanceIdFn("lighthouse-core/audits/seo/hreflang.js",dL);function isExpectedLanguageCode(e){if("x-default"===e.toLowerCase())return!0;const[t]=e.split("-");return uL(t.toLowerCase())}iL.exports=class Hreflang extends cL{static get meta(){return{id:"hreflang",title:mL(dL.title),failureTitle:mL(dL.failureTitle),description:mL(dL.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL"]}}
1039
+ static audit({LinkElements:e}){const t=[],r=e.filter((e=>{const t="alternate"===e.rel,r=e.hreflang,a="body"===e.source;return t&&r&&!a}));for(const e of r){const r=[];let n;isExpectedLanguageCode(e.hreflang)||r.push(mL(dL.unexpectedLanguage)),(a=e.hrefRaw.toLowerCase()).startsWith("http:")||a.startsWith("https:")||r.push(mL(dL.notFullyQualified)),"head"===e.source?n=e.node?{...cL.makeNodeItem(e.node),snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:{type:"node",snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:"headers"===e.source&&(n=`Link: <${e.hrefRaw}>; rel="alternate"; hreflang="${e.hreflang}"`),n&&r.length&&t.push({source:n,subItems:{type:"subitems",items:r.map((e=>({reason:e})))}})}var a;const n=cL.makeTableDetails([{key:"source",itemType:"code",subItemsHeading:{key:"reason",itemType:"text"},text:""}],t);return{score:Number(0===t.length),details:n}}},iL.exports.UIStrings=dL;var pL={exports:{}}
1040
+ ;const hL=kc,gL=Lo,fL=Fo,yL={title:"Page has successful HTTP status code",failureTitle:"Page has unsuccessful HTTP status code",description:"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://web.dev/http-status-code/)."},vL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/http-status-code.js",yL);pL.exports=class HTTPStatusCode extends hL{static get meta(){return{id:"http-status-code",title:vL(yL.title),failureTitle:vL(yL.failureTitle),description:vL(yL.description),requiredArtifacts:["devtoolsLogs","URL","GatherContext"],supportedModes:["navigation"]}}static async audit(e,t){const r=e.devtoolsLogs[hL.DEFAULT_PASS],a=e.URL,n=await gL.request(r,t),i=fL.findMainDocument(n,a.finalUrl).statusCode;return i>=400&&i<=599?{score:0,displayValue:`${i}`}:{score:1}}},pL.exports.UIStrings=yL;var bL={exports:{}};function trimLine(e){return e?Array.isArray(e)?e.map(trimLine):String(e).trim():null}function removeComments(e){var t=e.indexOf("#")
1044
1041
  ;return t>-1?e.substr(0,t):e}function splitLine(e){var t=String(e).indexOf(":");return!e||t<0?null:[e.slice(0,t),e.slice(t+1)]}function formatUserAgent(e){var t=e.toLowerCase(),r=t.indexOf("/");return r>-1&&(t=t.substr(0,r)),t.trim()}function normaliseEncoding(e){try{return urlEncodeToUpper(encodeURI(e).replace(/%25/g,"%"))}catch(t){return e}}function urlEncodeToUpper(e){return e.replace(/%[0-9a-fA-F]{2}/g,(function(e){return e.toUpperCase()}))}function matches(e,t){var r=new Array(t.length+1),a=1;r[0]=0;for(var n=0;n<e.length;n++){if("$"===e[n]&&n+1===e.length)return r[a-1]===t.length;if("*"==e[n]){a=t.length-r[0]+1;for(var i=1;i<a;i++)r[i]=r[i-1]+1}else{var o=0;for(i=0;i<a;i++)r[i]<t.length&&t[r[i]]===e[n]&&(r[o++]=r[i]+1);if(0==o)return!1;a=o}}return!0}function parseUrl(e){try{return new URL(e,"http://robots-relative.samclarke.com/")}catch(e){return null}}function Robots$1(e,t){this._url=parseUrl(e)||{},this._url.port=this._url.port||80,this._rules=Object.create(null),
1045
1042
  this._sitemaps=[],this._preferredHost=null,function parseRobots(e,t){for(var r=e.split(/\r\n|\r|\n/).map(removeComments).map(splitLine).map(trimLine),a=[],n=!0,i=0;i<r.length;i++){var o=r[i];if(o&&o[0]){switch(o[0].toLowerCase()){case"user-agent":n&&(a.length=0),o[1]&&a.push(formatUserAgent(o[1]));break;case"disallow":t.addRule(a,o[1],!1,i+1);break;case"allow":t.addRule(a,o[1],!0,i+1);break;case"crawl-delay":t.setCrawlDelay(a,o[1]);break;case"sitemap":o[1]&&t.addSitemap(o[1]);break;case"host":o[1]&&t.setPreferredHost(o[1].toLowerCase())}n="user-agent"!==o[0].toLowerCase()}}}(t||"",this)}Robots$1.prototype.addRule=function(e,t,r,a){var n=this._rules;e.forEach((function(e){n[e]=n[e]||[],t&&n[e].push({pattern:normaliseEncoding(t),allow:r,lineNumber:a})}))},Robots$1.prototype.setCrawlDelay=function(e,t){var r=this._rules,a=Number(t);e.forEach((function(e){r[e]=r[e]||[],isNaN(a)||(r[e].crawlDelay=a)}))},Robots$1.prototype.addSitemap=function(e){this._sitemaps.push(e)},
1046
1043
  Robots$1.prototype.setPreferredHost=function(e){this._preferredHost=e},Robots$1.prototype._getRule=function(e,t){var r=parseUrl(e)||{},a=formatUserAgent(t||"*");if(r.port=r.port||80,r.protocol===this._url.protocol&&r.hostname===this._url.hostname&&r.port===this._url.port){var n=this._rules[a]||this._rules["*"]||[];return function findRule(e,t){for(var r=null,a=0;a<t.length;a++){var n=t[a];matches(n.pattern,e)&&(!r||n.pattern.length>r.pattern.length||n.pattern.length==r.pattern.length&&n.allow&&!r.allow)&&(r=n)}return r}(urlEncodeToUpper(r.pathname+r.search),n)}},Robots$1.prototype.isAllowed=function(e,t){var r=this._getRule(e,t);if(void 0!==r)return!r||r.allow},Robots$1.prototype.getMatchingLineNumber=function(e,t){var r=this._getRule(e,t);return r?r.lineNumber:-1},Robots$1.prototype.isDisallowed=function(e,t){return!this.isAllowed(e,t)},Robots$1.prototype.getCrawlDelay=function(e){var t=formatUserAgent(e||"*");return(this._rules[t]||this._rules["*"]||{}).crawlDelay},
1047
- Robots$1.prototype.getPreferredHost=function(){return this._preferredHost},Robots$1.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};var fL=Robots$1;const yL=kc,robotsParser=function(e,t){return new fL(e,t)},vL=ji,bL=HT,wL=new Set(["noindex","none"]),SL="unavailable_after",TL={title:"Page isn’t blocked from indexing",failureTitle:"Page is blocked from indexing",description:"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://web.dev/is-crawable/)."},EL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/is-crawlable.js",TL);function hasBlockingDirective(e){return e.split(",").map((e=>e.toLowerCase().trim())).some((e=>wL.has(e)||function isUnavailable(e){const t=e.split(":");if(t.length<=1||t[0]!==SL)return!1;const r=Date.parse(t.slice(1).join(":"));return!isNaN(r)&&r<Date.now()}(e)))}gL.exports=class IsCrawlable extends yL{static get meta(){return{id:"is-crawlable",title:EL(TL.title),
1048
- failureTitle:EL(TL.failureTitle),description:EL(TL.description),supportedModes:["navigation"],requiredArtifacts:["MetaElements","RobotsTxt","URL","devtoolsLogs"]}}static audit(e,t){const r=e.devtoolsLogs[yL.DEFAULT_PASS],a=e.MetaElements.find((e=>"robots"===e.name));return bL.request({devtoolsLog:r,URL:e.URL},t).then((t=>{const r=[];if(a){const e=a.content||"";hasBlockingDirective(e)&&r.push({source:{...yL.makeNodeItem(a.node),snippet:`<meta name="robots" content="${e}" />`}})}if(t.responseHeaders&&t.responseHeaders.filter((e=>"x-robots-tag"===e.name.toLowerCase()&&!function hasUserAgent(e){const t=e.match(/^([^,:]+):/);return!!t&&t[1].toLowerCase()!==SL}(e.value)&&hasBlockingDirective(e.value))).forEach((e=>r.push({source:`${e.name}: ${e.value}`}))),e.RobotsTxt.content){const a=new vL("/robots.txt",t.url),n=robotsParser(a.href,e.RobotsTxt.content);if(!n.isAllowed(t.url)){const e=n.getMatchingLineNumber(t.url)||1;r.push({source:{type:"source-location",url:a.href,urlProvider:"network",
1049
- line:e-1,column:0}})}}const n=yL.makeTableDetails([{key:"source",itemType:"code",text:"Blocking Directive Source"}],r);return{score:Number(0===r.length),details:n}}))}},gL.exports.UIStrings=TL;var xL={exports:{}};const _L=kc,AL=ji,RL=new Set(["click here","click this","go","here","information","learn more","more","more info","more information","right here","read more","see more","start","this","ここをクリック","こちらをクリック","リンク","続きを読む","続く","全文表示","click aquí","click aqui","clicka aquí","clicka aqui","pincha aquí","pincha aqui","aquí","aqui","más","mas","más información","más informacion","mas información","mas informacion","este","enlace","este enlace","empezar","clique aqui","ir","mais informação","mais informações","mais","veja mais","여기","여기를 클릭","클릭","링크","자세히","자세히 보기","계속","이동","전체 보기","här","klicka här","läs mer","mer","mer info","mer information"]),kL={title:"Links have descriptive text",failureTitle:"Links do not have descriptive text",
1050
- description:"Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).",displayValue:"{itemCount, plural,\n =1 {1 link found}\n other {# links found}\n }"},DL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/link-text.js",kL);xL.exports=class LinkText extends _L{static get meta(){return{id:"link-text",title:DL(kL.title),failureTitle:DL(kL.failureTitle),description:DL(kL.description),requiredArtifacts:["URL","AnchorElements"]}}static audit(e){const t=e.AnchorElements.filter((e=>e.href&&!e.rel.includes("nofollow"))).filter((t=>{const r=t.href.toLowerCase();return!(r.startsWith("javascript:")||r.startsWith("mailto:")||AL.equalWithExcludedFragments(t.href,e.URL.finalUrl))&&RL.has(t.text.trim().toLowerCase())})).map((e=>({href:e.href,text:e.text.trim()}))),r=_L.makeTableDetails([{key:"href",itemType:"url",text:"Link destination"},{key:"text",itemType:"text",text:"Link Text"}],t,{});let a
1051
- ;return t.length&&(a=DL(kL.displayValue,{itemCount:t.length})),{score:Number(0===t.length),details:r,displayValue:a}}},xL.exports.UIStrings=kL;var CL={exports:{}};const IL=iy,NL={description:"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://web.dev/structured-data/).",title:"Structured data is valid"},LL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/manual/structured-data.js",NL);CL.exports=class StructuredData extends IL{static get meta(){return Object.assign({id:"structured-data",description:LL(NL.description),title:LL(NL.title)},super.partialMeta)}},CL.exports.UIStrings=NL;var ML={exports:{}};const PL=kc,OL={title:"Document has a meta description",failureTitle:"Document does not have a meta description",
1052
- description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).",explanation:"Description text is empty."},FL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/meta-description.js",OL);ML.exports=class Description extends PL{static get meta(){return{id:"meta-description",title:FL(OL.title),failureTitle:FL(OL.failureTitle),description:FL(OL.description),requiredArtifacts:["MetaElements"]}}static audit(e){const t=e.MetaElements.find((e=>"description"===e.name));if(!t)return{score:0};return 0===(t.content||"").trim().length?{score:0,explanation:FL(OL.explanation)}:{score:1}}},ML.exports.UIStrings=OL;var UL={exports:{}};const jL=kc,BL=ji,$L="application/x-java-applet",qL="application/x-java-bean",zL=new Set(["application/x-shockwave-flash",$L,qL,"application/x-silverlight","application/x-silverlight-2"]),VL=new Set(["swf","flv","class","xap"]),WL=new Set(["code","movie","source","src"]),GL={
1053
- title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/)."},HL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/plugins.js",GL);function isPluginURL(e){try{const t=new BL(e,"http://example.com").pathname.split(".");if(t.length<2)return!1;const r=t[t.length-1];return VL.has(r.trim().toLowerCase())}catch(e){return!1}}UL.exports=class Plugins extends jL{static get meta(){return{id:"plugins",title:HL(GL.title),failureTitle:HL(GL.failureTitle),description:HL(GL.description),requiredArtifacts:["EmbeddedContent"]}}static audit(e){const t=e.EmbeddedContent.filter((e=>{if("APPLET"===e.tagName)return!0;if(("EMBED"===e.tagName||"OBJECT"===e.tagName)&&e.type&&function isPluginType(e){return e=e.trim().toLowerCase(),zL.has(e)||e.startsWith($L)||e.startsWith(qL)}(e.type))return!0;const t=e.src||e.code
1054
- ;if("EMBED"===e.tagName&&t&&isPluginURL(t))return!0;if("OBJECT"===e.tagName&&e.data&&isPluginURL(e.data))return!0;return e.params.filter((e=>WL.has(e.name.trim().toLowerCase())&&isPluginURL(e.value))).length>0})).map((e=>({source:jL.makeNodeItem(e.node)}))),r=jL.makeTableDetails([{key:"source",itemType:"code",text:"Element source"}],t);return{score:Number(0===t.length),details:r}}},UL.exports.UIStrings=GL;var YL={exports:{}};const KL=kc,JL=ji,XL="sitemap",ZL="user-agent",QL="allow",eM="disallow",tM=new Set([QL,eM]),rM=new Set([ZL,eM,QL,XL,"crawl-delay","clean-param","host","request-rate","visit-time","noindex"]),aM=new Set(["https:","http:","ftp:"]),nM={title:"robots.txt is valid",failureTitle:"robots.txt is not valid",description:"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more](https://web.dev/robots-txt/).",displayValueHttpBadCode:"Request for robots.txt returned HTTP status: {statusCode}",
1055
- displayValueValidationError:"{itemCount, plural,\n =1 {1 error found}\n other {# errors found}\n }",explanation:"Lighthouse was unable to download a robots.txt file"},iM=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/robots-txt.js",nM);function parseLine(e){const t=e.indexOf("#");if(-1!==t&&(e=e.substr(0,t)),0===(e=e.trim()).length)return null;const r=e.indexOf(":");if(-1===r)throw new Error("Syntax not understood");const a=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim();return function verifyDirective(e,t){if(!rM.has(e))throw new Error("Unknown directive");if(e===XL){let e;try{e=new JL(t)}catch(e){throw new Error("Invalid sitemap URL")}if(!aM.has(e.protocol))throw new Error("Invalid sitemap URL protocol")}if(e===ZL&&!t)throw new Error("No user-agent specified");if(e===QL||e===eM){if(""!==t&&"/"!==t[0]&&"*"!==t[0])throw new Error('Pattern should either be empty, start with "/" or "*"');const e=t.indexOf("$")
1056
- ;if(-1!==e&&e!==t.length-1)throw new Error('"$" should only be used at the end of the pattern')}}(a,n),{directive:a,value:n}}YL.exports=class RobotsTxt extends KL{static get meta(){return{id:"robots-txt",title:iM(nM.title),failureTitle:iM(nM.failureTitle),description:iM(nM.description),requiredArtifacts:["RobotsTxt"]}}static audit(e){const{status:t,content:r}=e.RobotsTxt;if(!t)return{score:0,explanation:iM(nM.explanation)};if(t>=500)return{score:0,displayValue:iM(nM.displayValueHttpBadCode,{statusCode:t})};if(t>=400||""===r)return{score:1,notApplicable:!0};if(null===r)throw new Error(`Status ${t} was valid, but content was null`);const a=function validateRobots(e){const t=[];let r=!1;return e.split(/\r\n|\r|\n/).forEach(((e,a)=>{let n;try{n=parseLine(e)}catch(r){t.push({index:(a+1).toString(),line:e,message:r.message.toString()})}n&&(n.directive===ZL?r=!0:!r&&tM.has(n.directive)&&t.push({index:(a+1).toString(),line:e,message:"No user-agent specified"}))})),t
1057
- }(r),n=KL.makeTableDetails([{key:"index",itemType:"text",text:"Line #"},{key:"line",itemType:"code",text:"Content"},{key:"message",itemType:"code",text:"Error"}],a,{});let i;return a.length&&(i=iM(nM.displayValueValidationError,{itemCount:a.length})),{score:Number(0===a.length),details:n,displayValue:i}}},YL.exports.UIStrings=nM;var oM={exports:{}};const sM=kp;function almostEqual(e,t){return Math.abs(e-t)<=10}function mergeTouchingClientRects(e){for(let t=0;t<e.length;t++)for(let r=t+1;r<e.length;r++){const a=e[t],n=e[r],i=almostEqual(a.top,n.top)||almostEqual(a.bottom,n.bottom),o=almostEqual(a.left,n.left)||almostEqual(a.right,n.right);if(sM.rectsTouchOrOverlap(a,n)&&(i||o)){const t=sM.getBoundingRect([a,n]),r=sM.getRectCenterPoint(t);if(!sM.rectContainsPoint(a,r)&&!sM.rectContainsPoint(n,r))continue;return(e=e.filter((e=>e!==a&&e!==n))).push(t),mergeTouchingClientRects(e)}}return e}var cM={getTappableRectsFromClientRects:function getTappableRectsFromClientRects$1(e){
1058
- return e=sM.filterOutTinyRects(e),e=mergeTouchingClientRects(e=sM.filterOutRectsContainedByOthers(e))}};const lM=kc,uM=KN,{rectsTouchOrOverlap:dM,getRectOverlapArea:mM,getRectAtCenter:pM,allRectsContainedWithinEachOther:hM,getLargestRect:gM,getBoundingRectWithPadding:fM}=kp,{getTappableRectsFromClientRects:yM}=cM,vM=oi,bM={title:"Tap targets are sized appropriately",failureTitle:"Tap targets are not sized appropriately",description:"Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://web.dev/tap-targets/).",tapTargetHeader:"Tap Target",overlappingTargetHeader:"Overlapping Target",explanationViewportMetaNotOptimized:"Tap targets are too small because there's no viewport meta tag optimized for mobile screens",displayValue:"{decimalProportion, number, percent} appropriately sized tap targets"
1059
- },wM=vM.createMessageInstanceIdFn("lighthouse-core/audits/seo/tap-targets.js",bM);function clientRectBelowMinimumSize(e){return e.width<48||e.height<48}function getOverlapFailureForTargetPair(e,t){let r=null;for(const a of e){const e=pM(a,48),n=mM(e,a);for(const a of t){const t=mM(e,a),i=t/n;i<.25||(!r||i>r.overlapScoreRatio)&&(r={overlapScoreRatio:i,tapTargetScore:n,overlappingTargetScore:t})}}return r}class TapTargets extends lM{static get meta(){return{id:"tap-targets",title:wM(bM.title),failureTitle:wM(bM.failureTitle),description:wM(bM.description),requiredArtifacts:["MetaElements","TapTargets"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await uM.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:wM(bM.explanationViewportMetaNotOptimized)};const r=function getBoundedTapTargets(e){return e.map((e=>({tapTarget:e,paddedBoundsRect:fM(e.clientRects,48)})))}(e.TapTargets),a=function getAllOverlapFailures(e,t){
1060
- const r=[];return e.forEach((e=>{const a=yM(e.tapTarget.clientRects);for(const n of t){if(n===e)continue;if(!dM(e.paddedBoundsRect,n.paddedBoundsRect))continue;if(e.tapTarget.href===n.tapTarget.href&&/https?:\/\//.test(e.tapTarget.href))continue;const t=n.tapTarget.clientRects;if(hM(a,t))continue;const i=getOverlapFailureForTargetPair(a,t);i&&r.push({...i,tapTarget:e.tapTarget,overlappingTarget:n.tapTarget})}})),r}(function getTooSmallTargets(e){return e.filter((e=>e.tapTarget.clientRects.every(clientRectBelowMinimumSize)))}(r),r),n=function getTableItems(e){const t=e.map((e=>{const t=gM(e.tapTarget.clientRects),r=Math.floor(t.width),a=Math.floor(t.height),n=r+"x"+a;return{tapTarget:lM.makeNodeItem(e.tapTarget.node),overlappingTarget:lM.makeNodeItem(e.overlappingTarget.node),tapTargetScore:e.tapTargetScore,overlappingTargetScore:e.overlappingTargetScore,overlapScoreRatio:e.overlapScoreRatio,size:n,width:r,height:a}}));return t.sort(((e,t)=>t.overlapScoreRatio-e.overlapScoreRatio)),t
1061
- }(function mergeSymmetricFailures(e){const t=[];return e.forEach(((r,a)=>{const n=e.find((e=>e.tapTarget===r.overlappingTarget&&e.overlappingTarget===r.tapTarget));if(!n)return void t.push(r);const{overlapScoreRatio:i}=r,{overlapScoreRatio:o}=n;(i>o||i===o&&a<e.indexOf(n))&&t.push(r)})),t}(a)),i=[{key:"tapTarget",itemType:"node",text:wM(bM.tapTargetHeader)},{key:"size",itemType:"text",text:wM(vM.UIStrings.columnSize)},{key:"overlappingTarget",itemType:"node",text:wM(bM.overlappingTargetHeader)}],o=lM.makeTableDetails(i,n),s=e.TapTargets.length,c=new Set(a.map((e=>e.tapTarget))).size;let l=1,u=1;c>0&&(u=(s-c)/s,l=.89*u);return{score:l,details:o,displayValue:wM(bM.displayValue,{decimalProportion:u})}}}TapTargets.FINGER_SIZE_PX=48,oM.exports=TapTargets,oM.exports.UIStrings=bM;var SM={exports:{}};const TM=kc,EM=oi,xM=HT,_M=Lo,AM=Fo,RM={title:"Initial server response time was short",failureTitle:"Reduce initial server response time",
1062
- description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).",displayValue:"Root document took {timeInMs, number, milliseconds} ms"},kM=EM.createMessageInstanceIdFn("lighthouse-core/audits/server-response-time.js",RM);class ServerResponseTime extends TM{static get meta(){return{id:"server-response-time",title:kM(RM.title),failureTitle:kM(RM.failureTitle),description:kM(RM.description),supportedModes:["timespan","navigation"],requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static calculateResponseTime(e){const t=e.timing;return t?t.receiveHeadersEnd-t.sendEnd:0}static async audit(e,t){const r=e.devtoolsLogs[TM.DEFAULT_PASS];let a;if("timespan"===e.GatherContext.gatherMode){const n=await _M.request(r,t),i=AM.findOptionalMainDocument(n,e.URL.finalUrl);if(!i)return{score:null,notApplicable:!0};a=i}else a=await xM.request({devtoolsLog:r,URL:e.URL},t)
1063
- ;const n=ServerResponseTime.calculateResponseTime(a),i=n<600,o=kM(RM.displayValue,{timeInMs:n}),s=[{key:"url",valueType:"url",label:kM(EM.UIStrings.columnURL)},{key:"responseTime",valueType:"timespanMs",label:kM(EM.UIStrings.columnTimeSpent)}],c=TM.makeOpportunityDetails(s,[{url:a.url,responseTime:n}],n-100);return{numericValue:n,numericUnit:"millisecond",score:Number(i),displayValue:o,details:c}}}SM.exports=ServerResponseTime,SM.exports.UIStrings=RM;var DM={exports:{}};const CM=ji,IM=kc,NM={title:"Registers a service worker that controls page and `start_url`",failureTitle:"Does not register a service worker that controls page and `start_url`",description:"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://web.dev/service-worker/).",explanationOutOfScope:"This origin has one or more service workers, however the page ({pageUrl}) is not in scope.",
1064
- explanationNoManifest:"This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched.",explanationBadManifest:"This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON",explanationBadStartUrl:"This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"},LM=oi.createMessageInstanceIdFn("lighthouse-core/audits/service-worker.js",NM);class ServiceWorker extends IM{static get meta(){return{id:"service-worker",title:LM(NM.title),failureTitle:LM(NM.failureTitle),description:LM(NM.description),requiredArtifacts:["URL","ServiceWorker","WebAppManifest"]}}static getVersionsForOrigin(e,t){return e.filter((e=>"activated"===e.status)).filter((e=>new CM(e.scriptURL).origin===t.origin))}static getControllingServiceWorker(e,t,r){const a=[];for(const r of e){const e=t.find((e=>e.registrationId===r.registrationId))
1065
- ;if(e){const t=new CM(e.scopeURL).href,n=new CM(r.scriptURL).href;a.push({scopeUrl:t,scriptUrl:n})}}return a.filter((e=>r.href.startsWith(e.scopeUrl))).sort(((e,t)=>e.scopeUrl.length-t.scopeUrl.length)).pop()}static checkStartUrl(e,t){if(!e)return LM(NM.explanationNoManifest);if(!e.value)return LM(NM.explanationBadManifest);const r=e.value.start_url.value;return r.startsWith(t)?void 0:LM(NM.explanationBadStartUrl,{startUrl:r,scopeUrl:t})}static audit(e){const t=new CM(e.URL.finalUrl),{versions:r,registrations:a}=e.ServiceWorker,n=ServiceWorker.getVersionsForOrigin(r,t);if(0===n.length)return{score:0};const i=ServiceWorker.getControllingServiceWorker(n,a,t);if(!i)return{score:0,explanation:LM(NM.explanationOutOfScope,{pageUrl:t.href})};const{scriptUrl:o,scopeUrl:s}=i,c={type:"debugdata",scriptUrl:o,scopeUrl:s},l=ServiceWorker.checkStartUrl(e.WebAppManifest,i.scopeUrl);return l?{score:0,details:c,explanation:l}:{score:1,details:c}}}DM.exports=ServiceWorker,DM.exports.UIStrings=NM
1066
- ;var MM={exports:{}};const PM=kc;var OM=class MultiCheckAudit$2 extends PM{static async audit(e,t){const r=await this.audit_(e,t);return this.createAuditProduct(r)}static createAuditProduct(e){const t={...e,...e.manifestValues,manifestValues:void 0,allChecks:void 0};e.manifestValues?.allChecks&&e.manifestValues.allChecks.forEach((e=>{t[e.id]=e.passing}));const r={type:"debugdata",items:[t]};return e.failures.length>0?{score:0,explanation:`Failures: ${e.failures.join(",\n")}.`,details:r}:{score:1,details:r}}static audit_(e,t){throw new Error("audit_ unimplemented")}};const FM=OM,UM=DA,jM={title:"Configured for a custom splash screen",failureTitle:"Is not configured for a custom splash screen",description:"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://web.dev/splash-screen/)."},BM=oi.createMessageInstanceIdFn("lighthouse-core/audits/splash-screen.js",jM);class SplashScreen extends FM{static get meta(){
1067
- return{id:"splash-screen",title:BM(jM.title),failureTitle:BM(jM.failureTitle),description:BM(jM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=["hasName","hasBackgroundColor","hasThemeColor","hasIconsAtLeast512px"];e.allChecks.filter((e=>r.includes(e.id))).forEach((e=>{e.passing||t.push(e.failureText)}))}static async audit_(e,t){const r=[],a=await UM.request(e,t);return SplashScreen.assessManifest(a,r),{failures:r,manifestValues:a}}}MM.exports=SplashScreen,MM.exports.UIStrings=jM;var $M={exports:{}};const qM=OM,zM=DA,VM=Rs,WM={title:"Sets a theme color for the address bar.",failureTitle:"Does not set a theme color for the address bar.",description:"The browser address bar can be themed to match your site. [Learn more](https://web.dev/themed-omnibox/)."
1068
- },GM=oi.createMessageInstanceIdFn("lighthouse-core/audits/themed-omnibox.js",WM);class ThemedOmnibox extends qM{static get meta(){return{id:"themed-omnibox",title:GM(WM.title),failureTitle:GM(WM.failureTitle),description:GM(WM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors","MetaElements"]}}static isValidColor(e){return VM.valueType(e)===VM.TYPES.COLOR}static assessMetaThemecolor(e,t){e?ThemedOmnibox.isValidColor(e.content||"")||t.push("The theme-color meta tag did not contain a valid CSS color"):t.push('No `<meta name="theme-color">` tag found')}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=e.allChecks.find((e=>"hasThemeColor"===e.id));r&&!r.passing&&t.push(r.failureText)}static async audit_(e,t){const r=[],a=e.MetaElements.find((e=>"theme-color"===e.name)),n=await zM.request(e,t);return ThemedOmnibox.assessManifest(n,r),ThemedOmnibox.assessMetaThemecolor(a,r),
1069
- {failures:r,manifestValues:n,themeColor:a?.content||null}}}$M.exports=ThemedOmnibox,$M.exports.UIStrings=WM;var HM={exports:{}},YM={exports:{}};const KM=kc,JM=oi,XM=uw,ZM=Lo,QM=Rv,{getJavaScriptURLs:eP,getAttributableURLForTask:tP}=Iv,rP={title:"Minimize third-party usage",failureTitle:"Reduce the impact of third-party code",description:"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).",columnThirdParty:"Third-Party",displayValue:"Third-party code blocked the main thread for {timeInMs, number, milliseconds} ms"},aP=JM.createMessageInstanceIdFn("lighthouse-core/audits/third-party-summary.js",rP);class ThirdPartySummary$1 extends KM{static get meta(){return{id:"third-party-summary",title:aP(rP.title),
1070
- failureTitle:aP(rP.failureTitle),description:aP(rP.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getSummaries(e,t,r){const a=new Map,n=new Map,i={mainThreadTime:0,blockingTime:0,transferSize:0};for(const t of e){const e=a.get(t.url)||{...i};e.transferSize+=t.transferSize,a.set(t.url,e)}const o=eP(e);for(const e of t){const t=tP(e,o),n=a.get(t)||{...i},s=e.selfTime*r;n.mainThreadTime+=s,n.blockingTime+=Math.max(s-50,0),a.set(t,n)}const s=new Map;for(const[e,t]of a.entries()){const r=XM.getEntity(e);if(!r){a.delete(e);continue}const o=n.get(r)||{...i};o.transferSize+=t.transferSize,o.mainThreadTime+=t.mainThreadTime,o.blockingTime+=t.blockingTime,n.set(r,o);const c=s.get(r)||[];c.push(e),s.set(r,c)}return{byURL:a,byEntity:n,urls:s}}static makeSubItems(e,t,r){let a=(t.urls.get(e)||[]).map((e=>({url:e,...t.byURL.get(e)}))).filter((e=>e.transferSize>0)).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize));const n={transferSize:0,blockingTime:0
1071
- },i=Math.max(4096,r.transferSize/20),o=Math.min(5,a.length);let s=0;for(;s<o;){const e=a[s];if(0===e.blockingTime&&e.transferSize<i)break;s++,n.transferSize+=e.transferSize,n.blockingTime+=e.blockingTime}if(!n.blockingTime&&!n.transferSize)return[];a=a.slice(0,s);const c={url:aP(JM.UIStrings.otherResourcesLabel),transferSize:r.transferSize-n.transferSize,blockingTime:r.blockingTime-n.blockingTime};return c.transferSize>i&&a.push(c),a}static async audit(e,t){const r=t.settings||{},a=e.traces[KM.DEFAULT_PASS],n=e.devtoolsLogs[KM.DEFAULT_PASS],i=await ZM.request(n,t),o=XM.getEntity(e.URL.finalUrl),s=await QM.request(a,t),c="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,l=ThirdPartySummary$1.getSummaries(i,s,c),u={wastedBytes:0,wastedMs:0},d=Array.from(l.byEntity.entries()).filter((([e])=>!(o&&o.name===e.name))).map((([e,t])=>(u.wastedBytes+=t.transferSize,u.wastedMs+=t.blockingTime,{...t,entity:{type:"link",text:e.name,url:e.homepage||""},subItems:{type:"subitems",
1072
- items:ThirdPartySummary$1.makeSubItems(e,l,t)}}))).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize)),m=[{key:"entity",itemType:"link",text:aP(rP.columnThirdParty),subItemsHeading:{key:"url",itemType:"url"}},{key:"transferSize",granularity:1,itemType:"bytes",text:aP(JM.UIStrings.columnTransferSize),subItemsHeading:{key:"transferSize"}},{key:"blockingTime",granularity:1,itemType:"ms",text:aP(JM.UIStrings.columnBlockingTime),subItemsHeading:{key:"blockingTime"}}];return d.length?{score:Number(u.wastedMs<=250),displayValue:aP(rP.displayValue,{timeInMs:u.wastedMs}),details:KM.makeTableDetails(m,d,u)}:{score:1,notApplicable:!0}}}YM.exports=ThirdPartySummary$1,YM.exports.UIStrings=rP;const nP=kc,iP=oi,oP=uw,sP=Lo,cP=HT,lP=Rv,uP=YM.exports,dP={title:"Lazy load third-party resources with facades",failureTitle:"Some third-party resources can be lazy loaded with a facade",
1073
- description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn more](https://web.dev/third-party-facades/).",displayValue:"{itemCount, plural,\n =1 {# facade alternative available}\n other {# facade alternatives available}\n }",columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},mP=iP.createMessageInstanceIdFn("lighthouse-core/audits/third-party-facades.js",dP),pP={video:dP.categoryVideo,"customer-success":dP.categoryCustomerSuccess,marketing:dP.categoryMarketing,social:dP.categorySocial};class ThirdPartyFacades extends nP{static get meta(){return{id:"third-party-facades",title:mP(dP.title),failureTitle:mP(dP.failureTitle),description:mP(dP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static condenseItems(e){
1074
- e.sort(((e,t)=>t.transferSize-e.transferSize));let t=e.findIndex((e=>e.transferSize<1e3))||1;if((-1===t||t>5)&&(t=5),t>=e.length-1)return;const r=e.splice(t).reduce(((e,t)=>(e.transferSize+=t.transferSize,e.blockingTime+=t.blockingTime,e)));r.transferSize<1e3||(r.url=mP(iP.UIStrings.otherResourcesLabel),e.push(r))}static getProductsWithFacade(e,t){const r=new Map;for(const a of e.keys()){const e=oP.getEntity(a);if(!e||oP.isFirstParty(a,t))continue;const n=oP.getProduct(a);n&&n.facades&&n.facades.length&&(r.has(n.name)||r.set(n.name,{product:n,entity:e}))}return Array.from(r.values())}static async audit(e,t){const r=t.settings,a=e.traces[nP.DEFAULT_PASS],n=e.devtoolsLogs[nP.DEFAULT_PASS],i=await sP.request(n,t),o=await cP.request({devtoolsLog:n,URL:e.URL},t),s=oP.getEntity(o.url),c=await lP.request(a,t),l="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,u=uP.getSummaries(i,c,l),d=ThirdPartyFacades.getProductsWithFacade(u.byURL,s),m=[]
1075
- ;for(const{product:e,entity:t}of d){const r=pP[e.categories[0]];let a;a=r?mP(r,{productName:e.name}):e.name;const n=u.urls.get(t),i=u.byEntity.get(t);if(!n||!i)continue;const o=Array.from(n).map((e=>({url:e,...u.byURL.get(e)})));this.condenseItems(o),m.push({product:a,transferSize:i.transferSize,blockingTime:i.blockingTime,subItems:{type:"subitems",items:o}})}if(!m.length)return{score:1,notApplicable:!0};const p=[{key:"product",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:mP(dP.columnProduct)},{key:"transferSize",itemType:"bytes",subItemsHeading:{key:"transferSize"},granularity:1,text:mP(iP.UIStrings.columnTransferSize)},{key:"blockingTime",itemType:"ms",subItemsHeading:{key:"blockingTime"},granularity:1,text:mP(iP.UIStrings.columnBlockingTime)}];return{score:0,displayValue:mP(dP.displayValue,{itemCount:m.length}),details:nP.makeTableDetails(p,m)}}}HM.exports=ThirdPartyFacades,HM.exports.UIStrings=dP;var hP={exports:{}};const gP=kc,fP=CD,yP=HT,vP=Tu,bP=oi,wP={
1076
- title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},SP=bP.createMessageInstanceIdFn("lighthouse-core/audits/timing-budget.js",wP);hP.exports=class TimingBudget extends gP{static get meta(){return{id:"timing-budget",title:SP(wP.title),description:SP(wP.description),scoreDisplayMode:gP.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL","GatherContext"]}}static getRowLabel(e){const t={"first-contentful-paint":bP.UIStrings.firstContentfulPaintMetric,interactive:bP.UIStrings.interactiveMetric,"first-meaningful-paint":bP.UIStrings.firstMeaningfulPaintMetric,"max-potential-fid":bP.UIStrings.maxPotentialFIDMetric,"total-blocking-time":bP.UIStrings.totalBlockingTimeMetric,
1077
- "speed-index":bP.UIStrings.speedIndexMetric,"largest-contentful-paint":bP.UIStrings.largestContentfulPaintMetric,"cumulative-layout-shift":bP.UIStrings.cumulativeLayoutShiftMetric};return SP(t[e])}static getMeasurement(e,t){return{"first-contentful-paint":t.firstContentfulPaint,interactive:t.interactive,"first-meaningful-paint":t.firstMeaningfulPaint,"max-potential-fid":t.maxPotentialFID,"total-blocking-time":t.totalBlockingTime,"speed-index":t.speedIndex,"largest-contentful-paint":t.largestContentfulPaint,"cumulative-layout-shift":t.cumulativeLayoutShift}[e]}static tableItems(e,t){let r=[];if(!e.timings)return r;r=e.timings.map((e=>{const r=e.metric,a=this.getRowLabel(r),n=this.getMeasurement(r,t);return{metric:r,label:a,measurement:n,overBudget:n&&n>e.budget?n-e.budget:void 0}})).sort(((e,t)=>(t.overBudget||0)-(e.overBudget||0)));const a=r.find((e=>"cumulative-layout-shift"===e.metric));return a&&("number"==typeof a.measurement&&(a.measurement={type:"numeric",
1078
- value:Number(a.measurement),granularity:.01}),"number"==typeof a.overBudget&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),r}static async audit(e,t){const r=e.GatherContext,a=e.devtoolsLogs[gP.DEFAULT_PASS],n=e.traces[gP.DEFAULT_PASS],i=await yP.request({URL:e.URL,devtoolsLog:a},t),o={trace:n,devtoolsLog:a,gatherContext:r,settings:t.settings},s=(await fP.request(o,t)).metrics,c=vP.getMatchingBudget(t.settings.budgets,i.url);if(!c)return{score:0,notApplicable:!0};const l=[{key:"label",itemType:"text",text:SP(wP.columnTimingMetric)},{key:"measurement",itemType:"ms",text:SP(wP.columnMeasurement)},{key:"overBudget",itemType:"ms",text:SP(bP.UIStrings.columnOverBudget)}];return{details:gP.makeTableDetails(l,this.tableItems(c,s)),score:1}}},hP.exports.UIStrings=wP;var TP={exports:{}};const EP=kc,xP=oi,_P=ji,AP={title:"Image elements have explicit `width` and `height`",failureTitle:"Image elements do not have explicit `width` and `height`",
1079
- description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn more](https://web.dev/optimize-cls/#images-without-dimensions)"},RP=xP.createMessageInstanceIdFn("lighthouse-core/audits/unsized-images.js",AP);class UnsizedImages extends EP{static get meta(){return{id:"unsized-images",title:RP(AP.title),failureTitle:RP(AP.failureTitle),description:RP(AP.description),requiredArtifacts:["ImageElements"]}}static doesHtmlAttrProvideExplicitSize(e){if(!e)return!1;if(e.startsWith("+"))return!1;return parseInt(e,10)>=0}static isCssPropExplicitlySet(e){return!!e&&!["auto","initial","unset","inherit"].includes(e)}static isSizedImage(e){if(void 0===e.cssEffectiveRules)return!0
1080
- ;const t=e.attributeWidth,r=e.attributeHeight,a=e.cssEffectiveRules.width,n=e.cssEffectiveRules.height,i=e.cssEffectiveRules.aspectRatio,o=UnsizedImages.doesHtmlAttrProvideExplicitSize(t),s=UnsizedImages.isCssPropExplicitlySet(a),c=UnsizedImages.doesHtmlAttrProvideExplicitSize(r),l=UnsizedImages.isCssPropExplicitlySet(n),u=UnsizedImages.isCssPropExplicitlySet(i),d=o||s,m=c||l;return d&&m||d&&u||m&&u}static isNonNetworkSvg(e){const t="image/svg+xml"===_P.guessMimeType(e.src),r=e.src.slice(0,e.src.indexOf(":")),a=_P.isNonNetworkProtocol(r);return t&&a}static async audit(e){const t=e.ImageElements.filter((e=>!e.isCss&&!e.isInShadowDOM)),r=[];for(const e of t){if("fixed"===e.computedStyles.position||"absolute"===e.computedStyles.position)continue;if(UnsizedImages.isNonNetworkSvg(e))continue;if(UnsizedImages.isSizedImage(e))continue;const t=e.node.boundingRect;0===t.width&&0===t.height||r.push({url:_P.elideDataURI(e.src),node:EP.makeNodeItem(e.node)})}const a=[{key:"node",itemType:"node",
1081
- text:""},{key:"url",itemType:"url",text:RP(xP.UIStrings.columnURL)}];return{score:r.length>0?0:1,notApplicable:0===t.length,details:EP.makeTableDetails(a,r)}}}TP.exports=UnsizedImages,TP.exports.UIStrings=AP;var kP={exports:{}};const DP=Ao,CP=Yp;var IP=DP(class UserTimings$1{static async compute_(e,t){const r=await CP.request(e,t),a=[],n={};return r.processEvents.filter((e=>!!e.cat.includes("blink.user_timing")&&("requestStart"!==e.name&&"navigationStart"!==e.name&&"paintNonDefaultBackgroundColor"!==e.name&&void 0===e.args.frame))).forEach((e=>{"R"===e.ph||"I"===e.ph.toUpperCase()?a.push({name:e.name,isMark:!0,args:e.args,startTime:e.ts}):"b"===e.ph.toLowerCase()?n[e.name]=e.ts:"e"===e.ph.toLowerCase()&&a.push({name:e.name,isMark:!1,args:e.args,startTime:n[e.name],endTime:e.ts,duration:e.ts-n[e.name]})})),a.forEach((e=>{e.startTime=(e.startTime-r.timeOriginEvt.ts)/1e3,e.isMark||(e.endTime=(e.endTime-r.timeOriginEvt.ts)/1e3,e.duration=e.duration/1e3)})),a}},null)
1082
- ;const NP=kc,LP=oi,MP=IP,PP={title:"User Timing marks and measures",description:"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more](https://web.dev/user-timings/).",displayValue:"{itemCount, plural,\n =1 {1 user timing}\n other {# user timings}\n }",columnType:"Type"},OP=LP.createMessageInstanceIdFn("lighthouse-core/audits/user-timings.js",PP);class UserTimings extends NP{static get meta(){return{id:"user-timings",title:OP(PP.title),description:OP(PP.description),scoreDisplayMode:NP.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces"]}}static get excludedPrefixes(){return["goog_"]}static excludeEvent(e){return UserTimings.excludedPrefixes.every((t=>!e.name.startsWith(t)))}static audit(e,t){const r=e.traces[NP.DEFAULT_PASS];return MP.request(r,t).then((e=>{const t=e.filter(UserTimings.excludeEvent),r=t.map((e=>({name:e.name,startTime:e.startTime,duration:e.isMark?void 0:e.duration,
1083
- timingType:e.isMark?"Mark":"Measure"}))).sort(((e,t)=>e.timingType===t.timingType?e.startTime-t.startTime:"Measure"===e.timingType?-1:1)),a=[{key:"name",itemType:"text",text:OP(LP.UIStrings.columnName)},{key:"timingType",itemType:"text",text:OP(PP.columnType)},{key:"startTime",itemType:"ms",granularity:.01,text:OP(LP.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:.01,text:OP(LP.UIStrings.columnDuration)}],n=NP.makeTableDetails(a,r);let i;return t.length&&(i=OP(PP.displayValue,{itemCount:t.length})),{score:Number(0===t.length),notApplicable:0===t.length,displayValue:i,details:n}}))}}kP.exports=UserTimings,kP.exports.UIStrings=PP;var FP={exports:{}};const UP=kc,jP=Ib,BP=ji,$P=oi,qP=Lo,zP=HT,VP=Dl,WP=Yp,GP=Xp,HP=eb,YP=vk,KP={title:"Preconnect to required origins",description:"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn more](https://web.dev/uses-rel-preconnect/).",
1084
- unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},JP=$P.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preconnect.js",KP);class UsesRelPreconnectAudit extends UP{static get meta(){return{id:"uses-rel-preconnect",title:JP(KP.title),description:JP(KP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL","LinkElements"],scoreDisplayMode:UP.SCORING_MODES.NUMERIC}}static hasValidTiming(e){return!!e.timing&&e.timing.connectEnd>0&&e.timing.connectStart>0}
1085
- static hasAlreadyConnectedToOrigin(e){return!!e.timing&&e.timing.dnsEnd-e.timing.dnsStart==0&&e.timing.connectEnd-e.timing.connectStart==0}static socketStartTimeIsBelowThreshold(e,t){return Math.max(0,e.startTime-t.endTime)<15}static async audit(e,t){const r=e.traces[UsesRelPreconnectAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS],n=t.settings;let i=0;const o=[],s=await WP.request(r,t),[c,l,u,d,m]=await Promise.all([qP.request(a,t),zP.request({devtoolsLog:a,URL:e.URL},t),VP.request({devtoolsLog:a,settings:n},t),GP.request(s,t),HP.request({trace:r,devtoolsLog:a},t)]),{rtt:p,additionalRttByOrigin:h}=u.getOptions(),f=await YP.getPessimisticGraph(m,d),y=new Set;f.traverse((e=>{"network"===e.type&&y.add(e.record.url)}));const v=new Map;c.forEach((e=>{
1086
- if(!UsesRelPreconnectAudit.hasValidTiming(e)||e.initiator.url===l.url||!e.parsedURL||!e.parsedURL.securityOrigin||l.parsedURL.securityOrigin===e.parsedURL.securityOrigin||!y.has(e.url)||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(e)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(e,l))return;const t=e.parsedURL.securityOrigin,r=v.get(t)||[];r.push(e),v.set(t,r)}));const b=e.LinkElements.filter((e=>"preconnect"===e.rel)),w=new Set(b.map((e=>BP.getOrigin(e.href||""))));let S=[];v.forEach((e=>{const t=e.reduce(((e,t)=>t.startTime<e.startTime?t:e));if(!t.timing)return;const r=t.parsedURL.securityOrigin,a=h.get(r)||0;let n=p+a;"https"===t.parsedURL.scheme&&(n*=2);const s=1e3*t.startTime-1e3*l.endTime+t.timing.dnsStart,c=Math.min(n,s);c<50||(w.has(r)?o.push(JP(KP.crossoriginWarning,{securityOrigin:r})):(i=Math.max(c,i),S.push({url:r,wastedMs:c})))})),S=S.sort(((e,t)=>t.wastedMs-e.wastedMs))
1087
- ;for(const e of w)e&&(c.some((t=>e===t.parsedURL.securityOrigin))||o.push(JP(KP.unusedWarning,{securityOrigin:e})));if(b.length>=2)return{score:1,warnings:b.length>=3?[...o,JP(KP.tooManyPreconnectLinksWarning)]:o};const T=[{key:"url",valueType:"url",label:JP($P.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:JP($P.UIStrings.columnWastedMs)}],E=UP.makeOpportunityDetails(T,S,i);return{score:jP.scoreForWastedMs(i),numericValue:i,numericUnit:"millisecond",displayValue:i?JP($P.UIStrings.displayValueMsSavings,{wastedMs:i}):"",warnings:o,details:E}}}FP.exports=UsesRelPreconnectAudit,FP.exports.UIStrings=KP;var XP={exports:{}};const ZP=ji,QP=Ki,eO=kc,tO=Ib,rO=ZT,aO=oi,nO=HT,iO=eb,oO=Dl,sO={title:"Preload key requests",description:"Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).",
1088
- crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},cO=aO.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preload.js",sO);class UsesRelPreloadAudit extends eO{static get meta(){return{id:"uses-rel-preload",title:cO(sO.title),description:cO(sO.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL"],scoreDisplayMode:eO.SCORING_MODES.NUMERIC}}static getURLsToPreload(e,t){const r=new Set;return t.traverse(((t,a)=>{if("network"!==t.type)return;const n=a.slice(1).filter((e=>"network"===e.type));UsesRelPreloadAudit.shouldPreloadRequest(t.record,e,n)&&r.add(t.record.url)})),r}static getURLsFailedToPreload(e){const t=[];e.traverse((e=>"network"===e.type&&t.push(e.record)));const r=t.filter((e=>e.isLinkPreload)),a=new Map;for(const e of r){const t=a.get(e.frameId)||new Set;t.add(e.url),a.set(e.frameId,t)}const n=t.filter((e=>{
1089
- const t=a.get(e.frameId);if(!t)return!1;if(!t.has(e.url))return!1;return!(e.fromDiskCache||e.fromMemoryCache||e.fromPrefetchCache)&&!e.isLinkPreload}));return new Set(n.map((e=>e.url)))}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!!rO.isCritical(e,t)&&(!QP.isNonNetworkRequest(e)&&(r.length===a+2&&(e.frameId===t.frameId&&ZP.rootDomainsMatch(e.url,t.url)))))}static computeWasteWithGraph(e,t,r){if(!e.size)return{wastedMs:0,results:[]};const a=r.simulate(t,{flexibleOrdering:!0}),n=t.cloneWithRelationships(),i=[];let o=null;if(n.traverse((t=>{"network"===t.type&&(t.isMainDocument()?o=t:t.record&&e.has(t.record.url)&&i.push(t))})),!o)throw new Error("Could not find main document node");for(const e of i)e.removeAllDependencies(),e.addDependency(o);const s=r.simulate(n,{flexibleOrdering:!0}),c=Array.from(a.nodeTimings.keys()).reduce(((e,t)=>e.set(t.record,t)),new Map),l=[];for(const e of i){
1090
- const t=c.get(e.record),r=s.nodeTimings.get(e),n=a.nodeTimings.get(t);if(!n||!r)throw new Error("Missing preload node");const i=Math.round(n.endTime-r.endTime);i<100||l.push({url:e.record.url,wastedMs:i})}return l.length?{wastedMs:Math.max(...l.map((e=>e.wastedMs))),results:l}:{wastedMs:0,results:l}}static async audit_(e,t){const r=e.traces[UsesRelPreloadAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS],n=e.URL,i={devtoolsLog:a,settings:t.settings},[o,s,c]=await Promise.all([nO.request({devtoolsLog:a,URL:n},t),iO.request({trace:r,devtoolsLog:a},t),oO.request(i,t)]),l=UsesRelPreloadAudit.getURLsToPreload(o,s),{results:u,wastedMs:d}=UsesRelPreloadAudit.computeWasteWithGraph(l,s,c);let m;u.sort(((e,t)=>t.wastedMs-e.wastedMs));const p=UsesRelPreloadAudit.getURLsFailedToPreload(s);p.size&&(m=Array.from(p).map((e=>cO(sO.crossoriginWarning,{preloadURL:e}))));const h=[{key:"url",valueType:"url",label:cO(aO.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",
1091
- label:cO(aO.UIStrings.columnWastedMs)}],f=eO.makeOpportunityDetails(h,u,d);return{score:tO.scoreForWastedMs(d),numericValue:d,numericUnit:"millisecond",displayValue:d?cO(aO.UIStrings.displayValueMsSavings,{wastedMs:d}):"",details:f,warnings:m}}static async audit(){return{score:1,notApplicable:!0,details:eO.makeOpportunityDetails([],[],0)}}}XP.exports=UsesRelPreloadAudit,XP.exports.UIStrings=sO;var lO={exports:{}};
1044
+ Robots$1.prototype.getPreferredHost=function(){return this._preferredHost},Robots$1.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};var wL=Robots$1;const SL=kc,robotsParser=function(e,t){return new wL(e,t)},TL=ji,EL=GT,xL=new Set(["noindex","none"]),_L="unavailable_after",AL={title:"Page isn’t blocked from indexing",failureTitle:"Page is blocked from indexing",description:"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://web.dev/is-crawable/)."},RL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/is-crawlable.js",AL);function hasBlockingDirective(e){return e.split(",").map((e=>e.toLowerCase().trim())).some((e=>xL.has(e)||function isUnavailable(e){const t=e.split(":");if(t.length<=1||t[0]!==_L)return!1;const r=Date.parse(t.slice(1).join(":"));return!isNaN(r)&&r<Date.now()}(e)))}bL.exports=class IsCrawlable extends SL{static get meta(){return{id:"is-crawlable",title:RL(AL.title),
1045
+ failureTitle:RL(AL.failureTitle),description:RL(AL.description),supportedModes:["navigation"],requiredArtifacts:["MetaElements","RobotsTxt","URL","devtoolsLogs"]}}static audit(e,t){const r=e.devtoolsLogs[SL.DEFAULT_PASS],a=e.MetaElements.find((e=>"robots"===e.name));return EL.request({devtoolsLog:r,URL:e.URL},t).then((t=>{const r=[];if(a){const e=a.content||"";hasBlockingDirective(e)&&r.push({source:{...SL.makeNodeItem(a.node),snippet:`<meta name="robots" content="${e}" />`}})}if(t.responseHeaders&&t.responseHeaders.filter((e=>"x-robots-tag"===e.name.toLowerCase()&&!function hasUserAgent(e){const t=e.match(/^([^,:]+):/);return!!t&&t[1].toLowerCase()!==_L}(e.value)&&hasBlockingDirective(e.value))).forEach((e=>r.push({source:`${e.name}: ${e.value}`}))),e.RobotsTxt.content){const a=new TL("/robots.txt",t.url),n=robotsParser(a.href,e.RobotsTxt.content);if(!n.isAllowed(t.url)){const e=n.getMatchingLineNumber(t.url)||1;r.push({source:{type:"source-location",url:a.href,urlProvider:"network",
1046
+ line:e-1,column:0}})}}const n=SL.makeTableDetails([{key:"source",itemType:"code",text:"Blocking Directive Source"}],r);return{score:Number(0===r.length),details:n}}))}},bL.exports.UIStrings=AL;var kL={exports:{}};const DL=kc,CL=ji,IL=new Set(["click here","click this","go","here","information","learn more","more","more info","more information","right here","read more","see more","start","this","ここをクリック","こちらをクリック","リンク","続きを読む","続く","全文表示","click aquí","click aqui","clicka aquí","clicka aqui","pincha aquí","pincha aqui","aquí","aqui","más","mas","más información","más informacion","mas información","mas informacion","este","enlace","este enlace","empezar","clique aqui","ir","mais informação","mais informações","mais","veja mais","여기","여기를 클릭","클릭","링크","자세히","자세히 보기","계속","이동","전체 보기","här","klicka här","läs mer","mer","mer info","mer information"]),NL={title:"Links have descriptive text",failureTitle:"Links do not have descriptive text",
1047
+ description:"Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).",displayValue:"{itemCount, plural,\n =1 {1 link found}\n other {# links found}\n }"},LL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/link-text.js",NL);kL.exports=class LinkText extends DL{static get meta(){return{id:"link-text",title:LL(NL.title),failureTitle:LL(NL.failureTitle),description:LL(NL.description),requiredArtifacts:["URL","AnchorElements"]}}static audit(e){const t=e.AnchorElements.filter((e=>e.href&&!e.rel.includes("nofollow"))).filter((t=>{const r=t.href.toLowerCase();return!(r.startsWith("javascript:")||r.startsWith("mailto:")||CL.equalWithExcludedFragments(t.href,e.URL.finalUrl))&&IL.has(t.text.trim().toLowerCase())})).map((e=>({href:e.href,text:e.text.trim()}))),r=DL.makeTableDetails([{key:"href",itemType:"url",text:"Link destination"},{key:"text",itemType:"text",text:"Link Text"}],t,{});let a
1048
+ ;return t.length&&(a=LL(NL.displayValue,{itemCount:t.length})),{score:Number(0===t.length),details:r,displayValue:a}}},kL.exports.UIStrings=NL;var ML={exports:{}};const PL=iy,OL={description:"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://web.dev/structured-data/).",title:"Structured data is valid"},FL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/manual/structured-data.js",OL);ML.exports=class StructuredData extends PL{static get meta(){return Object.assign({id:"structured-data",description:FL(OL.description),title:FL(OL.title)},super.partialMeta)}},ML.exports.UIStrings=OL;var UL={exports:{}};const jL=kc,BL={title:"Document has a meta description",failureTitle:"Document does not have a meta description",
1049
+ description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).",explanation:"Description text is empty."},$L=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/meta-description.js",BL);UL.exports=class Description extends jL{static get meta(){return{id:"meta-description",title:$L(BL.title),failureTitle:$L(BL.failureTitle),description:$L(BL.description),requiredArtifacts:["MetaElements"]}}static audit(e){const t=e.MetaElements.find((e=>"description"===e.name));if(!t)return{score:0};return 0===(t.content||"").trim().length?{score:0,explanation:$L(BL.explanation)}:{score:1}}},UL.exports.UIStrings=BL;var qL={exports:{}};const zL=kc,VL=ji,WL="application/x-java-applet",HL="application/x-java-bean",GL=new Set(["application/x-shockwave-flash",WL,HL,"application/x-silverlight","application/x-silverlight-2"]),YL=new Set(["swf","flv","class","xap"]),KL=new Set(["code","movie","source","src"]),JL={
1050
+ title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/)."},XL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/plugins.js",JL);function isPluginURL(e){try{const t=new VL(e,"http://example.com").pathname.split(".");if(t.length<2)return!1;const r=t[t.length-1];return YL.has(r.trim().toLowerCase())}catch(e){return!1}}qL.exports=class Plugins extends zL{static get meta(){return{id:"plugins",title:XL(JL.title),failureTitle:XL(JL.failureTitle),description:XL(JL.description),requiredArtifacts:["EmbeddedContent"]}}static audit(e){const t=e.EmbeddedContent.filter((e=>{if("APPLET"===e.tagName)return!0;if(("EMBED"===e.tagName||"OBJECT"===e.tagName)&&e.type&&function isPluginType(e){return e=e.trim().toLowerCase(),GL.has(e)||e.startsWith(WL)||e.startsWith(HL)}(e.type))return!0;const t=e.src||e.code
1051
+ ;if("EMBED"===e.tagName&&t&&isPluginURL(t))return!0;if("OBJECT"===e.tagName&&e.data&&isPluginURL(e.data))return!0;return e.params.filter((e=>KL.has(e.name.trim().toLowerCase())&&isPluginURL(e.value))).length>0})).map((e=>({source:zL.makeNodeItem(e.node)}))),r=zL.makeTableDetails([{key:"source",itemType:"code",text:"Element source"}],t);return{score:Number(0===t.length),details:r}}},qL.exports.UIStrings=JL;var ZL={exports:{}};const QL=kc,eM=ji,tM="sitemap",rM="user-agent",aM="allow",nM="disallow",iM=new Set([aM,nM]),oM=new Set([rM,nM,aM,tM,"crawl-delay","clean-param","host","request-rate","visit-time","noindex"]),sM=new Set(["https:","http:","ftp:"]),cM={title:"robots.txt is valid",failureTitle:"robots.txt is not valid",description:"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more](https://web.dev/robots-txt/).",displayValueHttpBadCode:"Request for robots.txt returned HTTP status: {statusCode}",
1052
+ displayValueValidationError:"{itemCount, plural,\n =1 {1 error found}\n other {# errors found}\n }",explanation:"Lighthouse was unable to download a robots.txt file"},lM=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/robots-txt.js",cM);function parseLine(e){const t=e.indexOf("#");if(-1!==t&&(e=e.substr(0,t)),0===(e=e.trim()).length)return null;const r=e.indexOf(":");if(-1===r)throw new Error("Syntax not understood");const a=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim();return function verifyDirective(e,t){if(!oM.has(e))throw new Error("Unknown directive");if(e===tM){let e;try{e=new eM(t)}catch(e){throw new Error("Invalid sitemap URL")}if(!sM.has(e.protocol))throw new Error("Invalid sitemap URL protocol")}if(e===rM&&!t)throw new Error("No user-agent specified");if(e===aM||e===nM){if(""!==t&&"/"!==t[0]&&"*"!==t[0])throw new Error('Pattern should either be empty, start with "/" or "*"');const e=t.indexOf("$")
1053
+ ;if(-1!==e&&e!==t.length-1)throw new Error('"$" should only be used at the end of the pattern')}}(a,n),{directive:a,value:n}}ZL.exports=class RobotsTxt extends QL{static get meta(){return{id:"robots-txt",title:lM(cM.title),failureTitle:lM(cM.failureTitle),description:lM(cM.description),requiredArtifacts:["RobotsTxt"]}}static audit(e){const{status:t,content:r}=e.RobotsTxt;if(!t)return{score:0,explanation:lM(cM.explanation)};if(t>=500)return{score:0,displayValue:lM(cM.displayValueHttpBadCode,{statusCode:t})};if(t>=400||""===r)return{score:1,notApplicable:!0};if(null===r)throw new Error(`Status ${t} was valid, but content was null`);const a=function validateRobots(e){const t=[];let r=!1;return e.split(/\r\n|\r|\n/).forEach(((e,a)=>{let n;try{n=parseLine(e)}catch(r){t.push({index:(a+1).toString(),line:e,message:r.message.toString()})}n&&(n.directive===rM?r=!0:!r&&iM.has(n.directive)&&t.push({index:(a+1).toString(),line:e,message:"No user-agent specified"}))})),t
1054
+ }(r),n=QL.makeTableDetails([{key:"index",itemType:"text",text:"Line #"},{key:"line",itemType:"code",text:"Content"},{key:"message",itemType:"code",text:"Error"}],a,{});let i;return a.length&&(i=lM(cM.displayValueValidationError,{itemCount:a.length})),{score:Number(0===a.length),details:n,displayValue:i}}},ZL.exports.UIStrings=cM;var uM={exports:{}};const dM=kp;function almostEqual(e,t){return Math.abs(e-t)<=10}function mergeTouchingClientRects(e){for(let t=0;t<e.length;t++)for(let r=t+1;r<e.length;r++){const a=e[t],n=e[r],i=almostEqual(a.top,n.top)||almostEqual(a.bottom,n.bottom),o=almostEqual(a.left,n.left)||almostEqual(a.right,n.right);if(dM.rectsTouchOrOverlap(a,n)&&(i||o)){const t=dM.getBoundingRect([a,n]),r=dM.getRectCenterPoint(t);if(!dM.rectContainsPoint(a,r)&&!dM.rectContainsPoint(n,r))continue;return(e=e.filter((e=>e!==a&&e!==n))).push(t),mergeTouchingClientRects(e)}}return e}var mM={getTappableRectsFromClientRects:function getTappableRectsFromClientRects$1(e){
1055
+ return e=dM.filterOutTinyRects(e),e=mergeTouchingClientRects(e=dM.filterOutRectsContainedByOthers(e))}};const pM=kc,hM=QN,{rectsTouchOrOverlap:gM,getRectOverlapArea:fM,getRectAtCenter:yM,allRectsContainedWithinEachOther:vM,getLargestRect:bM,getBoundingRectWithPadding:wM}=kp,{getTappableRectsFromClientRects:SM}=mM,TM=oi,EM={title:"Tap targets are sized appropriately",failureTitle:"Tap targets are not sized appropriately",description:"Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://web.dev/tap-targets/).",tapTargetHeader:"Tap Target",overlappingTargetHeader:"Overlapping Target",explanationViewportMetaNotOptimized:"Tap targets are too small because there's no viewport meta tag optimized for mobile screens",displayValue:"{decimalProportion, number, percent} appropriately sized tap targets"
1056
+ },xM=TM.createMessageInstanceIdFn("lighthouse-core/audits/seo/tap-targets.js",EM);function clientRectBelowMinimumSize(e){return e.width<48||e.height<48}function getOverlapFailureForTargetPair(e,t){let r=null;for(const a of e){const e=yM(a,48),n=fM(e,a);for(const a of t){const t=fM(e,a),i=t/n;i<.25||(!r||i>r.overlapScoreRatio)&&(r={overlapScoreRatio:i,tapTargetScore:n,overlappingTargetScore:t})}}return r}class TapTargets extends pM{static get meta(){return{id:"tap-targets",title:xM(EM.title),failureTitle:xM(EM.failureTitle),description:xM(EM.description),requiredArtifacts:["MetaElements","TapTargets"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await hM.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:xM(EM.explanationViewportMetaNotOptimized)};const r=function getBoundedTapTargets(e){return e.map((e=>({tapTarget:e,paddedBoundsRect:wM(e.clientRects,48)})))}(e.TapTargets),a=function getAllOverlapFailures(e,t){
1057
+ const r=[];return e.forEach((e=>{const a=SM(e.tapTarget.clientRects);for(const n of t){if(n===e)continue;if(!gM(e.paddedBoundsRect,n.paddedBoundsRect))continue;if(e.tapTarget.href===n.tapTarget.href&&/https?:\/\//.test(e.tapTarget.href))continue;const t=n.tapTarget.clientRects;if(vM(a,t))continue;const i=getOverlapFailureForTargetPair(a,t);i&&r.push({...i,tapTarget:e.tapTarget,overlappingTarget:n.tapTarget})}})),r}(function getTooSmallTargets(e){return e.filter((e=>e.tapTarget.clientRects.every(clientRectBelowMinimumSize)))}(r),r),n=function getTableItems(e){const t=e.map((e=>{const t=bM(e.tapTarget.clientRects),r=Math.floor(t.width),a=Math.floor(t.height),n=r+"x"+a;return{tapTarget:pM.makeNodeItem(e.tapTarget.node),overlappingTarget:pM.makeNodeItem(e.overlappingTarget.node),tapTargetScore:e.tapTargetScore,overlappingTargetScore:e.overlappingTargetScore,overlapScoreRatio:e.overlapScoreRatio,size:n,width:r,height:a}}));return t.sort(((e,t)=>t.overlapScoreRatio-e.overlapScoreRatio)),t
1058
+ }(function mergeSymmetricFailures(e){const t=[];return e.forEach(((r,a)=>{const n=e.find((e=>e.tapTarget===r.overlappingTarget&&e.overlappingTarget===r.tapTarget));if(!n)return void t.push(r);const{overlapScoreRatio:i}=r,{overlapScoreRatio:o}=n;(i>o||i===o&&a<e.indexOf(n))&&t.push(r)})),t}(a)),i=[{key:"tapTarget",itemType:"node",text:xM(EM.tapTargetHeader)},{key:"size",itemType:"text",text:xM(TM.UIStrings.columnSize)},{key:"overlappingTarget",itemType:"node",text:xM(EM.overlappingTargetHeader)}],o=pM.makeTableDetails(i,n),s=e.TapTargets.length,c=new Set(a.map((e=>e.tapTarget))).size;let l=1,u=1;c>0&&(u=(s-c)/s,l=.89*u);return{score:l,details:o,displayValue:xM(EM.displayValue,{decimalProportion:u})}}}TapTargets.FINGER_SIZE_PX=48,uM.exports=TapTargets,uM.exports.UIStrings=EM;var _M={exports:{}};const AM=kc,RM=oi,kM=GT,DM=Lo,CM=Fo,IM={title:"Initial server response time was short",failureTitle:"Reduce initial server response time",
1059
+ description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).",displayValue:"Root document took {timeInMs, number, milliseconds} ms"},NM=RM.createMessageInstanceIdFn("lighthouse-core/audits/server-response-time.js",IM);class ServerResponseTime extends AM{static get meta(){return{id:"server-response-time",title:NM(IM.title),failureTitle:NM(IM.failureTitle),description:NM(IM.description),supportedModes:["timespan","navigation"],requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static calculateResponseTime(e){const t=e.timing;return t?t.receiveHeadersEnd-t.sendEnd:0}static async audit(e,t){const r=e.devtoolsLogs[AM.DEFAULT_PASS];let a;if("timespan"===e.GatherContext.gatherMode){const n=await DM.request(r,t),i=CM.findOptionalMainDocument(n,e.URL.finalUrl);if(!i)return{score:null,notApplicable:!0};a=i}else a=await kM.request({devtoolsLog:r,URL:e.URL},t)
1060
+ ;const n=ServerResponseTime.calculateResponseTime(a),i=n<600,o=NM(IM.displayValue,{timeInMs:n}),s=[{key:"url",valueType:"url",label:NM(RM.UIStrings.columnURL)},{key:"responseTime",valueType:"timespanMs",label:NM(RM.UIStrings.columnTimeSpent)}],c=AM.makeOpportunityDetails(s,[{url:a.url,responseTime:n}],n-100);return{numericValue:n,numericUnit:"millisecond",score:Number(i),displayValue:o,details:c}}}_M.exports=ServerResponseTime,_M.exports.UIStrings=IM;var LM={exports:{}};const MM=ji,PM=kc,OM={title:"Registers a service worker that controls page and `start_url`",failureTitle:"Does not register a service worker that controls page and `start_url`",description:"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://web.dev/service-worker/).",explanationOutOfScope:"This origin has one or more service workers, however the page ({pageUrl}) is not in scope.",
1061
+ explanationNoManifest:"This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched.",explanationBadManifest:"This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON",explanationBadStartUrl:"This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"},FM=oi.createMessageInstanceIdFn("lighthouse-core/audits/service-worker.js",OM);class ServiceWorker extends PM{static get meta(){return{id:"service-worker",title:FM(OM.title),failureTitle:FM(OM.failureTitle),description:FM(OM.description),requiredArtifacts:["URL","ServiceWorker","WebAppManifest"]}}static getVersionsForOrigin(e,t){return e.filter((e=>"activated"===e.status)).filter((e=>new MM(e.scriptURL).origin===t.origin))}static getControllingServiceWorker(e,t,r){const a=[];for(const r of e){const e=t.find((e=>e.registrationId===r.registrationId))
1062
+ ;if(e){const t=new MM(e.scopeURL).href,n=new MM(r.scriptURL).href;a.push({scopeUrl:t,scriptUrl:n})}}return a.filter((e=>r.href.startsWith(e.scopeUrl))).sort(((e,t)=>e.scopeUrl.length-t.scopeUrl.length)).pop()}static checkStartUrl(e,t){if(!e)return FM(OM.explanationNoManifest);if(!e.value)return FM(OM.explanationBadManifest);const r=e.value.start_url.value;return r.startsWith(t)?void 0:FM(OM.explanationBadStartUrl,{startUrl:r,scopeUrl:t})}static audit(e){const t=new MM(e.URL.finalUrl),{versions:r,registrations:a}=e.ServiceWorker,n=ServiceWorker.getVersionsForOrigin(r,t);if(0===n.length)return{score:0};const i=ServiceWorker.getControllingServiceWorker(n,a,t);if(!i)return{score:0,explanation:FM(OM.explanationOutOfScope,{pageUrl:t.href})};const{scriptUrl:o,scopeUrl:s}=i,c={type:"debugdata",scriptUrl:o,scopeUrl:s},l=ServiceWorker.checkStartUrl(e.WebAppManifest,i.scopeUrl);return l?{score:0,details:c,explanation:l}:{score:1,details:c}}}LM.exports=ServiceWorker,LM.exports.UIStrings=OM
1063
+ ;var UM={exports:{}};const jM=kc;var BM=class MultiCheckAudit$2 extends jM{static async audit(e,t){const r=await this.audit_(e,t);return this.createAuditProduct(r)}static createAuditProduct(e){const t={...e,...e.manifestValues,manifestValues:void 0,allChecks:void 0};e.manifestValues?.allChecks&&e.manifestValues.allChecks.forEach((e=>{t[e.id]=e.passing}));const r={type:"debugdata",items:[t]};return e.failures.length>0?{score:0,explanation:`Failures: ${e.failures.join(",\n")}.`,details:r}:{score:1,details:r}}static audit_(e,t){throw new Error("audit_ unimplemented")}};const $M=BM,qM=LA,zM={title:"Configured for a custom splash screen",failureTitle:"Is not configured for a custom splash screen",description:"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://web.dev/splash-screen/)."},VM=oi.createMessageInstanceIdFn("lighthouse-core/audits/splash-screen.js",zM);class SplashScreen extends $M{static get meta(){
1064
+ return{id:"splash-screen",title:VM(zM.title),failureTitle:VM(zM.failureTitle),description:VM(zM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=["hasName","hasBackgroundColor","hasThemeColor","hasIconsAtLeast512px"];e.allChecks.filter((e=>r.includes(e.id))).forEach((e=>{e.passing||t.push(e.failureText)}))}static async audit_(e,t){const r=[],a=await qM.request(e,t);return SplashScreen.assessManifest(a,r),{failures:r,manifestValues:a}}}UM.exports=SplashScreen,UM.exports.UIStrings=zM;var WM={exports:{}};const HM=BM,GM=LA,YM=Rs,KM={title:"Sets a theme color for the address bar.",failureTitle:"Does not set a theme color for the address bar.",description:"The browser address bar can be themed to match your site. [Learn more](https://web.dev/themed-omnibox/)."
1065
+ },JM=oi.createMessageInstanceIdFn("lighthouse-core/audits/themed-omnibox.js",KM);class ThemedOmnibox extends HM{static get meta(){return{id:"themed-omnibox",title:JM(KM.title),failureTitle:JM(KM.failureTitle),description:JM(KM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors","MetaElements"]}}static isValidColor(e){return YM.valueType(e)===YM.TYPES.COLOR}static assessMetaThemecolor(e,t){e?ThemedOmnibox.isValidColor(e.content||"")||t.push("The theme-color meta tag did not contain a valid CSS color"):t.push('No `<meta name="theme-color">` tag found')}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=e.allChecks.find((e=>"hasThemeColor"===e.id));r&&!r.passing&&t.push(r.failureText)}static async audit_(e,t){const r=[],a=e.MetaElements.find((e=>"theme-color"===e.name)),n=await GM.request(e,t);return ThemedOmnibox.assessManifest(n,r),ThemedOmnibox.assessMetaThemecolor(a,r),
1066
+ {failures:r,manifestValues:n,themeColor:a?.content||null}}}WM.exports=ThemedOmnibox,WM.exports.UIStrings=KM;var XM={exports:{}},ZM={exports:{}};const QM=kc,eP=oi,tP=uw,rP=Lo,aP=Rv,{getJavaScriptURLs:nP,getAttributableURLForTask:iP}=Iv,oP={title:"Minimize third-party usage",failureTitle:"Reduce the impact of third-party code",description:"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).",columnThirdParty:"Third-Party",displayValue:"Third-party code blocked the main thread for {timeInMs, number, milliseconds} ms"},sP=eP.createMessageInstanceIdFn("lighthouse-core/audits/third-party-summary.js",oP);class ThirdPartySummary$1 extends QM{static get meta(){return{id:"third-party-summary",title:sP(oP.title),
1067
+ failureTitle:sP(oP.failureTitle),description:sP(oP.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getSummaries(e,t,r){const a=new Map,n=new Map,i={mainThreadTime:0,blockingTime:0,transferSize:0};for(const t of e){const e=a.get(t.url)||{...i};e.transferSize+=t.transferSize,a.set(t.url,e)}const o=nP(e);for(const e of t){const t=iP(e,o),n=a.get(t)||{...i},s=e.selfTime*r;n.mainThreadTime+=s,n.blockingTime+=Math.max(s-50,0),a.set(t,n)}const s=new Map;for(const[e,t]of a.entries()){const r=tP.getEntity(e);if(!r){a.delete(e);continue}const o=n.get(r)||{...i};o.transferSize+=t.transferSize,o.mainThreadTime+=t.mainThreadTime,o.blockingTime+=t.blockingTime,n.set(r,o);const c=s.get(r)||[];c.push(e),s.set(r,c)}return{byURL:a,byEntity:n,urls:s}}static makeSubItems(e,t,r){let a=(t.urls.get(e)||[]).map((e=>({url:e,...t.byURL.get(e)}))).filter((e=>e.transferSize>0)).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize));const n={transferSize:0,blockingTime:0
1068
+ },i=Math.max(4096,r.transferSize/20),o=Math.min(5,a.length);let s=0;for(;s<o;){const e=a[s];if(0===e.blockingTime&&e.transferSize<i)break;s++,n.transferSize+=e.transferSize,n.blockingTime+=e.blockingTime}if(!n.blockingTime&&!n.transferSize)return[];a=a.slice(0,s);const c={url:sP(eP.UIStrings.otherResourcesLabel),transferSize:r.transferSize-n.transferSize,blockingTime:r.blockingTime-n.blockingTime};return c.transferSize>i&&a.push(c),a}static async audit(e,t){const r=t.settings||{},a=e.traces[QM.DEFAULT_PASS],n=e.devtoolsLogs[QM.DEFAULT_PASS],i=await rP.request(n,t),o=tP.getEntity(e.URL.finalUrl),s=await aP.request(a,t),c="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,l=ThirdPartySummary$1.getSummaries(i,s,c),u={wastedBytes:0,wastedMs:0},d=Array.from(l.byEntity.entries()).filter((([e])=>!(o&&o.name===e.name))).map((([e,t])=>(u.wastedBytes+=t.transferSize,u.wastedMs+=t.blockingTime,{...t,entity:{type:"link",text:e.name,url:e.homepage||""},subItems:{type:"subitems",
1069
+ items:ThirdPartySummary$1.makeSubItems(e,l,t)}}))).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize)),m=[{key:"entity",itemType:"link",text:sP(oP.columnThirdParty),subItemsHeading:{key:"url",itemType:"url"}},{key:"transferSize",granularity:1,itemType:"bytes",text:sP(eP.UIStrings.columnTransferSize),subItemsHeading:{key:"transferSize"}},{key:"blockingTime",granularity:1,itemType:"ms",text:sP(eP.UIStrings.columnBlockingTime),subItemsHeading:{key:"blockingTime"}}];return d.length?{score:Number(u.wastedMs<=250),displayValue:sP(oP.displayValue,{timeInMs:u.wastedMs}),details:QM.makeTableDetails(m,d,u)}:{score:1,notApplicable:!0}}}ZM.exports=ThirdPartySummary$1,ZM.exports.UIStrings=oP;const cP=kc,lP=oi,uP=uw,dP=Lo,mP=GT,pP=Rv,hP=ZM.exports,gP={title:"Lazy load third-party resources with facades",failureTitle:"Some third-party resources can be lazy loaded with a facade",
1070
+ description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn more](https://web.dev/third-party-facades/).",displayValue:"{itemCount, plural,\n =1 {# facade alternative available}\n other {# facade alternatives available}\n }",columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},fP=lP.createMessageInstanceIdFn("lighthouse-core/audits/third-party-facades.js",gP),yP={video:gP.categoryVideo,"customer-success":gP.categoryCustomerSuccess,marketing:gP.categoryMarketing,social:gP.categorySocial};class ThirdPartyFacades extends cP{static get meta(){return{id:"third-party-facades",title:fP(gP.title),failureTitle:fP(gP.failureTitle),description:fP(gP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static condenseItems(e){
1071
+ e.sort(((e,t)=>t.transferSize-e.transferSize));let t=e.findIndex((e=>e.transferSize<1e3))||1;if((-1===t||t>5)&&(t=5),t>=e.length-1)return;const r=e.splice(t).reduce(((e,t)=>(e.transferSize+=t.transferSize,e.blockingTime+=t.blockingTime,e)));r.transferSize<1e3||(r.url=fP(lP.UIStrings.otherResourcesLabel),e.push(r))}static getProductsWithFacade(e,t){const r=new Map;for(const a of e.keys()){const e=uP.getEntity(a);if(!e||uP.isFirstParty(a,t))continue;const n=uP.getProduct(a);n&&n.facades&&n.facades.length&&(r.has(n.name)||r.set(n.name,{product:n,entity:e}))}return Array.from(r.values())}static async audit(e,t){const r=t.settings,a=e.traces[cP.DEFAULT_PASS],n=e.devtoolsLogs[cP.DEFAULT_PASS],i=await dP.request(n,t),o=await mP.request({devtoolsLog:n,URL:e.URL},t),s=uP.getEntity(o.url),c=await pP.request(a,t),l="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,u=hP.getSummaries(i,c,l),d=ThirdPartyFacades.getProductsWithFacade(u.byURL,s),m=[]
1072
+ ;for(const{product:e,entity:t}of d){const r=yP[e.categories[0]];let a;a=r?fP(r,{productName:e.name}):e.name;const n=u.urls.get(t),i=u.byEntity.get(t);if(!n||!i)continue;const o=Array.from(n).map((e=>({url:e,...u.byURL.get(e)})));this.condenseItems(o),m.push({product:a,transferSize:i.transferSize,blockingTime:i.blockingTime,subItems:{type:"subitems",items:o}})}if(!m.length)return{score:1,notApplicable:!0};const p=[{key:"product",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:fP(gP.columnProduct)},{key:"transferSize",itemType:"bytes",subItemsHeading:{key:"transferSize"},granularity:1,text:fP(lP.UIStrings.columnTransferSize)},{key:"blockingTime",itemType:"ms",subItemsHeading:{key:"blockingTime"},granularity:1,text:fP(lP.UIStrings.columnBlockingTime)}];return{score:0,displayValue:fP(gP.displayValue,{itemCount:m.length}),details:cP.makeTableDetails(p,m)}}}XM.exports=ThirdPartyFacades,XM.exports.UIStrings=gP;var vP={exports:{}};const bP=kc,wP=MD,SP=GT,TP=Tu,EP=oi,xP={
1073
+ title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},_P=EP.createMessageInstanceIdFn("lighthouse-core/audits/timing-budget.js",xP);vP.exports=class TimingBudget extends bP{static get meta(){return{id:"timing-budget",title:_P(xP.title),description:_P(xP.description),scoreDisplayMode:bP.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL","GatherContext"]}}static getRowLabel(e){const t={"first-contentful-paint":EP.UIStrings.firstContentfulPaintMetric,interactive:EP.UIStrings.interactiveMetric,"first-meaningful-paint":EP.UIStrings.firstMeaningfulPaintMetric,"max-potential-fid":EP.UIStrings.maxPotentialFIDMetric,"total-blocking-time":EP.UIStrings.totalBlockingTimeMetric,
1074
+ "speed-index":EP.UIStrings.speedIndexMetric,"largest-contentful-paint":EP.UIStrings.largestContentfulPaintMetric,"cumulative-layout-shift":EP.UIStrings.cumulativeLayoutShiftMetric};return _P(t[e])}static getMeasurement(e,t){return{"first-contentful-paint":t.firstContentfulPaint,interactive:t.interactive,"first-meaningful-paint":t.firstMeaningfulPaint,"max-potential-fid":t.maxPotentialFID,"total-blocking-time":t.totalBlockingTime,"speed-index":t.speedIndex,"largest-contentful-paint":t.largestContentfulPaint,"cumulative-layout-shift":t.cumulativeLayoutShift}[e]}static tableItems(e,t){let r=[];if(!e.timings)return r;r=e.timings.map((e=>{const r=e.metric,a=this.getRowLabel(r),n=this.getMeasurement(r,t);return{metric:r,label:a,measurement:n,overBudget:n&&n>e.budget?n-e.budget:void 0}})).sort(((e,t)=>(t.overBudget||0)-(e.overBudget||0)));const a=r.find((e=>"cumulative-layout-shift"===e.metric));return a&&("number"==typeof a.measurement&&(a.measurement={type:"numeric",
1075
+ value:Number(a.measurement),granularity:.01}),"number"==typeof a.overBudget&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),r}static async audit(e,t){const r=e.GatherContext,a=e.devtoolsLogs[bP.DEFAULT_PASS],n=e.traces[bP.DEFAULT_PASS],i=await SP.request({URL:e.URL,devtoolsLog:a},t),o={trace:n,devtoolsLog:a,gatherContext:r,settings:t.settings},s=(await wP.request(o,t)).metrics,c=TP.getMatchingBudget(t.settings.budgets,i.url);if(!c)return{score:0,notApplicable:!0};const l=[{key:"label",itemType:"text",text:_P(xP.columnTimingMetric)},{key:"measurement",itemType:"ms",text:_P(xP.columnMeasurement)},{key:"overBudget",itemType:"ms",text:_P(EP.UIStrings.columnOverBudget)}];return{details:bP.makeTableDetails(l,this.tableItems(c,s)),score:1}}},vP.exports.UIStrings=xP;var AP={exports:{}};const RP=kc,kP=oi,DP=ji,CP={title:"Image elements have explicit `width` and `height`",failureTitle:"Image elements do not have explicit `width` and `height`",
1076
+ description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn more](https://web.dev/optimize-cls/#images-without-dimensions)"},IP=kP.createMessageInstanceIdFn("lighthouse-core/audits/unsized-images.js",CP);class UnsizedImages extends RP{static get meta(){return{id:"unsized-images",title:IP(CP.title),failureTitle:IP(CP.failureTitle),description:IP(CP.description),requiredArtifacts:["ImageElements"]}}static doesHtmlAttrProvideExplicitSize(e){if(!e)return!1;if(e.startsWith("+"))return!1;return parseInt(e,10)>=0}static isCssPropExplicitlySet(e){return!!e&&!["auto","initial","unset","inherit"].includes(e)}static isSizedImage(e){if(void 0===e.cssEffectiveRules)return!0
1077
+ ;const t=e.attributeWidth,r=e.attributeHeight,a=e.cssEffectiveRules.width,n=e.cssEffectiveRules.height,i=e.cssEffectiveRules.aspectRatio,o=UnsizedImages.doesHtmlAttrProvideExplicitSize(t),s=UnsizedImages.isCssPropExplicitlySet(a),c=UnsizedImages.doesHtmlAttrProvideExplicitSize(r),l=UnsizedImages.isCssPropExplicitlySet(n),u=UnsizedImages.isCssPropExplicitlySet(i),d=o||s,m=c||l;return d&&m||d&&u||m&&u}static isNonNetworkSvg(e){const t="image/svg+xml"===DP.guessMimeType(e.src),r=e.src.slice(0,e.src.indexOf(":")),a=DP.isNonNetworkProtocol(r);return t&&a}static async audit(e){const t=e.ImageElements.filter((e=>!e.isCss&&!e.isInShadowDOM)),r=[];for(const e of t){if("fixed"===e.computedStyles.position||"absolute"===e.computedStyles.position)continue;if(UnsizedImages.isNonNetworkSvg(e))continue;if(UnsizedImages.isSizedImage(e))continue;const t=e.node.boundingRect;0===t.width&&0===t.height||r.push({url:DP.elideDataURI(e.src),node:RP.makeNodeItem(e.node)})}const a=[{key:"node",itemType:"node",
1078
+ text:""},{key:"url",itemType:"url",text:IP(kP.UIStrings.columnURL)}];return{score:r.length>0?0:1,notApplicable:0===t.length,details:RP.makeTableDetails(a,r)}}}AP.exports=UnsizedImages,AP.exports.UIStrings=CP;var NP={exports:{}};const LP=Ao,MP=Yp;var PP=LP(class UserTimings$1{static async compute_(e,t){const r=await MP.request(e,t),a=[],n={};return r.processEvents.filter((e=>!!e.cat.includes("blink.user_timing")&&("requestStart"!==e.name&&"navigationStart"!==e.name&&"paintNonDefaultBackgroundColor"!==e.name&&void 0===e.args.frame))).forEach((e=>{"R"===e.ph||"I"===e.ph.toUpperCase()?a.push({name:e.name,isMark:!0,args:e.args,startTime:e.ts}):"b"===e.ph.toLowerCase()?n[e.name]=e.ts:"e"===e.ph.toLowerCase()&&a.push({name:e.name,isMark:!1,args:e.args,startTime:n[e.name],endTime:e.ts,duration:e.ts-n[e.name]})})),a.forEach((e=>{e.startTime=(e.startTime-r.timeOriginEvt.ts)/1e3,e.isMark||(e.endTime=(e.endTime-r.timeOriginEvt.ts)/1e3,e.duration=e.duration/1e3)})),a}},null)
1079
+ ;const OP=kc,FP=oi,UP=PP,jP={title:"User Timing marks and measures",description:"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more](https://web.dev/user-timings/).",displayValue:"{itemCount, plural,\n =1 {1 user timing}\n other {# user timings}\n }",columnType:"Type"},BP=FP.createMessageInstanceIdFn("lighthouse-core/audits/user-timings.js",jP);class UserTimings extends OP{static get meta(){return{id:"user-timings",title:BP(jP.title),description:BP(jP.description),scoreDisplayMode:OP.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces"]}}static get excludedPrefixes(){return["goog_"]}static excludeEvent(e){return UserTimings.excludedPrefixes.every((t=>!e.name.startsWith(t)))}static audit(e,t){const r=e.traces[OP.DEFAULT_PASS];return UP.request(r,t).then((e=>{const t=e.filter(UserTimings.excludeEvent),r=t.map((e=>({name:e.name,startTime:e.startTime,duration:e.isMark?void 0:e.duration,
1080
+ timingType:e.isMark?"Mark":"Measure"}))).sort(((e,t)=>e.timingType===t.timingType?e.startTime-t.startTime:"Measure"===e.timingType?-1:1)),a=[{key:"name",itemType:"text",text:BP(FP.UIStrings.columnName)},{key:"timingType",itemType:"text",text:BP(jP.columnType)},{key:"startTime",itemType:"ms",granularity:.01,text:BP(FP.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:.01,text:BP(FP.UIStrings.columnDuration)}],n=OP.makeTableDetails(a,r);let i;return t.length&&(i=BP(jP.displayValue,{itemCount:t.length})),{score:Number(0===t.length),notApplicable:0===t.length,displayValue:i,details:n}}))}}NP.exports=UserTimings,NP.exports.UIStrings=jP;var $P={exports:{}};const qP=kc,zP=Ib,VP=ji,WP=oi,HP=Lo,GP=GT,YP=Dl,KP=Yp,JP=Xp,XP=eb,ZP=Tk,QP={title:"Preconnect to required origins",description:"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn more](https://web.dev/uses-rel-preconnect/).",
1081
+ unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},eO=WP.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preconnect.js",QP);class UsesRelPreconnectAudit extends qP{static get meta(){return{id:"uses-rel-preconnect",title:eO(QP.title),description:eO(QP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL","LinkElements"],scoreDisplayMode:qP.SCORING_MODES.NUMERIC}}static hasValidTiming(e){return!!e.timing&&e.timing.connectEnd>0&&e.timing.connectStart>0}
1082
+ static hasAlreadyConnectedToOrigin(e){return!!e.timing&&e.timing.dnsEnd-e.timing.dnsStart==0&&e.timing.connectEnd-e.timing.connectStart==0}static socketStartTimeIsBelowThreshold(e,t){return Math.max(0,e.startTime-t.endTime)<15}static async audit(e,t){const r=e.traces[UsesRelPreconnectAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS],n=t.settings;let i=0;const o=[],s=await KP.request(r,t),[c,l,u,d,m]=await Promise.all([HP.request(a,t),GP.request({devtoolsLog:a,URL:e.URL},t),YP.request({devtoolsLog:a,settings:n},t),JP.request(s,t),XP.request({trace:r,devtoolsLog:a},t)]),{rtt:p,additionalRttByOrigin:h}=u.getOptions(),f=await ZP.getPessimisticGraph(m,d),y=new Set;f.traverse((e=>{"network"===e.type&&y.add(e.record.url)}));const v=new Map;c.forEach((e=>{
1083
+ if(!UsesRelPreconnectAudit.hasValidTiming(e)||e.initiator.url===l.url||!e.parsedURL||!e.parsedURL.securityOrigin||l.parsedURL.securityOrigin===e.parsedURL.securityOrigin||!y.has(e.url)||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(e)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(e,l))return;const t=e.parsedURL.securityOrigin,r=v.get(t)||[];r.push(e),v.set(t,r)}));const b=e.LinkElements.filter((e=>"preconnect"===e.rel)),w=new Set(b.map((e=>VP.getOrigin(e.href||""))));let S=[];v.forEach((e=>{const t=e.reduce(((e,t)=>t.startTime<e.startTime?t:e));if(!t.timing)return;const r=t.parsedURL.securityOrigin,a=h.get(r)||0;let n=p+a;"https"===t.parsedURL.scheme&&(n*=2);const s=1e3*t.startTime-1e3*l.endTime+t.timing.dnsStart,c=Math.min(n,s);c<50||(w.has(r)?o.push(eO(QP.crossoriginWarning,{securityOrigin:r})):(i=Math.max(c,i),S.push({url:r,wastedMs:c})))})),S=S.sort(((e,t)=>t.wastedMs-e.wastedMs))
1084
+ ;for(const e of w)e&&(c.some((t=>e===t.parsedURL.securityOrigin))||o.push(eO(QP.unusedWarning,{securityOrigin:e})));if(b.length>=2)return{score:1,warnings:b.length>=3?[...o,eO(QP.tooManyPreconnectLinksWarning)]:o};const T=[{key:"url",valueType:"url",label:eO(WP.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:eO(WP.UIStrings.columnWastedMs)}],E=qP.makeOpportunityDetails(T,S,i);return{score:zP.scoreForWastedMs(i),numericValue:i,numericUnit:"millisecond",displayValue:i?eO(WP.UIStrings.displayValueMsSavings,{wastedMs:i}):"",warnings:o,details:E}}}$P.exports=UsesRelPreconnectAudit,$P.exports.UIStrings=QP;var tO={exports:{}};const rO=ji,aO=Ki,nO=kc,iO=Ib,oO=ZT,sO=oi,cO=GT,lO=eb,uO=Dl,dO={title:"Preload key requests",description:"Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).",
1085
+ crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},mO=sO.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preload.js",dO);class UsesRelPreloadAudit extends nO{static get meta(){return{id:"uses-rel-preload",title:mO(dO.title),description:mO(dO.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL"],scoreDisplayMode:nO.SCORING_MODES.NUMERIC}}static getURLsToPreload(e,t){const r=new Set;return t.traverse(((t,a)=>{if("network"!==t.type)return;const n=a.slice(1).filter((e=>"network"===e.type));UsesRelPreloadAudit.shouldPreloadRequest(t.record,e,n)&&r.add(t.record.url)})),r}static getURLsFailedToPreload(e){const t=[];e.traverse((e=>"network"===e.type&&t.push(e.record)));const r=t.filter((e=>e.isLinkPreload)),a=new Map;for(const e of r){const t=a.get(e.frameId)||new Set;t.add(e.url),a.set(e.frameId,t)}const n=t.filter((e=>{
1086
+ const t=a.get(e.frameId);if(!t)return!1;if(!t.has(e.url))return!1;return!(e.fromDiskCache||e.fromMemoryCache||e.fromPrefetchCache)&&!e.isLinkPreload}));return new Set(n.map((e=>e.url)))}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!!oO.isCritical(e,t)&&(!aO.isNonNetworkRequest(e)&&(r.length===a+2&&(e.frameId===t.frameId&&rO.rootDomainsMatch(e.url,t.url)))))}static computeWasteWithGraph(e,t,r){if(!e.size)return{wastedMs:0,results:[]};const a=r.simulate(t,{flexibleOrdering:!0}),n=t.cloneWithRelationships(),i=[];let o=null;if(n.traverse((t=>{"network"===t.type&&(t.isMainDocument()?o=t:t.record&&e.has(t.record.url)&&i.push(t))})),!o)throw new Error("Could not find main document node");for(const e of i)e.removeAllDependencies(),e.addDependency(o);const s=r.simulate(n,{flexibleOrdering:!0}),c=Array.from(a.nodeTimings.keys()).reduce(((e,t)=>e.set(t.record,t)),new Map),l=[];for(const e of i){
1087
+ const t=c.get(e.record),r=s.nodeTimings.get(e),n=a.nodeTimings.get(t);if(!n||!r)throw new Error("Missing preload node");const i=Math.round(n.endTime-r.endTime);i<100||l.push({url:e.record.url,wastedMs:i})}return l.length?{wastedMs:Math.max(...l.map((e=>e.wastedMs))),results:l}:{wastedMs:0,results:l}}static async audit_(e,t){const r=e.traces[UsesRelPreloadAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS],n=e.URL,i={devtoolsLog:a,settings:t.settings},[o,s,c]=await Promise.all([cO.request({devtoolsLog:a,URL:n},t),lO.request({trace:r,devtoolsLog:a},t),uO.request(i,t)]),l=UsesRelPreloadAudit.getURLsToPreload(o,s),{results:u,wastedMs:d}=UsesRelPreloadAudit.computeWasteWithGraph(l,s,c);let m;u.sort(((e,t)=>t.wastedMs-e.wastedMs));const p=UsesRelPreloadAudit.getURLsFailedToPreload(s);p.size&&(m=Array.from(p).map((e=>mO(dO.crossoriginWarning,{preloadURL:e}))));const h=[{key:"url",valueType:"url",label:mO(sO.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",
1088
+ label:mO(sO.UIStrings.columnWastedMs)}],f=nO.makeOpportunityDetails(h,u,d);return{score:iO.scoreForWastedMs(d),numericValue:d,numericUnit:"millisecond",displayValue:d?mO(sO.UIStrings.displayValueMsSavings,{wastedMs:d}):"",details:f,warnings:m}}static async audit(){return{score:1,notApplicable:!0,details:nO.makeOpportunityDetails([],[],0)}}}tO.exports=UsesRelPreloadAudit,tO.exports.UIStrings=dO;var pO={exports:{}};
1092
1089
  /**
1093
1090
  * @license Copyright 2020 Google Inc. All Rights Reserved.
1094
1091
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
1095
1092
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
1096
- */const uO=uw,dO=kc,mO=oi,pO={title:"Page has valid source maps",failureTitle:"Missing source maps for large first-party JavaScript",description:"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps).",columnMapURL:"Map URL",missingSourceMapErrorMessage:"Large JavaScript file is missing a source map",missingSourceMapItemsWarningMesssage:"{missingItems, plural,\n =1 {Warning: missing 1 item in `.sourcesContent`}\n other {Warning: missing # items in `.sourcesContent`}\n }"},hO=mO.createMessageInstanceIdFn("lighthouse-core/audits/valid-source-maps.js",pO);lO.exports=class ValidSourceMaps extends dO{static get meta(){return{id:"valid-source-maps",title:hO(pO.title),failureTitle:hO(pO.failureTitle),
1097
- description:hO(pO.description),requiredArtifacts:["ScriptElements","SourceMaps","URL"]}}static isLargeFirstPartyJS(e,t){if(null===e.content)return!1;const r=e.content.length>=512e3,a=!!e.src&&uO.isFirstParty(e.src,uO.getEntity(t));return r&&a}static async audit(e){const{SourceMaps:t}=e,r=new Set;let a=!1;const n=[];for(const i of e.ScriptElements){if(!i.src)continue;const o=t.find((e=>e.scriptUrl===i.src)),s=[];if(!this.isLargeFirstPartyJS(i,e.URL.finalUrl)||o&&o.map||(a=!0,r.add(i.src),s.push({error:hO(pO.missingSourceMapErrorMessage)})),o&&!o.map&&s.push({error:o.errorMessage}),o?.map){const e=o.map.sourcesContent||[];let t=0;for(let r=0;r<o.map.sources.length;r++)(e.length<r||!e[r])&&(t+=1);t>0&&s.push({error:hO(pO.missingSourceMapItemsWarningMesssage,{missingItems:t})})}(o||s.length)&&n.push({scriptUrl:i.src,sourceMapUrl:o?.sourceMapUrl,subItems:{type:"subitems",items:s}})}const i=[{key:"scriptUrl",itemType:"url",subItemsHeading:{key:"error"},text:hO(mO.UIStrings.columnURL)},{
1098
- key:"sourceMapUrl",itemType:"url",text:hO(pO.columnMapURL)}];return n.sort(((e,t)=>{const a=r.has(e.scriptUrl),n=r.has(t.scriptUrl);return a&&!n?-1:!a&&n?1:e.subItems.items.length&&!t.subItems.items.length?-1:!e.subItems.items.length&&t.subItems.items.length?1:t.scriptUrl.localeCompare(e.scriptUrl)})),{score:a?0:1,details:dO.makeTableDetails(i,n)}}},lO.exports.UIStrings=pO;var gO={exports:{}};const fO=kc,yO=KN,vO={title:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureTitle:'Does not have a `<meta name="viewport">` tag with `width` or `initial-scale`',description:'A `<meta name="viewport">` not only optimizes your app for mobile screen sizes, but also prevents [a 300 millisecond delay to user input](https://developers.google.com/web/updates/2013/12/300ms-tap-delay-gone-away). [Learn more](https://web.dev/viewport/).',explanationNoTag:'No `<meta name="viewport">` tag found'},bO=oi.createMessageInstanceIdFn("lighthouse-core/audits/viewport.js",vO)
1099
- ;gO.exports=class Viewport extends fO{static get meta(){return{id:"viewport",title:bO(vO.title),failureTitle:bO(vO.failureTitle),description:bO(vO.description),requiredArtifacts:["MetaElements"]}}static async audit(e,t){const r=await yO.request(e.MetaElements,t);return r.hasViewportTag?{score:Number(r.isMobileOptimized),warnings:r.parserWarnings}:{score:0,explanation:bO(vO.explanationNoTag)}}},gO.exports.UIStrings=vO;var wO={exports:{}};const SO=kc,TO=ah,EO=Yp,xO=oi,_O=Lo,AO=Ev,{taskGroups:RO}=wv,kO=ao,{getExecutionTimingsByURL:DO}=Iv,CO=$D.exports.defaultOptions,IO=vi.exports,NO={title:"Minimizes work during key interaction",failureTitle:"Minimize work during key interaction",description:"This is the thread-blocking work occurring during the Interaction to Next Paint measurement. [Learn more](https://web.dev/inp/).",inputDelay:"Input delay",processingDelay:"Processing delay",presentationDelay:"Presentation delay",
1100
- displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},LO=xO.createMessageInstanceIdFn("lighthouse-core/audits/work-during-interaction.js",NO);class WorkDuringInteraction extends SO{static get meta(){return{id:"work-during-interaction",title:LO(NO.title),failureTitle:LO(NO.failureTitle),description:LO(NO.description),scoreDisplayMode:SO.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces","devtoolsLogs","TraceElements"]}}static recursivelyClipTasks(e,t,r,a){const n=e.event.ts,i=e.endEvent?.ts??e.event.ts+Number(e.event.dur||0);e.startTime=Math.max(r,Math.min(a,n))/1e3,e.endTime=Math.max(r,Math.min(a,i))/1e3,e.duration=e.endTime-e.startTime;const o=e.children.map((t=>WorkDuringInteraction.recursivelyClipTasks(t,e,r,a))).reduce(((e,t)=>e+t),0);return e.selfTime=e.duration-o,e.duration}static clipTasksByTs(e,t,r){for(const a of e)a.parent||WorkDuringInteraction.recursivelyClipTasks(a,void 0,t,r)}
1101
- static getPhaseTimes(e){const t=e.args.data,r=e.ts,a=r-1e3*t.timeStamp,n=a+1e3*t.processingStart,i=a+1e3*t.processingEnd;return{inputDelay:{startTs:r,endTs:n},processingDelay:{startTs:n,endTs:i},presentationDelay:{startTs:i,endTs:r+1e3*t.duration}}}static getThreadBreakdownTable(e,t,r,a){const n=kO.filteredTraceSort(t.traceEvents,(t=>t.pid===e.pid&&t.tid===e.tid)),i=n.reduce(((e,t)=>Math.max(t.ts+(t.dur||0),e)),0),{frames:o}=r,s=AO.getMainThreadTasks(n,o,i),c=WorkDuringInteraction.getPhaseTimes(e),l=[];for(const[e,t]of Object.entries(c)){WorkDuringInteraction.clipTasksByTs(s,t.startTs,t.endTs);const r=DO(s,a),n=[];for(const[e,t]of r){const r=Object.values(t).reduce(((e,t)=>e+t)),a=t[RO.scriptEvaluation.id]||0,i=t[RO.styleLayout.id]||0,o=t[RO.paintCompositeRender.id]||0;n.push({url:e,total:r,scripting:a,layout:i,render:o})}const i=n.filter((e=>e.total>1)).sort(((e,t)=>t.total-e.total));l.push({phase:LO(NO[e]),total:(t.endTs-t.startTs)/1e3,subItems:{type:"subitems",items:i}})}const u=[{
1102
- key:"phase",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:"Phase"},{key:"total",itemType:"ms",subItemsHeading:{key:"total",granularity:1,itemType:"ms"},granularity:1,text:"Total time"},{key:null,itemType:"ms",subItemsHeading:{key:"scripting",granularity:1,itemType:"ms"},text:"Script evaluation"},{key:null,itemType:"ms",subItemsHeading:{key:"layout",granularity:1,itemType:"ms"},text:RO.styleLayout.label},{key:null,itemType:"ms",subItemsHeading:{key:"render",granularity:1,itemType:"ms"},text:RO.paintCompositeRender.label}];return{table:SO.makeTableDetails(u,l),phases:c}}static getTraceElementTable(e){const t=e.find((e=>"responsiveness"===e.traceEventType));if(!t)return;const r=[{key:"node",itemType:"node",text:LO(NO.eventTarget)}],a=[{node:SO.makeNodeItem(t.node)}];return SO.makeTableDetails(r,a)}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a=e.traces[WorkDuringInteraction.DEFAULT_PASS],n={
1103
- trace:a,settings:r},i=await TO.request(n,t);if(null===i)return{score:null,notApplicable:!0};if("FallbackTiming"===i.name)throw new IO(IO.errors.UNSUPPORTED_OLD_CHROME,{featureName:"detailed EventTiming trace events"});const o=[],s=WorkDuringInteraction.getTraceElementTable(e.TraceElements);s&&o.push(s);const c=e.devtoolsLogs[WorkDuringInteraction.DEFAULT_PASS],l=await _O.request(c,t),u=await EO.request(a,t),{table:d,phases:m}=WorkDuringInteraction.getThreadBreakdownTable(i,a,u,l);o.push(d);const p=i.args.data.type;o.push({type:"debugdata",interactionType:p,phases:m});const h=i.args.data.duration,f=LO(NO.displayValue,{timeInMs:h,interactionType:p});return{score:h<CO.p10?1:0,displayValue:f,details:{type:"list",items:o}}}}wO.exports=WorkDuringInteraction,wO.exports.UIStrings=NO;var MO={exports:{}},PO={exports:{}};const OO={GROUPS__METRICS:"Metrics",GROUPS__ADS_PERFORMANCE:"Ad Speed",GROUPS__ADS_BEST_PRACTICES:"Tag Best Practices",NOT_APPLICABLE__DEFAULT:"Audit not applicable",
1093
+ */const hO=uw,gO=kc,fO=oi,yO={title:"Page has valid source maps",failureTitle:"Missing source maps for large first-party JavaScript",description:"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps).",columnMapURL:"Map URL",missingSourceMapErrorMessage:"Large JavaScript file is missing a source map",missingSourceMapItemsWarningMesssage:"{missingItems, plural,\n =1 {Warning: missing 1 item in `.sourcesContent`}\n other {Warning: missing # items in `.sourcesContent`}\n }"},vO=fO.createMessageInstanceIdFn("lighthouse-core/audits/valid-source-maps.js",yO);pO.exports=class ValidSourceMaps extends gO{static get meta(){return{id:"valid-source-maps",title:vO(yO.title),failureTitle:vO(yO.failureTitle),
1094
+ description:vO(yO.description),requiredArtifacts:["ScriptElements","SourceMaps","URL"]}}static isLargeFirstPartyJS(e,t){if(null===e.content)return!1;const r=e.content.length>=512e3,a=!!e.src&&hO.isFirstParty(e.src,hO.getEntity(t));return r&&a}static async audit(e){const{SourceMaps:t}=e,r=new Set;let a=!1;const n=[];for(const i of e.ScriptElements){if(!i.src)continue;const o=t.find((e=>e.scriptUrl===i.src)),s=[];if(!this.isLargeFirstPartyJS(i,e.URL.finalUrl)||o&&o.map||(a=!0,r.add(i.src),s.push({error:vO(yO.missingSourceMapErrorMessage)})),o&&!o.map&&s.push({error:o.errorMessage}),o?.map){const e=o.map.sourcesContent||[];let t=0;for(let r=0;r<o.map.sources.length;r++)(e.length<r||!e[r])&&(t+=1);t>0&&s.push({error:vO(yO.missingSourceMapItemsWarningMesssage,{missingItems:t})})}(o||s.length)&&n.push({scriptUrl:i.src,sourceMapUrl:o?.sourceMapUrl,subItems:{type:"subitems",items:s}})}const i=[{key:"scriptUrl",itemType:"url",subItemsHeading:{key:"error"},text:vO(fO.UIStrings.columnURL)},{
1095
+ key:"sourceMapUrl",itemType:"url",text:vO(yO.columnMapURL)}];return n.sort(((e,t)=>{const a=r.has(e.scriptUrl),n=r.has(t.scriptUrl);return a&&!n?-1:!a&&n?1:e.subItems.items.length&&!t.subItems.items.length?-1:!e.subItems.items.length&&t.subItems.items.length?1:t.scriptUrl.localeCompare(e.scriptUrl)})),{score:a?0:1,details:gO.makeTableDetails(i,n)}}},pO.exports.UIStrings=yO;var bO={exports:{}};const wO=kc,SO=QN,TO={title:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureTitle:'Does not have a `<meta name="viewport">` tag with `width` or `initial-scale`',description:'A `<meta name="viewport">` not only optimizes your app for mobile screen sizes, but also prevents [a 300 millisecond delay to user input](https://developers.google.com/web/updates/2013/12/300ms-tap-delay-gone-away). [Learn more](https://web.dev/viewport/).',explanationNoTag:'No `<meta name="viewport">` tag found'},EO=oi.createMessageInstanceIdFn("lighthouse-core/audits/viewport.js",TO)
1096
+ ;bO.exports=class Viewport extends wO{static get meta(){return{id:"viewport",title:EO(TO.title),failureTitle:EO(TO.failureTitle),description:EO(TO.description),requiredArtifacts:["MetaElements"]}}static async audit(e,t){const r=await SO.request(e.MetaElements,t);return r.hasViewportTag?{score:Number(r.isMobileOptimized),warnings:r.parserWarnings}:{score:0,explanation:EO(TO.explanationNoTag)}}},bO.exports.UIStrings=TO;var xO={exports:{}};const _O=kc,AO=ah,RO=Yp,kO=oi,DO=Lo,CO=Ev,{taskGroups:IO}=wv,NO=ao,{getExecutionTimingsByURL:LO}=Iv,MO=WD.exports.defaultOptions,PO=vi.exports,OO={title:"Minimizes work during key interaction",failureTitle:"Minimize work during key interaction",description:"This is the thread-blocking work occurring during the Interaction to Next Paint measurement. [Learn more](https://web.dev/inp/).",inputDelay:"Input delay",processingDelay:"Processing delay",presentationDelay:"Presentation delay",
1097
+ displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},FO=kO.createMessageInstanceIdFn("lighthouse-core/audits/work-during-interaction.js",OO);class WorkDuringInteraction extends _O{static get meta(){return{id:"work-during-interaction",title:FO(OO.title),failureTitle:FO(OO.failureTitle),description:FO(OO.description),scoreDisplayMode:_O.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces","devtoolsLogs","TraceElements"]}}static recursivelyClipTasks(e,t,r,a){const n=e.event.ts,i=e.endEvent?.ts??e.event.ts+Number(e.event.dur||0);e.startTime=Math.max(r,Math.min(a,n))/1e3,e.endTime=Math.max(r,Math.min(a,i))/1e3,e.duration=e.endTime-e.startTime;const o=e.children.map((t=>WorkDuringInteraction.recursivelyClipTasks(t,e,r,a))).reduce(((e,t)=>e+t),0);return e.selfTime=e.duration-o,e.duration}static clipTasksByTs(e,t,r){for(const a of e)a.parent||WorkDuringInteraction.recursivelyClipTasks(a,void 0,t,r)}
1098
+ static getPhaseTimes(e){const t=e.args.data,r=e.ts,a=r-1e3*t.timeStamp,n=a+1e3*t.processingStart,i=a+1e3*t.processingEnd;return{inputDelay:{startTs:r,endTs:n},processingDelay:{startTs:n,endTs:i},presentationDelay:{startTs:i,endTs:r+1e3*t.duration}}}static getThreadBreakdownTable(e,t,r,a){const n=NO.filteredTraceSort(t.traceEvents,(t=>t.pid===e.pid&&t.tid===e.tid)),i=n.reduce(((e,t)=>Math.max(t.ts+(t.dur||0),e)),0),{frames:o}=r,s=CO.getMainThreadTasks(n,o,i),c=WorkDuringInteraction.getPhaseTimes(e),l=[];for(const[e,t]of Object.entries(c)){WorkDuringInteraction.clipTasksByTs(s,t.startTs,t.endTs);const r=LO(s,a),n=[];for(const[e,t]of r){const r=Object.values(t).reduce(((e,t)=>e+t)),a=t[IO.scriptEvaluation.id]||0,i=t[IO.styleLayout.id]||0,o=t[IO.paintCompositeRender.id]||0;n.push({url:e,total:r,scripting:a,layout:i,render:o})}const i=n.filter((e=>e.total>1)).sort(((e,t)=>t.total-e.total));l.push({phase:FO(OO[e]),total:(t.endTs-t.startTs)/1e3,subItems:{type:"subitems",items:i}})}const u=[{
1099
+ key:"phase",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:"Phase"},{key:"total",itemType:"ms",subItemsHeading:{key:"total",granularity:1,itemType:"ms"},granularity:1,text:"Total time"},{key:null,itemType:"ms",subItemsHeading:{key:"scripting",granularity:1,itemType:"ms"},text:"Script evaluation"},{key:null,itemType:"ms",subItemsHeading:{key:"layout",granularity:1,itemType:"ms"},text:IO.styleLayout.label},{key:null,itemType:"ms",subItemsHeading:{key:"render",granularity:1,itemType:"ms"},text:IO.paintCompositeRender.label}];return{table:_O.makeTableDetails(u,l),phases:c}}static getTraceElementTable(e){const t=e.find((e=>"responsiveness"===e.traceEventType));if(!t)return;const r=[{key:"node",itemType:"node",text:FO(OO.eventTarget)}],a=[{node:_O.makeNodeItem(t.node)}];return _O.makeTableDetails(r,a)}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a=e.traces[WorkDuringInteraction.DEFAULT_PASS],n={
1100
+ trace:a,settings:r},i=await AO.request(n,t);if(null===i)return{score:null,notApplicable:!0};if("FallbackTiming"===i.name)throw new PO(PO.errors.UNSUPPORTED_OLD_CHROME,{featureName:"detailed EventTiming trace events"});const o=[],s=WorkDuringInteraction.getTraceElementTable(e.TraceElements);s&&o.push(s);const c=e.devtoolsLogs[WorkDuringInteraction.DEFAULT_PASS],l=await DO.request(c,t),u=await RO.request(a,t),{table:d,phases:m}=WorkDuringInteraction.getThreadBreakdownTable(i,a,u,l);o.push(d);const p=i.args.data.type;o.push({type:"debugdata",interactionType:p,phases:m});const h=i.args.data.duration,f=FO(OO.displayValue,{timeInMs:h,interactionType:p});return{score:h<MO.p10?1:0,displayValue:f,details:{type:"list",items:o}}}}xO.exports=WorkDuringInteraction,xO.exports.UIStrings=OO;var UO={exports:{}},jO={exports:{}};const BO={GROUPS__METRICS:"Metrics",GROUPS__ADS_PERFORMANCE:"Ad Speed",GROUPS__ADS_BEST_PRACTICES:"Tag Best Practices",NOT_APPLICABLE__DEFAULT:"Audit not applicable",
1104
1101
  NOT_APPLICABLE__INVALID_TIMING:"Invalid timing task data",NOT_APPLICABLE__NO_AD_RELATED_REQ:"No ad-related requests",NOT_APPLICABLE__NO_AD_RENDERED:"No ads rendered",NOT_APPLICABLE__NO_ADS_VIEWPORT:"No ads in viewport",NOT_APPLICABLE__NO_ADS:"No ads requested",NOT_APPLICABLE__NO_BIDS:"No bids detected",NOT_APPLICABLE__NO_EVENT_MATCHING_REQ:"No event matches network records",NOT_APPLICABLE__NO_GPT:"GPT not requested",NOT_APPLICABLE__NO_RECORDS:"No successful network records",NOT_APPLICABLE__NO_VISIBLE_SLOTS:"No visible slots",NOT_APPLICABLE__NO_TAG:"No tag requested",NOT_APPLICABLE__NO_TAGS:"No tags requested",NOT_APPLICABLE__NO_TASKS:"No tasks to compare",NOT_APPLICABLE__NO_VALID_AD_WIDTHS:"No requested ads contain ads of valid width",NOT_APPLICABLE__NO_LAYOUT_SHIFTS:"No layout shift events found",ERRORS__AREA_LARGER_THAN_VIEWPORT:"Calculated ad area is larger than viewport",ERRORS__VIEWPORT_AREA_ZERO:"Viewport area is zero",
1105
- WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."},FO=oi.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/messages/common-strings.js",OO),notApplicableObj=e=>({notApplicable:!0,score:1,displayValue:FO(e)}),UO={Default:notApplicableObj(OO.NOT_APPLICABLE__DEFAULT),InvalidTiming:notApplicableObj(OO.NOT_APPLICABLE__INVALID_TIMING),NoAdRelatedReq:notApplicableObj(OO.NOT_APPLICABLE__NO_AD_RELATED_REQ),NoAdRendered:notApplicableObj(OO.NOT_APPLICABLE__NO_AD_RENDERED),NoAdsViewport:notApplicableObj(OO.NOT_APPLICABLE__NO_ADS_VIEWPORT),NoAds:notApplicableObj(OO.NOT_APPLICABLE__NO_ADS),NoBids:notApplicableObj(OO.NOT_APPLICABLE__NO_BIDS),NoEventMatchingReq:notApplicableObj(OO.NOT_APPLICABLE__NO_EVENT_MATCHING_REQ),NoGpt:notApplicableObj(OO.NOT_APPLICABLE__NO_GPT),NoLayoutShifts:notApplicableObj(OO.NOT_APPLICABLE__NO_LAYOUT_SHIFTS),
1106
- NoRecords:notApplicableObj(OO.NOT_APPLICABLE__NO_RECORDS),NoVisibleSlots:notApplicableObj(OO.NOT_APPLICABLE__NO_VISIBLE_SLOTS),NoTag:notApplicableObj(OO.NOT_APPLICABLE__NO_TAG),NoTags:notApplicableObj(OO.NOT_APPLICABLE__NO_TAGS),NoTasks:notApplicableObj(OO.NOT_APPLICABLE__NO_TASKS),NoValidAdWidths:notApplicableObj(OO.NOT_APPLICABLE__NO_VALID_AD_WIDTHS)},jO={NoAds:FO(OO.WARNINGS__NO_ADS),NoAdRendered:FO(OO.WARNINGS__NO_AD_RENDERED),NoTag:FO(OO.WARNINGS__NO_TAG)},BO={ViewportAreaZero:FO(OO.ERRORS__VIEWPORT_AREA_ZERO)},$O={Metrics:FO(OO.GROUPS__METRICS),AdsPerformance:FO(OO.GROUPS__ADS_PERFORMANCE),AdsBestPractices:FO(OO.GROUPS__ADS_BEST_PRACTICES)};PO.exports={auditNotApplicable:UO,runWarning:jO,auditError:BO,group:$O},PO.exports.UIStrings=OO,function(e){const t=oi,{group:r}=PO.exports,a="lighthouse-plugin-publisher-ads",n={
1102
+ WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."},$O=oi.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/messages/common-strings.js",BO),notApplicableObj=e=>({notApplicable:!0,score:1,displayValue:$O(e)}),qO={Default:notApplicableObj(BO.NOT_APPLICABLE__DEFAULT),InvalidTiming:notApplicableObj(BO.NOT_APPLICABLE__INVALID_TIMING),NoAdRelatedReq:notApplicableObj(BO.NOT_APPLICABLE__NO_AD_RELATED_REQ),NoAdRendered:notApplicableObj(BO.NOT_APPLICABLE__NO_AD_RENDERED),NoAdsViewport:notApplicableObj(BO.NOT_APPLICABLE__NO_ADS_VIEWPORT),NoAds:notApplicableObj(BO.NOT_APPLICABLE__NO_ADS),NoBids:notApplicableObj(BO.NOT_APPLICABLE__NO_BIDS),NoEventMatchingReq:notApplicableObj(BO.NOT_APPLICABLE__NO_EVENT_MATCHING_REQ),NoGpt:notApplicableObj(BO.NOT_APPLICABLE__NO_GPT),NoLayoutShifts:notApplicableObj(BO.NOT_APPLICABLE__NO_LAYOUT_SHIFTS),
1103
+ NoRecords:notApplicableObj(BO.NOT_APPLICABLE__NO_RECORDS),NoVisibleSlots:notApplicableObj(BO.NOT_APPLICABLE__NO_VISIBLE_SLOTS),NoTag:notApplicableObj(BO.NOT_APPLICABLE__NO_TAG),NoTags:notApplicableObj(BO.NOT_APPLICABLE__NO_TAGS),NoTasks:notApplicableObj(BO.NOT_APPLICABLE__NO_TASKS),NoValidAdWidths:notApplicableObj(BO.NOT_APPLICABLE__NO_VALID_AD_WIDTHS)},zO={NoAds:$O(BO.WARNINGS__NO_ADS),NoAdRendered:$O(BO.WARNINGS__NO_AD_RENDERED),NoTag:$O(BO.WARNINGS__NO_TAG)},VO={ViewportAreaZero:$O(BO.ERRORS__VIEWPORT_AREA_ZERO)},WO={Metrics:$O(BO.GROUPS__METRICS),AdsPerformance:$O(BO.GROUPS__ADS_PERFORMANCE),AdsBestPractices:$O(BO.GROUPS__ADS_BEST_PRACTICES)};jO.exports={auditNotApplicable:qO,runWarning:zO,auditError:VO,group:WO},jO.exports.UIStrings=BO,function(e){const t=oi,{group:r}=jO.exports,a="lighthouse-plugin-publisher-ads",n={
1107
1104
  categoryDescription:"A Lighthouse plugin to improve ad speed and overall quality that is targeted at sites using GPT or AdSense tag. [Learn more](https://developers.google.com/publisher-ads-audits/reference)"},i=t.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/plugin.js",n);e.exports={audits:[{path:`${a}/audits/ad-blocking-tasks`},{path:`${a}/audits/ad-render-blocking-resources`},{path:`${a}/audits/ad-request-critical-path`},{path:`${a}/audits/bid-request-from-page-start`},{path:`${a}/audits/ad-request-from-page-start`},{path:`${a}/audits/ad-top-of-viewport`},{path:`${a}/audits/ads-in-viewport`},{path:`${a}/audits/async-ad-tags`},{path:`${a}/audits/blocking-load-events`},{path:`${a}/audits/bottleneck-requests`},{path:`${a}/audits/duplicate-tags`},{path:`${a}/audits/first-ad-render`},{path:`${a}/audits/full-width-slots`},{path:`${a}/audits/gpt-bids-parallel`},{path:`${a}/audits/loads-gpt-from-official-source`},{path:`${a}/audits/loads-ad-tag-over-https`},{
1108
1105
  path:`${a}/audits/script-injected-tags`},{path:`${a}/audits/serial-header-bidding`},{path:`${a}/audits/tag-load-time`},{path:`${a}/audits/viewport-ad-density`},{path:`${a}/audits/cumulative-ad-shift`},{path:`${a}/audits/deprecated-api-usage`},{path:`${a}/audits/gpt-errors-overall`},{path:`${a}/audits/total-ad-blocking-time`}],groups:{metrics:{title:r.Metrics},"ads-performance":{title:r.AdsPerformance},"ads-best-practices":{title:r.AdsBestPractices}},category:{title:"Publisher Ads",description:i(n.categoryDescription),auditRefs:[{id:"tag-load-time",weight:5,group:"metrics"},{id:"bid-request-from-page-start",weight:5,group:"metrics"},{id:"ad-request-from-page-start",weight:25,group:"metrics"},{id:"first-ad-render",weight:10,group:"metrics"},{id:"cumulative-ad-shift",weight:5,group:"metrics"},{id:"total-ad-blocking-time",weight:2,group:"metrics"},{id:"gpt-bids-parallel",weight:1,group:"ads-performance"},{id:"serial-header-bidding",weight:1,group:"ads-performance"},{
1109
1106
  id:"bottleneck-requests",weight:1,group:"ads-performance"},{id:"script-injected-tags",weight:1,group:"ads-performance"},{id:"blocking-load-events",weight:1,group:"ads-performance"},{id:"ad-render-blocking-resources",weight:1,group:"ads-performance"},{id:"ad-blocking-tasks",weight:1,group:"ads-performance"},{id:"ad-request-critical-path",weight:0,group:"ads-performance"},{id:"ads-in-viewport",weight:4,group:"ads-best-practices"},{id:"async-ad-tags",weight:2,group:"ads-best-practices"},{id:"loads-ad-tag-over-https",weight:1,group:"ads-best-practices"},{id:"loads-gpt-from-official-source",weight:4,group:"ads-best-practices"},{id:"viewport-ad-density",weight:2,group:"ads-best-practices"},{id:"ad-top-of-viewport",weight:2,group:"ads-best-practices"},{id:"duplicate-tags",weight:1,group:"ads-best-practices"},{id:"deprecated-gpt-api-usage",weight:0,group:"ads-best-practices"},{id:"gpt-errors-overall",weight:0,group:"ads-best-practices"}]}},Object.defineProperty(e.exports,"UIStrings",{
1110
- enumerable:!1,get:()=>n})}(MO);var qO={exports:{}},zO=[{label:"Prebid JS",patterns:["^https?://([^.]*.)?prebid[.]org/.*","^https?://acdn[.]adnxs[.]com/prebid/.*"]},{label:"33Across",patterns:["^https?://ssc[.]33across.com/api/.*"]},{label:"AppNexus",patterns:["^https?://ib[.]adnxs[.]com/.*"]},{label:"Amazon Ads",patterns:["^https?://[a-z-_.]*[.]amazon-adsystem[.]com/.*bid.*"]},{label:"AdTechus (AOL)",patterns:["^https?://([^.]*.)?adserver[.]adtechus[.]com/.*"]},{label:"Aardvark",patterns:["^https?://thor[.]rtk[.]io/.*"]},{label:"AdBlade",patterns:["^https?://rtb[.]adblade[.]com/prebidjs/bid.*"]},{label:"AdBund",patterns:["^https?://us-east-engine[.]adbund[.]xyz/prebid/ad/get.*","^https?://us-west-engine[.]adbund[.]xyz/prebid/ad/get.*"]},{label:"AdButler",patterns:["^https?://servedbyadbutler[.]com/adserve.*"]},{label:"Adequant",patterns:["^https?://rex[.]adequant[.]com/rex/c2s_prebid.*"]},{label:"AdForm",patterns:["^https?://adx[.]adform[.]net/adx.*"]},{label:"AdMedia",
1107
+ enumerable:!1,get:()=>n})}(UO);var HO={exports:{}},GO=[{label:"Prebid JS",patterns:["^https?://([^.]*.)?prebid[.]org/.*","^https?://acdn[.]adnxs[.]com/prebid/.*"]},{label:"33Across",patterns:["^https?://ssc[.]33across.com/api/.*"]},{label:"AppNexus",patterns:["^https?://ib[.]adnxs[.]com/.*"]},{label:"Amazon Ads",patterns:["^https?://[a-z-_.]*[.]amazon-adsystem[.]com/.*bid.*"]},{label:"AdTechus (AOL)",patterns:["^https?://([^.]*.)?adserver[.]adtechus[.]com/.*"]},{label:"Aardvark",patterns:["^https?://thor[.]rtk[.]io/.*"]},{label:"AdBlade",patterns:["^https?://rtb[.]adblade[.]com/prebidjs/bid.*"]},{label:"AdBund",patterns:["^https?://us-east-engine[.]adbund[.]xyz/prebid/ad/get.*","^https?://us-west-engine[.]adbund[.]xyz/prebid/ad/get.*"]},{label:"AdButler",patterns:["^https?://servedbyadbutler[.]com/adserve.*"]},{label:"Adequant",patterns:["^https?://rex[.]adequant[.]com/rex/c2s_prebid.*"]},{label:"AdForm",patterns:["^https?://adx[.]adform[.]net/adx.*"]},{label:"AdMedia",
1111
1108
  patterns:["^https?://b[.]admedia[.]com/banner/prebid/bidder.*"]},{label:"AdMixer",patterns:["^https?://inv-nets[.]admixer[.]net/prebid[.]aspx.*","^https?://inv-nets[.]admixer[.]net/videoprebid[.]aspx.*"]},{label:"AOL",patterns:["^https?://adserver-us[.]adtech[.]advertising[.]com.*","^https?://adserver-eu[.]adtech[.]advertising[.]com.*","^https?://adserver-as[.]adtech[.]advertising[.]com.*","^https?://adserver[.]adtech[.]de/pubapi/.*"]},{label:"Beachfront",patterns:["^https?://reachms[.]bfmio[.]com/bid[.]json?exchange_id=.*"]},{label:"Bidfluence",patterns:["^https?://cdn[.]bidfluence[.]com/forge[.]js.*"]},{label:"Brightcom",patterns:["^https?://hb[.]iselephant[.]com/auc/ortb.*"]},{label:"C1x",patterns:["^https?://ht-integration[.]c1exchange[.]com:9000/ht.*"]},{label:"CentroBid",patterns:["^https?://t[.]brand-server[.]com/hb.*"]},{label:"Conversant",patterns:["^https?://media[.]msg[.]dotomi[.]com/s2s/.*"]},{label:"Criteo",
1112
1109
  patterns:["^https?://static[.]criteo[.]net/js/ld/publishertag[.]js.*","^https?://([^.]*.)?bidder[.]criteo[.]com/cdb.*","^https?://([^.]*.)?rtax[.]criteo[.]com/delivery/rta.*","^https?://([^.]*.)?rtax[.]eu[.]criteo[.]com/delivery/rta.*"]},{label:"Datablocks",patterns:["^https?://[a-z0-9_.-]*[.]dblks[.]net/.*"]},{label:"Districtm",patterns:["^https?://prebid[.]districtm[.]ca/lib[.]js.*"]},{label:"E-Planning",patterns:["^https?://ads[.]us[.]e-planning[.]net.*"]},{label:"Essens",patterns:["^https?://bid[.]essrtb[.]com/bid/prebid_call.*"]},{label:"Facebook",patterns:["^https?://an[.]facebook[.]com/v2/placementbid[.]json.*"]},{label:"FeatureForward",patterns:["^https?://prmbdr[.]featureforward[.]com/newbidder/.*"]},{label:"Fidelity",patterns:["^https?://x[.]fidelity-media[.]com.*"]},{label:"GetIntent",patterns:["^https?://px[.]adhigh[.]net/rtb/direct_banner.*","^https?://px[.]adhigh[.]net/rtb/direct_vast.*"]},{label:"GumGum",patterns:["^https?://g2[.]gumgum[.]com/hbid/imp.*"]},{
1113
1110
  label:"Hiromedia",patterns:["^https?://hb-rtb[.]ktdpublishers[.]com/bid/get.*"]},{label:"Imonomy",patterns:["^https?://b[.]imonomy[.]com/openrtb/hb/.*"]},{label:"ImproveDigital",patterns:["^https?://ad[.]360yield[.]com/hb.*"]},{label:"IndexExchange",patterns:["^https?://as(-sec)?[.]casalemedia[.]com/(cygnus|headertag).*","^https?://js(-sec)?[.]indexww[.]com/ht/.*"]},{label:"InnerActive",patterns:["^https?://ad-tag[.]inner-active[.]mobi/simpleM2M/requestJsonAd.*"]},{label:"Innity",patterns:["^https?://as[.]innity[.]com/synd/.*"]},{label:"JCM",patterns:["^https?://media[.]adfrontiers[.]com/pq.*"]},{label:"JustPremium",patterns:["^https?://pre[.]ads[.]justpremium[.]com/v/.*"]},{label:"Kargo",patterns:["^https?://krk[.]kargo[.]com/api/v1/bid.*"]},{label:"Komoona",patterns:["^https?://bidder[.]komoona[.]com/v1/GetSBids.*"]},{label:"KruxLink",patterns:["^https?://link[.]krxd[.]net/hb.*"]},{label:"Kumma",patterns:["^https?://cdn[.]kumma[.]com/pb_ortb[.]js.*"]},{label:"Mantis",
1114
1111
  patterns:["^https?://mantodea[.]mantisadnetwork[.]com/website/prebid.*"]},{label:"MarsMedia",patterns:["^https?://bid306[.]rtbsrv[.]com:9306/bidder.*"]},{label:"Media.net",patterns:["^https?://contextual[.]media[.]net/bidexchange.*"]},{label:"MemeGlobal",patterns:["^https?://stinger[.]memeglobal[.]com/api/v1/services/prebid.*"]},{label:"MobFox",patterns:["^https?://my[.]mobfox[.]com/request[.]php.*"]},{label:"NanoInteractive",patterns:["^https?://tmp[.]audiencemanager[.]de/hb.*"]},{label:"OpenX",patterns:["^https?://([^.]*.)?d[.]openx[.]net/w/1[.]0/arj.*","^https?://([^.]*.)?servedbyopenx[.]com/.*"]},{label:"Piximedia",patterns:["^https?://static[.]adserver[.]pm/prebid.*"]},{label:"Platformio",patterns:["^https?://piohbdisp[.]hb[.]adx1[.]com.*"]},{label:"Pollux",patterns:["^https?://adn[.]plxnt[.]com/prebid.*"]},{label:"PubGears",patterns:["^https?://c[.]pubgears[.]com/tags.*"]},{label:"Pubmatic",
1115
1112
  patterns:["^https?://ads[.]pubmatic[.]com/AdServer/js/gshowad[.]js.*","^https?://([^.]*.)?gads.pubmatic[.]com/.*","^https?://hbopenbid.pubmatic[.]com/.*"]},{label:"Pulsepoint",patterns:["^https?://bid[.]contextweb[.]com/header/tag.*"]},{label:"Quantcast",patterns:["^https?://global[.]qc[.]rtb[.]quantserve[.]com:8080/qchb.*"]},{label:"Rhythmone",patterns:["^https?://tag[.]1rx[.]io/rmp/.*"]},{label:"Roxot",patterns:["^https?://r[.]rxthdr[.]com.*"]},{label:"Rubicon",patterns:["^https?://([^.]*.)?(fastlane|optimized-by|anvil)[.]rubiconproject[.]com/a/api.*","^https?://fastlane-adv[.]rubiconproject[.]com/v1/auction/video.*"]},{label:"Sekindo",patterns:["^https?://hb[.]sekindo[.]com/live/liveView[.]php.*"]},{label:"ShareThrough",patterns:["^https?://btlr[.]sharethrough[.]com/header-bid/.*"]},{label:"Smart AdServer",patterns:["^https?://prg[.]smartadserver[.]com/prebid.*"]},{label:"Sonobi",patterns:["^https?://apex[.]go[.]sonobi[.]com/trinity[.]js.*"]},{label:"Sovrn",
1116
1113
  patterns:["^https?://ap[.]lijit[.]com/rtb/bid.*"]},{label:"SpringServe",patterns:["^https?://bidder[.]springserve[.]com/display/hbid.*"]},{label:"StickyAds",patterns:["^https?://cdn[.]stickyadstv[.]com/mustang/mustang[.]min[.]js.*","^https?://cdn[.]stickyadstv[.]com/prime-time/.*"]},{label:"TapSense3",patterns:["^https?://ads04[.]tapsense[.]com/ads/headerad.*"]},{label:"ThoughtLeadr",patterns:["^https?://a[.]thoughtleadr[.]com/v4/.*"]},{label:"TremorBid",patterns:["^https?://([^.]*.)?ads[.]tremorhub[.]com/ad/tag.*"]},{label:"Trion",patterns:["^https?://in-appadvertising[.]com/api/bidRequest.*"]},{label:"TripleLift",patterns:["^https?://tlx[.]3lift[.]com/header/auction.*"]},{label:"TrustX",patterns:["^https?://sofia[.]trustx[.]org/hb.*"]},{label:"UCFunnel",patterns:["^https?://agent[.]aralego[.]com/header.*"]},{label:"Underdog Media",patterns:["^https?://udmserve[.]net/udm/img[.]fetch.*"]},{label:"UnRuly",patterns:["^https?://targeting[.]unrulymedia[.]com/prebid.*"]},{
1117
- label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}];const VO=/([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?/g,WO="max-age",GO="s-maxage",HO="max-stale",YO="min-fresh",KO="immutable",JO="must-revalidate",XO="no-cache",ZO="no-store",QO="no-transform",eF="only-if-cached",tF="private",rF="proxy-revalidate",aF="public";function parseBooleanOnly(e){return null===e}function parseDuration(e){if(!e)return null;const t=parseInt(e,10);return!Number.isFinite(t)||t<0?null:t}class CacheControl{constructor(){this.maxAge=null,this.sharedMaxAge=null,
1118
- this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||0===e.length)return this;const t={},r=e.match(VO)||[];return Array.prototype.forEach.call(r,(e=>{const r=e.split("=",2),[a]=r;let n=null;r.length>1&&(n=r[1].trim()),t[a.toLowerCase()]=n})),this.maxAge=parseDuration(t[WO]),this.sharedMaxAge=parseDuration(t[GO]),this.maxStale=parseBooleanOnly(t[HO]),this.maxStaleDuration=parseDuration(t[HO]),this.maxStaleDuration&&(this.maxStale=!0),this.minFresh=parseDuration(t[YO]),this.immutable=parseBooleanOnly(t[KO]),this.mustRevalidate=parseBooleanOnly(t[JO]),this.noCache=parseBooleanOnly(t[XO]),this.noStore=parseBooleanOnly(t[ZO]),this.noTransform=parseBooleanOnly(t[QO]),this.onlyIfCached=parseBooleanOnly(t[eF]),this.private=parseBooleanOnly(t[tF]),
1119
- this.proxyRevalidate=parseBooleanOnly(t[rF]),this.public=parseBooleanOnly(t[aF]),this}format(){const e=[];return"number"==typeof this.maxAge&&e.push(`${WO}=${this.maxAge}`),"number"==typeof this.sharedMaxAge&&e.push(`${GO}=${this.sharedMaxAge}`),this.maxStale&&("number"==typeof this.maxStaleDuration?e.push(`${HO}=${this.maxStaleDuration}`):e.push(HO)),"number"==typeof this.minFresh&&e.push(`${YO}=${this.minFresh}`),this.immutable&&e.push(KO),this.mustRevalidate&&e.push(JO),this.noCache&&e.push(XO),this.noStore&&e.push(ZO),this.noTransform&&e.push(QO),this.onlyIfCached&&e.push(eF),this.private&&e.push(tF),this.proxyRevalidate&&e.push(rF),this.public&&e.push(aF),e.join(", ")}}var nF={CacheControl,parse:function parse(e){return(new CacheControl).parse(e)},format:function format$2(e){return e instanceof CacheControl?e.format():CacheControl.prototype.format.call(e)}};const iF=QS.exports,{parse:oF}=nF;function getHeader(e,t){const r=t.toLowerCase()
1120
- ;return(e.responseHeaders||[]).find((e=>e.name.toLowerCase()===r))}var sF={isCacheable:function isCacheable$2(e){if(!iF.isCacheableAsset(e))return!1;const t=getHeader(e,"cache-control");if(t){try{const e=oF(t.value);if(e.noStore||e.noCache||0===e.maxAge)return!1}catch(e){}return!0}return!!getHeader(e,"expires")||!!getHeader(e,"last-modified")}};const cF=zO,lF=uw,{isCacheable:uF}=sF,{URL:dF}=Gn;function toURL$2(e){let t;try{t="string"==typeof e?new dF(e):e}catch(e){t=new dF("http://_")}return t}function isGoogleAds$2(e){return e=toURL$2(e),/(^|\.)(doubleclick.net|google(syndication|tagservices).com)$/.test(e.hostname)}function isAdSenseTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=["/pagead/js/adsbygoogle.js","/pagead/show_ads.js"].includes(e.pathname);return t&&r}function isAdSenseImplTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=/(^\/pagead\/js\/.*\/show_ads_impl.*?\.js)/.test(e.pathname);return t&&r}function isAdSense$1(e){
1121
- return isAdSenseTag(e=toURL$2(e))||isAdSenseImplTag(e)}function isAdSenseAdRequest(e){if(!e)return!1;const t=new dF(e.url);return"/pagead/ads"===t.pathname&&"googleads.g.doubleclick.net"===t.host}function isAdSenseIframe(e){return/(^aswift_\d+)/.test(e.id)}function isGptTag$2(e){const{host:t,pathname:r}=toURL$2(e),a=["www.googletagservices.com","pagead2.googlesyndication.com","securepubads.g.doubleclick.net"].includes(t),n=["/tag/js/gpt.js","/tag/js/gpt_mobile.js"].includes(r);return a&&n}function isAMPTag(e){const{host:t,pathname:r}=toURL$2(e),a=["cdn.ampproject.org"].includes(t),n=["/v0/amp-ad-0.1.js"].includes(r);return a&&n}function isGptImplTag$4(e){return isGoogleAds$2(e)&&/(^\/gpt\/pubads_impl([a-z_]*)((?<!rendering)_)\d+\.js)/.test(toURL$2(e).pathname)}function isAMPImplTag(e){return/^\/[a-z_]*\/\d+\/v0\/amp-ad-network-doubleclick-impl-0.1.js/.test(toURL$2(e).pathname)}function isGpt$3(e){return isGptTag$2(e=toURL$2(e))||isGptImplTag$4(e)}function isGptAdRequest$1(e){
1122
- if(!e)return!1;return"/gampad/ads"===new dF(e.url).pathname&&"XHR"===e.resourceType&&isGoogleAds$2(e.url)}function isAMPAdRequest(e){if(!e)return!1;const t=new dF(e.url);return"/gampad/ads"===t.pathname&&"securepubads.g.doubleclick.net"===t.host&&"Fetch"===e.resourceType}function isGptIframe$1(e){return/(^google_ads_iframe_)/.test(e.id)}function isAdScript$2(e){return isAdSense$1(e)||isGpt$3(e)||function isAMP(e){return isAMPTag(e)||isAMPImplTag(e)}(e)}function getHeaderBidder$2(e){for(const t of cF)for(const r of t.patterns)if(new RegExp(r).test(e))return t.label}function isBidRelatedRequest$1(e){return!!getHeaderBidder$2("string"==typeof e?e:e.url)}var mF={isGoogleAds:isGoogleAds$2,isGptAdRequest:isGptAdRequest$1,isImpressionPing:function isImpressionPing$3(e){const{host:t,pathname:r}=toURL$2(e);return["securepubads.g.doubleclick.net","googleads4.g.doubleclick.net"].includes(t)&&["/pcs/view","/pagead/adview"].includes(r)},isGpt:isGpt$3,isAdSense:isAdSense$1,isAdSenseTag,
1123
- isAdSenseImplTag,isAdSenseAdRequest,isAdSenseIframe,isGptTag:isGptTag$2,isGptImplTag:isGptImplTag$4,isGptIframe:isGptIframe$1,isAdTag:function isAdTag$3(e){return isAdSenseTag(e)||isGptTag$2(e)||isAMPTag(e)},isAdScript:isAdScript$2,isAdRequest:function isAdRequest$5(e){return isAdSenseAdRequest(e)||isGptAdRequest$1(e)||isAMPAdRequest(e)},isAdIframe:function isAdIframe$3(e){return isAdSenseIframe(e)||isGptIframe$1(e)},isImplTag:function isImplTag$3(e){return isAdSenseTag(e)||isGptImplTag$4(e)||isAMPImplTag(e)},containsAnySubstring:function containsAnySubstring$1(e,t){return t.some((t=>e.includes(t)))},hasImpressionPath:function hasImpressionPath(e){return"/pcs/view"===e.pathname||"/pagead/adview"===e.pathname},getHeaderBidder:getHeaderBidder$2,isBidRelatedRequest:isBidRelatedRequest$1,isBidRequest:function isBidRequest$4(e){return isBidRelatedRequest$1(e)&&function isPossibleBidRequest(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&!uF(e)}(e)},
1124
- isStaticRequest:function isStaticRequest$1(e){return["parser","preload","other"].includes(e.initiator.type)},toURL:toURL$2,trimUrl:function trimUrl$1(e){const t=new dF(e),r=t.pathname.length>60?t.pathname.substr(0,60)+"...":t.pathname;return t.origin+r},getNameOrTld:function getNameOrTld$2(e){const t=getHeaderBidder$2(e);if(t)return t;if(isGpt$3(e))return"GPT";if(isAdSense$1(e))return"AdSense";if(isAMPTag(e))return"AMP tag";const r=lF.getEntity(e);if(r)return r.name;const{host:a}=new dF(e),[n=""]=a.match(/([^.]*(\.[a-z]{2,3}){1,2})$/)||[];return n||a},isAMPTag,isAMPAdRequest,isAdRelated:function isAdRelated$3(e){const t="string"==typeof e?e:e.url;if(isAdScript$2(t)||getHeaderBidder$2(t))return!0;const r=lF.getEntity(t);return!!r&&r.categories.includes("ad")}};const pF=Zc,hF=sb,{isBidRelatedRequest:gF,isImpressionPing:fF,isGoogleAds:yF,isGptAdRequest:vF,isGptTag:bF,isGptImplTag:wF,toURL:SF}=mF;function getFrame(e){return e.args.frame||e.args.data&&e.args.data.frame||null}
1125
- function isAdTask(e){return!!function getCpuNodeUrls(e){const t=new Set;for(const{args:r}of e.childEvents)r.data&&r.data.url&&t.add(r.data.url);return Array.from(t)}(e).find((e=>gF(e)||yF(SF(e))))}function addEdge(e,t){e===t||e.endTime>t.startTime||e.addDependent(t)}function addEdges(e){const t=[],r=[];e.traverse((e=>{e.type===pF.TYPES.NETWORK&&(bF(e.record.url)&&"Script"===e.record.resourceType?r.push(e):vF(e.record)&&t.push(e))})),e.traverse((e=>{if(e.type===pF.TYPES.NETWORK){if(wF(e.record.url)){const t=e;for(const e of r)addEdge(e,t)}if(gF(e.record)){const r=e;for(const e of t)addEdge(r,e)}if(fF(e.record.url)){const r=e;for(const e of t){addEdge(e,r);for(const t of e.getDependents())addEdge(t,r)}}}}))}class AdLanternMetric$6 extends hF{static get COEFFICIENTS(){return{intercept:0,optimistic:1,pessimistic:0}}static getPessimisticGraph(e){const t=e.cloneWithRelationships((e=>!0));return addEdges(t),t}static getOptimisticGraph(e){
1126
- const t=e.record.frameId,r=AdLanternMetric$6.getPessimisticGraph(e),a=r.cloneWithRelationships((e=>{if(e.type===pF.TYPES.CPU)return function isLongTask(e){return e.event.dur>5e4}(e)||isAdTask(e)||!!getFrame(e.event)&&getFrame(e.event)!==t;if(e.hasRenderBlockingPriority())return!0;const r=e.record.url;return gF(r)||yF(SF(r))}));return addEdges(r),a}static getEstimateFromSimulation(e,t){throw new Error("getEstimateFromSimulation not implemented by "+this.name)}static findTiming(e,t){let r={startTime:1/0,endTime:-1/0,duration:0};for(const[a,n]of e.entries())t(a,n)&&r.startTime>n.startTime&&(r=n);return r}static findNetworkTiming(e,t){return this.findTiming(e,(e=>e.type===pF.TYPES.NETWORK&&t(e.record)))}}var TF=AdLanternMetric$6;const EF=TF,xF=Dl,_F=Lo,AF=eb,{isAdRequest:RF,isBidRequest:kF,isImplTag:DF,isImpressionPing:CF}=mF,{URL:IF}=Gn;function getPageStartTime$4(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.startTime:t}async function getTimingsByRecord$5(e,t,r){
1127
- const a=new Map,n=await _F.request(t,r);if("simulate"==r.settings.throttlingMethod){const n=await AF.request({trace:e,devtoolsLog:t},r),i=EF.getOptimisticGraph(n),o=await xF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:s}=o.simulate(i,{});for(const[{record:e},t]of s.entries())e&&a.set(e,t)}else{const e=getPageStartTime$4(n);for(const t of n)a.set(t,{startTime:1e3*(t.startTime-e),endTime:1e3*(t.endTime-e),duration:1e3*(t.endTime-t.startTime)})}return a}function getScriptUrl$1(e){if(e.args.data&&["EvaluateScript","FunctionCall"].includes(e.name))return e.args.data.url?e.args.data.url:e.args.data.stackTrace?e.args.data.stackTrace[0].url:void 0}var NF={getTagEndTime:function getTagEndTime$1(e){const t=e.find((e=>DF(new IF(e.url))));return t?t.endTime:-1},getImpressionStartTime:function getImpressionStartTime$1(e){const t=e.find((e=>CF(e.url)));return t?t.startTime:-1},getAdStartTime:function getAdStartTime$2(e){const t=e.find(RF);return t?t.startTime:-1},
1128
- getBidStartTime:function getBidStartTime$1(e){const t=e.find(kF);return t?t.startTime:-1},getPageStartTime:getPageStartTime$4,getPageResponseTime:function getPageResponseTime(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.responseReceivedTime:t},getScriptUrl:getScriptUrl$1,getTimingsByRecord:getTimingsByRecord$5,getScriptEvaluationTimes:async function getScriptEvaluationTimes$1(e,t,r){const a=1e3*getPageStartTime$4(await _F.request(t,r)),n=new Map;for(const t of e.traceEvents){const e=getScriptUrl$1(t);if(!e)continue;const r=t.ts/1e3-a;(!n.has(e)||n.get(e)>r)&&n.set(e,r)}if("simulate"!==r.settings.throttlingMethod)return n;const i=await getTimingsByRecord$5(e,t,r),o=new Map;for(const[e,t]of i.entries()){const i=n.get(e.url);if(!i)continue;if(o.has(e.url))continue;const s=1e3*e.startTime-a,c=t.endTime,l=r.settings.throttling.cpuSlowdownMultiplier*(i-s);o.set(e.url,c+l)}return o}};const LF=TF,MF=Ew,PF=Ao,{getAdStartTime:OF,getPageStartTime:FF}=NF,{isAdRequest:UF}=mF
1129
- ;class LanternAdRequestTime extends LF{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:LF.findNetworkTiming(r,UF).startTime,nodeTimings:r}}}LanternAdRequestTime=PF(LanternAdRequestTime);class AdRequestTime$1 extends MF{static async computeSimulatedMetric(e,t){return LanternAdRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=FF(t),a=1e3*(OF(t)-r);return Promise.resolve({timing:a})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var jF=AdRequestTime$1=PF(AdRequestTime$1);var BF={getAttributableUrl:function getAttributableUrl$3(e,t=new Set){const r=e.attributableURLs.find((e=>t.has(e))),a=e.attributableURLs[0],n=r||a;if(n)return n;let i=50,o="";for(const r of e.children){const e=getAttributableUrl$3(r,t);e&&r.duration>i&&(o=e,i=r.duration)}return o}};const $F=TF,qF=Zc,zF=Ew,{getAttributableUrl:VF}=BF,WF=Dl,GF=Rv,HF=Ao,YF=Lo,KF=eb;class LongTasks$2 extends zF{
1130
- static async getSimulationGraph(e,t,r){const a=await KF.request({trace:e,devtoolsLog:t},r);return $F.getOptimisticGraph(a)}static async computeSimulatedResult(e,t,r){const a=await this.getSimulationGraph(e,t,r),n=await WF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:i}=n.simulate(a,{}),o=[];for(const[e,t]of i.entries())e.type!==qF.TYPES.CPU||t.duration<100||o.push({event:e.event,startTime:t.startTime,endTime:t.endTime,duration:t.duration,selfTime:t.duration,attributableURLs:Array.from(e.getEvaluateScriptURLs()),children:[],parent:e.parent,unbounded:e.unbounded,group:e.group});return o}static async computeObservedResult(e,t,r){const a=await GF.request(e,r),n=await YF.request(t,r),i=new Set(n.filter((e=>"Script"===e.resourceType)).map((e=>e.url)));return a.filter((e=>function isLong(e,t){if(e.duration<50)return!1;const r=VF(e,t);if(!r)return!1;if(e.parent)return r!=VF(e.parent,t);return!0}(e,i)))}static async compute_({trace:e,devtoolsLog:t},r){
1131
- return"simulate"==r.settings.throttlingMethod?this.computeSimulatedResult(e,t,r):this.computeObservedResult(e,t,r)}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var JF=LongTasks$2=HF(LongTasks$2),XF=getAugmentedNamespace(Object.freeze({__proto__:null,Audit:kc}));const ZF=jF,QF=oi,eU=JF,{auditNotApplicable:tU}=PO.exports,{Audit:rU}=XF,{getAttributableUrl:aU}=BF,{isAdScript:nU}=mF,{URL:iU}=Gn,oU={title:"No long tasks blocking ad-related network requests",failureTitle:"Avoid long tasks that block ad-related network requests",description:"Tasks blocking the main thread can delay ad requests and cause a poor user experience. Consider removing long blocking tasks or moving them off of the main thread. These tasks can be especially detrimental to performance on less powerful devices. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-blocking-tasks).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",
1132
- columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},sU=QF.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks.js",oU),cU=[{key:"script",itemType:"url",text:sU(oU.columnScript)},{key:"startTime",itemType:"ms",text:sU(oU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:sU(oU.columnDuration),granularity:1}];class AdBlockingTasks extends rU{static get meta(){return{id:"ad-blocking-tasks",title:sU(oU.title),failureTitle:sU(oU.failureTitle),description:sU(oU.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r="simulate"==t.settings.throttlingMethod?200:100,a={trace:e.traces[rU.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[rU.DEFAULT_PASS],settings:t.settings};let n=[];try{n=await eU.request(a,t)}catch(e){return tU.InvalidTiming}if(!n.length)return tU.NoTasks;const{timing:i}=await ZF.request(a,t);if(!(i>0))return tU.NoAdRelatedReq;const o=[];for(const e of n){
1133
- if(e.startTime>i||e.duration<r)continue;const t=aU(e);if(t&&nU(new iU(t)))continue;const a=t&&new iU(t),n=a&&a.origin+a.pathname||"Other";o.push({script:n,rawUrl:t,startTime:e.startTime,endTime:e.endTime,duration:e.duration,isTopLevel:!e.parent})}let s=Array.from(o);s.length>10&&(s=o.filter((e=>"Other"!==e.script&&e.isTopLevel)).sort(((e,t)=>t.duration-e.duration)).splice(0,10).sort(((e,t)=>e.startTime-t.startTime)));const c=s.reduce(((e,t)=>t.isTopLevel?e+t.duration:e),0),l=s.length>0;return{score:l?0:1,numericValue:c,numericUnit:"millisecond",displayValue:l?sU(oU.failureDisplayValue,{timeInMs:c}):"",details:AdBlockingTasks.makeTableDetails(cU,s)}}}qO.exports=AdBlockingTasks,qO.exports.UIStrings=oU;var lU={exports:{}};const uU=oi,dU=Lo,{auditNotApplicable:mU}=PO.exports,{Audit:pU}=XF,{getTimingsByRecord:hU}=NF,{isAdTag:gU}=mF,{URL:fU}=Gn,yU={title:"Minimal render-blocking resources found",failureTitle:"Avoid render-blocking resources",
1134
- description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},vU=uU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources.js",yU),bU=[{key:"url",itemType:"url",text:vU(yU.columnUrl)},{key:"startTime",itemType:"ms",text:vU(yU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:vU(yU.columnDuration),granularity:1}];class AdRenderBlockingResources extends pU{static get meta(){return{id:"ad-render-blocking-resources",title:vU(yU.title),failureTitle:vU(yU.failureTitle),scoreDisplayMode:"binary",description:vU(yU.description),
1135
- requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[pU.DEFAULT_PASS],a=e.traces[pU.DEFAULT_PASS],n=await dU.request(r,t),i=n.find((e=>gU(new fU(e.url))));if(!i)return mU.NoTag;const o=await hU(a,r,t),s=new Set;for(const t of e.LinkElements)t.href&&"stylesheet"==t.rel&&s.add(t.href);for(const t of e.ScriptElements)!t.src||t.defer||t.async||s.add(t.src);const c=n.filter((e=>e.endTime<i.startTime)).filter((e=>e!=i.initiatorRequest)).filter((e=>e.initiator.type="parser")).filter((e=>s.has(e.url))).map((e=>Object.assign({url:e.url},o.get(e))));c.sort(((e,t)=>e.endTime-t.endTime));const l=o.get(i)||{startTime:1/0},u=c.map((e=>e.startTime)),d=c.map((e=>e.endTime)),m=Math.min(...u),p=Math.min(Math.max(...d),l.startTime)-m;let h="";c.length>0&&p>0&&(h=vU(yU.failureDisplayValue,{timeInMs:p}));return{score:c.length>0&&p>100?0:1,numericValue:c.length,numericUnit:"unitless",displayValue:h,details:{opportunity:p,
1136
- ...AdRenderBlockingResources.makeTableDetails(bU,c)}}}}lU.exports=AdRenderBlockingResources,lU.exports.UIStrings=yU;var wU={exports:{}};var SU={assert:function assert$2(e){if(null==e)throw new Error("Expected not to be null");return e}};const TU=Zc,EU=Lo,{assert:xU}=SU,{getNameOrTld:_U,trimUrl:AU}=mF,{getNetworkInitiators:RU}=eb,{getTimingsByRecord:kU}=NF,{isAdRequest:DU,isAdSense:CU,isGpt:IU,isBidRequest:NU,isAdRelated:LU}=mF;function isXhrCritical(e,t,r){const a=t.xhrEdges.get(e.url);if(!a)return!1;for(const{url:e}of r)if(a.has(e))return!0;return!1}function addInitiatedRequests(e,t,r,a){const n=r.allRecords.filter((e=>null!=e.resourceType)).filter((e=>["Script","XHR"].includes(e.resourceType||"")&&e.endTime<t.startTime)).filter((t=>t.initiatorRequest==e||RU(t).includes(e.url)));for(const e of n){"XHR"==e.resourceType&&isXhrCritical(e,r,a)&&linkGraph(r,e,a)}}function linkGraph(e,t,r=new Set){if(!t||r.has(t))return r;r.add(t);const a=new Set
1137
- ;for(let n=t.initiator.stack;n;n=n.parent)for(const{url:i}of n.callFrames){if(a.has(i))continue;a.add(i);const o=e.requestsByUrl.get(i);if(o&&(linkGraph(e,o,r),"Script"==o.resourceType)){const a=n.callFrames[0].url,i=e.requestsByUrl.get(a);i&&addInitiatedRequests(i,t,e,r)}}return linkGraph(e,t.initiatorRequest||null,r),r}function buildNetworkSummary(e,t){const r=new Map;for(const t of e)r.set(t.url,t);const a=t.filter((e=>e.name.startsWith("XHR"))).filter((e=>!!(e.args.data||{}).url)),n=new Map;for(const e of a){const t=e.args.data||{},r=n.get(t.url)||new Set;for(const{url:e}of t.stackTrace||[])r.add(e);n.set(t.url,r)}return{requestsByUrl:r,xhrEdges:n,allRecords:e}}var MU={getTransitiveClosure:function getTransitiveClosure(e,t){const r=new Set,a=function findTargetRequest(e,t){let r=null;return e.traverse((e=>{e.type!==TU.TYPES.CPU&&t(e.record)&&(r&&r.startTime<e.startTime||(r=e))})),r}(e,t),n=[],i=[];if(null==a)return{requests:n,traceEvents:i};const o=[a];for(;o.length;){
1138
- const e=o.pop();e&&!r.has(e)&&(r.add(e),o.push(...e.getDependencies()))}const s=new Set;for(o.push(...e.getDependents());o.length;){const e=o.pop();if(e&&!s.has(e)){if(s.add(e),r.has(e))for(const e of o)r.add(e);o.push(...e.getDependents())}}for(const e of r)e.type===TU.TYPES.NETWORK?e.endTime<xU(a).startTime&&n.push(e.record):e.type===TU.TYPES.CPU&&e.event.ts<1e6*xU(a).startTime&&i.push(e.event,...e.childEvents);return{requests:n,traceEvents:i}},getCriticalGraph:function getCriticalGraph$1(e,t,r){const a=buildNetworkSummary(e,t),n=new Set;return linkGraph(a,r,n),n},computeAdRequestWaterfall:async function computeAdRequestWaterfall$4(e,t,r){const a=await EU.request(t,r),n=a.find(DU)||a.find(NU)||a.find(LU);if(null==n)return Promise.resolve([]);const i=new Set,o=xU(n),s=a.filter((e=>IU(e.url)||CU(e.url))),c=a.filter((e=>NU(e)&&e.endTime<=o.startTime)),l=buildNetworkSummary(a,e.traceEvents);for(const e of[o,...c,...s])linkGraph(l,e,i)
1139
- ;const u=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),d=Array.from(i).filter((e=>e.endTime<o.startTime)).filter((e=>u.has(e.resourceType))).filter((e=>"text/css"!=e.mimeType)),m=await kU(e,t,r),p=function computeSummaries(e){e.sort(((e,t)=>e.nameOrTld!=t.nameOrTld?e.nameOrTld<t.nameOrTld?-1:1:e.type!=t.type?e.type<t.type?-1:1:e.startTime!=t.startTime?e.startTime<t.startTime?-1:1:e.endTime-t.endTime));const t=[];for(let n=0;n<e.length;n++){const i=e[n];let o;for(;n<e.length&&(o=e[n+1],o&&(r=o,a=i,!(Math.max(r.startTime,a.startTime)>Math.min(r.endTime,a.endTime)||r.type&&a.type&&r.type!=a.type||"Script"==r.type||r.nameOrTld!=a.nameOrTld)));)i.endTime=Math.max(i.endTime,o.endTime),i.duration=i.endTime-i.startTime,n++;t.push(i)}var r,a;return t.sort(((e,t)=>e.startTime-t.startTime)),t}(d.map((e=>{const{startTime:t,endTime:r}=m.get(e)||e;return{startTime:t,endTime:r,duration:r-t,selfTime:0,url:AU(e.url),nameOrTld:_U(e.url),type:e.resourceType,record:e}})))
1140
- ;return function computeSelfTimes(e){if(!e.length)return[];let t=xU(e[0]);t.selfTime=t.duration;let r=t.startTime;for(const a of e){if(a.endTime<r||a==t)continue;const e=Math.max(r,a.startTime),n=Math.min(t.endTime,a.endTime);e<n&&(t.selfTime-=n-e),r=Math.max(r,n),a.endTime>t.endTime&&(a.selfTime=a.endTime-e,t=a)}}(p),p}};const PU=oi,{auditNotApplicable:OU}=PO.exports,{Audit:FU}=XF,{computeAdRequestWaterfall:UU}=MU,jU={title:"Ad request waterfall",failureTitle:"Reduce critical path for ad loading",description:"Consider reducing the number of resources, loading multiple resources simultaneously, or loading resources earlier to improve ad speed. Requests that block ad loading can be found below. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-critical-path).",displayValue:"{serialResources, plural, =1 {1 serial resource} other {# serial resources}}",columnUrl:"Request",columnType:"Type",columnStartTime:"Start",columnEndTime:"End"
1141
- },BU=PU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-critical-path.js",jU),$U=[{key:"nameOrTld",itemType:"text",text:BU(jU.columnType)},{key:"url",itemType:"url",text:BU(jU.columnUrl)},{key:"startTime",itemType:"ms",text:BU(jU.columnStartTime),granularity:1},{key:"endTime",itemType:"ms",text:BU(jU.columnEndTime),granularity:1}];class AdRequestCriticalPath extends FU{static get meta(){return{id:"ad-request-critical-path",title:BU(jU.title),failureTitle:BU(jU.failureTitle),description:BU(jU.description),scoreDisplayMode:"informative",requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[FU.DEFAULT_PASS],a=e.devtoolsLogs[FU.DEFAULT_PASS],n=(await UU(r,a,t)).filter((e=>e.startTime>0&&e.startTime<e.endTime));if(!n.length)return OU.NoAds;const i=function computeDepth(e){let t=0,r=0;for(const{startTime:a,endTime:n}of e)a>=t?(++r,t=n):t=Math.min(t,n);return r}(n),o=i>3;for(const e of n)delete e.record
1142
- ;const s=function computeIdleTimes(e){let t=1/0;const r=[];for(let a=0;a<e.length;){const{startTime:n,endTime:i}=e[a];for(n-t>150&&r.push(n-t),t=i;++a<e.length&&e[a].startTime<t;)t=Math.max(t,e[a].endTime)}return r}(n),c=Math.max(...s),l=s.reduce(((e,t)=>e+t),0);return{numericValue:i,numericUnit:"unitless",score:o?0:1,displayValue:BU(jU.displayValue,{serialResources:i}),details:{size:n.length,depth:i,maxIdleTime:c,totalIdleTime:l,...AdRequestCriticalPath.makeTableDetails($U,n)}}}}wU.exports=AdRequestCriticalPath,wU.exports.UIStrings=jU;var qU={exports:{}};const zU=TF,VU=Ew,WU=Ao,{getAdStartTime:GU,getBidStartTime:HU,getPageStartTime:YU}=NF,{isAdRequest:KU,isBidRequest:JU}=mF;class LanternBidRequestTime extends zU{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e,a=zU.findNetworkTiming(r,JU).startTime;return a>zU.findNetworkTiming(r,KU).startTime?{timeInMs:-1,nodeTimings:r}:{timeInMs:a,nodeTimings:r}}}LanternBidRequestTime=WU(LanternBidRequestTime)
1143
- ;class BidRequestTime extends VU{static async computeSimulatedMetric(e,t){return LanternBidRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=YU(t),a=HU(t);if(GU(t)<a)return{timing:-1};return{timing:1e3*(a-r)}}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const XU=BidRequestTime=WU(BidRequestTime),ZU=oi,{auditNotApplicable:QU}=PO.exports,{Audit:ej}=XF,tj={title:"First bid request time",failureTitle:"Reduce time to send the first bid request",description:"This metric measures the elapsed time from the start of page load until the first bid request is made. Delayed bid requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bid-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"
1144
- },rj=ZU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start.js",tj);qU.exports=class BidRequestFromPageStart extends ej{static get meta(){return{id:"bid-request-from-page-start",title:rj(tj.title),failureTitle:rj(tj.failureTitle),description:rj(tj.description),scoreDisplayMode:ej.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[ej.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[ej.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await XU.request(r,t);return n>0?{numericValue:n,numericUnit:"millisecond",score:ej.computeLogNormalScore(a,n),displayValue:rj(tj.displayValue,{timeInMs:n})}:QU.NoBids}},qU.exports.UIStrings=tj;var aj={exports:{}}
1145
- ;const nj=jF,ij=oi,{auditNotApplicable:oj,runWarning:sj}=PO.exports,{Audit:cj}=XF,lj={title:"First ad request time",failureTitle:"Reduce time to send the first ad request",description:"This metric measures the elapsed time from the start of page load until the first ad request is made. Delayed ad requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},uj=ij.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start.js",lj);aj.exports=class AdRequestFromPageStart extends cj{static get meta(){return{id:"ad-request-from-page-start",title:uj(lj.title),failureTitle:uj(lj.failureTitle),description:uj(lj.description),scoreDisplayMode:cj.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{
1146
- p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,t){const r={trace:e.traces[cj.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[cj.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await nj.request(r,t);if(!(n>0)){const e=oj.NoAds;return e.runWarnings=[sj.NoAds],e}return{numericValue:n,numericUnit:"millisecond",score:cj.computeLogNormalScore(a,n),displayValue:uj(lj.displayValue,{timeInMs:n})}}},aj.exports.UIStrings=lj;var dj={exports:{}};const mj=oi,{auditNotApplicable:pj}=PO.exports,{Audit:hj}=XF,{isAdIframe:gj}=mF,fj={title:"No ad found at the very top of the viewport",failureTitle:"Move the top ad further down the page",
1147
- description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},yj=mj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport.js",fj),vj=[{key:"slot",itemType:"text",text:yj(fj.columnSlot)}];class AdTopOfViewport extends hj{static get meta(){return{id:"ad-top-of-viewport",title:yj(fj.title),failureTitle:yj(fj.failureTitle),description:yj(fj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter(gj).filter((e=>e.clientRect.width*e.clientRect.height>1&&!e.isPositionFixed)).map((e=>({
1148
- midpoint:e.clientRect.top+e.clientRect.height/2,id:e.id})));if(!r.length)return pj.NoVisibleSlots;const a=r.reduce(((e,t)=>e.midpoint<t.midpoint?e:t)),n=a.midpoint<t.innerHeight;if(!n)return pj.NoAdsViewport;const i=n&&a.midpoint<100?0:1;return{score:i,numericValue:a.midpoint,numericUnit:"unitless",displayValue:i?"":yj(fj.failureDisplayValue,{valueInPx:a.midpoint}),details:AdTopOfViewport.makeTableDetails(vj,i?[]:[{slot:a.id}])}}}dj.exports=AdTopOfViewport,dj.exports.UIStrings=fj;var bj={exports:{}};function isBoxInViewport$1(e,t){const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return n<o&&i<s&&n<r&&i<a&&0<o&&0<s}var wj={boxViewableArea:function boxViewableArea(e,t){if(!isBoxInViewport$1(e,t))return 0;const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return(Math.min(o,r)-Math.max(n,0))*(Math.min(s,a)-Math.max(i,0))},isBoxInViewport:isBoxInViewport$1,overlaps:function overlaps$1(e,t){
1149
- const r=!(e.right<t.left||t.right<e.left),a=!(e.bottom<t.top||t.bottom<e.top);return r&&a},toClientRect:function toClientRect$1([e,t,r,a]){return{left:e,top:t,width:r,height:a,right:e+r,bottom:t+a}}};const{auditNotApplicable:Sj}=PO.exports,{Audit:Tj}=XF,Ej=oi,{isBoxInViewport:xj}=wj,{isGptIframe:_j}=mF,Aj={title:"Few or no ads loaded outside viewport",failureTitle:"Avoid loading ads until they are nearly on-screen",description:"Too many ads loaded outside the viewport lowers viewability rates and impacts user experience. Consider loading ads below the fold lazily as the user scrolls down. Consider using GPT's [Lazy Loading API](https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableLazyLoad). [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ads-in-viewport).",failureDisplayValue:"{hiddenAds, plural, =1 {1 ad} other {# ads}} out of view",columnSlot:"Slots Outside Viewport"
1150
- },Rj=Ej.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ads-in-viewport.js",Aj),kj=[{key:"slot",itemType:"text",text:Rj(Aj.columnSlot)}];class AdsInViewport extends Tj{static get meta(){return{id:"ads-in-viewport",title:Rj(Aj.title),failureTitle:Rj(Aj.failureTitle),description:Rj(Aj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>_j(e)&&e.clientRect.height*e.clientRect.width>1));if(!r.length)return Sj.NoVisibleSlots;const a=r.filter((e=>!xj(e.clientRect,t))).map((e=>({slot:e.id}))).sort(((e,t)=>e.slot.localeCompare(t.slot)));return{numericValue:(r.length-a.length)/r.length,numericUnit:"unitless",score:a.length>3?0:1,displayValue:a.length?Rj(Aj.failureDisplayValue,{hiddenAds:a.length}):"",details:AdsInViewport.makeTableDetails(kj,a)}}}bj.exports=AdsInViewport,bj.exports.UIStrings=Aj;var Dj={exports:{}};var Cj={count:function count(e,t){let r=0
1151
- ;for(const a of e)t(a)&&r++;return r},bucket:function bucket$1(e,t){const r=new Map;for(const a of e){const e=t(a);if(null!=e){const t=r.get(e)||[];t.push(a),r.set(e,t)}}return r},flatten:function flatten(e){const t=[];for(const r of e)t.push(...r);return t}};const Ij=Cj,Nj=oi,Lj=HT,Mj=Lo,{auditNotApplicable:Pj}=PO.exports,{Audit:Oj}=XF,{isAdTag:Fj,isStaticRequest:Uj}=mF,{URL:jj}=Gn,Bj={title:"Ad tag is loaded asynchronously",failureTitle:"Load ad tag asynchronously",description:"Loading the ad tag synchronously blocks content rendering until the tag is fetched and loaded. Consider using the `async` attribute to load gpt.js and/or adsbygoogle.js asynchronously. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags)."},$j=Nj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/async-ad-tags.js",Bj);function isAsync(e){return"Low"==e.priority||Uj(e)}Dj.exports=class AsyncAdTags extends Oj{static get meta(){return{
1152
- id:"async-ad-tags",title:$j(Bj.title),failureTitle:$j(Bj.failureTitle),description:$j(Bj.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[Oj.DEFAULT_PASS],a=await Mj.request(r,t),n=await Lj.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>Fj(new jj(e.url)))).filter((e=>e.frameId===n.frameId));if(!i.length)return Pj.NoTag;const o=Ij.count(i,isAsync)-i.length;return{score:Number(0===o),numericValue:o,numericUnit:"unitless"}}},Dj.exports.UIStrings=Bj;var qj={exports:{}};const zj=on.default,Vj=Ao,Wj=Yp,Gj=Xp;zj.warn("trace-of-tab","trace-of-tab is deprecated, use processed-trace / processed-navigation instead");var Hj=Vj(class TraceOfTab$1{static async compute_(e,t){const r=await Wj.request(e,t),a=await Gj.request(r,t);return{...r,...a}}},null);const Yj=oi,Kj=Lo,Jj=Hj,{auditNotApplicable:Xj}=PO.exports,{Audit:Zj}=XF,{computeAdRequestWaterfall:Qj}=MU,{getTimingsByRecord:eB}=NF,tB={title:"Ads not blocked by load events",
1153
- failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},rB=Yj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/blocking-load-events.js",tB),aB=[{key:"eventName",itemType:"text",text:rB(tB.columnEvent)},{key:"time",itemType:"ms",text:rB(tB.columnTime),granularity:1},{key:"url",itemType:"url",text:rB(tB.columnScript)},{key:"functionName",itemType:"text",text:rB(tB.columnFunctionName)}];function findOriginalCallFrame(e){const{record:t}=e;let r=t&&t.initiator&&t.initiator.stack;if(r){for(;r.parent;)r=r.parent;return r.callFrames[r.callFrames.length-1]}}
1154
- function findTraceEventOfCallFrame(e,t){return t.find((t=>"FunctionCall"==t.name&&t.args.data&&t.args.data.functionName==e.functionName&&t.args.data.scriptId==e.scriptId&&t.args.data.url==e.url&&Math.abs(t.args.data.lineNumber==e.lineNumber)<2&&Math.abs(t.args.data.columnNumber==e.columnNumber)<2))}function findEventIntervals(e,t){let r={};const a=[];for(const n of t)n.name==`${e}EventStart`?r={start:n.ts,end:1/0,eventName:e}:n.name==`${e}EventEnd`&&(r.end=n.ts,a.push(r));return a}function quantifyBlockedTime(e,t,r){const a=t.find((t=>t.url==e.url)),n=t.find((t=>t.url==e.blockedUrl));if(!a||!n)return 0;const i=r.get(a),o=r.get(n);return i&&o?o.startTime-i.endTime:0}class BlockingLoadEvents extends Zj{static get meta(){return{id:"blocking-load-events",title:rB(tB.title),failureTitle:rB(tB.failureTitle),description:rB(tB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
1155
- const r=e.traces[Zj.DEFAULT_PASS],a=e.devtoolsLogs[Zj.DEFAULT_PASS],n=await Kj.request(a,t),{timings:i,processEvents:o}=await Jj.request(r,t),s=await eB(r,a,t),c=(await Qj(r,a,t)).sort(((e,t)=>e.startTime-t.startTime));if(!c.length)return Xj.NoAdRelatedReq;const l=[...findEventIntervals("domContentLoaded",o),...findEventIntervals("load",o)],u=[],d=new Set;for(const e of c){const t=findOriginalCallFrame(e);if(!t)continue;const r=JSON.stringify(t);if(d.has(r))continue;d.add(r);const a=findTraceEventOfCallFrame(t,o);if(!a)continue;const c=l.find((e=>e.start<=a.ts&&a.ts<=e.end));if(c){const r=Object.assign({eventName:c.eventName,blockedUrl:e.url,time:i[c.eventName],blockedTime:1/0},t);r.blockedTime=quantifyBlockedTime(r,n,s),u.push(r)}}const m=u.length>0;let p=0;return m&&(p=Math.min(...u.map((e=>e.blockedTime)))),{numericValue:u.length,numericUnit:"unitless",score:m?0:1,displayValue:m&&p?rB(tB.displayValue,{timeInMs:p}):"",details:BlockingLoadEvents.makeTableDetails(aB,u)}}}
1156
- qj.exports=BlockingLoadEvents,qj.exports.UIStrings=tB;var nB={exports:{}};const iB=oi,{auditNotApplicable:oB}=PO.exports,{Audit:sB}=XF,{computeAdRequestWaterfall:cB}=MU,{isAdScript:lB,toURL:uB}=mF,dB={title:"No bottleneck requests found",failureTitle:"Avoid bottleneck requests",description:"Speed up, load earlier, parallelize, or eliminate the following requests and their dependencies in order to speed up ad loading. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bottleneck-requests).",displayValue:"{blockedTime, number, seconds} s spent blocked on requests",columnUrl:"Blocking Request",columnInitiatorUrl:"Initiator Request",columnStartTime:"Start",columnSelfTime:"Exclusive Time",columnDuration:"Total Time"},mB=iB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bottleneck-requests.js",dB),pB=[{key:"url",itemType:"url",text:mB(dB.columnUrl)},{key:"selfTime",itemType:"ms",text:mB(dB.columnSelfTime),granularity:1},{
1157
- key:"duration",itemType:"ms",text:mB(dB.columnDuration),granularity:1}];class BottleneckRequests extends sB{static get meta(){return{id:"bottleneck-requests",title:mB(dB.title),failureTitle:mB(dB.failureTitle),description:mB(dB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[sB.DEFAULT_PASS],a=e.devtoolsLogs[sB.DEFAULT_PASS],n=(await cB(r,a,t)).filter((e=>e.startTime>0));if(!n.length)return oB.NoAdRelatedReq;const cost=e=>3*e.selfTime+e.duration,i=n.filter((e=>!lB(uB(e.url))&&(e.selfTime>250||e.duration>1e3))).sort(((e,t)=>cost(t)-cost(e))).slice(0,5),o=i.reduce(((e,t)=>e+t.selfTime),0)/1e3,s=1e3*o>1e3;for(const e of i)delete e.record;return{numericValue:i.length,numericUnit:"unitless",score:s?0:1,displayValue:s?mB(dB.displayValue,{blockedTime:o}):"",details:BottleneckRequests.makeTableDetails(pB,i)}}}nB.exports=BottleneckRequests,nB.exports.UIStrings=dB;var hB={exports:{}}
1158
- ;const gB=oi,fB=HT,yB=Lo,vB=Ki,{auditNotApplicable:bB}=PO.exports,{Audit:wB}=XF,{containsAnySubstring:SB}=mF,{URL:TB}=Gn,EB={title:"No duplicate tags found",failureTitle:"Load tags only once",description:"Loading a tag more than once in the same page is redundant and adds overhead without benefit. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/duplicate-tags).",failureDisplayValue:"{duplicateTags, plural, =1 {1 duplicate tag} other {# duplicate tags}}",columnScript:"Script",columnNumReqs:"Duplicate Requests",columnFrameId:"Frame ID"},xB=gB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/duplicate-tags.js",EB),_B=["googletagservices.com/tag/js/gpt.js","securepubads.g.doubleclick.net/tag/js/gpt.js","pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","pagead2.googlesyndication.com/pagead/js/show_ads.js","cdn.ampproject.org/v0/amp-ad-0.1.js"],AB=[{key:"script",itemType:"url",text:xB(EB.columnScript)},{key:"numReqs",
1159
- itemType:"text",text:xB(EB.columnNumReqs)}];class DuplicateTags extends wB{static get meta(){return{id:"duplicate-tags",title:xB(EB.title),failureTitle:xB(EB.failureTitle),description:xB(EB.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[wB.DEFAULT_PASS],a=await yB.request(r,t),n=await fB.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>e.frameId===n.frameId)).filter((e=>SB(e.url,_B))).filter((e=>e.resourceType===vB.TYPES.Script));if(!i.length)return bB.NoTags;const o=new Map;for(const e of i){const t=new TB(e.url).pathname,r=o.get(t)||0;o.set(t,r+1)}const s=[];for(const[e,t]of o)t>1&&s.push({script:e,numReqs:t});return{numericValue:s.length,numericUnit:"unitless",score:s.length?0:1,details:DuplicateTags.makeTableDetails(AB,s),displayValue:s.length?xB(EB.failureDisplayValue,{duplicateTags:s.length}):""}}}hB.exports=DuplicateTags,hB.exports.UIStrings=EB;var RB={exports:{}}
1160
- ;const kB=TF,DB=Ew,CB=Ao,{getPageStartTime:IB,getImpressionStartTime:NB}=NF,{isImpressionPing:LB}=mF;class LanternAdRenderTime extends kB{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:kB.findNetworkTiming(r,(e=>!!e.url&&LB(new URL(e.url)))).startTime,nodeTimings:r}}}LanternAdRenderTime=CB(LanternAdRenderTime);class AdRenderTime extends DB{static async computeSimulatedMetric(e,t){return LanternAdRenderTime.request(e,t)}static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=IB(r),n=1e3*(NB(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const MB=AdRenderTime=CB(AdRenderTime),PB=oi,{auditNotApplicable:OB,runWarning:FB}=PO.exports,{Audit:UB}=XF,jB={title:"Latency of first ad render",failureTitle:"Reduce time to render first ad",
1161
- description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},BB=PB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/first-ad-render.js",jB);RB.exports=class FirstAdRender extends UB{static get meta(){return{id:"first-ad-render",title:BB(jB.title),failureTitle:BB(jB.failureTitle),description:BB(jB.description),scoreDisplayMode:UB.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:12900,median:22e3},provided:{p10:2750,median:3700}}}static async audit(e,t){const r=e.traces[UB.DEFAULT_PASS],a={devtoolsLog:e.devtoolsLogs[UB.DEFAULT_PASS],trace:r,settings:t.settings},{timing:n}=await MB.request(a,t);if(!(n>0)){const e=OB.NoAdRendered;return e.runWarnings=[FB.NoAdRendered],e}
1162
- const i=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"];return{numericValue:n,numericUnit:"millisecond",score:UB.computeLogNormalScore(i,n),displayValue:BB(jB.displayValue,{timeInMs:n})}}},RB.exports.UIStrings=jB;var $B={exports:{}};const qB=oi,zB=Lo,{auditNotApplicable:VB}=PO.exports,{Audit:WB}=XF,{isAdRequest:GB}=mF,{URL:HB}=Gn,YB={title:"Ad slots effectively use horizontal space",failureTitle:"Increase the width of ad slots",description:"Ad slots that utilize most of the page width generally experience increased click-through rate over smaller ad sizes. We recommend leaving no more than 25% of the viewport width unutilized on mobile devices.",failureDisplayValue:"{percentUnused, number, percent} of viewport width is underutilized"},KB=qB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/full-width-slots.js",YB);$B.exports=class FullWidthSlots extends WB{static get meta(){return{id:"full-width-slots",title:KB(YB.title),
1163
- failureTitle:KB(YB.failureTitle),description:KB(YB.description),requiredArtifacts:["ViewportDimensions","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[WB.DEFAULT_PASS],a=await zB.request(r,t),n=e.ViewportDimensions.innerWidth,i=a.filter(GB).map((e=>new HB(e.url)));if(!i.length)return VB.NoAds;const o=i.map((e=>e.searchParams.get("prev_iu_szs")||e.searchParams.get("sz"))).join("|").split(/[|,]/).map((e=>parseInt(e.split("x")[0]))).filter((e=>e<=n&&e>1));if(!o.length)return VB.NoValidAdWidths;const s=1-Math.max(...o)/n,c=s>.25?0:1;return{score:c,numericValue:s,numericUnit:"unitless",displayValue:c?"":KB(YB.failureDisplayValue,{percentUnused:s})}}},$B.exports.UIStrings=YB;var JB={exports:{}};const XB=Lo,{assert:ZB}=SU,{auditNotApplicable:QB}=PO.exports,{Audit:e$}=XF,{getCriticalGraph:t$}=MU,{getTimingsByRecord:r$}=NF,{isGptImplTag:a$,isBidRequest:n$,getHeaderBidder:i$}=mF,o$={title:"GPT and bids loaded in parallel",failureTitle:"Load GPT and bids in parallel",
1164
- description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},s$=[{key:"bidder",itemType:"text",text:o$.columnBidder},{key:"url",itemType:"url",text:o$.columnUrl},{key:"startTime",itemType:"ms",text:o$.columnStartTime},{key:"duration",itemType:"ms",text:o$.columnDuration}];class GptBidsInParallel extends e${static get meta(){return{id:"gpt-bids-parallel",title:o$.title,failureTitle:o$.failureTitle,description:o$.description,requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[e$.DEFAULT_PASS],a=e.traces[e$.DEFAULT_PASS],n=await XB.request(r,t),i=n.find((e=>a$(e.url)));if(!i)return QB.NoGpt
1165
- ;const o=n.filter(n$).filter((e=>e.frameId==i.frameId));if(!o.length)return QB.NoBids;const s=await r$(a,r,t),c=[],l=new Set;for(const e of o)if(t$(n,a.traceEvents,e).has(i)){const{startTime:t,endTime:r}=s.get(e)||e,a=ZB(i$(e.url));if(l.has(a))continue;l.add(a),c.push({bidder:a,url:e.url,startTime:t,duration:r-t})}const u=c.length>0;return{numericValue:c.length,numericUnit:"unitless",score:u?0:1,details:u?GptBidsInParallel.makeTableDetails(s$,c):void 0}}}JB.exports=GptBidsInParallel,JB.exports.UIStrings=o$;var c$={exports:{}};const l$=oi,u$=Lo,{auditNotApplicable:d$}=PO.exports,{Audit:m$}=XF,{isGptTag:p$}=mF,{URL:h$}=Gn,g$={title:"GPT tag is loaded from an official source",failureTitle:"Load GPT from an official source",description:"Load GPT from 'securepubads.g.doubleclick.net' for standard integrations or from 'pagead2.googlesyndication.com' for limited ads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-gpt-from-official-source)."
1166
- },f$=l$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source.js",g$);c$.exports=class LoadsGptFromOfficalSource extends m${static get meta(){return{id:"loads-gpt-from-official-source",title:f$(g$.title),failureTitle:f$(g$.failureTitle),description:f$(g$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[m$.DEFAULT_PASS],a=(await u$.request(r,t)).map((e=>new h$(e.url))).find(p$);if(!a)return d$.NoGpt;const n=["securepubads.g.doubleclick.net","pagead2.googlesyndication.com"].includes(a.host);return{score:Number(n),numericValue:Number(!n),numericUnit:"unitless"}}},c$.exports.UIStrings=g$;var y$={exports:{}};const v$=oi,b$=Lo,{auditNotApplicable:w$}=PO.exports,{Audit:S$}=XF,{isAdTag:T$}=mF,{URL:E$}=Gn,x$={title:"Ad tag is loaded over HTTPS",failureTitle:"Load ad tag over HTTPS",
1167
- description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},_$=v$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https.js",x$);y$.exports=class LoadsAdTagOverHttps extends S${static get meta(){return{id:"loads-ad-tag-over-https",title:_$(x$.title),failureTitle:_$(x$.failureTitle),description:_$(x$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[S$.DEFAULT_PASS],a=await b$.request(r,t);if(!a.find((e=>200==e.statusCode)))return w$.NoRecords;const n=a.filter((e=>T$(new E$(e.url)))),i=n.filter((e=>e.isSecure)),o={
1168
- type:"debugdata",numAdTagHttpReqs:n.length-i.length,numAdTagHttpsReqs:i.length};if(!n.length){const e=w$.NoTag;return e.details=o,e}return{numericValue:o.numAdTagHttpReqs,score:o.numAdTagHttpReqs?0:1,details:o}}},y$.exports.UIStrings=x$;var A$={exports:{}};const R$=Cj,k$=oi,D$=eb,{auditNotApplicable:C$}=PO.exports,{Audit:I$}=XF,{computeAdRequestWaterfall:N$}=MU,{getScriptEvaluationTimes:L$}=NF,M$={title:"Ad scripts are loaded statically",failureTitle:"Load ad scripts statically",description:"Load the following scripts directly with `<script async src=...>` instead of injecting scripts with JavaScript. Doing so allows the browser to preload scripts sooner. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/script-injected-tags).",failureDisplayValue:"Load {tags, plural, =1 {1 script} other {# scripts}} statically",columnUrl:"Script",columnLoadTime:"Load Time"
1169
- },P$=k$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/script-injected-tags.js",M$),O$=[{key:"url",itemType:"url",text:P$(M$.columnUrl)},{key:"loadTime",itemType:"ms",granularity:1,text:P$(M$.columnLoadTime)}],F$=[/amazon-adsystem\.com\/aax2\/apstag.js/,/js-sec\.indexww\.com\/ht\/p\/.*\.js/,/pubads\.g\.doubleclick\.net\/tag\/js\/gpt\.js/,/static\.criteo\.net\/js\/.*\/publishertag\.js/,/www\.googletagservices\.com\/tag\/js\/gpt\.js/,/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js/,/cdn\.ampproject\.org\/v0\/amp-ad-\d+\.\d+\.js/];function initiatedByInlineScript(e){if("script"!==e.initiator.type)return!1;const t=D$.getNetworkInitiators(e);return 1===t.length&&t[0]===e.documentURL}class StaticAdTags extends I${static get meta(){return{id:"script-injected-tags",title:P$(M$.title),failureTitle:P$(M$.failureTitle),description:P$(M$.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
1170
- const r=await async function findStaticallyLoadableTags(e,t){const r=e.devtoolsLogs[I$.DEFAULT_PASS],a=e.traces[I$.DEFAULT_PASS],n=[],i=await N$(a,r,t);for(const{record:e}of i)e&&"Script"===e.resourceType&&(initiatedByInlineScript(e)||F$.find((t=>e.url.match(t))))&&n.push(e);return n}(e,t);if(!r.length)return C$.NoTag;const a=new Set,n=[],i=e.devtoolsLogs[I$.DEFAULT_PASS],o=e.traces[I$.DEFAULT_PASS],s=await L$(o,i,t);for(const e of r){if(a.has(e.url))continue;a.add(e.url);const t=r.filter((t=>t.url===e.url));if(0===R$.count(t,(e=>"parser"===e.initiator.type&&!e.isLinkPreload))){const t=s.get(e.url)||0;if(t<400)continue;n.push({url:e.url,loadTime:t})}}n.sort(((e,t)=>e.loadTime-t.loadTime));const c=n.length>0;return{displayValue:c?P$(M$.failureDisplayValue,{tags:n.length}):"",score:Number(!c),numericValue:n.length,numericUnit:"unitless",details:StaticAdTags.makeTableDetails(O$,n)}}}A$.exports=StaticAdTags,A$.exports.UIStrings=M$;var U$={exports:{}}
1171
- ;const j$=jF,B$=oi,$$=HT,q$=Lo,{auditNotApplicable:z$}=PO.exports,{Audit:V$}=XF,{bucket:W$}=Cj,{getTimingsByRecord:G$}=NF,{isCacheable:H$}=sF,{isGoogleAds:Y$,getHeaderBidder:K$}=mF,{URL:J$}=Gn,X$={title:"Header bidding is parallelized",failureTitle:"Parallelize bid requests",description:"Send header bidding requests simultaneously, rather than serially, to retrieve bids more quickly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/serial-header-bidding).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},Z$=B$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/serial-header-bidding.js",X$),Q$=[{key:"bidder",itemType:"text",text:Z$(X$.columnBidder)},{key:"url",itemType:"url",text:Z$(X$.columnUrl)},{key:"startTime",itemType:"ms",text:Z$(X$.columnStartTime)},{key:"duration",itemType:"ms",text:Z$(X$.columnDuration)}],tq="ad",rq="bid",aq="unknown";function checkRecordType(e){
1172
- return Y$(new J$(e.url))?tq:K$(e.url)?rq:aq}function isPossibleBid(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&e.endTime-e.startTime>=.05&&!H$(e)}function clearQueryString(e){const t=new J$(e);return t.search="",t.toString()}class SerialHeaderBidding extends V${static get meta(){return{id:"serial-header-bidding",title:Z$(X$.title),failureTitle:Z$(X$.failureTitle),description:Z$(X$.description),requiredArtifacts:["devtoolsLogs","traces","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[V$.DEFAULT_PASS],a=e.traces[V$.DEFAULT_PASS],n=await q$.request(r,t);if(!n.length)return z$.NoRecords;const i=await $$.request({URL:e.URL,devtoolsLog:r},t),o=n.filter(isPossibleBid).filter((e=>e.frameId==i.frameId)),s=W$(o,checkRecordType);if(!s.has(rq))return z$.NoBids;const c={trace:a,devtoolsLog:r,settings:t.settings},{timing:l}=await j$.request(c,t),u=await G$(a,r,t),d=function constructRecords(e,t,r){const a=[];for(const n of e){const e=r.get(n)
1173
- ;e&&a.push(Object.assign({},e,{url:n.url,type:t}))}return a}(s.get(rq)||[],rq,u);let m,p=[];for(const e of d)l>0&&e.endTime>l||(e.bidder=K$(e.url),e.url=clearQueryString(e.url),m&&e.startTime>=m.endTime&&(p.push(m),p.push(e)),(!m||e.endTime<m.endTime||e.startTime>=m.endTime)&&(m=e));p=Array.from(new Set(p));const h=p.length>1;return{numericValue:Number(h),numericUnit:"unitless",score:h?0:1,details:h?SerialHeaderBidding.makeTableDetails(Q$,p):void 0}}}U$.exports=SerialHeaderBidding,U$.exports.UIStrings=X$;var nq={exports:{}};const iq=TF,oq=Ew,sq=Ao,{getPageStartTime:cq,getTagEndTime:lq}=NF,{isImplTag:uq}=mF,{URL:dq}=Gn;class LanternTagLoadTime extends iq{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:iq.findNetworkTiming(r,(e=>!!e.url&&uq(new dq(e.url)))).endTime,nodeTimings:r}}}LanternTagLoadTime=sq(LanternTagLoadTime);class TagLoadTime$1 extends oq{static async computeSimulatedMetric(e,t){return LanternTagLoadTime.request(e,t)}
1174
- static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=cq(r),n=1e3*(lq(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const mq=TagLoadTime$1=sq(TagLoadTime$1),pq=oi,{auditNotApplicable:hq,runWarning:gq}=PO.exports,{Audit:fq}=XF,yq={title:"Tag load time",failureTitle:"Reduce tag load time",description:"This metric measures the time for the ad tag's implementation script (pubads_impl.js for GPT; adsbygoogle.js for AdSense) to load after the page loads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/tag-load-time).",displayValue:"{timeInMs, number, seconds} s"},vq=pq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/tag-load-time.js",yq);nq.exports=class TagLoadTime extends fq{static get meta(){return{id:"tag-load-time",title:vq(yq.title),failureTitle:vq(yq.failureTitle),description:vq(yq.description),
1175
- scoreDisplayMode:fq.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[fq.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[fq.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await mq.request(r,t);if(!(n>0)){const e=hq.NoTag;return e.runWarnings=[gq.NoTag],e}return{numericValue:n,numericUnit:"millisecond",score:fq.computeLogNormalScore(a,n),displayValue:vq(yq.displayValue,{timeInMs:n})}}},nq.exports.UIStrings=yq;var bq={exports:{}};const wq=oi,{auditNotApplicable:Sq,auditError:Tq}=PO.exports,{Audit:Eq}=XF,{isAdIframe:xq}=mF,_q={title:"Ads to page-height ratio is within recommended range",failureTitle:"Reduce ads to page-height ratio",
1176
- description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},Aq=wq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/viewport-ad-density.js",_q);bq.exports=class ViewportAdDensity extends Eq{static get meta(){return{id:"viewport-ad-density",title:Aq(_q.title),failureTitle:Aq(_q.failureTitle),description:Aq(_q.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>xq(e)&&e.clientRect.width*e.clientRect.height>1));if(!r.length)return Sq.NoVisibleSlots;if(t.innerHeight<=0)throw new Error(Tq.ViewportAreaZero);const a=function computeAdLength(e,t){
1177
- const r=new Set([...e.map((e=>e.clientRect.left)),...e.map((e=>e.clientRect.right))].map((e=>Math.min(Math.max(1,e),t.innerWidth-1))));e=e.sort(((e,t)=>e.clientRect.top!==t.clientRect.top?e.clientRect.top-t.clientRect.top:e.clientRect.bottom-t.clientRect.bottom));let a=0;for(const t of r){let r=0,n=0;for(const a of e){if(t<a.clientRect.left||t>a.clientRect.right)continue;if(a.isPositionFixed){r+=a.clientRect.height;continue}const e=a.clientRect.bottom-Math.max(n,a.clientRect.top);e>0&&(r+=e),n=Math.max(n,a.clientRect.bottom)}a=Math.max(a,r)}return a}(r,t),n=Math.max(...r.map((e=>e.clientRect.top+e.clientRect.height/2)))+t.innerHeight,i=Math.min(1,a/n);return{score:i>.3?0:1,numericValue:i,numericUnit:"unitless",displayValue:Aq(_q.displayValue,{adDensity:i})}}},bq.exports.UIStrings=_q;var Rq={exports:{}};const kq=oi,{auditNotApplicable:Dq}=PO.exports,{Audit:Cq}=XF,{getScriptUrl:Iq}=NF,{isAdIframe:Nq,isAdRelated:Lq,isImplTag:Mq}=mF,{overlaps:Pq,toClientRect:Oq}=wj,Fq={
1178
- title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},Uq=kq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift.js",Fq);Rq.exports=class CumulativeAdShift extends Cq{static get meta(){return{id:"cumulative-ad-shift",title:Uq(Fq.title),failureTitle:Uq(Fq.failureTitle),description:Uq(Fq.description),scoreDisplayMode:Cq.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","IFrameElements"]}}static get defaultOptions(){return{p10:.05,median:.25}}static isAdExpansion(e,t){if(!e.args||!e.args.data)return!1;for(const r of e.args.data.impacted_nodes||[]){const e=Oq(r.old_rect||[]),a=Oq(r.new_rect||[]);if(!(e.top>a.top||e.height!==a.height))for(const r of t){
1179
- const t=r.clientRect;if((e.top>=t.top||a.top>=t.bottom)&&Pq(e,t))return!0}}return!1}static isAttributableToTask(e,t){if(!e.args||!e.args.data)return!1;return!!t.find((t=>t.ts<e.ts&&e.ts-t.ts<5e4))}static compute(e,t,r,a){let n=0,i=0,o=0,s=0,c=0,l=0;for(const u of e)u.args&&u.args.data&&u.args.data.is_main_frame&&(n+=u.args.data.score,i++,(this.isAdExpansion(u,r)||this.isAttributableToTask(u,t))&&(o+=u.args.data.score,s++,u.ts<a&&(c+=u.args.data.score,l++)));return{cumulativeShift:n,numShifts:i,cumulativeAdShift:o,numAdShifts:s,cumulativePreImplTagAdShift:c,numPreImplTagAdShifts:l}}static getLayoutShiftEventsByWindow(e){let t=0,r=[],a=0,n=[];for(const i of e){if("LayoutShift"!==i.name||!i.args||!i.args.data)continue;if(n.length){const e=n[0],o=n[n.length-1];(o.ts-e.ts>5e6||i.ts-o.ts>1e6)&&(a>t&&(r=n,t=a),n=[],a=0)}n.push(i);const e=i.args.data;a+=e.weighted_score_delta||e.score||0}return r.length||(r=n),r}static async audit(e,t){
1180
- const r=e.traces[Cq.DEFAULT_PASS],a=this.getLayoutShiftEventsByWindow(r.traceEvents);if(!a.length)return Dq.NoLayoutShifts;const n=r.traceEvents.filter((e=>Lq(Iq(e)||""))),i=n.find((e=>Mq(Iq(e)||"")))||{ts:1/0},o=e.IFrameElements.filter(Nq),s=this.compute(a,n,o,i.ts),c=s.cumulativeAdShift;return o.length||c?{numericValue:c,numericUnit:"unitless",score:Cq.computeLogNormalScore({p10:t.options.p10,median:t.options.median},c),displayValue:c.toLocaleString(t.settings.locale),details:s}:Dq.NoAdRendered}},Rq.exports.UIStrings=Fq;var jq={exports:{}};const Bq=oi,$q=Lo,{auditNotApplicable:qq}=PO.exports,{Audit:zq}=XF,{isGpt:Vq,isGptImplTag:Wq}=mF,Gq={title:"Deprecated GPT API Usage",failureTitle:"Avoid deprecated GPT APIs",description:"Deprecated GPT API methods should be avoided to ensure your page is tagged correctly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/deprecated-gpt-api-usage).",
1181
- displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},Hq=Bq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/deprecated-api-usage.js",Gq);jq.exports=class DeprecatedApiUsage extends zq{static get meta(){return{id:"deprecated-gpt-api-usage",title:Hq(Gq.title),failureTitle:Hq(Gq.failureTitle),description:Hq(Gq.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[zq.DEFAULT_PASS];if(!(await $q.request(r,t)).find((e=>Wq(e.url))))return qq.NoGpt;const a=e.ConsoleMessages.filter((e=>"warning"===e.level||"error"===e.level)).filter((e=>e.url&&Vq(e.url))).filter((e=>e.text.toLowerCase().includes("deprecated")||e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:Hq(Bq.UIStrings.columnURL)},{
1182
- key:"description",itemType:"code",text:Hq(Bq.UIStrings.columnDescription)}],i=zq.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:Hq(Gq.displayValue,{numErrors:o})}}},jq.exports.UIStrings=Gq;var Yq={exports:{}};const Kq=oi,Jq=Lo,{auditNotApplicable:Xq}=PO.exports,{Audit:Zq}=XF,{isGpt:Qq,isGptImplTag:ez}=mF,tz={title:"GPT Errors",failureTitle:"Fix GPT errors",description:"Fix GPT errors to ensure your page is tagged as intended. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-errors-overall).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},rz=Kq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/gpt-errors-overall.js",tz);Yq.exports=class GptErrorsOverall extends Zq{static get meta(){return{id:"gpt-errors-overall",title:rz(tz.title),failureTitle:rz(tz.failureTitle),description:rz(tz.description),scoreDisplayMode:"informative",
1183
- requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[Zq.DEFAULT_PASS];if(!(await Jq.request(r,t)).find((e=>ez(e.url))))return Xq.NoGpt;const a=e.ConsoleMessages.filter((e=>"error"===e.level||"warning"===e.level)).filter((e=>e.url&&Qq(e.url))).filter((e=>!e.text.toLowerCase().includes("deprecated")&&!e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:rz(Kq.UIStrings.columnURL)},{key:"description",itemType:"code",text:rz(Kq.UIStrings.columnDescription)}],i=Zq.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:rz(tz.displayValue,{numErrors:o})}}},Yq.exports.UIStrings=tz;var az={exports:{}};const nz=oi,iz=JF,oz=Lo,{auditNotApplicable:sz}=PO.exports,{Audit:cz}=XF,{getAttributableUrl:lz}=BF,{isAdRelated:uz,getNameOrTld:dz}=mF,mz={
1184
- title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnName:"Name",columnBlockingTime:"Blocking Time"},pz=nz.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time.js",mz),hz=[{key:"name",itemType:"text",text:pz(mz.columnName)},{key:"blockingTime",itemType:"ms",text:pz(mz.columnBlockingTime),granularity:1}];class TotalAdBlockingTime extends cz{static get meta(){return{id:"total-ad-blocking-time",title:pz(mz.title),failureTitle:pz(mz.failureTitle),description:pz(mz.description),requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{simulate:{p10:290,median:600},provided:{p10:150,median:350}}}static async audit(e,t){
1185
- const r=e.traces[cz.DEFAULT_PASS],a=e.devtoolsLogs[cz.DEFAULT_PASS];if(!(await oz.request(a,t)).find((e=>uz(e.url))))return sz.NoAdRelatedReq;const n={trace:r,devtoolsLog:a,settings:t.settings};let i=[];try{i=await iz.request(n,t)}catch(e){return sz.InvalidTiming}let o=0;const s=new Map;for(const e of i){const t=lz(e);if(!t||!uz(t))continue;if(e.parent)continue;const r=e.duration-50;o+=r;const a=dz(t),n=s.get(a)||0;s.set(a,n+r)}const c=[];for(const[e,t]of s.entries())c.push({name:e,blockingTime:t});c.sort(((e,t)=>t.blockingTime-e.blockingTime));const l=t.options[t.settings.throttlingMethod]||t.options.provided;return{score:cz.computeLogNormalScore(l,o),numericValue:o,numericUnit:"millisecond",displayValue:pz(mz.failureDisplayValue,{timeInMs:o}),details:TotalAdBlockingTime.makeTableDetails(hz,c)}}}az.exports=TotalAdBlockingTime,az.exports.UIStrings=mz;const gz=bn,fz=la,yz=mn,vz=Tu,bz=xu,wz=pu,Sz=oi,Tz=Su;function isBundledEnvironment(){
1186
- if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return require.resolve("lighthouse-logger"),!1}catch(e){return!0}}const mergeOptionsOfItems=function(e){const t=[];for(const r of e){const e=r.path&&t.find((e=>e.path===r.path));e?e.options=Object.assign({},e.options,r.options):t.push(r)}return t};const Ez=function _mergeConfigFragment(e,t,r=!1){if(null==e)return t;if(void 0===t)return e;if(Array.isArray(t)){if(r)return t;if(!Array.isArray(e))throw new TypeError("Expected array but got "+typeof e);const a=e.slice();return t.forEach((e=>{a.some((t=>fz(t,e)))||a.push(e)})),a}if("object"==typeof t){if("object"!=typeof e)throw new TypeError("Expected object but got "+typeof e);if(Array.isArray(e))throw new TypeError("Expected object but got Array");return Object.keys(t).forEach((a=>{const n=r||"settings"===a&&"object"==typeof e[a];e[a]=_mergeConfigFragment(e[a],t[a],n)})),e}return t}
1187
- ;const xz=new Map([["../gather/gatherers/accessibility",ku],["../gather/gatherers/anchor-elements",Lu],["../gather/gatherers/cache-contents",Pu],["../gather/gatherers/console-messages",Fu],["../gather/gatherers/css-usage",$u],["../gather/gatherers/devtools-log-compat",Vu],["../gather/gatherers/devtools-log",Ws],["../gather/gatherers/dobetterweb/doctype",Gu],["../gather/gatherers/dobetterweb/domstats",Ku],["../gather/gatherers/dobetterweb/optimized-images",nd],["../gather/gatherers/dobetterweb/password-inputs-with-prevented-paste",sd],["../gather/gatherers/dobetterweb/response-compression",gm],["../gather/gatherers/dobetterweb/tags-blocking-first-paint",bm],["../gather/gatherers/full-page-screenshot",_m],["../gather/gatherers/global-listeners",Rm],["../gather/gatherers/iframe-elements",Cm],["../gather/gatherers/image-elements",Fm],["../gather/gatherers/inputs",Bm],["../gather/gatherers/inspector-issues",Vm],["../gather/gatherers/installability-errors",$s],["../gather/gatherers/js-usage",Gm],["../gather/gatherers/link-elements",ip],["../gather/gatherers/main-document-content",dp],["../gather/gatherers/meta-elements",hp],["../gather/gatherers/network-user-agent",Ys],["../gather/gatherers/script-elements",Tp],["../gather/gatherers/seo/embedded-content",_p],["../gather/gatherers/seo/font-size",Im.exports],["../gather/gatherers/seo/robots-txt",Rp],["../gather/gatherers/seo/tap-targets",Lp],["../gather/gatherers/service-worker",Op],["../gather/gatherers/source-maps",jp],["../gather/gatherers/stacks",Xs],["../gather/gatherers/trace-compat",qp],["../gather/gatherers/trace-elements",hh],["../gather/gatherers/trace",oo],["../gather/gatherers/viewport-dimensions",fh],["../gather/gatherers/web-app-manifest",Us],["../audits/accessibility/accesskeys",yh.exports],["../audits/accessibility/aria-allowed-attr",_h.exports],["../audits/accessibility/aria-command-name",Dh.exports],["../audits/accessibility/aria-hidden-body",Lh.exports],["../audits/accessibility/aria-hidden-focus",Fh.exports],["../audits/accessibility/aria-input-field-name",$h.exports],["../audits/accessibility/aria-meter-name",Wh.exports],["../audits/accessibility/aria-progressbar-name",Kh.exports],["../audits/accessibility/aria-required-attr",Qh.exports],["../audits/accessibility/aria-required-children",ag.exports],["../audits/accessibility/aria-required-parent",sg.exports],["../audits/accessibility/aria-roles",dg.exports],["../audits/accessibility/aria-toggle-field-name",gg.exports],["../audits/accessibility/aria-tooltip-name",bg.exports],["../audits/accessibility/aria-treeitem-name",Eg.exports],["../audits/accessibility/aria-valid-attr-value",Rg.exports],["../audits/accessibility/aria-valid-attr",Ig.exports],["../audits/accessibility/button-name",Pg.exports],["../audits/accessibility/bypass",jg.exports],["../audits/accessibility/color-contrast",zg.exports],["../audits/accessibility/definition-list",Hg.exports],["../audits/accessibility/dlitem",Xg.exports],["../audits/accessibility/document-title",tf.exports],["../audits/accessibility/duplicate-id-active",of.exports],["../audits/accessibility/duplicate-id-aria",uf.exports],["../audits/accessibility/form-field-multiple-labels",hf.exports],["../audits/accessibility/frame-title",vf.exports],["../audits/accessibility/heading-order",Tf.exports],["../audits/accessibility/html-has-lang",Af.exports],["../audits/accessibility/html-lang-valid",Cf.exports],["../audits/accessibility/image-alt",Mf.exports],["../audits/accessibility/input-image-alt",Uf.exports],["../audits/accessibility/label",qf.exports],["../audits/accessibility/link-name",Gf.exports],["../audits/accessibility/list",Jf.exports],["../audits/accessibility/listitem",ey.exports],["../audits/accessibility/manual/custom-controls-labels",sy],["../audits/accessibility/manual/custom-controls-roles",ly],["../audits/accessibility/manual/focus-traps",dy],["../audits/accessibility/manual/focusable-controls",py],["../audits/accessibility/manual/interactive-element-affordance",gy],["../audits/accessibility/manual/logical-tab-order",yy],["../audits/accessibility/manual/managed-focus",by],["../audits/accessibility/manual/offscreen-content-hidden",Sy],["../audits/accessibility/manual/use-landmarks",Ey],["../audits/accessibility/manual/visual-order-follows-dom",_y],["../audits/accessibility/meta-refresh",Ay.exports],["../audits/accessibility/meta-viewport",Cy.exports],["../audits/accessibility/object-alt",My.exports],["../audits/accessibility/tabindex",Uy.exports],["../audits/accessibility/td-headers-attr",qy.exports],["../audits/accessibility/th-has-data-cells",Gy.exports],["../audits/accessibility/valid-lang",Jy.exports],["../audits/accessibility/video-caption",ev.exports],["../audits/apple-touch-icon",nv.exports],["../audits/autocomplete",cv.exports],["../audits/bootup-time",yv.exports],["../audits/byte-efficiency/duplicated-javascript",Bv.exports],["../audits/byte-efficiency/efficient-animated-content",Jb.exports],["../audits/byte-efficiency/legacy-javascript",rw.exports],["../audits/byte-efficiency/modern-image-formats",mw.exports],["../audits/byte-efficiency/offscreen-images",vw.exports],["../audits/byte-efficiency/render-blocking-resources",zw.exports],["../audits/byte-efficiency/total-byte-weight",dS.exports],["../audits/byte-efficiency/unminified-css",vS.exports],["../audits/byte-efficiency/unminified-javascript",kS.exports],["../audits/byte-efficiency/unused-css-rules",PS.exports],["../audits/byte-efficiency/unused-javascript",$S.exports],["../audits/byte-efficiency/uses-long-cache-ttl",QS.exports],["../audits/byte-efficiency/uses-optimized-images",lT.exports],["../audits/byte-efficiency/uses-responsive-images-snapshot",gT.exports],["../audits/byte-efficiency/uses-responsive-images",fT.exports],["../audits/byte-efficiency/uses-text-compression",LT.exports],["../audits/content-width",jT.exports],["../audits/critical-request-chains",zT.exports],["../audits/csp-xss",aE.exports],["../audits/deprecations",tx.exports],["../audits/diagnostics",mx],["../audits/dobetterweb/charset",px.exports],["../audits/dobetterweb/doctype",Sx.exports],["../audits/dobetterweb/dom-size",_x.exports],["../audits/dobetterweb/geolocation-on-start",Cx.exports],["../audits/dobetterweb/inspector-issues",Ux.exports],["../audits/dobetterweb/js-libraries",qx.exports],["../audits/dobetterweb/no-document-write",Hx.exports],["../audits/dobetterweb/no-vulnerable-libraries",Zx.exports],["../audits/dobetterweb/notification-on-start",l_.exports],["../audits/dobetterweb/password-inputs-can-be-pasted-into",h_.exports],["../audits/dobetterweb/uses-http2",b_.exports],["../audits/dobetterweb/uses-passive-event-listeners",M_.exports],["../audits/errors-in-console",j_.exports],["../audits/final-screenshot",Z_],["../audits/font-display",Q_.exports],["../audits/full-page-screenshot",dA],["../audits/image-aspect-ratio",mA.exports],["../audits/image-size-responsive",vA.exports],["../audits/installable-manifest",xA.exports],["../audits/is-on-https",MA.exports],["../audits/largest-contentful-paint-element",qA.exports],["../audits/layout-shift-elements",HA.exports],["../audits/lcp-lazy-loaded",ZA.exports],["../audits/long-tasks",aR.exports],["../audits/main-thread-tasks",yR],["../audits/mainthread-work-breakdown",vR.exports],["../audits/manual/pwa-cross-browser",_R.exports],["../audits/manual/pwa-each-page-has-url",DR.exports],["../audits/manual/pwa-page-transitions",LR.exports],["../audits/maskable-icon",FR.exports],["../audits/metrics",MD],["../audits/metrics/cumulative-layout-shift",PD.exports],["../audits/metrics/experimental-interaction-to-next-paint",$D.exports],["../audits/metrics/first-contentful-paint-3g",JD],["../audits/metrics/first-contentful-paint",XD.exports],["../audits/metrics/first-meaningful-paint",aC.exports],["../audits/metrics/interactive",lC.exports],["../audits/metrics/largest-contentful-paint",gC.exports],["../audits/metrics/max-potential-fid",TC.exports],["../audits/metrics/speed-index",kC.exports],["../audits/metrics/total-blocking-time",MC.exports],["../audits/network-requests",VC],["../audits/network-rtt",WC.exports],["../audits/network-server-latency",ZC.exports],["../audits/no-unload-listeners",iI.exports],["../audits/non-composited-animations",dI.exports],["../audits/oopif-iframe-test-audit",{
1114
+ label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}];const YO=/([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?/g,KO="max-age",JO="s-maxage",XO="max-stale",ZO="min-fresh",QO="immutable",eF="must-revalidate",tF="no-cache",rF="no-store",aF="no-transform",nF="only-if-cached",iF="private",oF="proxy-revalidate",sF="public";function parseBooleanOnly(e){return null===e}function parseDuration(e){if(!e)return null;const t=parseInt(e,10);return!Number.isFinite(t)||t<0?null:t}class CacheControl{constructor(){this.maxAge=null,this.sharedMaxAge=null,
1115
+ this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||0===e.length)return this;const t={},r=e.match(YO)||[];return Array.prototype.forEach.call(r,(e=>{const r=e.split("=",2),[a]=r;let n=null;r.length>1&&(n=r[1].trim()),t[a.toLowerCase()]=n})),this.maxAge=parseDuration(t[KO]),this.sharedMaxAge=parseDuration(t[JO]),this.maxStale=parseBooleanOnly(t[XO]),this.maxStaleDuration=parseDuration(t[XO]),this.maxStaleDuration&&(this.maxStale=!0),this.minFresh=parseDuration(t[ZO]),this.immutable=parseBooleanOnly(t[QO]),this.mustRevalidate=parseBooleanOnly(t[eF]),this.noCache=parseBooleanOnly(t[tF]),this.noStore=parseBooleanOnly(t[rF]),this.noTransform=parseBooleanOnly(t[aF]),this.onlyIfCached=parseBooleanOnly(t[nF]),this.private=parseBooleanOnly(t[iF]),
1116
+ this.proxyRevalidate=parseBooleanOnly(t[oF]),this.public=parseBooleanOnly(t[sF]),this}format(){const e=[];return"number"==typeof this.maxAge&&e.push(`${KO}=${this.maxAge}`),"number"==typeof this.sharedMaxAge&&e.push(`${JO}=${this.sharedMaxAge}`),this.maxStale&&("number"==typeof this.maxStaleDuration?e.push(`${XO}=${this.maxStaleDuration}`):e.push(XO)),"number"==typeof this.minFresh&&e.push(`${ZO}=${this.minFresh}`),this.immutable&&e.push(QO),this.mustRevalidate&&e.push(eF),this.noCache&&e.push(tF),this.noStore&&e.push(rF),this.noTransform&&e.push(aF),this.onlyIfCached&&e.push(nF),this.private&&e.push(iF),this.proxyRevalidate&&e.push(oF),this.public&&e.push(sF),e.join(", ")}}var cF={CacheControl,parse:function parse(e){return(new CacheControl).parse(e)},format:function format$2(e){return e instanceof CacheControl?e.format():CacheControl.prototype.format.call(e)}};const lF=QS.exports,{parse:uF}=cF;function getHeader(e,t){const r=t.toLowerCase()
1117
+ ;return(e.responseHeaders||[]).find((e=>e.name.toLowerCase()===r))}var dF={isCacheable:function isCacheable$2(e){if(!lF.isCacheableAsset(e))return!1;const t=getHeader(e,"cache-control");if(t){try{const e=uF(t.value);if(e.noStore||e.noCache||0===e.maxAge)return!1}catch(e){}return!0}return!!getHeader(e,"expires")||!!getHeader(e,"last-modified")}};const mF=GO,pF=uw,{isCacheable:hF}=dF,{URL:gF}=Hn;function toURL$2(e){let t;try{t="string"==typeof e?new gF(e):e}catch(e){t=new gF("http://_")}return t}function isGoogleAds$2(e){return e=toURL$2(e),/(^|\.)(doubleclick.net|google(syndication|tagservices).com)$/.test(e.hostname)}function isAdSenseTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=["/pagead/js/adsbygoogle.js","/pagead/show_ads.js"].includes(e.pathname);return t&&r}function isAdSenseImplTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=/(^\/pagead\/js\/.*\/show_ads_impl.*?\.js)/.test(e.pathname);return t&&r}function isAdSense$1(e){
1118
+ return isAdSenseTag(e=toURL$2(e))||isAdSenseImplTag(e)}function isAdSenseAdRequest(e){if(!e)return!1;const t=new gF(e.url);return"/pagead/ads"===t.pathname&&"googleads.g.doubleclick.net"===t.host}function isAdSenseIframe(e){return/(^aswift_\d+)/.test(e.id)}function isGptTag$2(e){const{host:t,pathname:r}=toURL$2(e),a=["www.googletagservices.com","pagead2.googlesyndication.com","securepubads.g.doubleclick.net"].includes(t),n=["/tag/js/gpt.js","/tag/js/gpt_mobile.js"].includes(r);return a&&n}function isAMPTag(e){const{host:t,pathname:r}=toURL$2(e),a=["cdn.ampproject.org"].includes(t),n=["/v0/amp-ad-0.1.js"].includes(r);return a&&n}function isGptImplTag$4(e){return isGoogleAds$2(e)&&/(^\/gpt\/pubads_impl([a-z_]*)((?<!rendering)_)\d+\.js)/.test(toURL$2(e).pathname)}function isAMPImplTag(e){return/^\/[a-z_]*\/\d+\/v0\/amp-ad-network-doubleclick-impl-0.1.js/.test(toURL$2(e).pathname)}function isGpt$3(e){return isGptTag$2(e=toURL$2(e))||isGptImplTag$4(e)}function isGptAdRequest$1(e){
1119
+ if(!e)return!1;return"/gampad/ads"===new gF(e.url).pathname&&"XHR"===e.resourceType&&isGoogleAds$2(e.url)}function isAMPAdRequest(e){if(!e)return!1;const t=new gF(e.url);return"/gampad/ads"===t.pathname&&"securepubads.g.doubleclick.net"===t.host&&"Fetch"===e.resourceType}function isGptIframe$1(e){return/(^google_ads_iframe_)/.test(e.id)}function isAdScript$2(e){return isAdSense$1(e)||isGpt$3(e)||function isAMP(e){return isAMPTag(e)||isAMPImplTag(e)}(e)}function getHeaderBidder$2(e){for(const t of mF)for(const r of t.patterns)if(new RegExp(r).test(e))return t.label}function isBidRelatedRequest$1(e){return!!getHeaderBidder$2("string"==typeof e?e:e.url)}var fF={isGoogleAds:isGoogleAds$2,isGptAdRequest:isGptAdRequest$1,isImpressionPing:function isImpressionPing$3(e){const{host:t,pathname:r}=toURL$2(e);return["securepubads.g.doubleclick.net","googleads4.g.doubleclick.net"].includes(t)&&["/pcs/view","/pagead/adview"].includes(r)},isGpt:isGpt$3,isAdSense:isAdSense$1,isAdSenseTag,
1120
+ isAdSenseImplTag,isAdSenseAdRequest,isAdSenseIframe,isGptTag:isGptTag$2,isGptImplTag:isGptImplTag$4,isGptIframe:isGptIframe$1,isAdTag:function isAdTag$3(e){return isAdSenseTag(e)||isGptTag$2(e)||isAMPTag(e)},isAdScript:isAdScript$2,isAdRequest:function isAdRequest$5(e){return isAdSenseAdRequest(e)||isGptAdRequest$1(e)||isAMPAdRequest(e)},isAdIframe:function isAdIframe$3(e){return isAdSenseIframe(e)||isGptIframe$1(e)},isImplTag:function isImplTag$3(e){return isAdSenseTag(e)||isGptImplTag$4(e)||isAMPImplTag(e)},containsAnySubstring:function containsAnySubstring$1(e,t){return t.some((t=>e.includes(t)))},hasImpressionPath:function hasImpressionPath(e){return"/pcs/view"===e.pathname||"/pagead/adview"===e.pathname},getHeaderBidder:getHeaderBidder$2,isBidRelatedRequest:isBidRelatedRequest$1,isBidRequest:function isBidRequest$4(e){return isBidRelatedRequest$1(e)&&function isPossibleBidRequest(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&!hF(e)}(e)},
1121
+ isStaticRequest:function isStaticRequest$1(e){return["parser","preload","other"].includes(e.initiator.type)},toURL:toURL$2,trimUrl:function trimUrl$1(e){const t=new gF(e),r=t.pathname.length>60?t.pathname.substr(0,60)+"...":t.pathname;return t.origin+r},getNameOrTld:function getNameOrTld$2(e){const t=getHeaderBidder$2(e);if(t)return t;if(isGpt$3(e))return"GPT";if(isAdSense$1(e))return"AdSense";if(isAMPTag(e))return"AMP tag";const r=pF.getEntity(e);if(r)return r.name;const{host:a}=new gF(e),[n=""]=a.match(/([^.]*(\.[a-z]{2,3}){1,2})$/)||[];return n||a},isAMPTag,isAMPAdRequest,isAdRelated:function isAdRelated$3(e){const t="string"==typeof e?e:e.url;if(isAdScript$2(t)||getHeaderBidder$2(t))return!0;const r=pF.getEntity(t);return!!r&&r.categories.includes("ad")}};const yF=Zc,vF=sb,{isBidRelatedRequest:bF,isImpressionPing:wF,isGoogleAds:SF,isGptAdRequest:TF,isGptTag:EF,isGptImplTag:xF,toURL:_F}=fF;function getFrame(e){return e.args.frame||e.args.data&&e.args.data.frame||null}
1122
+ function isAdTask(e){return!!function getCpuNodeUrls(e){const t=new Set;for(const{args:r}of e.childEvents)r.data&&r.data.url&&t.add(r.data.url);return Array.from(t)}(e).find((e=>bF(e)||SF(_F(e))))}function addEdge(e,t){e===t||e.endTime>t.startTime||e.addDependent(t)}function addEdges(e){const t=[],r=[];e.traverse((e=>{e.type===yF.TYPES.NETWORK&&(EF(e.record.url)&&"Script"===e.record.resourceType?r.push(e):TF(e.record)&&t.push(e))})),e.traverse((e=>{if(e.type===yF.TYPES.NETWORK){if(xF(e.record.url)){const t=e;for(const e of r)addEdge(e,t)}if(bF(e.record)){const r=e;for(const e of t)addEdge(r,e)}if(wF(e.record.url)){const r=e;for(const e of t){addEdge(e,r);for(const t of e.getDependents())addEdge(t,r)}}}}))}class AdLanternMetric$6 extends vF{static get COEFFICIENTS(){return{intercept:0,optimistic:1,pessimistic:0}}static getPessimisticGraph(e){const t=e.cloneWithRelationships((e=>!0));return addEdges(t),t}static getOptimisticGraph(e){
1123
+ const t=e.record.frameId,r=AdLanternMetric$6.getPessimisticGraph(e),a=r.cloneWithRelationships((e=>{if(e.type===yF.TYPES.CPU)return function isLongTask(e){return e.event.dur>5e4}(e)||isAdTask(e)||!!getFrame(e.event)&&getFrame(e.event)!==t;if(e.hasRenderBlockingPriority())return!0;const r=e.record.url;return bF(r)||SF(_F(r))}));return addEdges(r),a}static getEstimateFromSimulation(e,t){throw new Error("getEstimateFromSimulation not implemented by "+this.name)}static findTiming(e,t){let r={startTime:1/0,endTime:-1/0,duration:0};for(const[a,n]of e.entries())t(a,n)&&r.startTime>n.startTime&&(r=n);return r}static findNetworkTiming(e,t){return this.findTiming(e,(e=>e.type===yF.TYPES.NETWORK&&t(e.record)))}}var AF=AdLanternMetric$6;const RF=AF,kF=Dl,DF=Lo,CF=eb,{isAdRequest:IF,isBidRequest:NF,isImplTag:LF,isImpressionPing:MF}=fF,{URL:PF}=Hn;function getPageStartTime$4(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.startTime:t}async function getTimingsByRecord$5(e,t,r){
1124
+ const a=new Map,n=await DF.request(t,r);if("simulate"==r.settings.throttlingMethod){const n=await CF.request({trace:e,devtoolsLog:t},r),i=RF.getOptimisticGraph(n),o=await kF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:s}=o.simulate(i,{});for(const[{record:e},t]of s.entries())e&&a.set(e,t)}else{const e=getPageStartTime$4(n);for(const t of n)a.set(t,{startTime:1e3*(t.startTime-e),endTime:1e3*(t.endTime-e),duration:1e3*(t.endTime-t.startTime)})}return a}function getScriptUrl$1(e){if(e.args.data&&["EvaluateScript","FunctionCall"].includes(e.name))return e.args.data.url?e.args.data.url:e.args.data.stackTrace?e.args.data.stackTrace[0].url:void 0}var OF={getTagEndTime:function getTagEndTime$1(e){const t=e.find((e=>LF(new PF(e.url))));return t?t.endTime:-1},getImpressionStartTime:function getImpressionStartTime$1(e){const t=e.find((e=>MF(e.url)));return t?t.startTime:-1},getAdStartTime:function getAdStartTime$2(e){const t=e.find(IF);return t?t.startTime:-1},
1125
+ getBidStartTime:function getBidStartTime$1(e){const t=e.find(NF);return t?t.startTime:-1},getPageStartTime:getPageStartTime$4,getPageResponseTime:function getPageResponseTime(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.responseReceivedTime:t},getScriptUrl:getScriptUrl$1,getTimingsByRecord:getTimingsByRecord$5,getScriptEvaluationTimes:async function getScriptEvaluationTimes$1(e,t,r){const a=1e3*getPageStartTime$4(await DF.request(t,r)),n=new Map;for(const t of e.traceEvents){const e=getScriptUrl$1(t);if(!e)continue;const r=t.ts/1e3-a;(!n.has(e)||n.get(e)>r)&&n.set(e,r)}if("simulate"!==r.settings.throttlingMethod)return n;const i=await getTimingsByRecord$5(e,t,r),o=new Map;for(const[e,t]of i.entries()){const i=n.get(e.url);if(!i)continue;if(o.has(e.url))continue;const s=1e3*e.startTime-a,c=t.endTime,l=r.settings.throttling.cpuSlowdownMultiplier*(i-s);o.set(e.url,c+l)}return o}};const FF=AF,UF=Ew,jF=Ao,{getAdStartTime:BF,getPageStartTime:$F}=OF,{isAdRequest:qF}=fF
1126
+ ;class LanternAdRequestTime extends FF{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:FF.findNetworkTiming(r,qF).startTime,nodeTimings:r}}}LanternAdRequestTime=jF(LanternAdRequestTime);class AdRequestTime$1 extends UF{static async computeSimulatedMetric(e,t){return LanternAdRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=$F(t),a=1e3*(BF(t)-r);return Promise.resolve({timing:a})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var zF=AdRequestTime$1=jF(AdRequestTime$1);var VF={getAttributableUrl:function getAttributableUrl$3(e,t=new Set){const r=e.attributableURLs.find((e=>t.has(e))),a=e.attributableURLs[0],n=r||a;if(n)return n;let i=50,o="";for(const r of e.children){const e=getAttributableUrl$3(r,t);e&&r.duration>i&&(o=e,i=r.duration)}return o}};const WF=AF,HF=Zc,GF=Ew,{getAttributableUrl:YF}=VF,KF=Dl,JF=Rv,XF=Ao,ZF=Lo,QF=eb;class LongTasks$2 extends GF{
1127
+ static async getSimulationGraph(e,t,r){const a=await QF.request({trace:e,devtoolsLog:t},r);return WF.getOptimisticGraph(a)}static async computeSimulatedResult(e,t,r){const a=await this.getSimulationGraph(e,t,r),n=await KF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:i}=n.simulate(a,{}),o=[];for(const[e,t]of i.entries())e.type!==HF.TYPES.CPU||t.duration<100||o.push({event:e.event,startTime:t.startTime,endTime:t.endTime,duration:t.duration,selfTime:t.duration,attributableURLs:Array.from(e.getEvaluateScriptURLs()),children:[],parent:e.parent,unbounded:e.unbounded,group:e.group});return o}static async computeObservedResult(e,t,r){const a=await JF.request(e,r),n=await ZF.request(t,r),i=new Set(n.filter((e=>"Script"===e.resourceType)).map((e=>e.url)));return a.filter((e=>function isLong(e,t){if(e.duration<50)return!1;const r=YF(e,t);if(!r)return!1;if(e.parent)return r!=YF(e.parent,t);return!0}(e,i)))}static async compute_({trace:e,devtoolsLog:t},r){
1128
+ return"simulate"==r.settings.throttlingMethod?this.computeSimulatedResult(e,t,r):this.computeObservedResult(e,t,r)}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var eU=LongTasks$2=XF(LongTasks$2),tU=getAugmentedNamespace(Object.freeze({__proto__:null,Audit:kc}));const rU=zF,aU=oi,nU=eU,{auditNotApplicable:iU}=jO.exports,{Audit:oU}=tU,{getAttributableUrl:sU}=VF,{isAdScript:cU}=fF,{URL:lU}=Hn,uU={title:"No long tasks blocking ad-related network requests",failureTitle:"Avoid long tasks that block ad-related network requests",description:"Tasks blocking the main thread can delay ad requests and cause a poor user experience. Consider removing long blocking tasks or moving them off of the main thread. These tasks can be especially detrimental to performance on less powerful devices. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-blocking-tasks).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",
1129
+ columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},dU=aU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks.js",uU),mU=[{key:"script",itemType:"url",text:dU(uU.columnScript)},{key:"startTime",itemType:"ms",text:dU(uU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:dU(uU.columnDuration),granularity:1}];class AdBlockingTasks extends oU{static get meta(){return{id:"ad-blocking-tasks",title:dU(uU.title),failureTitle:dU(uU.failureTitle),description:dU(uU.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r="simulate"==t.settings.throttlingMethod?200:100,a={trace:e.traces[oU.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[oU.DEFAULT_PASS],settings:t.settings};let n=[];try{n=await nU.request(a,t)}catch(e){return iU.InvalidTiming}if(!n.length)return iU.NoTasks;const{timing:i}=await rU.request(a,t);if(!(i>0))return iU.NoAdRelatedReq;const o=[];for(const e of n){
1130
+ if(e.startTime>i||e.duration<r)continue;const t=sU(e);if(t&&cU(new lU(t)))continue;const a=t&&new lU(t),n=a&&a.origin+a.pathname||"Other";o.push({script:n,rawUrl:t,startTime:e.startTime,endTime:e.endTime,duration:e.duration,isTopLevel:!e.parent})}let s=Array.from(o);s.length>10&&(s=o.filter((e=>"Other"!==e.script&&e.isTopLevel)).sort(((e,t)=>t.duration-e.duration)).splice(0,10).sort(((e,t)=>e.startTime-t.startTime)));const c=s.reduce(((e,t)=>t.isTopLevel?e+t.duration:e),0),l=s.length>0;return{score:l?0:1,numericValue:c,numericUnit:"millisecond",displayValue:l?dU(uU.failureDisplayValue,{timeInMs:c}):"",details:AdBlockingTasks.makeTableDetails(mU,s)}}}HO.exports=AdBlockingTasks,HO.exports.UIStrings=uU;var pU={exports:{}};const hU=oi,gU=Lo,{auditNotApplicable:fU}=jO.exports,{Audit:yU}=tU,{getTimingsByRecord:vU}=OF,{isAdTag:bU}=fF,{URL:wU}=Hn,SU={title:"Minimal render-blocking resources found",failureTitle:"Avoid render-blocking resources",
1131
+ description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},TU=hU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources.js",SU),EU=[{key:"url",itemType:"url",text:TU(SU.columnUrl)},{key:"startTime",itemType:"ms",text:TU(SU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:TU(SU.columnDuration),granularity:1}];class AdRenderBlockingResources extends yU{static get meta(){return{id:"ad-render-blocking-resources",title:TU(SU.title),failureTitle:TU(SU.failureTitle),scoreDisplayMode:"binary",description:TU(SU.description),
1132
+ requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[yU.DEFAULT_PASS],a=e.traces[yU.DEFAULT_PASS],n=await gU.request(r,t),i=n.find((e=>bU(new wU(e.url))));if(!i)return fU.NoTag;const o=await vU(a,r,t),s=new Set;for(const t of e.LinkElements)t.href&&"stylesheet"==t.rel&&s.add(t.href);for(const t of e.ScriptElements)!t.src||t.defer||t.async||s.add(t.src);const c=n.filter((e=>e.endTime<i.startTime)).filter((e=>e!=i.initiatorRequest)).filter((e=>e.initiator.type="parser")).filter((e=>s.has(e.url))).map((e=>Object.assign({url:e.url},o.get(e))));c.sort(((e,t)=>e.endTime-t.endTime));const l=o.get(i)||{startTime:1/0},u=c.map((e=>e.startTime)),d=c.map((e=>e.endTime)),m=Math.min(...u),p=Math.min(Math.max(...d),l.startTime)-m;let h="";c.length>0&&p>0&&(h=TU(SU.failureDisplayValue,{timeInMs:p}));return{score:c.length>0&&p>100?0:1,numericValue:c.length,numericUnit:"unitless",displayValue:h,details:{opportunity:p,
1133
+ ...AdRenderBlockingResources.makeTableDetails(EU,c)}}}}pU.exports=AdRenderBlockingResources,pU.exports.UIStrings=SU;var xU={exports:{}};var _U={assert:function assert$2(e){if(null==e)throw new Error("Expected not to be null");return e}};const AU=Zc,RU=Lo,{assert:kU}=_U,{getNameOrTld:DU,trimUrl:CU}=fF,{getNetworkInitiators:IU}=eb,{getTimingsByRecord:NU}=OF,{isAdRequest:LU,isAdSense:MU,isGpt:PU,isBidRequest:OU,isAdRelated:FU}=fF;function isXhrCritical(e,t,r){const a=t.xhrEdges.get(e.url);if(!a)return!1;for(const{url:e}of r)if(a.has(e))return!0;return!1}function addInitiatedRequests(e,t,r,a){const n=r.allRecords.filter((e=>null!=e.resourceType)).filter((e=>["Script","XHR"].includes(e.resourceType||"")&&e.endTime<t.startTime)).filter((t=>t.initiatorRequest==e||IU(t).includes(e.url)));for(const e of n){"XHR"==e.resourceType&&isXhrCritical(e,r,a)&&linkGraph(r,e,a)}}function linkGraph(e,t,r=new Set){if(!t||r.has(t))return r;r.add(t);const a=new Set
1134
+ ;for(let n=t.initiator.stack;n;n=n.parent)for(const{url:i}of n.callFrames){if(a.has(i))continue;a.add(i);const o=e.requestsByUrl.get(i);if(o&&(linkGraph(e,o,r),"Script"==o.resourceType)){const a=n.callFrames[0].url,i=e.requestsByUrl.get(a);i&&addInitiatedRequests(i,t,e,r)}}return linkGraph(e,t.initiatorRequest||null,r),r}function buildNetworkSummary(e,t){const r=new Map;for(const t of e)r.set(t.url,t);const a=t.filter((e=>e.name.startsWith("XHR"))).filter((e=>!!(e.args.data||{}).url)),n=new Map;for(const e of a){const t=e.args.data||{},r=n.get(t.url)||new Set;for(const{url:e}of t.stackTrace||[])r.add(e);n.set(t.url,r)}return{requestsByUrl:r,xhrEdges:n,allRecords:e}}var UU={getTransitiveClosure:function getTransitiveClosure(e,t){const r=new Set,a=function findTargetRequest(e,t){let r=null;return e.traverse((e=>{e.type!==AU.TYPES.CPU&&t(e.record)&&(r&&r.startTime<e.startTime||(r=e))})),r}(e,t),n=[],i=[];if(null==a)return{requests:n,traceEvents:i};const o=[a];for(;o.length;){
1135
+ const e=o.pop();e&&!r.has(e)&&(r.add(e),o.push(...e.getDependencies()))}const s=new Set;for(o.push(...e.getDependents());o.length;){const e=o.pop();if(e&&!s.has(e)){if(s.add(e),r.has(e))for(const e of o)r.add(e);o.push(...e.getDependents())}}for(const e of r)e.type===AU.TYPES.NETWORK?e.endTime<kU(a).startTime&&n.push(e.record):e.type===AU.TYPES.CPU&&e.event.ts<1e6*kU(a).startTime&&i.push(e.event,...e.childEvents);return{requests:n,traceEvents:i}},getCriticalGraph:function getCriticalGraph$1(e,t,r){const a=buildNetworkSummary(e,t),n=new Set;return linkGraph(a,r,n),n},computeAdRequestWaterfall:async function computeAdRequestWaterfall$4(e,t,r){const a=await RU.request(t,r),n=a.find(LU)||a.find(OU)||a.find(FU);if(null==n)return Promise.resolve([]);const i=new Set,o=kU(n),s=a.filter((e=>PU(e.url)||MU(e.url))),c=a.filter((e=>OU(e)&&e.endTime<=o.startTime)),l=buildNetworkSummary(a,e.traceEvents);for(const e of[o,...c,...s])linkGraph(l,e,i)
1136
+ ;const u=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),d=Array.from(i).filter((e=>e.endTime<o.startTime)).filter((e=>u.has(e.resourceType))).filter((e=>"text/css"!=e.mimeType)),m=await NU(e,t,r),p=function computeSummaries(e){e.sort(((e,t)=>e.nameOrTld!=t.nameOrTld?e.nameOrTld<t.nameOrTld?-1:1:e.type!=t.type?e.type<t.type?-1:1:e.startTime!=t.startTime?e.startTime<t.startTime?-1:1:e.endTime-t.endTime));const t=[];for(let n=0;n<e.length;n++){const i=e[n];let o;for(;n<e.length&&(o=e[n+1],o&&(r=o,a=i,!(Math.max(r.startTime,a.startTime)>Math.min(r.endTime,a.endTime)||r.type&&a.type&&r.type!=a.type||"Script"==r.type||r.nameOrTld!=a.nameOrTld)));)i.endTime=Math.max(i.endTime,o.endTime),i.duration=i.endTime-i.startTime,n++;t.push(i)}var r,a;return t.sort(((e,t)=>e.startTime-t.startTime)),t}(d.map((e=>{const{startTime:t,endTime:r}=m.get(e)||e;return{startTime:t,endTime:r,duration:r-t,selfTime:0,url:CU(e.url),nameOrTld:DU(e.url),type:e.resourceType,record:e}})))
1137
+ ;return function computeSelfTimes(e){if(!e.length)return[];let t=kU(e[0]);t.selfTime=t.duration;let r=t.startTime;for(const a of e){if(a.endTime<r||a==t)continue;const e=Math.max(r,a.startTime),n=Math.min(t.endTime,a.endTime);e<n&&(t.selfTime-=n-e),r=Math.max(r,n),a.endTime>t.endTime&&(a.selfTime=a.endTime-e,t=a)}}(p),p}};const jU=oi,{auditNotApplicable:BU}=jO.exports,{Audit:$U}=tU,{computeAdRequestWaterfall:qU}=UU,zU={title:"Ad request waterfall",failureTitle:"Reduce critical path for ad loading",description:"Consider reducing the number of resources, loading multiple resources simultaneously, or loading resources earlier to improve ad speed. Requests that block ad loading can be found below. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-critical-path).",displayValue:"{serialResources, plural, =1 {1 serial resource} other {# serial resources}}",columnUrl:"Request",columnType:"Type",columnStartTime:"Start",columnEndTime:"End"
1138
+ },VU=jU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-critical-path.js",zU),WU=[{key:"nameOrTld",itemType:"text",text:VU(zU.columnType)},{key:"url",itemType:"url",text:VU(zU.columnUrl)},{key:"startTime",itemType:"ms",text:VU(zU.columnStartTime),granularity:1},{key:"endTime",itemType:"ms",text:VU(zU.columnEndTime),granularity:1}];class AdRequestCriticalPath extends $U{static get meta(){return{id:"ad-request-critical-path",title:VU(zU.title),failureTitle:VU(zU.failureTitle),description:VU(zU.description),scoreDisplayMode:"informative",requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[$U.DEFAULT_PASS],a=e.devtoolsLogs[$U.DEFAULT_PASS],n=(await qU(r,a,t)).filter((e=>e.startTime>0&&e.startTime<e.endTime));if(!n.length)return BU.NoAds;const i=function computeDepth(e){let t=0,r=0;for(const{startTime:a,endTime:n}of e)a>=t?(++r,t=n):t=Math.min(t,n);return r}(n),o=i>3;for(const e of n)delete e.record
1139
+ ;const s=function computeIdleTimes(e){let t=1/0;const r=[];for(let a=0;a<e.length;){const{startTime:n,endTime:i}=e[a];for(n-t>150&&r.push(n-t),t=i;++a<e.length&&e[a].startTime<t;)t=Math.max(t,e[a].endTime)}return r}(n),c=Math.max(...s),l=s.reduce(((e,t)=>e+t),0);return{numericValue:i,numericUnit:"unitless",score:o?0:1,displayValue:VU(zU.displayValue,{serialResources:i}),details:{size:n.length,depth:i,maxIdleTime:c,totalIdleTime:l,...AdRequestCriticalPath.makeTableDetails(WU,n)}}}}xU.exports=AdRequestCriticalPath,xU.exports.UIStrings=zU;var HU={exports:{}};const GU=AF,YU=Ew,KU=Ao,{getAdStartTime:JU,getBidStartTime:XU,getPageStartTime:ZU}=OF,{isAdRequest:QU,isBidRequest:ej}=fF;class LanternBidRequestTime extends GU{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e,a=GU.findNetworkTiming(r,ej).startTime;return a>GU.findNetworkTiming(r,QU).startTime?{timeInMs:-1,nodeTimings:r}:{timeInMs:a,nodeTimings:r}}}LanternBidRequestTime=KU(LanternBidRequestTime)
1140
+ ;class BidRequestTime extends YU{static async computeSimulatedMetric(e,t){return LanternBidRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=ZU(t),a=XU(t);if(JU(t)<a)return{timing:-1};return{timing:1e3*(a-r)}}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const tj=BidRequestTime=KU(BidRequestTime),rj=oi,{auditNotApplicable:aj}=jO.exports,{Audit:nj}=tU,ij={title:"First bid request time",failureTitle:"Reduce time to send the first bid request",description:"This metric measures the elapsed time from the start of page load until the first bid request is made. Delayed bid requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bid-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"
1141
+ },oj=rj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start.js",ij);HU.exports=class BidRequestFromPageStart extends nj{static get meta(){return{id:"bid-request-from-page-start",title:oj(ij.title),failureTitle:oj(ij.failureTitle),description:oj(ij.description),scoreDisplayMode:nj.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[nj.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[nj.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await tj.request(r,t);return n>0?{numericValue:n,numericUnit:"millisecond",score:nj.computeLogNormalScore(a,n),displayValue:oj(ij.displayValue,{timeInMs:n})}:aj.NoBids}},HU.exports.UIStrings=ij;var sj={exports:{}}
1142
+ ;const cj=zF,lj=oi,{auditNotApplicable:uj,runWarning:dj}=jO.exports,{Audit:mj}=tU,pj={title:"First ad request time",failureTitle:"Reduce time to send the first ad request",description:"This metric measures the elapsed time from the start of page load until the first ad request is made. Delayed ad requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},hj=lj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start.js",pj);sj.exports=class AdRequestFromPageStart extends mj{static get meta(){return{id:"ad-request-from-page-start",title:hj(pj.title),failureTitle:hj(pj.failureTitle),description:hj(pj.description),scoreDisplayMode:mj.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{
1143
+ p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,t){const r={trace:e.traces[mj.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[mj.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await cj.request(r,t);if(!(n>0)){const e=uj.NoAds;return e.runWarnings=[dj.NoAds],e}return{numericValue:n,numericUnit:"millisecond",score:mj.computeLogNormalScore(a,n),displayValue:hj(pj.displayValue,{timeInMs:n})}}},sj.exports.UIStrings=pj;var gj={exports:{}};const fj=oi,{auditNotApplicable:yj}=jO.exports,{Audit:vj}=tU,{isAdIframe:bj}=fF,wj={title:"No ad found at the very top of the viewport",failureTitle:"Move the top ad further down the page",
1144
+ description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},Sj=fj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport.js",wj),Tj=[{key:"slot",itemType:"text",text:Sj(wj.columnSlot)}];class AdTopOfViewport extends vj{static get meta(){return{id:"ad-top-of-viewport",title:Sj(wj.title),failureTitle:Sj(wj.failureTitle),description:Sj(wj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter(bj).filter((e=>e.clientRect.width*e.clientRect.height>1&&!e.isPositionFixed)).map((e=>({
1145
+ midpoint:e.clientRect.top+e.clientRect.height/2,id:e.id})));if(!r.length)return yj.NoVisibleSlots;const a=r.reduce(((e,t)=>e.midpoint<t.midpoint?e:t)),n=a.midpoint<t.innerHeight;if(!n)return yj.NoAdsViewport;const i=n&&a.midpoint<100?0:1;return{score:i,numericValue:a.midpoint,numericUnit:"unitless",displayValue:i?"":Sj(wj.failureDisplayValue,{valueInPx:a.midpoint}),details:AdTopOfViewport.makeTableDetails(Tj,i?[]:[{slot:a.id}])}}}gj.exports=AdTopOfViewport,gj.exports.UIStrings=wj;var Ej={exports:{}};function isBoxInViewport$1(e,t){const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return n<o&&i<s&&n<r&&i<a&&0<o&&0<s}var xj={boxViewableArea:function boxViewableArea(e,t){if(!isBoxInViewport$1(e,t))return 0;const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return(Math.min(o,r)-Math.max(n,0))*(Math.min(s,a)-Math.max(i,0))},isBoxInViewport:isBoxInViewport$1,overlaps:function overlaps$1(e,t){
1146
+ const r=!(e.right<t.left||t.right<e.left),a=!(e.bottom<t.top||t.bottom<e.top);return r&&a},toClientRect:function toClientRect$1([e,t,r,a]){return{left:e,top:t,width:r,height:a,right:e+r,bottom:t+a}}};const{auditNotApplicable:_j}=jO.exports,{Audit:Aj}=tU,Rj=oi,{isBoxInViewport:kj}=xj,{isGptIframe:Dj}=fF,Cj={title:"Few or no ads loaded outside viewport",failureTitle:"Avoid loading ads until they are nearly on-screen",description:"Too many ads loaded outside the viewport lowers viewability rates and impacts user experience. Consider loading ads below the fold lazily as the user scrolls down. Consider using GPT's [Lazy Loading API](https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableLazyLoad). [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ads-in-viewport).",failureDisplayValue:"{hiddenAds, plural, =1 {1 ad} other {# ads}} out of view",columnSlot:"Slots Outside Viewport"
1147
+ },Ij=Rj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ads-in-viewport.js",Cj),Nj=[{key:"slot",itemType:"text",text:Ij(Cj.columnSlot)}];class AdsInViewport extends Aj{static get meta(){return{id:"ads-in-viewport",title:Ij(Cj.title),failureTitle:Ij(Cj.failureTitle),description:Ij(Cj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>Dj(e)&&e.clientRect.height*e.clientRect.width>1));if(!r.length)return _j.NoVisibleSlots;const a=r.filter((e=>!kj(e.clientRect,t))).map((e=>({slot:e.id}))).sort(((e,t)=>e.slot.localeCompare(t.slot)));return{numericValue:(r.length-a.length)/r.length,numericUnit:"unitless",score:a.length>3?0:1,displayValue:a.length?Ij(Cj.failureDisplayValue,{hiddenAds:a.length}):"",details:AdsInViewport.makeTableDetails(Nj,a)}}}Ej.exports=AdsInViewport,Ej.exports.UIStrings=Cj;var Lj={exports:{}};var Mj={count:function count(e,t){let r=0
1148
+ ;for(const a of e)t(a)&&r++;return r},bucket:function bucket$1(e,t){const r=new Map;for(const a of e){const e=t(a);if(null!=e){const t=r.get(e)||[];t.push(a),r.set(e,t)}}return r},flatten:function flatten(e){const t=[];for(const r of e)t.push(...r);return t}};const Pj=Mj,Oj=oi,Fj=GT,Uj=Lo,{auditNotApplicable:jj}=jO.exports,{Audit:Bj}=tU,{isAdTag:$j,isStaticRequest:qj}=fF,{URL:zj}=Hn,Vj={title:"Ad tag is loaded asynchronously",failureTitle:"Load ad tag asynchronously",description:"Loading the ad tag synchronously blocks content rendering until the tag is fetched and loaded. Consider using the `async` attribute to load gpt.js and/or adsbygoogle.js asynchronously. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags)."},Wj=Oj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/async-ad-tags.js",Vj);function isAsync(e){return"Low"==e.priority||qj(e)}Lj.exports=class AsyncAdTags extends Bj{static get meta(){return{
1149
+ id:"async-ad-tags",title:Wj(Vj.title),failureTitle:Wj(Vj.failureTitle),description:Wj(Vj.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[Bj.DEFAULT_PASS],a=await Uj.request(r,t),n=await Fj.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>$j(new zj(e.url)))).filter((e=>e.frameId===n.frameId));if(!i.length)return jj.NoTag;const o=Pj.count(i,isAsync)-i.length;return{score:Number(0===o),numericValue:o,numericUnit:"unitless"}}},Lj.exports.UIStrings=Vj;var Hj={exports:{}};const Gj=on.default,Yj=Ao,Kj=Yp,Jj=Xp;Gj.warn("trace-of-tab","trace-of-tab is deprecated, use processed-trace / processed-navigation instead");var Xj=Yj(class TraceOfTab$1{static async compute_(e,t){const r=await Kj.request(e,t),a=await Jj.request(r,t);return{...r,...a}}},null);const Zj=oi,Qj=Lo,eB=Xj,{auditNotApplicable:tB}=jO.exports,{Audit:rB}=tU,{computeAdRequestWaterfall:aB}=UU,{getTimingsByRecord:nB}=OF,iB={title:"Ads not blocked by load events",
1150
+ failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},oB=Zj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/blocking-load-events.js",iB),sB=[{key:"eventName",itemType:"text",text:oB(iB.columnEvent)},{key:"time",itemType:"ms",text:oB(iB.columnTime),granularity:1},{key:"url",itemType:"url",text:oB(iB.columnScript)},{key:"functionName",itemType:"text",text:oB(iB.columnFunctionName)}];function findOriginalCallFrame(e){const{record:t}=e;let r=t&&t.initiator&&t.initiator.stack;if(r){for(;r.parent;)r=r.parent;return r.callFrames[r.callFrames.length-1]}}
1151
+ function findTraceEventOfCallFrame(e,t){return t.find((t=>"FunctionCall"==t.name&&t.args.data&&t.args.data.functionName==e.functionName&&t.args.data.scriptId==e.scriptId&&t.args.data.url==e.url&&Math.abs(t.args.data.lineNumber==e.lineNumber)<2&&Math.abs(t.args.data.columnNumber==e.columnNumber)<2))}function findEventIntervals(e,t){let r={};const a=[];for(const n of t)n.name==`${e}EventStart`?r={start:n.ts,end:1/0,eventName:e}:n.name==`${e}EventEnd`&&(r.end=n.ts,a.push(r));return a}function quantifyBlockedTime(e,t,r){const a=t.find((t=>t.url==e.url)),n=t.find((t=>t.url==e.blockedUrl));if(!a||!n)return 0;const i=r.get(a),o=r.get(n);return i&&o?o.startTime-i.endTime:0}class BlockingLoadEvents extends rB{static get meta(){return{id:"blocking-load-events",title:oB(iB.title),failureTitle:oB(iB.failureTitle),description:oB(iB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
1152
+ const r=e.traces[rB.DEFAULT_PASS],a=e.devtoolsLogs[rB.DEFAULT_PASS],n=await Qj.request(a,t),{timings:i,processEvents:o}=await eB.request(r,t),s=await nB(r,a,t),c=(await aB(r,a,t)).sort(((e,t)=>e.startTime-t.startTime));if(!c.length)return tB.NoAdRelatedReq;const l=[...findEventIntervals("domContentLoaded",o),...findEventIntervals("load",o)],u=[],d=new Set;for(const e of c){const t=findOriginalCallFrame(e);if(!t)continue;const r=JSON.stringify(t);if(d.has(r))continue;d.add(r);const a=findTraceEventOfCallFrame(t,o);if(!a)continue;const c=l.find((e=>e.start<=a.ts&&a.ts<=e.end));if(c){const r=Object.assign({eventName:c.eventName,blockedUrl:e.url,time:i[c.eventName],blockedTime:1/0},t);r.blockedTime=quantifyBlockedTime(r,n,s),u.push(r)}}const m=u.length>0;let p=0;return m&&(p=Math.min(...u.map((e=>e.blockedTime)))),{numericValue:u.length,numericUnit:"unitless",score:m?0:1,displayValue:m&&p?oB(iB.displayValue,{timeInMs:p}):"",details:BlockingLoadEvents.makeTableDetails(sB,u)}}}
1153
+ Hj.exports=BlockingLoadEvents,Hj.exports.UIStrings=iB;var cB={exports:{}};const lB=oi,{auditNotApplicable:uB}=jO.exports,{Audit:dB}=tU,{computeAdRequestWaterfall:mB}=UU,{isAdScript:pB,toURL:hB}=fF,gB={title:"No bottleneck requests found",failureTitle:"Avoid bottleneck requests",description:"Speed up, load earlier, parallelize, or eliminate the following requests and their dependencies in order to speed up ad loading. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bottleneck-requests).",displayValue:"{blockedTime, number, seconds} s spent blocked on requests",columnUrl:"Blocking Request",columnInitiatorUrl:"Initiator Request",columnStartTime:"Start",columnSelfTime:"Exclusive Time",columnDuration:"Total Time"},fB=lB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bottleneck-requests.js",gB),yB=[{key:"url",itemType:"url",text:fB(gB.columnUrl)},{key:"selfTime",itemType:"ms",text:fB(gB.columnSelfTime),granularity:1},{
1154
+ key:"duration",itemType:"ms",text:fB(gB.columnDuration),granularity:1}];class BottleneckRequests extends dB{static get meta(){return{id:"bottleneck-requests",title:fB(gB.title),failureTitle:fB(gB.failureTitle),description:fB(gB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[dB.DEFAULT_PASS],a=e.devtoolsLogs[dB.DEFAULT_PASS],n=(await mB(r,a,t)).filter((e=>e.startTime>0));if(!n.length)return uB.NoAdRelatedReq;const cost=e=>3*e.selfTime+e.duration,i=n.filter((e=>!pB(hB(e.url))&&(e.selfTime>250||e.duration>1e3))).sort(((e,t)=>cost(t)-cost(e))).slice(0,5),o=i.reduce(((e,t)=>e+t.selfTime),0)/1e3,s=1e3*o>1e3;for(const e of i)delete e.record;return{numericValue:i.length,numericUnit:"unitless",score:s?0:1,displayValue:s?fB(gB.displayValue,{blockedTime:o}):"",details:BottleneckRequests.makeTableDetails(yB,i)}}}cB.exports=BottleneckRequests,cB.exports.UIStrings=gB;var vB={exports:{}}
1155
+ ;const bB=oi,wB=GT,SB=Lo,TB=Ki,{auditNotApplicable:EB}=jO.exports,{Audit:xB}=tU,{containsAnySubstring:_B}=fF,{URL:AB}=Hn,RB={title:"No duplicate tags found",failureTitle:"Load tags only once",description:"Loading a tag more than once in the same page is redundant and adds overhead without benefit. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/duplicate-tags).",failureDisplayValue:"{duplicateTags, plural, =1 {1 duplicate tag} other {# duplicate tags}}",columnScript:"Script",columnNumReqs:"Duplicate Requests",columnFrameId:"Frame ID"},kB=bB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/duplicate-tags.js",RB),DB=["googletagservices.com/tag/js/gpt.js","securepubads.g.doubleclick.net/tag/js/gpt.js","pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","pagead2.googlesyndication.com/pagead/js/show_ads.js","cdn.ampproject.org/v0/amp-ad-0.1.js"],CB=[{key:"script",itemType:"url",text:kB(RB.columnScript)},{key:"numReqs",
1156
+ itemType:"text",text:kB(RB.columnNumReqs)}];class DuplicateTags extends xB{static get meta(){return{id:"duplicate-tags",title:kB(RB.title),failureTitle:kB(RB.failureTitle),description:kB(RB.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[xB.DEFAULT_PASS],a=await SB.request(r,t),n=await wB.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>e.frameId===n.frameId)).filter((e=>_B(e.url,DB))).filter((e=>e.resourceType===TB.TYPES.Script));if(!i.length)return EB.NoTags;const o=new Map;for(const e of i){const t=new AB(e.url).pathname,r=o.get(t)||0;o.set(t,r+1)}const s=[];for(const[e,t]of o)t>1&&s.push({script:e,numReqs:t});return{numericValue:s.length,numericUnit:"unitless",score:s.length?0:1,details:DuplicateTags.makeTableDetails(CB,s),displayValue:s.length?kB(RB.failureDisplayValue,{duplicateTags:s.length}):""}}}vB.exports=DuplicateTags,vB.exports.UIStrings=RB;var IB={exports:{}}
1157
+ ;const NB=AF,LB=Ew,MB=Ao,{getPageStartTime:PB,getImpressionStartTime:OB}=OF,{isImpressionPing:FB}=fF;class LanternAdRenderTime extends NB{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:NB.findNetworkTiming(r,(e=>!!e.url&&FB(new URL(e.url)))).startTime,nodeTimings:r}}}LanternAdRenderTime=MB(LanternAdRenderTime);class AdRenderTime extends LB{static async computeSimulatedMetric(e,t){return LanternAdRenderTime.request(e,t)}static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=PB(r),n=1e3*(OB(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const UB=AdRenderTime=MB(AdRenderTime),jB=oi,{auditNotApplicable:BB,runWarning:$B}=jO.exports,{Audit:qB}=tU,zB={title:"Latency of first ad render",failureTitle:"Reduce time to render first ad",
1158
+ description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},VB=jB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/first-ad-render.js",zB);IB.exports=class FirstAdRender extends qB{static get meta(){return{id:"first-ad-render",title:VB(zB.title),failureTitle:VB(zB.failureTitle),description:VB(zB.description),scoreDisplayMode:qB.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:12900,median:22e3},provided:{p10:2750,median:3700}}}static async audit(e,t){const r=e.traces[qB.DEFAULT_PASS],a={devtoolsLog:e.devtoolsLogs[qB.DEFAULT_PASS],trace:r,settings:t.settings},{timing:n}=await UB.request(a,t);if(!(n>0)){const e=BB.NoAdRendered;return e.runWarnings=[$B.NoAdRendered],e}
1159
+ const i=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"];return{numericValue:n,numericUnit:"millisecond",score:qB.computeLogNormalScore(i,n),displayValue:VB(zB.displayValue,{timeInMs:n})}}},IB.exports.UIStrings=zB;var WB={exports:{}};const HB=oi,GB=Lo,{auditNotApplicable:YB}=jO.exports,{Audit:KB}=tU,{isAdRequest:JB}=fF,{URL:XB}=Hn,ZB={title:"Ad slots effectively use horizontal space",failureTitle:"Increase the width of ad slots",description:"Ad slots that utilize most of the page width generally experience increased click-through rate over smaller ad sizes. We recommend leaving no more than 25% of the viewport width unutilized on mobile devices.",failureDisplayValue:"{percentUnused, number, percent} of viewport width is underutilized"},QB=HB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/full-width-slots.js",ZB);WB.exports=class FullWidthSlots extends KB{static get meta(){return{id:"full-width-slots",title:QB(ZB.title),
1160
+ failureTitle:QB(ZB.failureTitle),description:QB(ZB.description),requiredArtifacts:["ViewportDimensions","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[KB.DEFAULT_PASS],a=await GB.request(r,t),n=e.ViewportDimensions.innerWidth,i=a.filter(JB).map((e=>new XB(e.url)));if(!i.length)return YB.NoAds;const o=i.map((e=>e.searchParams.get("prev_iu_szs")||e.searchParams.get("sz"))).join("|").split(/[|,]/).map((e=>parseInt(e.split("x")[0]))).filter((e=>e<=n&&e>1));if(!o.length)return YB.NoValidAdWidths;const s=1-Math.max(...o)/n,c=s>.25?0:1;return{score:c,numericValue:s,numericUnit:"unitless",displayValue:c?"":QB(ZB.failureDisplayValue,{percentUnused:s})}}},WB.exports.UIStrings=ZB;var e$={exports:{}};const t$=Lo,{assert:r$}=_U,{auditNotApplicable:a$}=jO.exports,{Audit:n$}=tU,{getCriticalGraph:i$}=UU,{getTimingsByRecord:o$}=OF,{isGptImplTag:s$,isBidRequest:c$,getHeaderBidder:l$}=fF,u$={title:"GPT and bids loaded in parallel",failureTitle:"Load GPT and bids in parallel",
1161
+ description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},d$=[{key:"bidder",itemType:"text",text:u$.columnBidder},{key:"url",itemType:"url",text:u$.columnUrl},{key:"startTime",itemType:"ms",text:u$.columnStartTime},{key:"duration",itemType:"ms",text:u$.columnDuration}];class GptBidsInParallel extends n${static get meta(){return{id:"gpt-bids-parallel",title:u$.title,failureTitle:u$.failureTitle,description:u$.description,requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[n$.DEFAULT_PASS],a=e.traces[n$.DEFAULT_PASS],n=await t$.request(r,t),i=n.find((e=>s$(e.url)));if(!i)return a$.NoGpt
1162
+ ;const o=n.filter(c$).filter((e=>e.frameId==i.frameId));if(!o.length)return a$.NoBids;const s=await o$(a,r,t),c=[],l=new Set;for(const e of o)if(i$(n,a.traceEvents,e).has(i)){const{startTime:t,endTime:r}=s.get(e)||e,a=r$(l$(e.url));if(l.has(a))continue;l.add(a),c.push({bidder:a,url:e.url,startTime:t,duration:r-t})}const u=c.length>0;return{numericValue:c.length,numericUnit:"unitless",score:u?0:1,details:u?GptBidsInParallel.makeTableDetails(d$,c):void 0}}}e$.exports=GptBidsInParallel,e$.exports.UIStrings=u$;var m$={exports:{}};const p$=oi,h$=Lo,{auditNotApplicable:g$}=jO.exports,{Audit:f$}=tU,{isGptTag:y$}=fF,{URL:v$}=Hn,b$={title:"GPT tag is loaded from an official source",failureTitle:"Load GPT from an official source",description:"Load GPT from 'securepubads.g.doubleclick.net' for standard integrations or from 'pagead2.googlesyndication.com' for limited ads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-gpt-from-official-source)."
1163
+ },w$=p$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source.js",b$);m$.exports=class LoadsGptFromOfficalSource extends f${static get meta(){return{id:"loads-gpt-from-official-source",title:w$(b$.title),failureTitle:w$(b$.failureTitle),description:w$(b$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[f$.DEFAULT_PASS],a=(await h$.request(r,t)).map((e=>new v$(e.url))).find(y$);if(!a)return g$.NoGpt;const n=["securepubads.g.doubleclick.net","pagead2.googlesyndication.com"].includes(a.host);return{score:Number(n),numericValue:Number(!n),numericUnit:"unitless"}}},m$.exports.UIStrings=b$;var S$={exports:{}};const T$=oi,E$=Lo,{auditNotApplicable:x$}=jO.exports,{Audit:_$}=tU,{isAdTag:A$}=fF,{URL:R$}=Hn,k$={title:"Ad tag is loaded over HTTPS",failureTitle:"Load ad tag over HTTPS",
1164
+ description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},D$=T$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https.js",k$);S$.exports=class LoadsAdTagOverHttps extends _${static get meta(){return{id:"loads-ad-tag-over-https",title:D$(k$.title),failureTitle:D$(k$.failureTitle),description:D$(k$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[_$.DEFAULT_PASS],a=await E$.request(r,t);if(!a.find((e=>200==e.statusCode)))return x$.NoRecords;const n=a.filter((e=>A$(new R$(e.url)))),i=n.filter((e=>e.isSecure)),o={
1165
+ type:"debugdata",numAdTagHttpReqs:n.length-i.length,numAdTagHttpsReqs:i.length};if(!n.length){const e=x$.NoTag;return e.details=o,e}return{numericValue:o.numAdTagHttpReqs,score:o.numAdTagHttpReqs?0:1,details:o}}},S$.exports.UIStrings=k$;var C$={exports:{}};const I$=Mj,N$=oi,L$=eb,{auditNotApplicable:M$}=jO.exports,{Audit:P$}=tU,{computeAdRequestWaterfall:O$}=UU,{getScriptEvaluationTimes:F$}=OF,U$={title:"Ad scripts are loaded statically",failureTitle:"Load ad scripts statically",description:"Load the following scripts directly with `<script async src=...>` instead of injecting scripts with JavaScript. Doing so allows the browser to preload scripts sooner. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/script-injected-tags).",failureDisplayValue:"Load {tags, plural, =1 {1 script} other {# scripts}} statically",columnUrl:"Script",columnLoadTime:"Load Time"
1166
+ },j$=N$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/script-injected-tags.js",U$),B$=[{key:"url",itemType:"url",text:j$(U$.columnUrl)},{key:"loadTime",itemType:"ms",granularity:1,text:j$(U$.columnLoadTime)}],$$=[/amazon-adsystem\.com\/aax2\/apstag.js/,/js-sec\.indexww\.com\/ht\/p\/.*\.js/,/pubads\.g\.doubleclick\.net\/tag\/js\/gpt\.js/,/static\.criteo\.net\/js\/.*\/publishertag\.js/,/www\.googletagservices\.com\/tag\/js\/gpt\.js/,/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js/,/cdn\.ampproject\.org\/v0\/amp-ad-\d+\.\d+\.js/];function initiatedByInlineScript(e){if("script"!==e.initiator.type)return!1;const t=L$.getNetworkInitiators(e);return 1===t.length&&t[0]===e.documentURL}class StaticAdTags extends P${static get meta(){return{id:"script-injected-tags",title:j$(U$.title),failureTitle:j$(U$.failureTitle),description:j$(U$.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
1167
+ const r=await async function findStaticallyLoadableTags(e,t){const r=e.devtoolsLogs[P$.DEFAULT_PASS],a=e.traces[P$.DEFAULT_PASS],n=[],i=await O$(a,r,t);for(const{record:e}of i)e&&"Script"===e.resourceType&&(initiatedByInlineScript(e)||$$.find((t=>e.url.match(t))))&&n.push(e);return n}(e,t);if(!r.length)return M$.NoTag;const a=new Set,n=[],i=e.devtoolsLogs[P$.DEFAULT_PASS],o=e.traces[P$.DEFAULT_PASS],s=await F$(o,i,t);for(const e of r){if(a.has(e.url))continue;a.add(e.url);const t=r.filter((t=>t.url===e.url));if(0===I$.count(t,(e=>"parser"===e.initiator.type&&!e.isLinkPreload))){const t=s.get(e.url)||0;if(t<400)continue;n.push({url:e.url,loadTime:t})}}n.sort(((e,t)=>e.loadTime-t.loadTime));const c=n.length>0;return{displayValue:c?j$(U$.failureDisplayValue,{tags:n.length}):"",score:Number(!c),numericValue:n.length,numericUnit:"unitless",details:StaticAdTags.makeTableDetails(B$,n)}}}C$.exports=StaticAdTags,C$.exports.UIStrings=U$;var q$={exports:{}}
1168
+ ;const z$=zF,V$=oi,W$=GT,H$=Lo,{auditNotApplicable:G$}=jO.exports,{Audit:Y$}=tU,{bucket:K$}=Mj,{getTimingsByRecord:J$}=OF,{isCacheable:X$}=dF,{isGoogleAds:Z$,getHeaderBidder:Q$}=fF,{URL:tq}=Hn,rq={title:"Header bidding is parallelized",failureTitle:"Parallelize bid requests",description:"Send header bidding requests simultaneously, rather than serially, to retrieve bids more quickly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/serial-header-bidding).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},aq=V$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/serial-header-bidding.js",rq),nq=[{key:"bidder",itemType:"text",text:aq(rq.columnBidder)},{key:"url",itemType:"url",text:aq(rq.columnUrl)},{key:"startTime",itemType:"ms",text:aq(rq.columnStartTime)},{key:"duration",itemType:"ms",text:aq(rq.columnDuration)}],iq="ad",oq="bid",sq="unknown";function checkRecordType(e){
1169
+ return Z$(new tq(e.url))?iq:Q$(e.url)?oq:sq}function isPossibleBid(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&e.endTime-e.startTime>=.05&&!X$(e)}function clearQueryString(e){const t=new tq(e);return t.search="",t.toString()}class SerialHeaderBidding extends Y${static get meta(){return{id:"serial-header-bidding",title:aq(rq.title),failureTitle:aq(rq.failureTitle),description:aq(rq.description),requiredArtifacts:["devtoolsLogs","traces","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[Y$.DEFAULT_PASS],a=e.traces[Y$.DEFAULT_PASS],n=await H$.request(r,t);if(!n.length)return G$.NoRecords;const i=await W$.request({URL:e.URL,devtoolsLog:r},t),o=n.filter(isPossibleBid).filter((e=>e.frameId==i.frameId)),s=K$(o,checkRecordType);if(!s.has(oq))return G$.NoBids;const c={trace:a,devtoolsLog:r,settings:t.settings},{timing:l}=await z$.request(c,t),u=await J$(a,r,t),d=function constructRecords(e,t,r){const a=[];for(const n of e){const e=r.get(n)
1170
+ ;e&&a.push(Object.assign({},e,{url:n.url,type:t}))}return a}(s.get(oq)||[],oq,u);let m,p=[];for(const e of d)l>0&&e.endTime>l||(e.bidder=Q$(e.url),e.url=clearQueryString(e.url),m&&e.startTime>=m.endTime&&(p.push(m),p.push(e)),(!m||e.endTime<m.endTime||e.startTime>=m.endTime)&&(m=e));p=Array.from(new Set(p));const h=p.length>1;return{numericValue:Number(h),numericUnit:"unitless",score:h?0:1,details:h?SerialHeaderBidding.makeTableDetails(nq,p):void 0}}}q$.exports=SerialHeaderBidding,q$.exports.UIStrings=rq;var cq={exports:{}};const lq=AF,uq=Ew,dq=Ao,{getPageStartTime:mq,getTagEndTime:pq}=OF,{isImplTag:hq}=fF,{URL:gq}=Hn;class LanternTagLoadTime extends lq{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:lq.findNetworkTiming(r,(e=>!!e.url&&hq(new gq(e.url)))).endTime,nodeTimings:r}}}LanternTagLoadTime=dq(LanternTagLoadTime);class TagLoadTime$1 extends uq{static async computeSimulatedMetric(e,t){return LanternTagLoadTime.request(e,t)}
1171
+ static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=mq(r),n=1e3*(pq(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const fq=TagLoadTime$1=dq(TagLoadTime$1),yq=oi,{auditNotApplicable:vq,runWarning:bq}=jO.exports,{Audit:wq}=tU,Sq={title:"Tag load time",failureTitle:"Reduce tag load time",description:"This metric measures the time for the ad tag's implementation script (pubads_impl.js for GPT; adsbygoogle.js for AdSense) to load after the page loads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/tag-load-time).",displayValue:"{timeInMs, number, seconds} s"},Tq=yq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/tag-load-time.js",Sq);cq.exports=class TagLoadTime extends wq{static get meta(){return{id:"tag-load-time",title:Tq(Sq.title),failureTitle:Tq(Sq.failureTitle),description:Tq(Sq.description),
1172
+ scoreDisplayMode:wq.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[wq.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[wq.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await fq.request(r,t);if(!(n>0)){const e=vq.NoTag;return e.runWarnings=[bq.NoTag],e}return{numericValue:n,numericUnit:"millisecond",score:wq.computeLogNormalScore(a,n),displayValue:Tq(Sq.displayValue,{timeInMs:n})}}},cq.exports.UIStrings=Sq;var Eq={exports:{}};const xq=oi,{auditNotApplicable:_q,auditError:Aq}=jO.exports,{Audit:Rq}=tU,{isAdIframe:kq}=fF,Dq={title:"Ads to page-height ratio is within recommended range",failureTitle:"Reduce ads to page-height ratio",
1173
+ description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},Cq=xq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/viewport-ad-density.js",Dq);Eq.exports=class ViewportAdDensity extends Rq{static get meta(){return{id:"viewport-ad-density",title:Cq(Dq.title),failureTitle:Cq(Dq.failureTitle),description:Cq(Dq.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>kq(e)&&e.clientRect.width*e.clientRect.height>1));if(!r.length)return _q.NoVisibleSlots;if(t.innerHeight<=0)throw new Error(Aq.ViewportAreaZero);const a=function computeAdLength(e,t){
1174
+ const r=new Set([...e.map((e=>e.clientRect.left)),...e.map((e=>e.clientRect.right))].map((e=>Math.min(Math.max(1,e),t.innerWidth-1))));e=e.sort(((e,t)=>e.clientRect.top!==t.clientRect.top?e.clientRect.top-t.clientRect.top:e.clientRect.bottom-t.clientRect.bottom));let a=0;for(const t of r){let r=0,n=0;for(const a of e){if(t<a.clientRect.left||t>a.clientRect.right)continue;if(a.isPositionFixed){r+=a.clientRect.height;continue}const e=a.clientRect.bottom-Math.max(n,a.clientRect.top);e>0&&(r+=e),n=Math.max(n,a.clientRect.bottom)}a=Math.max(a,r)}return a}(r,t),n=Math.max(...r.map((e=>e.clientRect.top+e.clientRect.height/2)))+t.innerHeight,i=Math.min(1,a/n);return{score:i>.3?0:1,numericValue:i,numericUnit:"unitless",displayValue:Cq(Dq.displayValue,{adDensity:i})}}},Eq.exports.UIStrings=Dq;var Iq={exports:{}};const Nq=oi,{auditNotApplicable:Lq}=jO.exports,{Audit:Mq}=tU,{getScriptUrl:Pq}=OF,{isAdIframe:Oq,isAdRelated:Fq,isImplTag:Uq}=fF,{overlaps:jq,toClientRect:Bq}=xj,$q={
1175
+ title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},qq=Nq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift.js",$q);Iq.exports=class CumulativeAdShift extends Mq{static get meta(){return{id:"cumulative-ad-shift",title:qq($q.title),failureTitle:qq($q.failureTitle),description:qq($q.description),scoreDisplayMode:Mq.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","IFrameElements"]}}static get defaultOptions(){return{p10:.05,median:.25}}static isAdExpansion(e,t){if(!e.args||!e.args.data)return!1;for(const r of e.args.data.impacted_nodes||[]){const e=Bq(r.old_rect||[]),a=Bq(r.new_rect||[]);if(!(e.top>a.top||e.height!==a.height))for(const r of t){
1176
+ const t=r.clientRect;if((e.top>=t.top||a.top>=t.bottom)&&jq(e,t))return!0}}return!1}static isAttributableToTask(e,t){if(!e.args||!e.args.data)return!1;return!!t.find((t=>t.ts<e.ts&&e.ts-t.ts<5e4))}static compute(e,t,r,a){let n=0,i=0,o=0,s=0,c=0,l=0;for(const u of e)u.args&&u.args.data&&u.args.data.is_main_frame&&(n+=u.args.data.score,i++,(this.isAdExpansion(u,r)||this.isAttributableToTask(u,t))&&(o+=u.args.data.score,s++,u.ts<a&&(c+=u.args.data.score,l++)));return{cumulativeShift:n,numShifts:i,cumulativeAdShift:o,numAdShifts:s,cumulativePreImplTagAdShift:c,numPreImplTagAdShifts:l}}static getLayoutShiftEventsByWindow(e){let t=0,r=[],a=0,n=[];for(const i of e){if("LayoutShift"!==i.name||!i.args||!i.args.data)continue;if(n.length){const e=n[0],o=n[n.length-1];(o.ts-e.ts>5e6||i.ts-o.ts>1e6)&&(a>t&&(r=n,t=a),n=[],a=0)}n.push(i);const e=i.args.data;a+=e.weighted_score_delta||e.score||0}return r.length||(r=n),r}static async audit(e,t){
1177
+ const r=e.traces[Mq.DEFAULT_PASS],a=this.getLayoutShiftEventsByWindow(r.traceEvents);if(!a.length)return Lq.NoLayoutShifts;const n=r.traceEvents.filter((e=>Fq(Pq(e)||""))),i=n.find((e=>Uq(Pq(e)||"")))||{ts:1/0},o=e.IFrameElements.filter(Oq),s=this.compute(a,n,o,i.ts),c=s.cumulativeAdShift;return o.length||c?{numericValue:c,numericUnit:"unitless",score:Mq.computeLogNormalScore({p10:t.options.p10,median:t.options.median},c),displayValue:c.toLocaleString(t.settings.locale),details:s}:Lq.NoAdRendered}},Iq.exports.UIStrings=$q;var zq={exports:{}};const Vq=oi,Wq=Lo,{auditNotApplicable:Hq}=jO.exports,{Audit:Gq}=tU,{isGpt:Yq,isGptImplTag:Kq}=fF,Jq={title:"Deprecated GPT API Usage",failureTitle:"Avoid deprecated GPT APIs",description:"Deprecated GPT API methods should be avoided to ensure your page is tagged correctly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/deprecated-gpt-api-usage).",
1178
+ displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},Xq=Vq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/deprecated-api-usage.js",Jq);zq.exports=class DeprecatedApiUsage extends Gq{static get meta(){return{id:"deprecated-gpt-api-usage",title:Xq(Jq.title),failureTitle:Xq(Jq.failureTitle),description:Xq(Jq.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[Gq.DEFAULT_PASS];if(!(await Wq.request(r,t)).find((e=>Kq(e.url))))return Hq.NoGpt;const a=e.ConsoleMessages.filter((e=>"warning"===e.level||"error"===e.level)).filter((e=>e.url&&Yq(e.url))).filter((e=>e.text.toLowerCase().includes("deprecated")||e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:Xq(Vq.UIStrings.columnURL)},{
1179
+ key:"description",itemType:"code",text:Xq(Vq.UIStrings.columnDescription)}],i=Gq.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:Xq(Jq.displayValue,{numErrors:o})}}},zq.exports.UIStrings=Jq;var Zq={exports:{}};const Qq=oi,ez=Lo,{auditNotApplicable:tz}=jO.exports,{Audit:rz}=tU,{isGpt:az,isGptImplTag:nz}=fF,iz={title:"GPT Errors",failureTitle:"Fix GPT errors",description:"Fix GPT errors to ensure your page is tagged as intended. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-errors-overall).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},oz=Qq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/gpt-errors-overall.js",iz);Zq.exports=class GptErrorsOverall extends rz{static get meta(){return{id:"gpt-errors-overall",title:oz(iz.title),failureTitle:oz(iz.failureTitle),description:oz(iz.description),scoreDisplayMode:"informative",
1180
+ requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[rz.DEFAULT_PASS];if(!(await ez.request(r,t)).find((e=>nz(e.url))))return tz.NoGpt;const a=e.ConsoleMessages.filter((e=>"error"===e.level||"warning"===e.level)).filter((e=>e.url&&az(e.url))).filter((e=>!e.text.toLowerCase().includes("deprecated")&&!e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:oz(Qq.UIStrings.columnURL)},{key:"description",itemType:"code",text:oz(Qq.UIStrings.columnDescription)}],i=rz.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:oz(iz.displayValue,{numErrors:o})}}},Zq.exports.UIStrings=iz;var sz={exports:{}};const cz=oi,lz=eU,uz=Lo,{auditNotApplicable:dz}=jO.exports,{Audit:mz}=tU,{getAttributableUrl:pz}=VF,{isAdRelated:hz,getNameOrTld:gz}=fF,fz={
1181
+ title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnName:"Name",columnBlockingTime:"Blocking Time"},yz=cz.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time.js",fz),vz=[{key:"name",itemType:"text",text:yz(fz.columnName)},{key:"blockingTime",itemType:"ms",text:yz(fz.columnBlockingTime),granularity:1}];class TotalAdBlockingTime extends mz{static get meta(){return{id:"total-ad-blocking-time",title:yz(fz.title),failureTitle:yz(fz.failureTitle),description:yz(fz.description),requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{simulate:{p10:290,median:600},provided:{p10:150,median:350}}}static async audit(e,t){
1182
+ const r=e.traces[mz.DEFAULT_PASS],a=e.devtoolsLogs[mz.DEFAULT_PASS];if(!(await uz.request(a,t)).find((e=>hz(e.url))))return dz.NoAdRelatedReq;const n={trace:r,devtoolsLog:a,settings:t.settings};let i=[];try{i=await lz.request(n,t)}catch(e){return dz.InvalidTiming}let o=0;const s=new Map;for(const e of i){const t=pz(e);if(!t||!hz(t))continue;if(e.parent)continue;const r=e.duration-50;o+=r;const a=gz(t),n=s.get(a)||0;s.set(a,n+r)}const c=[];for(const[e,t]of s.entries())c.push({name:e,blockingTime:t});c.sort(((e,t)=>t.blockingTime-e.blockingTime));const l=t.options[t.settings.throttlingMethod]||t.options.provided;return{score:mz.computeLogNormalScore(l,o),numericValue:o,numericUnit:"millisecond",displayValue:yz(fz.failureDisplayValue,{timeInMs:o}),details:TotalAdBlockingTime.makeTableDetails(vz,c)}}}sz.exports=TotalAdBlockingTime,sz.exports.UIStrings=fz;const bz=bn,wz=la,Sz=mn,Tz=Tu,Ez=xu,xz=pu,_z=oi,Az=Su;function isBundledEnvironment(){
1183
+ if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return require.resolve("lighthouse-logger"),!1}catch(e){return!0}}const mergeOptionsOfItems=function(e){const t=[];for(const r of e){const e=r.path&&t.find((e=>e.path===r.path));e?e.options=Object.assign({},e.options,r.options):t.push(r)}return t};const Rz=function _mergeConfigFragment(e,t,r=!1){if(null==e)return t;if(void 0===t)return e;if(Array.isArray(t)){if(r)return t;if(!Array.isArray(e))throw new TypeError("Expected array but got "+typeof e);const a=e.slice();return t.forEach((e=>{a.some((t=>wz(t,e)))||a.push(e)})),a}if("object"==typeof t){if("object"!=typeof e)throw new TypeError("Expected object but got "+typeof e);if(Array.isArray(e))throw new TypeError("Expected object but got Array");return Object.keys(t).forEach((a=>{const n=r||"settings"===a&&"object"==typeof e[a];e[a]=_mergeConfigFragment(e[a],t[a],n)})),e}return t}
1184
+ ;const kz=new Map([["../gather/gatherers/accessibility",ku],["../gather/gatherers/anchor-elements",Lu],["../gather/gatherers/cache-contents",Pu],["../gather/gatherers/console-messages",Fu],["../gather/gatherers/css-usage",$u],["../gather/gatherers/devtools-log-compat",Vu],["../gather/gatherers/devtools-log",Ws],["../gather/gatherers/dobetterweb/doctype",Hu],["../gather/gatherers/dobetterweb/domstats",Ku],["../gather/gatherers/dobetterweb/optimized-images",nd],["../gather/gatherers/dobetterweb/password-inputs-with-prevented-paste",sd],["../gather/gatherers/dobetterweb/response-compression",gm],["../gather/gatherers/dobetterweb/tags-blocking-first-paint",bm],["../gather/gatherers/full-page-screenshot",_m],["../gather/gatherers/global-listeners",Rm],["../gather/gatherers/iframe-elements",Cm],["../gather/gatherers/image-elements",Fm],["../gather/gatherers/inputs",Bm],["../gather/gatherers/inspector-issues",Vm],["../gather/gatherers/installability-errors",$s],["../gather/gatherers/js-usage",Hm],["../gather/gatherers/link-elements",ip],["../gather/gatherers/main-document-content",dp],["../gather/gatherers/meta-elements",hp],["../gather/gatherers/network-user-agent",Ys],["../gather/gatherers/script-elements",Tp],["../gather/gatherers/seo/embedded-content",_p],["../gather/gatherers/seo/font-size",Im.exports],["../gather/gatherers/seo/robots-txt",Rp],["../gather/gatherers/seo/tap-targets",Lp],["../gather/gatherers/service-worker",Op],["../gather/gatherers/source-maps",jp],["../gather/gatherers/stacks",Xs],["../gather/gatherers/trace-compat",qp],["../gather/gatherers/trace-elements",hh],["../gather/gatherers/trace",oo],["../gather/gatherers/viewport-dimensions",fh],["../gather/gatherers/web-app-manifest",Us],["../audits/accessibility/accesskeys",yh.exports],["../audits/accessibility/aria-allowed-attr",_h.exports],["../audits/accessibility/aria-command-name",Dh.exports],["../audits/accessibility/aria-hidden-body",Lh.exports],["../audits/accessibility/aria-hidden-focus",Fh.exports],["../audits/accessibility/aria-input-field-name",$h.exports],["../audits/accessibility/aria-meter-name",Wh.exports],["../audits/accessibility/aria-progressbar-name",Kh.exports],["../audits/accessibility/aria-required-attr",Qh.exports],["../audits/accessibility/aria-required-children",ag.exports],["../audits/accessibility/aria-required-parent",sg.exports],["../audits/accessibility/aria-roles",dg.exports],["../audits/accessibility/aria-toggle-field-name",gg.exports],["../audits/accessibility/aria-tooltip-name",bg.exports],["../audits/accessibility/aria-treeitem-name",Eg.exports],["../audits/accessibility/aria-valid-attr-value",Rg.exports],["../audits/accessibility/aria-valid-attr",Ig.exports],["../audits/accessibility/button-name",Pg.exports],["../audits/accessibility/bypass",jg.exports],["../audits/accessibility/color-contrast",zg.exports],["../audits/accessibility/definition-list",Gg.exports],["../audits/accessibility/dlitem",Xg.exports],["../audits/accessibility/document-title",tf.exports],["../audits/accessibility/duplicate-id-active",of.exports],["../audits/accessibility/duplicate-id-aria",uf.exports],["../audits/accessibility/form-field-multiple-labels",hf.exports],["../audits/accessibility/frame-title",vf.exports],["../audits/accessibility/heading-order",Tf.exports],["../audits/accessibility/html-has-lang",Af.exports],["../audits/accessibility/html-lang-valid",Cf.exports],["../audits/accessibility/image-alt",Mf.exports],["../audits/accessibility/input-image-alt",Uf.exports],["../audits/accessibility/label",qf.exports],["../audits/accessibility/link-name",Hf.exports],["../audits/accessibility/list",Jf.exports],["../audits/accessibility/listitem",ey.exports],["../audits/accessibility/manual/custom-controls-labels",sy],["../audits/accessibility/manual/custom-controls-roles",ly],["../audits/accessibility/manual/focus-traps",dy],["../audits/accessibility/manual/focusable-controls",py],["../audits/accessibility/manual/interactive-element-affordance",gy],["../audits/accessibility/manual/logical-tab-order",yy],["../audits/accessibility/manual/managed-focus",by],["../audits/accessibility/manual/offscreen-content-hidden",Sy],["../audits/accessibility/manual/use-landmarks",Ey],["../audits/accessibility/manual/visual-order-follows-dom",_y],["../audits/accessibility/meta-refresh",Ay.exports],["../audits/accessibility/meta-viewport",Cy.exports],["../audits/accessibility/object-alt",My.exports],["../audits/accessibility/tabindex",Uy.exports],["../audits/accessibility/td-headers-attr",qy.exports],["../audits/accessibility/th-has-data-cells",Hy.exports],["../audits/accessibility/valid-lang",Jy.exports],["../audits/accessibility/video-caption",ev.exports],["../audits/apple-touch-icon",nv.exports],["../audits/autocomplete",cv.exports],["../audits/bootup-time",yv.exports],["../audits/byte-efficiency/duplicated-javascript",Bv.exports],["../audits/byte-efficiency/efficient-animated-content",Jb.exports],["../audits/byte-efficiency/legacy-javascript",rw.exports],["../audits/byte-efficiency/modern-image-formats",mw.exports],["../audits/byte-efficiency/offscreen-images",vw.exports],["../audits/byte-efficiency/render-blocking-resources",zw.exports],["../audits/byte-efficiency/total-byte-weight",dS.exports],["../audits/byte-efficiency/unminified-css",vS.exports],["../audits/byte-efficiency/unminified-javascript",kS.exports],["../audits/byte-efficiency/unused-css-rules",PS.exports],["../audits/byte-efficiency/unused-javascript",$S.exports],["../audits/byte-efficiency/uses-long-cache-ttl",QS.exports],["../audits/byte-efficiency/uses-optimized-images",lT.exports],["../audits/byte-efficiency/uses-responsive-images-snapshot",gT.exports],["../audits/byte-efficiency/uses-responsive-images",fT.exports],["../audits/byte-efficiency/uses-text-compression",LT.exports],["../audits/content-width",jT.exports],["../audits/critical-request-chains",zT.exports],["../audits/csp-xss",aE.exports],["../audits/deprecations",tx.exports],["../audits/diagnostics",fx],["../audits/dobetterweb/charset",yx.exports],["../audits/dobetterweb/doctype",_x.exports],["../audits/dobetterweb/dom-size",Dx.exports],["../audits/dobetterweb/geolocation-on-start",Mx.exports],["../audits/dobetterweb/inspector-issues",qx.exports],["../audits/dobetterweb/js-libraries",Hx.exports],["../audits/dobetterweb/no-document-write",Xx.exports],["../audits/dobetterweb/no-vulnerable-libraries",r_.exports],["../audits/dobetterweb/notification-on-start",p_.exports],["../audits/dobetterweb/password-inputs-can-be-pasted-into",v_.exports],["../audits/dobetterweb/uses-http2",E_.exports],["../audits/dobetterweb/uses-passive-event-listeners",U_.exports],["../audits/errors-in-console",z_.exports],["../audits/final-screenshot",rA],["../audits/font-display",aA.exports],["../audits/full-page-screenshot",gA],["../audits/image-aspect-ratio",fA.exports],["../audits/image-size-responsive",TA.exports],["../audits/installable-manifest",kA.exports],["../audits/is-on-https",UA.exports],["../audits/largest-contentful-paint-element",HA.exports],["../audits/layout-shift-elements",XA.exports],["../audits/lcp-lazy-loaded",rR.exports],["../audits/long-tasks",sR.exports],["../audits/main-thread-tasks",SR],["../audits/mainthread-work-breakdown",TR.exports],["../audits/manual/pwa-cross-browser",DR.exports],["../audits/manual/pwa-each-page-has-url",LR.exports],["../audits/manual/pwa-page-transitions",FR.exports],["../audits/maskable-icon",$R.exports],["../audits/metrics",UD],["../audits/metrics/cumulative-layout-shift",jD.exports],["../audits/metrics/experimental-interaction-to-next-paint",WD.exports],["../audits/metrics/first-contentful-paint-3g",eC],["../audits/metrics/first-contentful-paint",tC.exports],["../audits/metrics/first-meaningful-paint",sC.exports],["../audits/metrics/interactive",pC.exports],["../audits/metrics/largest-contentful-paint",bC.exports],["../audits/metrics/max-potential-fid",AC.exports],["../audits/metrics/speed-index",NC.exports],["../audits/metrics/total-blocking-time",UC.exports],["../audits/network-requests",YC],["../audits/network-rtt",KC.exports],["../audits/network-server-latency",rI.exports],["../audits/no-unload-listeners",lI.exports],["../audits/non-composited-animations",gI.exports],["../audits/oopif-iframe-test-audit",{
1188
1185
  meta:{id:"oopif-iframe-test-audit",title:"IFrame Elements",failureTitle:"IFrame Elements",description:"Audit to force the inclusion of IFrameElements artifact",requiredArtifacts:["IFrameElements"]},audit:()=>({score:1})
1189
- }],["../audits/performance-budget",yI.exports],["../audits/predictive-perf",BI],["../audits/preload-fonts",$I.exports],["../audits/preload-lcp-image",KI.exports],["../audits/redirects",iN.exports],["../audits/resource-summary",gN.exports],["../audits/screenshot-thumbnails",kN],["../audits/script-treemap-data",LN],["../audits/seo/canonical",MN.exports],["../audits/seo/crawlable-anchors",BN.exports],["../audits/seo/font-size",VN.exports],["../audits/seo/hreflang",tL.exports],["../audits/seo/http-status-code",lL.exports],["../audits/seo/is-crawlable",gL.exports],["../audits/seo/link-text",xL.exports],["../audits/seo/manual/structured-data",CL.exports],["../audits/seo/meta-description",ML.exports],["../audits/seo/plugins",UL.exports],["../audits/seo/robots-txt",YL.exports],["../audits/seo/tap-targets",oM.exports],["../audits/server-response-time",SM.exports],["../audits/service-worker",DM.exports],["../audits/splash-screen",MM.exports],["../audits/themed-omnibox",$M.exports],["../audits/third-party-facades",HM.exports],["../audits/third-party-summary",YM.exports],["../audits/timing-budget",hP.exports],["../audits/unsized-images",TP.exports],["../audits/user-timings",kP.exports],["../audits/uses-rel-preconnect",FP.exports],["../audits/uses-rel-preload",XP.exports],["../audits/valid-source-maps",lO.exports],["../audits/viewport",gO.exports],["../audits/work-during-interaction",wO.exports],["lighthouse-plugin-publisher-ads",MO.exports],["lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks",qO.exports],["lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources",lU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-critical-path",wU.exports],["lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start",qU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start",aj.exports],["lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport",dj.exports],["lighthouse-plugin-publisher-ads/audits/ads-in-viewport",bj.exports],["lighthouse-plugin-publisher-ads/audits/async-ad-tags",Dj.exports],["lighthouse-plugin-publisher-ads/audits/blocking-load-events",qj.exports],["lighthouse-plugin-publisher-ads/audits/bottleneck-requests",nB.exports],["lighthouse-plugin-publisher-ads/audits/duplicate-tags",hB.exports],["lighthouse-plugin-publisher-ads/audits/first-ad-render",RB.exports],["lighthouse-plugin-publisher-ads/audits/full-width-slots",$B.exports],["lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel",JB.exports],["lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source",c$.exports],["lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https",y$.exports],["lighthouse-plugin-publisher-ads/audits/script-injected-tags",A$.exports],["lighthouse-plugin-publisher-ads/audits/serial-header-bidding",U$.exports],["lighthouse-plugin-publisher-ads/audits/tag-load-time",nq.exports],["lighthouse-plugin-publisher-ads/audits/viewport-ad-density",bq.exports],["lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift",Rq.exports],["lighthouse-plugin-publisher-ads/audits/deprecated-api-usage",jq.exports],["lighthouse-plugin-publisher-ads/audits/gpt-errors-overall",Yq.exports],["lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time",az.exports]])
1190
- ;function requireWrapper(e){return xz.get(e)||function commonjsRequire(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(e)}function resolveModulePath(e,t,r){try{return require.resolve(e)}catch(e){}try{return require.resolve(e,{paths:[process.cwd()]})}catch(e){}const a=gz.resolve(process.cwd(),e);try{return require.resolve(a)}catch(e){}const n="Unable to locate "+(r?`${r}: `:"")+`\`${e}\`.\n Tried to require() from these locations:\n lighthouse-core/config\n ${a}`;if(!t)throw new Error(n);const i=gz.resolve(t,e);try{return require.resolve(i)}catch(e){}try{return require.resolve(e,{paths:[t]})}catch(e){}throw new Error(n+`\n ${i}`)}function shallowClone(e){return"object"==typeof e?Object.assign(Object.create(Object.getPrototypeOf(e)),e):e}function deepClone$2(e){return JSON.parse(JSON.stringify(e))}
1191
- var _z={deepClone:deepClone$2,deepCloneConfigJson:function deepCloneConfigJson$2(e){const t=deepClone$2(e);if(Array.isArray(t.passes)&&Array.isArray(e.passes))for(let r=0;r<t.passes.length;r++){t.passes[r].gatherers=(e.passes[r].gatherers||[]).map((e=>shallowClone(e)))}return Array.isArray(e.audits)&&(t.audits=e.audits.map((e=>shallowClone(e)))),Array.isArray(e.artifacts)&&(t.artifacts=e.artifacts.map((e=>({...e,gatherer:shallowClone(e.gatherer)})))),t},mergeConfigFragment:Ez,mergeConfigFragmentArrayByKey:function mergeConfigFragmentArrayByKey$1(e,t,r){const a=new Map,n=e||[];for(let e=0;e<n.length;e++){const t=n[e];a.set(r(t),{index:e,item:t})}for(const e of t||[]){const t=a.get(r(e));if(t){const r=t.item,a="object"==typeof e&&"object"==typeof r?Ez(r,e,!0):e;n[t.index]=a}else n.push(e)}return n},mergeOptionsOfItems,mergePlugins:function mergePlugins$2(e,t,r){const a=e.plugins||[],n=new Set([...a,...r?.plugins||[]]);for(const r of n){Tz.assertValidPluginName(e,r)
1192
- ;const a=requireWrapper(isBundledEnvironment()?r:resolveModulePath(r,t,"plugin")),n=bz.parsePlugin(a,r);e=Ez(e,n)}return e},resolveAuditsToDefns:function resolveAuditsToDefns$2(e,t){if(!e)return null;const r=wz.getAuditList(),a=e.map((e=>{const a=function expandAuditShorthand(e){if("string"==typeof e)return{path:e,options:{}};if("implementation"in e&&"function"==typeof e.implementation.audit)return e;if("path"in e&&"string"==typeof e.path)return e;if("audit"in e&&"function"==typeof e.audit)return{implementation:e,options:{}};throw new Error("Invalid Audit type "+JSON.stringify(e))}(e);let n;return n="implementation"in a?a.implementation:function requireAudit(e,t,r){const a=`${e}.js`;let n=`../audits/${e}`;if(!t.find((e=>e===a)))if(isBundledEnvironment())n=e;else{const t=resolveModulePath(e,r,"audit");n=gz.relative("lighthouse-core/config",t)}return requireWrapper(n)}(a.path,r,t),{implementation:n,path:a.path,options:a.options||{}}})),n=mergeOptionsOfItems(a)
1193
- ;return n.forEach((e=>Tz.assertValidAudit(e))),n},resolveGathererToDefn:function resolveGathererToDefn$2(e,t,r){const a=function expandGathererShorthand(e){if("string"==typeof e)return{path:e};if("implementation"in e||"instance"in e)return e;if("path"in e){if("string"!=typeof e.path)throw new Error("Invalid Gatherer type "+JSON.stringify(e));return e}if("function"==typeof e)return{implementation:e};if(e&&"function"==typeof e.beforePass)return{instance:e};throw new Error("Invalid Gatherer type "+JSON.stringify(e))}(e);if(a.instance)return{instance:a.instance,implementation:a.implementation,path:a.path};if(a.implementation){return{instance:new(0,a.implementation),implementation:a.implementation,path:a.path}}if(a.path){return function requireGatherer(e,t,r){const a=t.find((t=>t===`${e}.js`));let n=`../gather/gatherers/${e}`;a||(n=resolveModulePath(e,r,"gatherer"));const i=requireWrapper(n);return{instance:new i,implementation:i,path:e}}(a.path,t,r)}
1194
- throw new Error("Invalid expanded Gatherer: "+JSON.stringify(a))},resolveModulePath,resolveSettings:function resolveSettings$2(e={},t){const r=Sz.lookupLocale(t?.locale||e.locale),{defaultSettings:a}=yz,n=Ez(deepClone$2(a),e,!0),i=Ez(n,function cleanFlagsForSettings(e={}){const t={};for(const r of Object.keys(e))r in yz.defaultSettings&&(t[r]=e[r]);return t}(t),!0);return i.budgets&&(i.budgets=vz.initializeBudget(i.budgets)),i.locale=r,!0===i.emulatedUserAgent&&(i.emulatedUserAgent=yz.userAgents[i.formFactor]),Tz.assertValidSettings(i),i}};const Az=gu.exports,Rz=mn,kz=Vn,Dz=Su,Cz=on.default,Iz=bn,Nz=pu,{mergePlugins:Lz,mergeConfigFragment:Mz,resolveSettings:Pz,resolveAuditsToDefns:Oz,resolveGathererToDefn:Fz,deepClone:Uz,deepCloneConfigJson:jz}=_z,Bz=Object.keys({fetchTime:"",LighthouseRunWarnings:"",HostFormFactor:"",HostUserAgent:"",NetworkUserAgent:"",BenchmarkIndex:"",WebAppManifest:"",GatherContext:"",InstallabilityErrors:"",Stacks:"",traces:"",devtoolsLogs:"",settings:"",URL:"",
1195
- Timing:"",PageLoadError:""});class Config$1{constructor(e,t){const r={msg:"Create config",id:"lh:init:config"};Cz.time(r,"verbose");let a=t?.configPath;if(e||(e=Az,a=Iz.resolve("lighthouse-core/config","./default-config.js")),a&&!Iz.isAbsolute(a))throw new Error("configPath must be an absolute path.");if((e=jz(e)).extends){if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");e=Config$1.extendConfigJSON(jz(Az),e)}const n=a?Iz.dirname(a):void 0;e=Lz(e,n,t),t&&function assertValidFlags(e){if("devtools"===e.channel&&e.internalDisableDeviceScreenEmulation&&(e.formFactor=e.emulatedFormFactor,e.emulatedFormFactor=e.internalDisableDeviceScreenEmulation=void 0),e.emulatedFormFactor||e.internalDisableDeviceScreenEmulation)throw new Error("Invalid emulation flag. Emulation configuration changed in LH 7.0. See https://github.com/GoogleChrome/lighthouse/blob/master/docs/emulation.md")}(t)
1196
- ;const i=Pz(e.settings||{},t),o=Config$1.augmentPassesWithDefaults(e.passes);Config$1.adjustDefaultPassForThrottling(i,o);const s=Config$1.requireGatherers(o,n);this.settings=i,this.passes=s,this.audits=Config$1.requireAudits(e.audits,n),this.categories=e.categories||null,this.groups=e.groups||null,Config$1.filterConfigIfNeeded(this),function assertValidPasses(e,t){if(!Array.isArray(e))return;const r=Config$1.getGatherersRequestedByAudits(t),a=new Set(Bz);e.forEach(((e,t)=>{0===t&&"fatal"!==e.loadFailureMode&&(Cz.warn(`"${e.passName}" is the first pass but was marked as non-fatal. The first pass will always be treated as loadFailureMode=fatal.`),e.loadFailureMode="fatal"),e.gatherers.forEach((e=>{const t=e.instance;if(a.add(t.name),!r.has(t.name)){const e=`${t.name} gatherer requested, however no audit requires it.`;Cz.warn("config",e)}}))}));for(const e of t||[]){const t=e.implementation.meta
1197
- ;for(const e of t.requiredArtifacts)if(!a.has(e))throw new Error(`${e} gatherer, required by audit ${t.id}, was not found in config.`)}const n=new Set;e.forEach((e=>{const t=e.passName;if(n.has(t))throw new Error(`Passes must have unique names (repeated passName: ${t}.`);n.add(t)}))}(this.passes,this.audits),Dz.assertValidCategories(this.categories,this.audits,this.groups),Cz.timeEnd(r)}getPrintString(){const e=Uz(this);if(e.passes)for(const t of e.passes)for(const e of t.gatherers)e.implementation=void 0,e.instance=void 0;if(e.audits)for(const t of e.audits)t.implementation=void 0,0===Object.keys(t.options).length&&(t.options=void 0);return kz.replaceIcuMessages(e,e.settings.locale),JSON.stringify(e,null,2)}static extendConfigJSON(e,t){if(t.passes&&e.passes){for(const r of t.passes){const t=r.passName||Rz.defaultPassConfig.passName,a=e.passes.find((e=>e.passName===t));a?Mz(a,r):e.passes.push(r)}delete t.passes}return Mz(e,t)}static augmentPassesWithDefaults(e){if(!e)return null
1198
- ;const{defaultPassConfig:t}=Rz;return e.map((e=>Mz(Uz(t),e)))}static adjustDefaultPassForThrottling(e,t){if(!t||"devtools"!==e.throttlingMethod&&"provided"!==e.throttlingMethod)return;const r=t.find((e=>"defaultPass"===e.passName));if(!r)return;const a=Rz.nonSimulatedPassConfigOverrides;r.pauseAfterFcpMs=Math.max(a.pauseAfterFcpMs,r.pauseAfterFcpMs),r.pauseAfterLoadMs=Math.max(a.pauseAfterLoadMs,r.pauseAfterLoadMs),r.cpuQuietThresholdMs=Math.max(a.cpuQuietThresholdMs,r.cpuQuietThresholdMs),r.networkQuietThresholdMs=Math.max(a.networkQuietThresholdMs,r.networkQuietThresholdMs)}static filterConfigIfNeeded(e){const t=e.settings;if(!t.onlyCategories&&!t.onlyAudits&&!t.skipAudits)return;const{categories:r,requestedAuditNames:a}=Config$1.filterCategoriesAndAudits(e.categories,t),n=e.audits&&e.audits.filter((e=>a.has(e.implementation.meta.id))),i=Config$1.getGatherersRequestedByAudits(n),o=Config$1.generatePassesNeededByGatherers(e.passes,i);e.categories=r,e.audits=n,e.passes=o}
1199
- static filterCategoriesAndAudits(e,t){if(!e)return{categories:null,requestedAuditNames:new Set};if(t.onlyAudits&&t.skipAudits)throw new Error("Cannot set both skipAudits and onlyAudits");const r={},a=!!t.onlyCategories,n=!!t.onlyAudits,i=t.onlyCategories||[],o=t.onlyAudits||[],s=t.skipAudits||[];i.forEach((t=>{e[t]||Cz.warn("config",`unrecognized category in 'onlyCategories': ${t}`)}));const c=new Set(o.concat(s));for(const t of c){const r=Object.keys(e).find((r=>!!e[r].auditRefs.find((e=>e.id===t))));if(r)o.includes(t)&&i.includes(r)&&Cz.warn("config",`${t} in 'onlyAudits' is already included by ${r} in 'onlyCategories'`);else{const e=s.includes(t)?"skipAudits":"onlyAudits";Cz.warn("config",`unrecognized audit in '${e}': ${t}`)}}const l=new Set(o);s.forEach((e=>l.delete(e))),Object.keys(e).forEach((t=>{const c=Uz(e[t]);if(a&&n)i.includes(t)||(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));else if(a){if(!i.includes(t))return
1200
- }else n&&(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));c.auditRefs=c.auditRefs.filter((e=>!s.includes(e.id))),c.auditRefs.length&&(r[t]=c,c.auditRefs.forEach((e=>l.add(e.id))))}));return t.skipAudits&&t.skipAudits.includes("full-page-screenshot")||!t.onlyCategories&&!t.skipAudits||l.add("full-page-screenshot"),{categories:r,requestedAuditNames:l}}static getGatherersRequestedByAudits(e){if(!e)return new Set;const t=new Set;for(const r of e){const{requiredArtifacts:e,__internalOptionalArtifacts:a}=r.implementation.meta;e.forEach((e=>t.add(e))),a&&a.forEach((e=>t.add(e)))}return t}static generatePassesNeededByGatherers(e,t){if(!e)return null;const r=t.has("traces");return e.map((e=>{if(e.gatherers=e.gatherers.filter((e=>{const r=e.instance;return t.has(r.name)})),e.recordTrace&&!r){const t=e.passName||"unknown pass";Cz.warn("config",`Trace not requested by an audit, dropping trace in ${t}`),e.recordTrace=!1}return e
1201
- })).filter((e=>!!e.recordTrace||("defaultPass"===e.passName||e.gatherers.length>0)))}static requireAudits(e,t){const r={msg:"Requiring audits",id:"lh:config:requireAudits"};Cz.time(r,"verbose");const a=Oz(e,t);return Cz.timeEnd(r),a}static requireGatherers(e,t){if(!e)return null;const r={msg:"Requiring gatherers",id:"lh:config:requireGatherers"};Cz.time(r,"verbose");const a=Nz.getGathererList(),n=e.map((e=>{const r=e.gatherers.map((e=>Fz(e,a,t))),n=Array.from(new Map(r.map((e=>[e.instance.name,e]))).values());return n.forEach((e=>function assertValidGatherer(e,t){if(t=t||e.name||"gatherer","function"!=typeof e.beforePass)throw new Error(`${t} has no beforePass() method.`);if("function"!=typeof e.pass)throw new Error(`${t} has no pass() method.`);if("function"!=typeof e.afterPass)throw new Error(`${t} has no afterPass() method.`)}(e.instance,e.path))),Object.assign(e,{gatherers:n})}));return Cz.timeEnd(r),n}}var $z=Config$1;var qz=class Gatherer{get name(){return this.constructor.name}
1202
- beforePass(e){}pass(e){}afterPass(e,t){}};const zz=pu,Vz=on.default,Wz=hu,Gz=$z,Hz=ji;async function lighthouse(e,t={},r,a){t.logLevel=t.logLevel||"error",Vz.setLevel(t.logLevel);const n={config:generateConfig(r,t),computedCache:new Map},i=a||new Wz(t.port,t.hostname),o=await zz.gather((()=>{const t=Hz.normalizeUrl(e);return zz._gatherArtifactsFromBrowser(t,n,i)}),n);return zz.audit(o,n)}function generateConfig(e,t){return new Gz(e,t)}lighthouse.generateConfig=generateConfig,lighthouse.getAuditList=zz.getAuditList,lighthouse.traceCategories=To.traceCategories,lighthouse.Audit=kc,lighthouse.Gatherer=qz,lighthouse.NetworkRecords=Lo;var Yz=lighthouse;const Kz=vi.exports,Jz=Symbol("monkeypatch");class ProtocolSession$1{constructor(e){this._session=e,this._targetInfo=void 0,this._nextProtocolTimeout=void 0,this._callbackMap=new WeakMap;const t=e.emit;t[Jz]||(e.emit=(r,...a)=>{const n=this._targetInfo&&"iframe"===this._targetInfo.type?this._targetInfo.targetId:void 0;return t.call(e,"*",{
1203
- method:r,params:a[0],sessionId:n}),t.call(e,r,...a)},e.emit[Jz]=!0)}setTargetInfo(e){this._targetInfo=e}hasNextProtocolTimeout(){return void 0!==this._nextProtocolTimeout}getNextProtocolTimeout(){return this._nextProtocolTimeout||3e4}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}on(e,t){this._session.on(e,t)}once(e,t){this._session.once(e,t)}addSessionAttachedListener(e){const listener=t=>e(new ProtocolSession$1(t));this._callbackMap.set(e,listener),this._getConnection().on("sessionattached",listener)}removeSessionAttachedListener(e){const t=this._callbackMap.get(e);t&&this._getConnection().off("sessionattached",t)}addProtocolMessageListener(e){this._session.on("*",e)}removeProtocolMessageListener(e){this._session.off("*",e)}off(e,t){this._session.off(e,t)}sendCommand(e,...t){const r=this.getNextProtocolTimeout();let a;this._nextProtocolTimeout=void 0;const n=new Promise(((t,n)=>{r!==1/0&&(a=setTimeout(n,r,new Kz(Kz.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))
1204
- })),i=this._session.send(e,...t);return Promise.race([i,n]).finally((()=>{a&&clearTimeout(a)}))}async dispose(){this._session.removeAllListeners(),await this._session.detach()}_getConnection(){const e=this._session.connection();if(!e)throw new Error("Connection has been closed.");return e}}var Xz=ProtocolSession$1;const Zz=on.default,Qz=Xz,eV=yi,tV=gi,throwNotConnectedFn=()=>{throw new Error("Session not connected")},rV={setTargetInfo:throwNotConnectedFn,hasNextProtocolTimeout:throwNotConnectedFn,getNextProtocolTimeout:throwNotConnectedFn,setNextProtocolTimeout:throwNotConnectedFn,on:throwNotConnectedFn,once:throwNotConnectedFn,off:throwNotConnectedFn,addProtocolMessageListener:throwNotConnectedFn,removeProtocolMessageListener:throwNotConnectedFn,addSessionAttachedListener:throwNotConnectedFn,removeSessionAttachedListener:throwNotConnectedFn,sendCommand:throwNotConnectedFn,dispose:throwNotConnectedFn};var aV=class Driver$3{constructor(e){this._page=e,this._session=void 0,
1205
- this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=rV}get executionContext(){return this._executionContext?this._executionContext:throwNotConnectedFn()}get fetcher(){return this._fetcher?this._fetcher:throwNotConnectedFn()}async url(){return this._page.url()}async connect(){if(this._session)return;const e={msg:"Connecting to browser",id:"lh:driver:connect"};Zz.time(e);const t=await this._page.target().createCDPSession();this._session=this.defaultSession=new Qz(t),this._executionContext=new eV(this._session),this._fetcher=new tV(this._session,this._executionContext),Zz.timeEnd(e)}async disconnect(){this._session&&await this._session.dispose()}};const nV=on.default;function createDependencyError(e,t){return new Error(`Dependency "${e.id}" failed with exception: ${t.message}`)}const iV={startInstrumentation:void 0,startSensitiveInstrumentation:"startInstrumentation",stopSensitiveInstrumentation:"startSensitiveInstrumentation",
1206
- stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};async function collectArtifactDependencies(e,t){if(!e.dependencies)return{};const r=Object.entries(e.dependencies).map((async([e,r])=>{const a=t[r.id];if(void 0===a)throw new Error(`"${r.id}" did not run`);if(a instanceof Error)throw createDependencyError(r,a);const n=Promise.resolve().then((()=>a)).catch((e=>Promise.reject(createDependencyError(r,e))));return[e,await n]}));return Object.fromEntries(await Promise.all(r))}var oV={getEmptyArtifactState:function getEmptyArtifactState$3(){return{startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}}},awaitArtifacts:async function awaitArtifacts$3(e){const t={};for(const[r,a]of Object.entries(e.getArtifact)){const e=await a.catch((e=>e));void 0!==e&&(t[r]=e)}return t},collectPhaseArtifacts:async function collectPhaseArtifacts$3(e){
1207
- const{driver:t,artifactDefinitions:r,artifactState:a,baseArtifacts:n,phase:i,gatherMode:o,computedCache:s,settings:c,url:l}=e,u=iV[i],d=u&&a[u]||{};for(const e of r){nV["getArtifact"===i?"log":"verbose"](`artifacts:${i}`,e.id);const r=e.gatherer.instance,u=(d[e.id]||Promise.resolve()).then((async()=>{const u="getArtifact"===i?await collectArtifactDependencies(e,a.getArtifact):{};return r[i]({url:l,gatherMode:o,driver:t,baseArtifacts:n,dependencies:u,computedCache:s,settings:c})}));await u.catch((()=>{})),a[i][e.id]=u}},collectArtifactDependencies};const sV=gu.exports,cV=yu,{deepClone:lV}=_z,uV={performance:[{id:"uses-responsive-images-snapshot",weight:0},{id:"experimental-interaction-to-next-paint",weight:0,group:"metrics",acronym:"INP",relevantAudits:cV.inpRelevantAudits},{id:"work-during-interaction",weight:0}]};const dV={DevtoolsLog:"",Trace:"",Accessibility:"",AnchorElements:"",CacheContents:"",ConsoleMessages:"",CSSUsage:"",Doctype:"",DOMStats:"",EmbeddedContent:"",FontSize:"",
1208
- Inputs:"",FullPageScreenshot:"",GlobalListeners:"",IFrameElements:"",ImageElements:"",InstallabilityErrors:"",InspectorIssues:"",JsUsage:"",LinkElements:"",MainDocumentContent:"",MetaElements:"",NetworkUserAgent:"",OptimizedImages:"",PasswordInputsWithPreventedPaste:"",ResponseCompression:"",RobotsTxt:"",ServiceWorker:"",ScriptElements:"",SourceMaps:"",Stacks:"",TagsBlockingFirstPaint:"",TapTargets:"",TraceElements:"",ViewportDimensions:"",WebAppManifest:"",devtoolsLogs:"",traces:""};for(const e of Object.keys(dV))dV[e]=e;var mV={artifacts:[{id:dV.DevtoolsLog,gatherer:"devtools-log"},{id:dV.Trace,gatherer:"trace"},{id:dV.Accessibility,gatherer:"accessibility"},{id:dV.AnchorElements,gatherer:"anchor-elements"},{id:dV.CacheContents,gatherer:"cache-contents"},{id:dV.ConsoleMessages,gatherer:"console-messages"},{id:dV.CSSUsage,gatherer:"css-usage"},{id:dV.Doctype,gatherer:"dobetterweb/doctype"},{id:dV.DOMStats,gatherer:"dobetterweb/domstats"},{id:dV.EmbeddedContent,
1209
- gatherer:"seo/embedded-content"},{id:dV.FontSize,gatherer:"seo/font-size"},{id:dV.Inputs,gatherer:"inputs"},{id:dV.GlobalListeners,gatherer:"global-listeners"},{id:dV.IFrameElements,gatherer:"iframe-elements"},{id:dV.ImageElements,gatherer:"image-elements"},{id:dV.InstallabilityErrors,gatherer:"installability-errors"},{id:dV.InspectorIssues,gatherer:"inspector-issues"},{id:dV.JsUsage,gatherer:"js-usage"},{id:dV.LinkElements,gatherer:"link-elements"},{id:dV.MainDocumentContent,gatherer:"main-document-content"},{id:dV.MetaElements,gatherer:"meta-elements"},{id:dV.NetworkUserAgent,gatherer:"network-user-agent"},{id:dV.OptimizedImages,gatherer:"dobetterweb/optimized-images"},{id:dV.PasswordInputsWithPreventedPaste,gatherer:"dobetterweb/password-inputs-with-prevented-paste"},{id:dV.ResponseCompression,gatherer:"dobetterweb/response-compression"},{id:dV.RobotsTxt,gatherer:"seo/robots-txt"},{id:dV.ServiceWorker,gatherer:"service-worker"},{id:dV.ScriptElements,gatherer:"script-elements"},{
1210
- id:dV.SourceMaps,gatherer:"source-maps"},{id:dV.Stacks,gatherer:"stacks"},{id:dV.TagsBlockingFirstPaint,gatherer:"dobetterweb/tags-blocking-first-paint"},{id:dV.TapTargets,gatherer:"seo/tap-targets"},{id:dV.TraceElements,gatherer:"trace-elements"},{id:dV.ViewportDimensions,gatherer:"viewport-dimensions"},{id:dV.WebAppManifest,gatherer:"web-app-manifest"},{id:dV.devtoolsLogs,gatherer:"devtools-log-compat"},{id:dV.traces,gatherer:"trace-compat"},{id:dV.FullPageScreenshot,gatherer:"full-page-screenshot"}],navigations:[{id:"default",pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,cpuQuietThresholdMs:1e3,
1211
- artifacts:[dV.DevtoolsLog,dV.Trace,dV.Accessibility,dV.AnchorElements,dV.CacheContents,dV.ConsoleMessages,dV.CSSUsage,dV.Doctype,dV.DOMStats,dV.EmbeddedContent,dV.FontSize,dV.Inputs,dV.GlobalListeners,dV.IFrameElements,dV.ImageElements,dV.InstallabilityErrors,dV.InspectorIssues,dV.JsUsage,dV.LinkElements,dV.MainDocumentContent,dV.MetaElements,dV.NetworkUserAgent,dV.OptimizedImages,dV.PasswordInputsWithPreventedPaste,dV.ResponseCompression,dV.RobotsTxt,dV.ServiceWorker,dV.ScriptElements,dV.SourceMaps,dV.Stacks,dV.TagsBlockingFirstPaint,dV.TapTargets,dV.TraceElements,dV.ViewportDimensions,dV.WebAppManifest,dV.devtoolsLogs,dV.traces,dV.FullPageScreenshot]}],settings:sV.settings,audits:[...(sV.audits||[]).map((e=>"string"==typeof e?{path:e}:e)),"byte-efficiency/uses-responsive-images-snapshot","metrics/experimental-interaction-to-next-paint","work-during-interaction"],categories:function mergeCategories(){if(!sV.categories)return{};const e=lV(sV.categories)
1212
- ;for(const t of Object.keys(uV))e[t]&&e[t].auditRefs.push(...uV[t]);return e}(),groups:sV.groups};const pV=on.default,hV=kc,gV=Object.keys({fetchTime:"",LighthouseRunWarnings:"",BenchmarkIndex:"",settings:"",Timing:"",URL:"",PageLoadError:"",HostFormFactor:"",HostUserAgent:"",GatherContext:""}),fV=["full-page-screenshot"],yV=["HostUserAgent","HostFormFactor","Stacks","GatherContext"];function getAuditIdsInCategories(e,t){if(!e)return new Set;const r=(t=t||Object.keys(e)).map((t=>e[t])).flatMap((e=>e?.auditRefs||[]));return new Set(r.map((e=>e.id)))}function filterArtifactsByAvailableAudits(e,t){if(!e)return null;if(!t)return e;const r=new Map(e.map((e=>[e.id,e]))),a=new Set([...yV,...t.flatMap((e=>e.implementation.meta.requiredArtifacts))]);let n=0;for(;n!==a.size;){n=a.size;for(const e of a){const t=r.get(e);if(t&&t.dependencies)for(const e of Object.values(t.dependencies))a.add(e.id)}}return e.filter((e=>a.has(e.id)))}function filterArtifactsByGatherMode(e,t){
1213
- return e?e.filter((e=>e.gatherer.instance.meta.supportedModes.includes(t))):null}function filterNavigationsByAvailableArtifacts(e,t){if(!e)return e;const r=new Set(t.map((e=>e.id)).concat(gV));return e.map((e=>({...e,artifacts:e.artifacts.filter((e=>r.has(e.id)))}))).filter((e=>e.artifacts.length))}function filterAuditsByAvailableArtifacts(e,t){if(!e)return null;const r=new Set(t.map((e=>e.id)).concat(gV));return e.filter((e=>e.implementation.meta.requiredArtifacts.every((e=>r.has(e)))))}function filterAuditsByGatherMode(e,t){return e?e.filter((e=>{const r=e.implementation.meta;return!r.supportedModes||r.supportedModes.includes(t)})):null}function filterCategoriesByGatherMode(e,t){if(!e)return null;const r=Object.entries(e).filter((([e,r])=>!r.supportedModes||r.supportedModes.includes(t)));return Object.fromEntries(r)}function filterCategoriesByExplicitFilters(e,t){if(!e||!t)return e;const r=Object.entries(e).filter((([e])=>t.includes(e)));return Object.fromEntries(r)}
1214
- function filterCategoriesByAvailableAudits(e,t){if(!e)return e;const r=new Map(t.map((e=>[e.implementation.meta.id,e.implementation.meta]))),a=Object.entries(e).map((([e,t])=>{const a={...t,auditRefs:t.auditRefs.filter((e=>r.has(e.id)))},n=a.auditRefs.length<t.auditRefs.length,i=a.auditRefs.every((e=>{const t=r.get(e.id);return!!t&&t.scoreDisplayMode===hV.SCORING_MODES.MANUAL}));return n&&i&&(a.auditRefs=[]),[e,a]})).filter((e=>"object"==typeof e[1]&&e[1].auditRefs.length));return Object.fromEntries(a)}var vV={filterConfigByGatherMode:function filterConfigByGatherMode$1(e,t){const r=filterArtifactsByGatherMode(e.artifacts,t),a=filterAuditsByAvailableArtifacts(filterAuditsByGatherMode(e.audits,t),r||[]),n=filterCategoriesByAvailableAudits(filterCategoriesByGatherMode(e.categories,t),a||[]);return{...e,artifacts:r,audits:a,categories:n}},filterConfigByExplicitFilters:function filterConfigByExplicitFilters$1(e,t){const{onlyAudits:r,onlyCategories:a,skipAudits:n}=t
1215
- ;!function warnOnUnknownOnlyCategories(e,t){if(t)for(const r of t)e?.[r]||pV.warn("config",`unrecognized category in 'onlyCategories': ${r}`)}(e.categories,a);let i=getAuditIdsInCategories(e.categories,void 0);a?i=getAuditIdsInCategories(e.categories,a):r&&(i=new Set);const o=new Set([...i,...r||[],...fV].filter((e=>!n||!n.includes(e)))),s=o.size&&e.audits?e.audits.filter((e=>o.has(e.implementation.meta.id))):e.audits,c=filterCategoriesByExplicitFilters(filterCategoriesByAvailableAudits(e.categories,s||[]),a),l=filterArtifactsByAvailableAudits(e.artifacts,s),u=filterNavigationsByAvailableArtifacts(e.navigations,l||[]);return{...e,artifacts:l,navigations:u,audits:s,categories:c}},filterArtifactsByGatherMode,filterArtifactsByAvailableAudits,filterNavigationsByAvailableArtifacts,filterAuditsByAvailableArtifacts,filterAuditsByGatherMode,filterCategoriesByAvailableAudits,filterCategoriesByExplicitFilters,filterCategoriesByGatherMode}
1216
- ;const bV=bn,wV=on.default,SV=pu,TV=mV,{defaultNavigationConfig:EV,nonSimulatedPassConfigOverrides:xV}=mn,{isFRGathererDefn:_V,throwInvalidDependencyOrder:AV,isValidArtifactDependency:RV,throwInvalidArtifactDependency:kV,assertArtifactTopologicalOrder:DV,assertValidConfig:CV}=Su,{filterConfigByGatherMode:IV,filterConfigByExplicitFilters:NV}=vV,{deepCloneConfigJson:LV,resolveSettings:MV,resolveAuditsToDefns:PV,resolveGathererToDefn:OV,mergePlugins:FV,mergeConfigFragment:UV,mergeConfigFragmentArrayByKey:jV}=_z,BV=bV.join("lighthouse-core/fraggle-rock/config","./default-config.js");function resolveWorkingCopy(e,t){let{configPath:r}=t;if(r&&!bV.isAbsolute(r))throw new Error("configPath must be an absolute path");e||(e=TV,r=BV);const a=r?bV.dirname(r):void 0;return{configWorkingCopy:LV(e),configPath:r,configDir:a}}function resolveArtifactDependencies(e,t,r){if(!("dependencies"in t.instance.meta))return;const a=Object.entries(t.instance.meta.dependencies).map((([a,n])=>{const i=r.get(n)
1217
- ;i||AV(e.id,a);return RV(t,i.gatherer)||kV(e.id,a),[a,{id:i.id}]}));return Object.fromEntries(a)}function resolveNavigationsToDefns(e,t,r){if(!e)return null;if(!t)throw new Error("Cannot use navigations without defining artifacts");const a={msg:"Resolve navigation definitions",id:"lh:config:resolveNavigationsToDefns"};wV.time(a,"verbose");const n=new Map(t.map((e=>[e.id,e]))),i=e.map((e=>{const t={...EV,...e},a=t.id,i=t.artifacts.map((e=>{const t=n.get(e);if(!t)throw new Error(`Unrecognized artifact "${e}" in navigation "${a}"`);return t})),o={...t,artifacts:i};return function overrideNavigationThrottlingWindows(e,t){e.disableThrottling||"simulate"!==t.throttlingMethod&&(e.cpuQuietThresholdMs=Math.max(e.cpuQuietThresholdMs||0,xV.cpuQuietThresholdMs),e.networkQuietThresholdMs=Math.max(e.networkQuietThresholdMs||0,xV.networkQuietThresholdMs),e.pauseAfterFcpMs=Math.max(e.pauseAfterFcpMs||0,xV.pauseAfterFcpMs),e.pauseAfterLoadMs=Math.max(e.pauseAfterLoadMs||0,xV.pauseAfterLoadMs))}(o,r),o
1218
- }));return DV(i),wV.timeEnd(a),i}var $V={resolveWorkingCopy,initializeConfig:function initializeConfig$4(e,t){const r={msg:"Initialize config",id:"lh:config"};wV.time(r,"verbose");let{configWorkingCopy:a,configDir:n}=resolveWorkingCopy(e,t);a=function resolveExtensions(e){if(!e.extends)return e;if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");const{artifacts:t,navigations:r,...a}=e,n=LV(TV),i=UV(n,a);return i.artifacts=jV(n.artifacts,t,(e=>e.id)),i.navigations=jV(n.navigations,r,(e=>e.id)),i}(a),a=FV(a,n,t.settingsOverrides);const i=MV(a.settings||{},t.settingsOverrides);!function overrideSettingsForGatherMode(e,t){"timespan"===t.gatherMode&&"simulate"===e.throttlingMethod&&(e.throttlingMethod="devtools")}(i,t);const o=function resolveArtifactsToDefns(e,t){if(!e)return null;const r={msg:"Resolve artifact definitions",id:"lh:config:resolveArtifactsToDefns"};wV.time(r,"verbose")
1219
- ;const a=new Map,n=SV.getGathererList(),i=e.map((e=>{const r=e.gatherer,i=OV(r,n,t);if(!_V(i))throw new Error(`${i.instance.name} gatherer does not have a Fraggle Rock meta obj`);const o={id:e.id,gatherer:i,dependencies:resolveArtifactDependencies(e,i,a)},s=o.gatherer.instance.meta.symbol;return s&&a.set(s,o),o}));return wV.timeEnd(r),i}(a.artifacts,n);let s={artifacts:o,navigations:resolveNavigationsToDefns(a.navigations,o,i),audits:PV(a.audits,n),categories:a.categories||null,groups:a.groups||null,settings:i};const{warnings:c}=CV(s);return s=IV(s,t.gatherMode),s=NV(s,i),wV.timeEnd(r),{config:s,warnings:c}}};const qV=on.default,zV=aV,VV=pu,{getEmptyArtifactState:WV,collectPhaseArtifacts:GV,awaitArtifacts:HV}=oV,{initializeConfig:YV}=$V,{getBaseArtifacts:KV,finalizeArtifacts:JV}=ac;var XV={snapshotGather:async function snapshotGather$2(e){const{configContext:t={}}=e;qV.setLevel(t.logLevel||"error");const{config:r}=YV(e.config,{...t,gatherMode:"snapshot"}),a=new zV(e.page)
1220
- ;await a.connect();const n=new Map,i=await a.url(),o={config:r,computedCache:n};return{artifacts:await VV.gather((async()=>{const e=await KV(r,a,{gatherMode:"snapshot"});e.URL.requestedUrl=i,e.URL.finalUrl=i;const t=r.artifacts||[],o=WV();await GV({url:i,phase:"getArtifact",gatherMode:"snapshot",driver:a,baseArtifacts:e,artifactDefinitions:t,artifactState:o,computedCache:n,settings:r.settings}),await a.disconnect();const s=await HV(o);return JV(e,s)}),o),runnerOptions:o}}};const ZV=on.default,QV=aV,eW=pu,{getEmptyArtifactState:tW,collectPhaseArtifacts:rW,awaitArtifacts:aW}=oV,{prepareTargetForTimespanMode:nW}=es,{initializeConfig:iW}=$V,{getBaseArtifacts:oW,finalizeArtifacts:sW}=ac;var cW={startTimespanGather:async function startTimespanGather$2(e){const{configContext:t={}}=e;ZV.setLevel(t.logLevel||"error");const{config:r}=iW(e.config,{...t,gatherMode:"timespan"}),a=new QV(e.page);await a.connect();const n=new Map,i=r.artifacts||[],o=await a.url(),s=await oW(r,a,{gatherMode:"timespan"
1221
- }),c=tW(),l={url:o,driver:a,artifactDefinitions:i,artifactState:c,baseArtifacts:s,computedCache:n,gatherMode:"timespan",settings:r.settings};return await nW(a,r.settings),await rW({phase:"startInstrumentation",...l}),await rW({phase:"startSensitiveInstrumentation",...l}),{async endTimespanGather(){const e=await a.url();l.url=e;const t={config:r,computedCache:n};return{artifacts:await eW.gather((async()=>{s.URL.requestedUrl=o,s.URL.finalUrl=e,await rW({phase:"stopSensitiveInstrumentation",...l}),await rW({phase:"stopInstrumentation",...l}),await rW({phase:"getArtifact",...l}),await a.disconnect();const t=await aW(c);return sW(s,t)}),t),runnerOptions:t}}}}};const lW=on.default,uW=aV,dW=pu,{getEmptyArtifactState:mW,collectPhaseArtifacts:pW,awaitArtifacts:hW}=oV,gW=es,{gotoURL:fW}=_s,yW=Ko,vW=Wo,{defaultNavigationConfig:bW}=mn,{initializeConfig:wW}=$V,{getBaseArtifacts:SW,finalizeArtifacts:TW}=ac,EW=Vn,xW=vi.exports,_W=ji,{getPageLoadError:AW}=Bo,RW=oo,kW=Ws,DW=Lo
1222
- ;async function _setup({driver:e,config:t,requestor:r,options:a}){await e.connect(),a?.skipAboutBlank||await fW(e,bW.blankPage,{waitUntil:["navigated"]});const n=await SW(t,e,{gatherMode:"navigation"});return"string"==typeof r&&(n.URL.requestedUrl=r),await gW.prepareTargetForNavigationMode(e,t.settings),{baseArtifacts:n}}async function _setupNavigation({requestor:e,driver:t,navigation:r,config:a,options:n}){n?.skipAboutBlank||await fW(t,r.blankPage,{...r,waitUntil:["navigated"]});const{warnings:i}=await gW.prepareTargetForIndividualNavigation(t.defaultSession,a.settings,{...r,requestor:e});return{warnings:i}}async function _navigate(e){const{driver:t,config:r,requestor:a}=e;try{const{requestedUrl:n,finalUrl:i,warnings:o}=await fW(t,a,{...e.navigation,debugNavigation:r.settings.debugNavigation,maxWaitForFcp:r.settings.maxWaitForFcp,maxWaitForLoad:r.settings.maxWaitForLoad,waitUntil:e.navigation.pauseAfterFcpMs?["fcp","load"]:["load"]});return{requestedUrl:n,finalUrl:i,
1223
- navigationError:void 0,warnings:o}}catch(e){if(!(e instanceof xW))throw e;if("NO_FCP"!==e.code&&"PAGE_HUNG"!==e.code)throw e;if("string"!=typeof a)throw e;return{requestedUrl:a,finalUrl:a,navigationError:e,warnings:[]}}}async function _computeNavigationResult(e,t,r,a){const{navigationError:n,finalUrl:i}=a,o=[...r.warnings,...a.warnings],s=await async function _collectDebugData(e,t){const r=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===kW.symbol)),a=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===RW.symbol)),n=[r,a].filter((e=>Boolean(e)));if(!n.length)return{};await pW({...t,phase:"getArtifact",artifactDefinitions:n});const i=t.artifactState.getArtifact,o=r?.id,s=o&&await i[o],c=s&&await DW.request(s,e),l=a?.id;return{devtoolsLog:s,records:c,trace:l&&await i[l]}}(e,t),c=s.records?AW(n,{url:i,loadFailureMode:e.navigation.loadFailureMode,networkRecords:s.records}):n;if(c){const t=e.config.settings.locale,r=EW.getFormatted(c.friendlyMessage,t)
1224
- ;lW.error("NavigationRunner",r,a.requestedUrl);const n={},l=`pageLoadError-${e.navigation.id}`;return s.devtoolsLog&&(n.devtoolsLogs={[l]:s.devtoolsLog}),s.trace&&(n.traces={[l]:s.trace}),{requestedUrl:a.requestedUrl,finalUrl:i,pageLoadError:c,artifacts:n,warnings:[...o,c.friendlyMessage]}}{await pW({phase:"getArtifact",...t});const e=await hW(t.artifactState);return{requestedUrl:a.requestedUrl,finalUrl:i,artifacts:e,warnings:o,pageLoadError:void 0}}}async function _navigation(e){const t=mW(),r={url:await e.driver.url(),gatherMode:"navigation",driver:e.driver,computedCache:e.computedCache,artifactDefinitions:e.navigation.artifacts,artifactState:t,baseArtifacts:e.baseArtifacts,settings:e.config.settings},a=await _setupNavigation(e);await pW({phase:"startInstrumentation",...r}),await pW({phase:"startSensitiveInstrumentation",...r});const n=await _navigate(e);return r.url=n.finalUrl,await pW({phase:"stopSensitiveInstrumentation",...r}),await pW({phase:"stopInstrumentation",...r}),
1225
- await async function _cleanupNavigation({driver:e}){await vW.clearThrottling(e.defaultSession)}(e),_computeNavigationResult(e,r,a,n)}async function _navigations({driver:e,config:t,requestor:r,baseArtifacts:a,computedCache:n,options:i}){if(!t.navigations)throw new Error("No navigations configured");const o={},s=[];for(const c of t.navigations){const l={driver:e,navigation:c,requestor:r,config:t,baseArtifacts:a,computedCache:n,options:i};let u=!1;const d=await _navigation(l);if("fatal"===c.loadFailureMode&&(d.pageLoadError&&(o.PageLoadError=d.pageLoadError,u=!0),o.URL={requestedUrl:d.requestedUrl,finalUrl:d.finalUrl}),s.push(...d.warnings),Object.assign(o,d.artifacts),u)break}return{artifacts:{...o,LighthouseRunWarnings:s}}}async function _cleanup({requestedUrl:e,driver:t,config:r}){!r.settings.disableStorageReset&&e&&await yW.clearDataForOrigin(t.defaultSession,e),await t.disconnect()}var CW={navigationGather:async function navigationGather$2(e,t){const{page:r,configContext:a={}}=t
1226
- ;lW.setLevel(a.logLevel||"error");const{config:n}=wW(t.config,{...a,gatherMode:"navigation"}),i=new Map,o={skipAboutBlank:a.skipAboutBlank};"string"!=typeof e&&(o.skipAboutBlank=!0);const s={config:n,computedCache:i};return{artifacts:await dW.gather((async()=>{const t={driver:new uW(r),config:n,requestor:"string"==typeof e?_W.normalizeUrl(e):e,options:o},{baseArtifacts:a}=await _setup(t),{artifacts:s}=await _navigations({...t,baseArtifacts:a,computedCache:i});return await _cleanup(t),TW(a,s)}),s),runnerOptions:s}},_setup,_setupNavigation,_navigate,_navigation,_navigations,_cleanup};const{generateFlowReportHtml:IW}=Zl,{snapshotGather:NW}=XV,{startTimespanGather:LW}=cW,{navigationGather:MW}=CW,PW=pu,{initializeConfig:OW}=$V;async function auditGatherSteps$1(e,t){if(!e.length)throw new Error("Need at least one step before getting the result");const r=[];for(const a of e){const{artifacts:e,name:n,configContext:i}=a;let o=t.gatherStepRunnerOptions?.get(a);if(!o){
1227
- const r=a.config||t.config,{gatherMode:n}=e.GatherContext,{config:s}=OW(r,{...i,gatherMode:n});o={config:s,computedCache:new Map}}const s=await PW.audit(e,o);if(!s)throw new Error(`Step "${n}" did not return a result`);r.push({lhr:s.lhr,name:n})}const a=new URL(e[0].artifacts.URL.finalUrl);return{steps:r,name:t.name||`User flow (${a.hostname})`}}var FW={UserFlow:class UserFlow$1{constructor(e,t){this.options={page:e,...t},this.name=t?.name,this._gatherSteps=[],this._gatherStepRunnerOptions=new WeakMap}_shortenUrl(e){const t=new URL(e);return`${t.hostname}${t.pathname}`}_getDefaultStepName(e){const t=this._shortenUrl(e.URL.finalUrl);switch(e.GatherContext.gatherMode){case"navigation":return`Navigation report (${t})`;case"timespan":return`Timespan report (${t})`;case"snapshot":return`Snapshot report (${t})`}}_getNextNavigationOptions(e){const t={...this.options,...e},r={...t.configContext},a={...r.settingsOverrides};void 0===r.skipAboutBlank&&(r.skipAboutBlank=!0)
1228
- ;return this._gatherSteps.some((e=>"navigation"===e.artifacts.GatherContext.gatherMode))&&void 0===a.disableStorageReset&&(a.disableStorageReset=!0),r.settingsOverrides=a,t.configContext=r,t}_addGatherStep(e,t){const r=t?.stepName,a={artifacts:e.artifacts,name:r||this._getDefaultStepName(e.artifacts),config:t.config,configContext:t.configContext};this._gatherSteps.push(a),this._gatherStepRunnerOptions.set(a,e.runnerOptions)}async navigate(e,t){if(this.currentTimespan)throw new Error("Timespan already in progress");const r=this._getNextNavigationOptions(t),a=await MW(e,r);return this._addGatherStep(a,r),a}async startTimespan(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await LW(t);this.currentTimespan={timespan:r,options:t}}async endTimespan(){if(!this.currentTimespan)throw new Error("No timespan in progress");const{timespan:e,options:t}=this.currentTimespan,r=await e.endTimespanGather();return this.currentTimespan=void 0,
1229
- this._addGatherStep(r,t),r}async snapshot(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await NW(t);return this._addGatherStep(r,t),r}async createFlowResult(){return auditGatherSteps$1(this._gatherSteps,{name:this.name,config:this.options.config,gatherStepRunnerOptions:this._gatherStepRunnerOptions})}async generateReport(){const e=await this.createFlowResult();return IW(e)}createArtifactsJson(){return{gatherSteps:this._gatherSteps,name:this.name}}},auditGatherSteps:auditGatherSteps$1};const{UserFlow:UW,auditGatherSteps:jW}=FW,{snapshotGather:BW}=XV,{startTimespanGather:$W}=cW,{navigationGather:qW}=CW,{generateFlowReportHtml:zW}=Zl,VW=pu;var WW=async function snapshot(...e){const t=await BW(...e);return VW.audit(t.artifacts,t.runnerOptions)},GW=async function startTimespan(...e){const{endTimespanGather:t}=await $W(...e);return{endTimespan:async()=>{const e=await t();return VW.audit(e.artifacts,e.runnerOptions)}}
1230
- },HW=async function navigation(...e){const t=await qW(...e);return VW.audit(t.artifacts,t.runnerOptions)};const YW=uo;var KW=class RawConnection extends YW{constructor(e){super(),this._port=e,this._port.on("message",this.handleRawMessage.bind(this)),this._port.on("close",this.dispose.bind(this))}connect(){return Promise.resolve()}disconnect(){return this._port.close(),Promise.resolve()}sendRawMessage(e){this._port.send(e)}};globalThis.Buffer=Buffer$2,"undefined"!=typeof self?(globalThis.isDevtools=!0,self.setUpWorkerConnection=function setUpWorkerConnection(e){return new KW(e)},self.runLighthouse=Yz,self.runLighthouseNavigation=HW,self.startLighthouseTimespan=GW,self.runLighthouseSnapshot=WW,self.createConfig=function createConfig(e,t){const r={onlyCategories:e,screenEmulation:{disabled:!0}};return"desktop"===t&&(r.throttling=mn.throttling.desktopDense4G,r.emulatedUserAgent=mn.userAgents.desktop,r.formFactor="desktop"),{extends:"lighthouse:default",
1231
- plugins:["lighthouse-plugin-publisher-ads"],settings:r}},self.listenForStatus=function listenForStatus(e){Log.events.addListener("status",e),Log.events.addListener("warning",e)},self.registerLocaleData=Vn.registerLocaleData,self.lookupLocale=function lookupCanonicalLocale(e){return oi.lookupLocale(e,Vn.getCanonicalLocales())}):global.runBundledLighthouse=Yz}();
1186
+ }],["../audits/performance-budget",SI.exports],["../audits/predictive-perf",VI],["../audits/preload-fonts",WI.exports],["../audits/preload-lcp-image",QI.exports],["../audits/redirects",lN.exports],["../audits/resource-summary",bN.exports],["../audits/screenshot-thumbnails",NN],["../audits/script-treemap-data",FN],["../audits/seo/canonical",UN.exports],["../audits/seo/crawlable-anchors",VN.exports],["../audits/seo/font-size",YN.exports],["../audits/seo/hreflang",iL.exports],["../audits/seo/http-status-code",pL.exports],["../audits/seo/is-crawlable",bL.exports],["../audits/seo/link-text",kL.exports],["../audits/seo/manual/structured-data",ML.exports],["../audits/seo/meta-description",UL.exports],["../audits/seo/plugins",qL.exports],["../audits/seo/robots-txt",ZL.exports],["../audits/seo/tap-targets",uM.exports],["../audits/server-response-time",_M.exports],["../audits/service-worker",LM.exports],["../audits/splash-screen",UM.exports],["../audits/themed-omnibox",WM.exports],["../audits/third-party-facades",XM.exports],["../audits/third-party-summary",ZM.exports],["../audits/timing-budget",vP.exports],["../audits/unsized-images",AP.exports],["../audits/user-timings",NP.exports],["../audits/uses-rel-preconnect",$P.exports],["../audits/uses-rel-preload",tO.exports],["../audits/valid-source-maps",pO.exports],["../audits/viewport",bO.exports],["../audits/work-during-interaction",xO.exports],["lighthouse-plugin-publisher-ads",UO.exports],["lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks",HO.exports],["lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources",pU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-critical-path",xU.exports],["lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start",HU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start",sj.exports],["lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport",gj.exports],["lighthouse-plugin-publisher-ads/audits/ads-in-viewport",Ej.exports],["lighthouse-plugin-publisher-ads/audits/async-ad-tags",Lj.exports],["lighthouse-plugin-publisher-ads/audits/blocking-load-events",Hj.exports],["lighthouse-plugin-publisher-ads/audits/bottleneck-requests",cB.exports],["lighthouse-plugin-publisher-ads/audits/duplicate-tags",vB.exports],["lighthouse-plugin-publisher-ads/audits/first-ad-render",IB.exports],["lighthouse-plugin-publisher-ads/audits/full-width-slots",WB.exports],["lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel",e$.exports],["lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source",m$.exports],["lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https",S$.exports],["lighthouse-plugin-publisher-ads/audits/script-injected-tags",C$.exports],["lighthouse-plugin-publisher-ads/audits/serial-header-bidding",q$.exports],["lighthouse-plugin-publisher-ads/audits/tag-load-time",cq.exports],["lighthouse-plugin-publisher-ads/audits/viewport-ad-density",Eq.exports],["lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift",Iq.exports],["lighthouse-plugin-publisher-ads/audits/deprecated-api-usage",zq.exports],["lighthouse-plugin-publisher-ads/audits/gpt-errors-overall",Zq.exports],["lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time",sz.exports]])
1187
+ ;function requireWrapper(e){return kz.get(e)||function commonjsRequire(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(e)}function resolveModulePath(e,t,r){try{return require.resolve(e)}catch(e){}try{return require.resolve(e,{paths:[process.cwd()]})}catch(e){}const a=bz.resolve(process.cwd(),e);try{return require.resolve(a)}catch(e){}const n="Unable to locate "+(r?`${r}: `:"")+`\`${e}\`.\n Tried to require() from these locations:\n lighthouse-core/config\n ${a}`;if(!t)throw new Error(n);const i=bz.resolve(t,e);try{return require.resolve(i)}catch(e){}try{return require.resolve(e,{paths:[t]})}catch(e){}throw new Error(n+`\n ${i}`)}function shallowClone(e){return"object"==typeof e?Object.assign(Object.create(Object.getPrototypeOf(e)),e):e}function deepClone$2(e){return JSON.parse(JSON.stringify(e))}
1188
+ var Dz={deepClone:deepClone$2,deepCloneConfigJson:function deepCloneConfigJson$2(e){const t=deepClone$2(e);if(Array.isArray(t.passes)&&Array.isArray(e.passes))for(let r=0;r<t.passes.length;r++){t.passes[r].gatherers=(e.passes[r].gatherers||[]).map((e=>shallowClone(e)))}return Array.isArray(e.audits)&&(t.audits=e.audits.map((e=>shallowClone(e)))),Array.isArray(e.artifacts)&&(t.artifacts=e.artifacts.map((e=>({...e,gatherer:shallowClone(e.gatherer)})))),t},mergeConfigFragment:Rz,mergeConfigFragmentArrayByKey:function mergeConfigFragmentArrayByKey$1(e,t,r){const a=new Map,n=e||[];for(let e=0;e<n.length;e++){const t=n[e];a.set(r(t),{index:e,item:t})}for(const e of t||[]){const t=a.get(r(e));if(t){const r=t.item,a="object"==typeof e&&"object"==typeof r?Rz(r,e,!0):e;n[t.index]=a}else n.push(e)}return n},mergeOptionsOfItems,mergePlugins:function mergePlugins$2(e,t,r){const a=e.plugins||[],n=new Set([...a,...r?.plugins||[]]);for(const r of n){Az.assertValidPluginName(e,r)
1189
+ ;const a=requireWrapper(isBundledEnvironment()?r:resolveModulePath(r,t,"plugin")),n=Ez.parsePlugin(a,r);e=Rz(e,n)}return e},resolveAuditsToDefns:function resolveAuditsToDefns$2(e,t){if(!e)return null;const r=xz.getAuditList(),a=e.map((e=>{const a=function expandAuditShorthand(e){if("string"==typeof e)return{path:e,options:{}};if("implementation"in e&&"function"==typeof e.implementation.audit)return e;if("path"in e&&"string"==typeof e.path)return e;if("audit"in e&&"function"==typeof e.audit)return{implementation:e,options:{}};throw new Error("Invalid Audit type "+JSON.stringify(e))}(e);let n;return n="implementation"in a?a.implementation:function requireAudit(e,t,r){const a=`${e}.js`;let n=`../audits/${e}`;if(!t.find((e=>e===a)))if(isBundledEnvironment())n=e;else{const t=resolveModulePath(e,r,"audit");n=bz.relative("lighthouse-core/config",t)}return requireWrapper(n)}(a.path,r,t),{implementation:n,path:a.path,options:a.options||{}}})),n=mergeOptionsOfItems(a)
1190
+ ;return n.forEach((e=>Az.assertValidAudit(e))),n},resolveGathererToDefn:function resolveGathererToDefn$2(e,t,r){const a=function expandGathererShorthand(e){if("string"==typeof e)return{path:e};if("implementation"in e||"instance"in e)return e;if("path"in e){if("string"!=typeof e.path)throw new Error("Invalid Gatherer type "+JSON.stringify(e));return e}if("function"==typeof e)return{implementation:e};if(e&&"function"==typeof e.beforePass)return{instance:e};throw new Error("Invalid Gatherer type "+JSON.stringify(e))}(e);if(a.instance)return{instance:a.instance,implementation:a.implementation,path:a.path};if(a.implementation){return{instance:new(0,a.implementation),implementation:a.implementation,path:a.path}}if(a.path){return function requireGatherer(e,t,r){const a=t.find((t=>t===`${e}.js`));let n=`../gather/gatherers/${e}`;a||(n=resolveModulePath(e,r,"gatherer"));const i=requireWrapper(n);return{instance:new i,implementation:i,path:e}}(a.path,t,r)}
1191
+ throw new Error("Invalid expanded Gatherer: "+JSON.stringify(a))},resolveModulePath,resolveSettings:function resolveSettings$2(e={},t){const r=_z.lookupLocale(t?.locale||e.locale),{defaultSettings:a}=Sz,n=Rz(deepClone$2(a),e,!0),i=Rz(n,function cleanFlagsForSettings(e={}){const t={};for(const r of Object.keys(e))r in Sz.defaultSettings&&(t[r]=e[r]);return t}(t),!0);return i.budgets&&(i.budgets=Tz.initializeBudget(i.budgets)),i.locale=r,!0===i.emulatedUserAgent&&(i.emulatedUserAgent=Sz.userAgents[i.formFactor]),Az.assertValidSettings(i),i}};const Cz=gu.exports,Iz=mn,Nz=Vn,Lz=Su,Mz=on.default,Pz=bn,Oz=pu,{mergePlugins:Fz,mergeConfigFragment:Uz,resolveSettings:jz,resolveAuditsToDefns:Bz,resolveGathererToDefn:$z,deepClone:qz,deepCloneConfigJson:zz}=Dz,Vz=Object.keys({fetchTime:"",LighthouseRunWarnings:"",HostFormFactor:"",HostUserAgent:"",NetworkUserAgent:"",BenchmarkIndex:"",WebAppManifest:"",GatherContext:"",InstallabilityErrors:"",Stacks:"",traces:"",devtoolsLogs:"",settings:"",URL:"",
1192
+ Timing:"",PageLoadError:""});class Config$1{constructor(e,t){const r={msg:"Create config",id:"lh:init:config"};Mz.time(r,"verbose");let a=t?.configPath;if(e||(e=Cz,a=Pz.resolve("lighthouse-core/config","./default-config.js")),a&&!Pz.isAbsolute(a))throw new Error("configPath must be an absolute path.");if((e=zz(e)).extends){if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");e=Config$1.extendConfigJSON(zz(Cz),e)}const n=a?Pz.dirname(a):void 0;e=Fz(e,n,t),t&&function assertValidFlags(e){if("devtools"===e.channel&&e.internalDisableDeviceScreenEmulation&&(e.formFactor=e.emulatedFormFactor,e.emulatedFormFactor=e.internalDisableDeviceScreenEmulation=void 0),e.emulatedFormFactor||e.internalDisableDeviceScreenEmulation)throw new Error("Invalid emulation flag. Emulation configuration changed in LH 7.0. See https://github.com/GoogleChrome/lighthouse/blob/master/docs/emulation.md")}(t)
1193
+ ;const i=jz(e.settings||{},t),o=Config$1.augmentPassesWithDefaults(e.passes);Config$1.adjustDefaultPassForThrottling(i,o);const s=Config$1.requireGatherers(o,n);this.settings=i,this.passes=s,this.audits=Config$1.requireAudits(e.audits,n),this.categories=e.categories||null,this.groups=e.groups||null,Config$1.filterConfigIfNeeded(this),function assertValidPasses(e,t){if(!Array.isArray(e))return;const r=Config$1.getGatherersRequestedByAudits(t),a=new Set(Vz);e.forEach(((e,t)=>{0===t&&"fatal"!==e.loadFailureMode&&(Mz.warn(`"${e.passName}" is the first pass but was marked as non-fatal. The first pass will always be treated as loadFailureMode=fatal.`),e.loadFailureMode="fatal"),e.gatherers.forEach((e=>{const t=e.instance;if(a.add(t.name),!r.has(t.name)){const e=`${t.name} gatherer requested, however no audit requires it.`;Mz.warn("config",e)}}))}));for(const e of t||[]){const t=e.implementation.meta
1194
+ ;for(const e of t.requiredArtifacts)if(!a.has(e))throw new Error(`${e} gatherer, required by audit ${t.id}, was not found in config.`)}const n=new Set;e.forEach((e=>{const t=e.passName;if(n.has(t))throw new Error(`Passes must have unique names (repeated passName: ${t}.`);n.add(t)}))}(this.passes,this.audits),Lz.assertValidCategories(this.categories,this.audits,this.groups),Mz.timeEnd(r)}getPrintString(){const e=qz(this);if(e.passes)for(const t of e.passes)for(const e of t.gatherers)e.implementation=void 0,e.instance=void 0;if(e.audits)for(const t of e.audits)t.implementation=void 0,0===Object.keys(t.options).length&&(t.options=void 0);return Nz.replaceIcuMessages(e,e.settings.locale),JSON.stringify(e,null,2)}static extendConfigJSON(e,t){if(t.passes&&e.passes){for(const r of t.passes){const t=r.passName||Iz.defaultPassConfig.passName,a=e.passes.find((e=>e.passName===t));a?Uz(a,r):e.passes.push(r)}delete t.passes}return Uz(e,t)}static augmentPassesWithDefaults(e){if(!e)return null
1195
+ ;const{defaultPassConfig:t}=Iz;return e.map((e=>Uz(qz(t),e)))}static adjustDefaultPassForThrottling(e,t){if(!t||"devtools"!==e.throttlingMethod&&"provided"!==e.throttlingMethod)return;const r=t.find((e=>"defaultPass"===e.passName));if(!r)return;const a=Iz.nonSimulatedPassConfigOverrides;r.pauseAfterFcpMs=Math.max(a.pauseAfterFcpMs,r.pauseAfterFcpMs),r.pauseAfterLoadMs=Math.max(a.pauseAfterLoadMs,r.pauseAfterLoadMs),r.cpuQuietThresholdMs=Math.max(a.cpuQuietThresholdMs,r.cpuQuietThresholdMs),r.networkQuietThresholdMs=Math.max(a.networkQuietThresholdMs,r.networkQuietThresholdMs)}static filterConfigIfNeeded(e){const t=e.settings;if(!t.onlyCategories&&!t.onlyAudits&&!t.skipAudits)return;const{categories:r,requestedAuditNames:a}=Config$1.filterCategoriesAndAudits(e.categories,t),n=e.audits&&e.audits.filter((e=>a.has(e.implementation.meta.id))),i=Config$1.getGatherersRequestedByAudits(n),o=Config$1.generatePassesNeededByGatherers(e.passes,i);e.categories=r,e.audits=n,e.passes=o}
1196
+ static filterCategoriesAndAudits(e,t){if(!e)return{categories:null,requestedAuditNames:new Set};if(t.onlyAudits&&t.skipAudits)throw new Error("Cannot set both skipAudits and onlyAudits");const r={},a=!!t.onlyCategories,n=!!t.onlyAudits,i=t.onlyCategories||[],o=t.onlyAudits||[],s=t.skipAudits||[];i.forEach((t=>{e[t]||Mz.warn("config",`unrecognized category in 'onlyCategories': ${t}`)}));const c=new Set(o.concat(s));for(const t of c){const r=Object.keys(e).find((r=>!!e[r].auditRefs.find((e=>e.id===t))));if(r)o.includes(t)&&i.includes(r)&&Mz.warn("config",`${t} in 'onlyAudits' is already included by ${r} in 'onlyCategories'`);else{const e=s.includes(t)?"skipAudits":"onlyAudits";Mz.warn("config",`unrecognized audit in '${e}': ${t}`)}}const l=new Set(o);s.forEach((e=>l.delete(e))),Object.keys(e).forEach((t=>{const c=qz(e[t]);if(a&&n)i.includes(t)||(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));else if(a){if(!i.includes(t))return
1197
+ }else n&&(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));c.auditRefs=c.auditRefs.filter((e=>!s.includes(e.id))),c.auditRefs.length&&(r[t]=c,c.auditRefs.forEach((e=>l.add(e.id))))}));return t.skipAudits&&t.skipAudits.includes("full-page-screenshot")||!t.onlyCategories&&!t.skipAudits||l.add("full-page-screenshot"),{categories:r,requestedAuditNames:l}}static getGatherersRequestedByAudits(e){if(!e)return new Set;const t=new Set;for(const r of e){const{requiredArtifacts:e,__internalOptionalArtifacts:a}=r.implementation.meta;e.forEach((e=>t.add(e))),a&&a.forEach((e=>t.add(e)))}return t}static generatePassesNeededByGatherers(e,t){if(!e)return null;const r=t.has("traces");return e.map((e=>{if(e.gatherers=e.gatherers.filter((e=>{const r=e.instance;return t.has(r.name)})),e.recordTrace&&!r){const t=e.passName||"unknown pass";Mz.warn("config",`Trace not requested by an audit, dropping trace in ${t}`),e.recordTrace=!1}return e
1198
+ })).filter((e=>!!e.recordTrace||("defaultPass"===e.passName||e.gatherers.length>0)))}static requireAudits(e,t){const r={msg:"Requiring audits",id:"lh:config:requireAudits"};Mz.time(r,"verbose");const a=Bz(e,t);return Mz.timeEnd(r),a}static requireGatherers(e,t){if(!e)return null;const r={msg:"Requiring gatherers",id:"lh:config:requireGatherers"};Mz.time(r,"verbose");const a=Oz.getGathererList(),n=e.map((e=>{const r=e.gatherers.map((e=>$z(e,a,t))),n=Array.from(new Map(r.map((e=>[e.instance.name,e]))).values());return n.forEach((e=>function assertValidGatherer(e,t){if(t=t||e.name||"gatherer","function"!=typeof e.beforePass)throw new Error(`${t} has no beforePass() method.`);if("function"!=typeof e.pass)throw new Error(`${t} has no pass() method.`);if("function"!=typeof e.afterPass)throw new Error(`${t} has no afterPass() method.`)}(e.instance,e.path))),Object.assign(e,{gatherers:n})}));return Mz.timeEnd(r),n}}var Wz=Config$1;var Hz=class Gatherer{get name(){return this.constructor.name}
1199
+ beforePass(e){}pass(e){}afterPass(e,t){}};const Gz=pu,Yz=on.default,Kz=hu,Jz=Wz,Xz=ji;async function lighthouse(e,t={},r,a){t.logLevel=t.logLevel||"error",Yz.setLevel(t.logLevel);const n={config:generateConfig(r,t),computedCache:new Map},i=a||new Kz(t.port,t.hostname),o=await Gz.gather((()=>{const t=Xz.normalizeUrl(e);return Gz._gatherArtifactsFromBrowser(t,n,i)}),n);return Gz.audit(o,n)}function generateConfig(e,t){return new Jz(e,t)}lighthouse.generateConfig=generateConfig,lighthouse.getAuditList=Gz.getAuditList,lighthouse.traceCategories=To.traceCategories,lighthouse.Audit=kc,lighthouse.Gatherer=Hz,lighthouse.NetworkRecords=Lo;var Zz=lighthouse;const Qz=vi.exports,eV=Symbol("monkeypatch");class ProtocolSession$1{constructor(e){this._session=e,this._targetInfo=void 0,this._nextProtocolTimeout=void 0,this._callbackMap=new WeakMap;const t=e.emit;t[eV]||(e.emit=(r,...a)=>{const n=this._targetInfo&&"iframe"===this._targetInfo.type?this._targetInfo.targetId:void 0;return t.call(e,"*",{
1200
+ method:r,params:a[0],sessionId:n}),t.call(e,r,...a)},e.emit[eV]=!0)}setTargetInfo(e){this._targetInfo=e}hasNextProtocolTimeout(){return void 0!==this._nextProtocolTimeout}getNextProtocolTimeout(){return this._nextProtocolTimeout||3e4}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}on(e,t){this._session.on(e,t)}once(e,t){this._session.once(e,t)}addSessionAttachedListener(e){const listener=t=>e(new ProtocolSession$1(t));this._callbackMap.set(e,listener),this._getConnection().on("sessionattached",listener)}removeSessionAttachedListener(e){const t=this._callbackMap.get(e);t&&this._getConnection().off("sessionattached",t)}addProtocolMessageListener(e){this._session.on("*",e)}removeProtocolMessageListener(e){this._session.off("*",e)}off(e,t){this._session.off(e,t)}sendCommand(e,...t){const r=this.getNextProtocolTimeout();let a;this._nextProtocolTimeout=void 0;const n=new Promise(((t,n)=>{r!==1/0&&(a=setTimeout(n,r,new Qz(Qz.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))
1201
+ })),i=this._session.send(e,...t);return Promise.race([i,n]).finally((()=>{a&&clearTimeout(a)}))}async dispose(){this._session.removeAllListeners(),await this._session.detach()}_getConnection(){const e=this._session.connection();if(!e)throw new Error("Connection has been closed.");return e}}var tV=ProtocolSession$1;const rV=on.default,aV=tV,nV=yi,iV=gi,throwNotConnectedFn=()=>{throw new Error("Session not connected")},oV={setTargetInfo:throwNotConnectedFn,hasNextProtocolTimeout:throwNotConnectedFn,getNextProtocolTimeout:throwNotConnectedFn,setNextProtocolTimeout:throwNotConnectedFn,on:throwNotConnectedFn,once:throwNotConnectedFn,off:throwNotConnectedFn,addProtocolMessageListener:throwNotConnectedFn,removeProtocolMessageListener:throwNotConnectedFn,addSessionAttachedListener:throwNotConnectedFn,removeSessionAttachedListener:throwNotConnectedFn,sendCommand:throwNotConnectedFn,dispose:throwNotConnectedFn};var sV=class Driver$3{constructor(e){this._page=e,this._session=void 0,
1202
+ this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=oV}get executionContext(){return this._executionContext?this._executionContext:throwNotConnectedFn()}get fetcher(){return this._fetcher?this._fetcher:throwNotConnectedFn()}async url(){return this._page.url()}async connect(){if(this._session)return;const e={msg:"Connecting to browser",id:"lh:driver:connect"};rV.time(e);const t=await this._page.target().createCDPSession();this._session=this.defaultSession=new aV(t),this._executionContext=new nV(this._session),this._fetcher=new iV(this._session,this._executionContext),rV.timeEnd(e)}async disconnect(){this._session&&await this._session.dispose()}};const cV=on.default;function createDependencyError(e,t){return new Error(`Dependency "${e.id}" failed with exception: ${t.message}`)}const lV={startInstrumentation:void 0,startSensitiveInstrumentation:"startInstrumentation",stopSensitiveInstrumentation:"startSensitiveInstrumentation",
1203
+ stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};async function collectArtifactDependencies(e,t){if(!e.dependencies)return{};const r=Object.entries(e.dependencies).map((async([e,r])=>{const a=t[r.id];if(void 0===a)throw new Error(`"${r.id}" did not run`);if(a instanceof Error)throw createDependencyError(r,a);const n=Promise.resolve().then((()=>a)).catch((e=>Promise.reject(createDependencyError(r,e))));return[e,await n]}));return Object.fromEntries(await Promise.all(r))}var uV={getEmptyArtifactState:function getEmptyArtifactState$3(){return{startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}}},awaitArtifacts:async function awaitArtifacts$3(e){const t={};for(const[r,a]of Object.entries(e.getArtifact)){const e=await a.catch((e=>e));void 0!==e&&(t[r]=e)}return t},collectPhaseArtifacts:async function collectPhaseArtifacts$3(e){
1204
+ const{driver:t,artifactDefinitions:r,artifactState:a,baseArtifacts:n,phase:i,gatherMode:o,computedCache:s,settings:c,url:l}=e,u=lV[i],d=u&&a[u]||{};for(const e of r){cV["getArtifact"===i?"log":"verbose"](`artifacts:${i}`,e.id);const r=e.gatherer.instance,u=(d[e.id]||Promise.resolve()).then((async()=>{const u="getArtifact"===i?await collectArtifactDependencies(e,a.getArtifact):{};return r[i]({url:l,gatherMode:o,driver:t,baseArtifacts:n,dependencies:u,computedCache:s,settings:c})}));await u.catch((()=>{})),a[i][e.id]=u}},collectArtifactDependencies};const dV=gu.exports,mV=yu,{deepClone:pV}=Dz,hV={performance:[{id:"uses-responsive-images-snapshot",weight:0},{id:"experimental-interaction-to-next-paint",weight:0,group:"metrics",acronym:"INP",relevantAudits:mV.inpRelevantAudits},{id:"work-during-interaction",weight:0}]};const gV={DevtoolsLog:"",Trace:"",Accessibility:"",AnchorElements:"",CacheContents:"",ConsoleMessages:"",CSSUsage:"",Doctype:"",DOMStats:"",EmbeddedContent:"",FontSize:"",
1205
+ Inputs:"",FullPageScreenshot:"",GlobalListeners:"",IFrameElements:"",ImageElements:"",InstallabilityErrors:"",InspectorIssues:"",JsUsage:"",LinkElements:"",MainDocumentContent:"",MetaElements:"",NetworkUserAgent:"",OptimizedImages:"",PasswordInputsWithPreventedPaste:"",ResponseCompression:"",RobotsTxt:"",ServiceWorker:"",ScriptElements:"",SourceMaps:"",Stacks:"",TagsBlockingFirstPaint:"",TapTargets:"",TraceElements:"",ViewportDimensions:"",WebAppManifest:"",devtoolsLogs:"",traces:""};for(const e of Object.keys(gV))gV[e]=e;var fV={artifacts:[{id:gV.DevtoolsLog,gatherer:"devtools-log"},{id:gV.Trace,gatherer:"trace"},{id:gV.Accessibility,gatherer:"accessibility"},{id:gV.AnchorElements,gatherer:"anchor-elements"},{id:gV.CacheContents,gatherer:"cache-contents"},{id:gV.ConsoleMessages,gatherer:"console-messages"},{id:gV.CSSUsage,gatherer:"css-usage"},{id:gV.Doctype,gatherer:"dobetterweb/doctype"},{id:gV.DOMStats,gatherer:"dobetterweb/domstats"},{id:gV.EmbeddedContent,
1206
+ gatherer:"seo/embedded-content"},{id:gV.FontSize,gatherer:"seo/font-size"},{id:gV.Inputs,gatherer:"inputs"},{id:gV.GlobalListeners,gatherer:"global-listeners"},{id:gV.IFrameElements,gatherer:"iframe-elements"},{id:gV.ImageElements,gatherer:"image-elements"},{id:gV.InstallabilityErrors,gatherer:"installability-errors"},{id:gV.InspectorIssues,gatherer:"inspector-issues"},{id:gV.JsUsage,gatherer:"js-usage"},{id:gV.LinkElements,gatherer:"link-elements"},{id:gV.MainDocumentContent,gatherer:"main-document-content"},{id:gV.MetaElements,gatherer:"meta-elements"},{id:gV.NetworkUserAgent,gatherer:"network-user-agent"},{id:gV.OptimizedImages,gatherer:"dobetterweb/optimized-images"},{id:gV.PasswordInputsWithPreventedPaste,gatherer:"dobetterweb/password-inputs-with-prevented-paste"},{id:gV.ResponseCompression,gatherer:"dobetterweb/response-compression"},{id:gV.RobotsTxt,gatherer:"seo/robots-txt"},{id:gV.ServiceWorker,gatherer:"service-worker"},{id:gV.ScriptElements,gatherer:"script-elements"},{
1207
+ id:gV.SourceMaps,gatherer:"source-maps"},{id:gV.Stacks,gatherer:"stacks"},{id:gV.TagsBlockingFirstPaint,gatherer:"dobetterweb/tags-blocking-first-paint"},{id:gV.TapTargets,gatherer:"seo/tap-targets"},{id:gV.TraceElements,gatherer:"trace-elements"},{id:gV.ViewportDimensions,gatherer:"viewport-dimensions"},{id:gV.WebAppManifest,gatherer:"web-app-manifest"},{id:gV.devtoolsLogs,gatherer:"devtools-log-compat"},{id:gV.traces,gatherer:"trace-compat"},{id:gV.FullPageScreenshot,gatherer:"full-page-screenshot"}],navigations:[{id:"default",pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,cpuQuietThresholdMs:1e3,
1208
+ artifacts:[gV.DevtoolsLog,gV.Trace,gV.Accessibility,gV.AnchorElements,gV.CacheContents,gV.ConsoleMessages,gV.CSSUsage,gV.Doctype,gV.DOMStats,gV.EmbeddedContent,gV.FontSize,gV.Inputs,gV.GlobalListeners,gV.IFrameElements,gV.ImageElements,gV.InstallabilityErrors,gV.InspectorIssues,gV.JsUsage,gV.LinkElements,gV.MainDocumentContent,gV.MetaElements,gV.NetworkUserAgent,gV.OptimizedImages,gV.PasswordInputsWithPreventedPaste,gV.ResponseCompression,gV.RobotsTxt,gV.ServiceWorker,gV.ScriptElements,gV.SourceMaps,gV.Stacks,gV.TagsBlockingFirstPaint,gV.TapTargets,gV.TraceElements,gV.ViewportDimensions,gV.WebAppManifest,gV.devtoolsLogs,gV.traces,gV.FullPageScreenshot]}],settings:dV.settings,audits:[...(dV.audits||[]).map((e=>"string"==typeof e?{path:e}:e)),"byte-efficiency/uses-responsive-images-snapshot","metrics/experimental-interaction-to-next-paint","work-during-interaction"],categories:function mergeCategories(){if(!dV.categories)return{};const e=pV(dV.categories)
1209
+ ;for(const t of Object.keys(hV))e[t]&&e[t].auditRefs.push(...hV[t]);return e}(),groups:dV.groups};const yV=on.default,vV=kc,bV=Object.keys({fetchTime:"",LighthouseRunWarnings:"",BenchmarkIndex:"",settings:"",Timing:"",URL:"",PageLoadError:"",HostFormFactor:"",HostUserAgent:"",GatherContext:""}),wV=["full-page-screenshot"],SV=["HostUserAgent","HostFormFactor","Stacks","GatherContext"];function getAuditIdsInCategories(e,t){if(!e)return new Set;const r=(t=t||Object.keys(e)).map((t=>e[t])).flatMap((e=>e?.auditRefs||[]));return new Set(r.map((e=>e.id)))}function filterArtifactsByAvailableAudits(e,t){if(!e)return null;if(!t)return e;const r=new Map(e.map((e=>[e.id,e]))),a=new Set([...SV,...t.flatMap((e=>e.implementation.meta.requiredArtifacts))]);let n=0;for(;n!==a.size;){n=a.size;for(const e of a){const t=r.get(e);if(t&&t.dependencies)for(const e of Object.values(t.dependencies))a.add(e.id)}}return e.filter((e=>a.has(e.id)))}function filterArtifactsByGatherMode(e,t){
1210
+ return e?e.filter((e=>e.gatherer.instance.meta.supportedModes.includes(t))):null}function filterNavigationsByAvailableArtifacts(e,t){if(!e)return e;const r=new Set(t.map((e=>e.id)).concat(bV));return e.map((e=>({...e,artifacts:e.artifacts.filter((e=>r.has(e.id)))}))).filter((e=>e.artifacts.length))}function filterAuditsByAvailableArtifacts(e,t){if(!e)return null;const r=new Set(t.map((e=>e.id)).concat(bV));return e.filter((e=>e.implementation.meta.requiredArtifacts.every((e=>r.has(e)))))}function filterAuditsByGatherMode(e,t){return e?e.filter((e=>{const r=e.implementation.meta;return!r.supportedModes||r.supportedModes.includes(t)})):null}function filterCategoriesByGatherMode(e,t){if(!e)return null;const r=Object.entries(e).filter((([e,r])=>!r.supportedModes||r.supportedModes.includes(t)));return Object.fromEntries(r)}function filterCategoriesByExplicitFilters(e,t){if(!e||!t)return e;const r=Object.entries(e).filter((([e])=>t.includes(e)));return Object.fromEntries(r)}
1211
+ function filterCategoriesByAvailableAudits(e,t){if(!e)return e;const r=new Map(t.map((e=>[e.implementation.meta.id,e.implementation.meta]))),a=Object.entries(e).map((([e,t])=>{const a={...t,auditRefs:t.auditRefs.filter((e=>r.has(e.id)))},n=a.auditRefs.length<t.auditRefs.length,i=a.auditRefs.every((e=>{const t=r.get(e.id);return!!t&&t.scoreDisplayMode===vV.SCORING_MODES.MANUAL}));return n&&i&&(a.auditRefs=[]),[e,a]})).filter((e=>"object"==typeof e[1]&&e[1].auditRefs.length));return Object.fromEntries(a)}var TV={filterConfigByGatherMode:function filterConfigByGatherMode$1(e,t){const r=filterArtifactsByGatherMode(e.artifacts,t),a=filterAuditsByAvailableArtifacts(filterAuditsByGatherMode(e.audits,t),r||[]),n=filterCategoriesByAvailableAudits(filterCategoriesByGatherMode(e.categories,t),a||[]);return{...e,artifacts:r,audits:a,categories:n}},filterConfigByExplicitFilters:function filterConfigByExplicitFilters$1(e,t){const{onlyAudits:r,onlyCategories:a,skipAudits:n}=t
1212
+ ;!function warnOnUnknownOnlyCategories(e,t){if(t)for(const r of t)e?.[r]||yV.warn("config",`unrecognized category in 'onlyCategories': ${r}`)}(e.categories,a);let i=getAuditIdsInCategories(e.categories,void 0);a?i=getAuditIdsInCategories(e.categories,a):r&&(i=new Set);const o=new Set([...i,...r||[],...wV].filter((e=>!n||!n.includes(e)))),s=o.size&&e.audits?e.audits.filter((e=>o.has(e.implementation.meta.id))):e.audits,c=filterCategoriesByExplicitFilters(filterCategoriesByAvailableAudits(e.categories,s||[]),a),l=filterArtifactsByAvailableAudits(e.artifacts,s),u=filterNavigationsByAvailableArtifacts(e.navigations,l||[]);return{...e,artifacts:l,navigations:u,audits:s,categories:c}},filterArtifactsByGatherMode,filterArtifactsByAvailableAudits,filterNavigationsByAvailableArtifacts,filterAuditsByAvailableArtifacts,filterAuditsByGatherMode,filterCategoriesByAvailableAudits,filterCategoriesByExplicitFilters,filterCategoriesByGatherMode}
1213
+ ;const EV=bn,xV=on.default,_V=pu,AV=fV,{defaultNavigationConfig:RV,nonSimulatedPassConfigOverrides:kV}=mn,{isFRGathererDefn:DV,throwInvalidDependencyOrder:CV,isValidArtifactDependency:IV,throwInvalidArtifactDependency:NV,assertArtifactTopologicalOrder:LV,assertValidConfig:MV}=Su,{filterConfigByGatherMode:PV,filterConfigByExplicitFilters:OV}=TV,{deepCloneConfigJson:FV,resolveSettings:UV,resolveAuditsToDefns:jV,resolveGathererToDefn:BV,mergePlugins:$V,mergeConfigFragment:qV,mergeConfigFragmentArrayByKey:zV}=Dz,VV=EV.join("lighthouse-core/fraggle-rock/config","./default-config.js");function resolveWorkingCopy(e,t){let{configPath:r}=t;if(r&&!EV.isAbsolute(r))throw new Error("configPath must be an absolute path");e||(e=AV,r=VV);const a=r?EV.dirname(r):void 0;return{configWorkingCopy:FV(e),configPath:r,configDir:a}}function resolveArtifactDependencies(e,t,r){if(!("dependencies"in t.instance.meta))return;const a=Object.entries(t.instance.meta.dependencies).map((([a,n])=>{const i=r.get(n)
1214
+ ;i||CV(e.id,a);return IV(t,i.gatherer)||NV(e.id,a),[a,{id:i.id}]}));return Object.fromEntries(a)}function resolveNavigationsToDefns(e,t,r){if(!e)return null;if(!t)throw new Error("Cannot use navigations without defining artifacts");const a={msg:"Resolve navigation definitions",id:"lh:config:resolveNavigationsToDefns"};xV.time(a,"verbose");const n=new Map(t.map((e=>[e.id,e]))),i=e.map((e=>{const t={...RV,...e},a=t.id,i=t.artifacts.map((e=>{const t=n.get(e);if(!t)throw new Error(`Unrecognized artifact "${e}" in navigation "${a}"`);return t})),o={...t,artifacts:i};return function overrideNavigationThrottlingWindows(e,t){e.disableThrottling||"simulate"!==t.throttlingMethod&&(e.cpuQuietThresholdMs=Math.max(e.cpuQuietThresholdMs||0,kV.cpuQuietThresholdMs),e.networkQuietThresholdMs=Math.max(e.networkQuietThresholdMs||0,kV.networkQuietThresholdMs),e.pauseAfterFcpMs=Math.max(e.pauseAfterFcpMs||0,kV.pauseAfterFcpMs),e.pauseAfterLoadMs=Math.max(e.pauseAfterLoadMs||0,kV.pauseAfterLoadMs))}(o,r),o
1215
+ }));return LV(i),xV.timeEnd(a),i}var WV={resolveWorkingCopy,initializeConfig:function initializeConfig$4(e,t){const r={msg:"Initialize config",id:"lh:config"};xV.time(r,"verbose");let{configWorkingCopy:a,configDir:n}=resolveWorkingCopy(e,t);a=function resolveExtensions(e){if(!e.extends)return e;if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");const{artifacts:t,navigations:r,...a}=e,n=FV(AV),i=qV(n,a);return i.artifacts=zV(n.artifacts,t,(e=>e.id)),i.navigations=zV(n.navigations,r,(e=>e.id)),i}(a),a=$V(a,n,t.settingsOverrides);const i=UV(a.settings||{},t.settingsOverrides);!function overrideSettingsForGatherMode(e,t){"timespan"===t.gatherMode&&"simulate"===e.throttlingMethod&&(e.throttlingMethod="devtools")}(i,t);const o=function resolveArtifactsToDefns(e,t){if(!e)return null;const r={msg:"Resolve artifact definitions",id:"lh:config:resolveArtifactsToDefns"};xV.time(r,"verbose")
1216
+ ;const a=new Map,n=_V.getGathererList(),i=e.map((e=>{const r=e.gatherer,i=BV(r,n,t);if(!DV(i))throw new Error(`${i.instance.name} gatherer does not have a Fraggle Rock meta obj`);const o={id:e.id,gatherer:i,dependencies:resolveArtifactDependencies(e,i,a)},s=o.gatherer.instance.meta.symbol;return s&&a.set(s,o),o}));return xV.timeEnd(r),i}(a.artifacts,n);let s={artifacts:o,navigations:resolveNavigationsToDefns(a.navigations,o,i),audits:jV(a.audits,n),categories:a.categories||null,groups:a.groups||null,settings:i};const{warnings:c}=MV(s);return s=PV(s,t.gatherMode),s=OV(s,i),xV.timeEnd(r),{config:s,warnings:c}}};const HV=on.default,GV=sV,YV=pu,{getEmptyArtifactState:KV,collectPhaseArtifacts:JV,awaitArtifacts:XV}=uV,{initializeConfig:ZV}=WV,{getBaseArtifacts:QV,finalizeArtifacts:eW}=ac;var tW={snapshotGather:async function snapshotGather$2(e){const{configContext:t={}}=e;HV.setLevel(t.logLevel||"error");const{config:r}=ZV(e.config,{...t,gatherMode:"snapshot"}),a=new GV(e.page)
1217
+ ;await a.connect();const n=new Map,i=await a.url(),o={config:r,computedCache:n};return{artifacts:await YV.gather((async()=>{const e=await QV(r,a,{gatherMode:"snapshot"});e.URL.requestedUrl=i,e.URL.finalUrl=i;const t=r.artifacts||[],o=KV();await JV({url:i,phase:"getArtifact",gatherMode:"snapshot",driver:a,baseArtifacts:e,artifactDefinitions:t,artifactState:o,computedCache:n,settings:r.settings}),await a.disconnect();const s=await XV(o);return eW(e,s)}),o),runnerOptions:o}}};const rW=on.default,aW=sV,nW=pu,{getEmptyArtifactState:iW,collectPhaseArtifacts:oW,awaitArtifacts:sW}=uV,{prepareTargetForTimespanMode:cW}=es,{initializeConfig:lW}=WV,{getBaseArtifacts:uW,finalizeArtifacts:dW}=ac;var mW={startTimespanGather:async function startTimespanGather$2(e){const{configContext:t={}}=e;rW.setLevel(t.logLevel||"error");const{config:r}=lW(e.config,{...t,gatherMode:"timespan"}),a=new aW(e.page);await a.connect();const n=new Map,i=r.artifacts||[],o=await a.url(),s=await uW(r,a,{gatherMode:"timespan"
1218
+ }),c=iW(),l={url:o,driver:a,artifactDefinitions:i,artifactState:c,baseArtifacts:s,computedCache:n,gatherMode:"timespan",settings:r.settings};return await cW(a,r.settings),await oW({phase:"startInstrumentation",...l}),await oW({phase:"startSensitiveInstrumentation",...l}),{async endTimespanGather(){const e=await a.url();l.url=e;const t={config:r,computedCache:n};return{artifacts:await nW.gather((async()=>{s.URL.requestedUrl=o,s.URL.finalUrl=e,await oW({phase:"stopSensitiveInstrumentation",...l}),await oW({phase:"stopInstrumentation",...l}),await oW({phase:"getArtifact",...l}),await a.disconnect();const t=await sW(c);return dW(s,t)}),t),runnerOptions:t}}}}};const pW=on.default,hW=sV,gW=pu,{getEmptyArtifactState:fW,collectPhaseArtifacts:yW,awaitArtifacts:vW}=uV,bW=es,{gotoURL:wW}=_s,SW=Ko,TW=Wo,{defaultNavigationConfig:EW}=mn,{initializeConfig:xW}=WV,{getBaseArtifacts:_W,finalizeArtifacts:AW}=ac,RW=Vn,kW=vi.exports,DW=ji,{getPageLoadError:CW}=Bo,IW=oo,NW=Ws,LW=Lo
1219
+ ;async function _setup({driver:e,config:t,requestor:r,options:a}){await e.connect(),a?.skipAboutBlank||await wW(e,EW.blankPage,{waitUntil:["navigated"]});const n=await _W(t,e,{gatherMode:"navigation"});return"string"==typeof r&&(n.URL.requestedUrl=r),await bW.prepareTargetForNavigationMode(e,t.settings),{baseArtifacts:n}}async function _setupNavigation({requestor:e,driver:t,navigation:r,config:a,options:n}){n?.skipAboutBlank||await wW(t,r.blankPage,{...r,waitUntil:["navigated"]});const{warnings:i}=await bW.prepareTargetForIndividualNavigation(t.defaultSession,a.settings,{...r,requestor:e});return{warnings:i}}async function _navigate(e){const{driver:t,config:r,requestor:a}=e;try{const{requestedUrl:n,finalUrl:i,warnings:o}=await wW(t,a,{...e.navigation,debugNavigation:r.settings.debugNavigation,maxWaitForFcp:r.settings.maxWaitForFcp,maxWaitForLoad:r.settings.maxWaitForLoad,waitUntil:e.navigation.pauseAfterFcpMs?["fcp","load"]:["load"]});return{requestedUrl:n,finalUrl:i,
1220
+ navigationError:void 0,warnings:o}}catch(e){if(!(e instanceof kW))throw e;if("NO_FCP"!==e.code&&"PAGE_HUNG"!==e.code)throw e;if("string"!=typeof a)throw e;return{requestedUrl:a,finalUrl:a,navigationError:e,warnings:[]}}}async function _computeNavigationResult(e,t,r,a){const{navigationError:n,finalUrl:i}=a,o=[...r.warnings,...a.warnings],s=await async function _collectDebugData(e,t){const r=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===NW.symbol)),a=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===IW.symbol)),n=[r,a].filter((e=>Boolean(e)));if(!n.length)return{};await yW({...t,phase:"getArtifact",artifactDefinitions:n});const i=t.artifactState.getArtifact,o=r?.id,s=o&&await i[o],c=s&&await LW.request(s,e),l=a?.id;return{devtoolsLog:s,records:c,trace:l&&await i[l]}}(e,t),c=s.records?CW(n,{url:i,loadFailureMode:e.navigation.loadFailureMode,networkRecords:s.records}):n;if(c){const t=e.config.settings.locale,r=RW.getFormatted(c.friendlyMessage,t)
1221
+ ;pW.error("NavigationRunner",r,a.requestedUrl);const n={},l=`pageLoadError-${e.navigation.id}`;return s.devtoolsLog&&(n.devtoolsLogs={[l]:s.devtoolsLog}),s.trace&&(n.traces={[l]:s.trace}),{requestedUrl:a.requestedUrl,finalUrl:i,pageLoadError:c,artifacts:n,warnings:[...o,c.friendlyMessage]}}{await yW({phase:"getArtifact",...t});const e=await vW(t.artifactState);return{requestedUrl:a.requestedUrl,finalUrl:i,artifacts:e,warnings:o,pageLoadError:void 0}}}async function _navigation(e){const t=fW(),r={url:await e.driver.url(),gatherMode:"navigation",driver:e.driver,computedCache:e.computedCache,artifactDefinitions:e.navigation.artifacts,artifactState:t,baseArtifacts:e.baseArtifacts,settings:e.config.settings},a=await _setupNavigation(e);await yW({phase:"startInstrumentation",...r}),await yW({phase:"startSensitiveInstrumentation",...r});const n=await _navigate(e);return r.url=n.finalUrl,await yW({phase:"stopSensitiveInstrumentation",...r}),await yW({phase:"stopInstrumentation",...r}),
1222
+ await async function _cleanupNavigation({driver:e}){await TW.clearThrottling(e.defaultSession)}(e),_computeNavigationResult(e,r,a,n)}async function _navigations({driver:e,config:t,requestor:r,baseArtifacts:a,computedCache:n,options:i}){if(!t.navigations)throw new Error("No navigations configured");const o={},s=[];for(const c of t.navigations){const l={driver:e,navigation:c,requestor:r,config:t,baseArtifacts:a,computedCache:n,options:i};let u=!1;const d=await _navigation(l);if("fatal"===c.loadFailureMode&&(d.pageLoadError&&(o.PageLoadError=d.pageLoadError,u=!0),o.URL={requestedUrl:d.requestedUrl,finalUrl:d.finalUrl}),s.push(...d.warnings),Object.assign(o,d.artifacts),u)break}return{artifacts:{...o,LighthouseRunWarnings:s}}}async function _cleanup({requestedUrl:e,driver:t,config:r}){!r.settings.disableStorageReset&&e&&await SW.clearDataForOrigin(t.defaultSession,e),await t.disconnect()}var MW={navigationGather:async function navigationGather$2(e,t){const{page:r,configContext:a={}}=t
1223
+ ;pW.setLevel(a.logLevel||"error");const{config:n}=xW(t.config,{...a,gatherMode:"navigation"}),i=new Map,o={skipAboutBlank:a.skipAboutBlank};"string"!=typeof e&&(o.skipAboutBlank=!0);const s={config:n,computedCache:i};return{artifacts:await gW.gather((async()=>{const t={driver:new hW(r),config:n,requestor:"string"==typeof e?DW.normalizeUrl(e):e,options:o},{baseArtifacts:a}=await _setup(t),{artifacts:s}=await _navigations({...t,baseArtifacts:a,computedCache:i});return await _cleanup(t),AW(a,s)}),s),runnerOptions:s}},_setup,_setupNavigation,_navigate,_navigation,_navigations,_cleanup};const{generateFlowReportHtml:PW}=Zl,{snapshotGather:OW}=tW,{startTimespanGather:FW}=mW,{navigationGather:UW}=MW,jW=pu,{initializeConfig:BW}=WV;async function auditGatherSteps$1(e,t){if(!e.length)throw new Error("Need at least one step before getting the result");const r=[];for(const a of e){const{artifacts:e,name:n,configContext:i}=a;let o=t.gatherStepRunnerOptions?.get(a);if(!o){
1224
+ const r=a.config||t.config,{gatherMode:n}=e.GatherContext,{config:s}=BW(r,{...i,gatherMode:n});o={config:s,computedCache:new Map}}const s=await jW.audit(e,o);if(!s)throw new Error(`Step "${n}" did not return a result`);r.push({lhr:s.lhr,name:n})}const a=new URL(e[0].artifacts.URL.finalUrl);return{steps:r,name:t.name||`User flow (${a.hostname})`}}var $W={UserFlow:class UserFlow$1{constructor(e,t){this.options={page:e,...t},this.name=t?.name,this._gatherSteps=[],this._gatherStepRunnerOptions=new WeakMap}_shortenUrl(e){const t=new URL(e);return`${t.hostname}${t.pathname}`}_getDefaultStepName(e){const t=this._shortenUrl(e.URL.finalUrl);switch(e.GatherContext.gatherMode){case"navigation":return`Navigation report (${t})`;case"timespan":return`Timespan report (${t})`;case"snapshot":return`Snapshot report (${t})`}}_getNextNavigationOptions(e){const t={...this.options,...e},r={...t.configContext},a={...r.settingsOverrides};void 0===r.skipAboutBlank&&(r.skipAboutBlank=!0)
1225
+ ;return this._gatherSteps.some((e=>"navigation"===e.artifacts.GatherContext.gatherMode))&&void 0===a.disableStorageReset&&(a.disableStorageReset=!0),r.settingsOverrides=a,t.configContext=r,t}_addGatherStep(e,t){const r=t?.stepName,a={artifacts:e.artifacts,name:r||this._getDefaultStepName(e.artifacts),config:t.config,configContext:t.configContext};this._gatherSteps.push(a),this._gatherStepRunnerOptions.set(a,e.runnerOptions)}async navigate(e,t){if(this.currentTimespan)throw new Error("Timespan already in progress");const r=this._getNextNavigationOptions(t),a=await UW(e,r);return this._addGatherStep(a,r),a}async startTimespan(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await FW(t);this.currentTimespan={timespan:r,options:t}}async endTimespan(){if(!this.currentTimespan)throw new Error("No timespan in progress");const{timespan:e,options:t}=this.currentTimespan,r=await e.endTimespanGather();return this.currentTimespan=void 0,
1226
+ this._addGatherStep(r,t),r}async snapshot(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await OW(t);return this._addGatherStep(r,t),r}async createFlowResult(){return auditGatherSteps$1(this._gatherSteps,{name:this.name,config:this.options.config,gatherStepRunnerOptions:this._gatherStepRunnerOptions})}async generateReport(){const e=await this.createFlowResult();return PW(e)}createArtifactsJson(){return{gatherSteps:this._gatherSteps,name:this.name}}},auditGatherSteps:auditGatherSteps$1};const{UserFlow:qW,auditGatherSteps:zW}=$W,{snapshotGather:VW}=tW,{startTimespanGather:WW}=mW,{navigationGather:HW}=MW,{generateFlowReportHtml:GW}=Zl,YW=pu;var KW=async function snapshot(...e){const t=await VW(...e);return YW.audit(t.artifacts,t.runnerOptions)},JW=async function startTimespan(...e){const{endTimespanGather:t}=await WW(...e);return{endTimespan:async()=>{const e=await t();return YW.audit(e.artifacts,e.runnerOptions)}}
1227
+ },XW=async function navigation(...e){const t=await HW(...e);return YW.audit(t.artifacts,t.runnerOptions)};const ZW=uo;var QW=class RawConnection extends ZW{constructor(e){super(),this._port=e,this._port.on("message",this.handleRawMessage.bind(this)),this._port.on("close",this.dispose.bind(this))}connect(){return Promise.resolve()}disconnect(){return this._port.close(),Promise.resolve()}sendRawMessage(e){this._port.send(e)}};globalThis.Buffer=Buffer$2,"undefined"!=typeof self?(globalThis.isDevtools=!0,self.setUpWorkerConnection=function setUpWorkerConnection(e){return new QW(e)},self.runLighthouse=Zz,self.runLighthouseNavigation=XW,self.startLighthouseTimespan=JW,self.runLighthouseSnapshot=KW,self.createConfig=function createConfig(e,t){const r={onlyCategories:e,screenEmulation:{disabled:!0}};return"desktop"===t&&(r.throttling=mn.throttling.desktopDense4G,r.emulatedUserAgent=mn.userAgents.desktop,r.formFactor="desktop"),{extends:"lighthouse:default",
1228
+ plugins:["lighthouse-plugin-publisher-ads"],settings:r}},self.listenForStatus=function listenForStatus(e){Log.events.addListener("status",e),Log.events.addListener("warning",e)},self.registerLocaleData=Vn.registerLocaleData,self.lookupLocale=function lookupCanonicalLocale(e){return oi.lookupLocale(e,Vn.getCanonicalLocales())}):global.runBundledLighthouse=Zz}();