require=function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a;}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r);},p,p.exports,r,e,n,t);}return n[i].exports;}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o;}return r;}()({"../audits/accessibility/accesskeys":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class Accesskeys extends AxeAudit{static get meta(){return{name:'accesskeys',description:'`[accesskey]` values are unique',failureDescription:'`[accesskey]` values are not unique',helpText:'Access keys let users quickly focus a part of the page. For proper '+'navigation, each access key must be unique. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/accesskeys?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=Accesskeys;},{"./axe-audit":1}],"../audits/accessibility/aria-allowed-attr":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ARIAAllowedAttr extends AxeAudit{static get meta(){return{name:'aria-allowed-attr',description:'`[aria-*]` attributes match their roles',failureDescription:'`[aria-*]` attributes do not match their roles',helpText:'Each ARIA `role` supports a specific subset of `aria-*` attributes. '+'Mismatching these invalidates the `aria-*` attributes. [Learn '+'more](https://dequeuniversity.com/rules/axe/2.2/aria-allowed-attr?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ARIAAllowedAttr;},{"./axe-audit":1}],"../audits/accessibility/aria-required-attr":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ARIARequiredAttr extends AxeAudit{static get meta(){return{name:'aria-required-attr',description:'`[role]`s have all required `[aria-*]` attributes',failureDescription:'`[role]`s do not have all required `[aria-*]` attributes',helpText:'Some ARIA roles have required attributes that describe the state '+'of the element to screen readers. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-attr?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ARIARequiredAttr;},{"./axe-audit":1}],"../audits/accessibility/aria-required-children":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class AriaRequiredChildren extends AxeAudit{static get meta(){return{name:'aria-required-children',description:'Elements with `[role]` that require specific children `[role]`s, are present',failureDescription:'Elements with `[role]` that require specific children `[role]`s, '+'are missing.',helpText:'Some ARIA parent roles must contain specific child roles to perform '+'their intended accessibility functions. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-children?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=AriaRequiredChildren;},{"./axe-audit":1}],"../audits/accessibility/aria-required-parent":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class AriaRequiredParent extends AxeAudit{static get meta(){return{name:'aria-required-parent',description:'`[role]`s are contained by their required parent element',failureDescription:'`[role]`s are not contained by their required parent element',helpText:'Some ARIA child roles must be contained by specific parent roles to '+'properly perform their intended accessibility functions. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-parent?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=AriaRequiredParent;},{"./axe-audit":1}],"../audits/accessibility/aria-roles":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class AriaRoles extends AxeAudit{static get meta(){return{name:'aria-roles',description:'`[role]` values are valid',failureDescription:'`[role]` values are not valid',helpText:'ARIA roles must have valid values in order to perform their '+'intended accessibility functions. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-roles?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=AriaRoles;},{"./axe-audit":1}],"../audits/accessibility/aria-valid-attr-value":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ARIAValidAttr extends AxeAudit{static get meta(){return{name:'aria-valid-attr-value',description:'`[aria-*]` attributes have valid values',failureDescription:'`[aria-*]` attributes do not have valid values',helpText:'Assistive technologies, like screen readers, can\'t interpret ARIA '+'attributes with invalid values. [Learn '+'more](https://dequeuniversity.com/rules/axe/2.2/aria-valid-attr-value?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ARIAValidAttr;},{"./axe-audit":1}],"../audits/accessibility/aria-valid-attr":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ARIAValidAttr extends AxeAudit{static get meta(){return{name:'aria-valid-attr',description:'`[aria-*]` attributes are valid and not misspelled',failureDescription:'`[aria-*]` attributes are not valid or misspelled',helpText:'Assistive technologies, like screen readers, can\'t interpret ARIA '+'attributes with invalid names. [Learn '+'more](https://dequeuniversity.com/rules/axe/2.2/aria-valid-attr?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ARIAValidAttr;},{"./axe-audit":1}],"../audits/accessibility/audio-caption":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class AudioCaption extends AxeAudit{static get meta(){return{name:'audio-caption',description:'`<audio>` elements contain a `<track>` element with `[kind="captions"]`',failureDescription:'`<audio>` elements are missing a `<track>` element with '+'`[kind="captions"]`.',helpText:'Captions make audio elements usable for deaf or hearing-impaired users, '+'providing critical information such as who is talking, what they\'re saying, '+'and other non-speech information. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/audio-caption?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=AudioCaption;},{"./axe-audit":1}],"../audits/accessibility/button-name":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ButtonName extends AxeAudit{static get meta(){return{name:'button-name',description:'Buttons have an accessible name',failureDescription:'Buttons do not have an accessible name',helpText:'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://dequeuniversity.com/rules/axe/2.2/button-name?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ButtonName;},{"./axe-audit":1}],"../audits/accessibility/bypass":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class Bypass extends AxeAudit{static get meta(){return{name:'bypass',description:'The page contains a heading, skip link, or landmark region',failureDescription:'The page does not contain a heading, skip link, or landmark region',helpText:'Adding ways to bypass repetitive content lets keyboard users navigate the page '+'more efficiently. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/bypass?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=Bypass;},{"./axe-audit":1}],"../audits/accessibility/color-contrast":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ColorContrast extends AxeAudit{static get meta(){return{name:'color-contrast',description:'Background and foreground colors have a sufficient contrast ratio',failureDescription:'Background and foreground colors do not have a '+'sufficient contrast ratio.',helpText:'Low-contrast text is difficult or impossible for many users to read. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/color-contrast?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ColorContrast;},{"./axe-audit":1}],"../audits/accessibility/definition-list":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class DefinitionList extends AxeAudit{static get meta(){return{name:'definition-list',description:'`<dl>`\'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>` '+'or `<template>` elements.',failureDescription:'`<dl>`\'s do not contain only properly-ordered `<dt>` and `<dd>` '+'groups, `<script>` or `<template>` elements.',helpText:'When definition lists are not properly marked up, screen readers may produce '+'confusing or inaccurate output. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/definition-list?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=DefinitionList;},{"./axe-audit":1}],"../audits/accessibility/dlitem":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class DLItem extends AxeAudit{static get meta(){return{name:'dlitem',description:'Definition list items are wrapped in `<dl>` elements',failureDescription:'Definition list items are not wrapped in `<dl>` elements',helpText:'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://dequeuniversity.com/rules/axe/2.2/dlitem?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=DLItem;},{"./axe-audit":1}],"../audits/accessibility/document-title":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class DocumentTitle extends AxeAudit{static get meta(){return{name:'document-title',description:'Document has a `<title>` element',failureDescription:'Document doesn\'t have a `<title>` element',helpText:'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://developers.google.com/web/tools/lighthouse/audits/title).',requiredArtifacts:['Accessibility']};}}
module.exports=DocumentTitle;},{"./axe-audit":1}],"../audits/accessibility/duplicate-id":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class DuplicateId extends AxeAudit{static get meta(){return{name:'duplicate-id',description:'`[id]` attributes on the page are unique',failureDescription:'`[id]` attributes on the page are not unique',helpText:'The value of an id attribute must be unique to prevent '+'other instances from being overlooked by assistive technologies. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/duplicate-id?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=DuplicateId;},{"./axe-audit":1}],"../audits/accessibility/frame-title":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class FrameTitle extends AxeAudit{static get meta(){return{name:'frame-title',description:'`<frame>` or `<iframe>` elements have a title',failureDescription:'`<frame>` or `<iframe>` elements do not have a title',helpText:'Screen reader users rely on frame titles to describe the contents of frames. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/frame-title?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=FrameTitle;},{"./axe-audit":1}],"../audits/accessibility/html-has-lang":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class HTMLHasLang extends AxeAudit{static get meta(){return{name:'html-has-lang',description:'`<html>` element has a `[lang]` attribute',failureDescription:'`<html>` element does not have a `[lang]` attribute',helpText:'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://dequeuniversity.com/rules/axe/2.2/html-lang?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=HTMLHasLang;},{"./axe-audit":1}],"../audits/accessibility/html-lang-valid":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class HTMLLangValid extends AxeAudit{static get meta(){return{name:'html-lang-valid',description:'`<html>` element has a valid value for its `[lang]` attribute',failureDescription:'`<html>` element does not have a valid value for '+'its `[lang]` attribute.',helpText:'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://dequeuniversity.com/rules/axe/2.2/valid-lang?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=HTMLLangValid;},{"./axe-audit":1}],"../audits/accessibility/image-alt":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ImageAlt extends AxeAudit{static get meta(){return{name:'image-alt',description:'Image elements have `[alt]` attributes',failureDescription:'Image elements do not have `[alt]` attributes',helpText:'Informative elements should aim for short, descriptive alternate text. '+'Decorative elements can be ignored with an empty alt attribute. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/image-alt?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ImageAlt;},{"./axe-audit":1}],"../audits/accessibility/input-image-alt":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class InputImageAlt extends AxeAudit{static get meta(){return{name:'input-image-alt',description:'`<input type="image">` elements have `[alt]` text',failureDescription:'`<input type="image">` elements do not have `[alt]` text',helpText:'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://dequeuniversity.com/rules/axe/2.2/input-image-alt?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=InputImageAlt;},{"./axe-audit":1}],"../audits/accessibility/label":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class Label extends AxeAudit{static get meta(){return{name:'label',description:'Form elements have associated labels',failureDescription:'Form elements do not have associated labels',helpText:'Labels ensure that form controls are announced properly by assistive '+'technologies, like screen readers. [Learn '+'more](https://dequeuniversity.com/rules/axe/2.2/label?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=Label;},{"./axe-audit":1}],"../audits/accessibility/layout-table":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class LayoutTable extends AxeAudit{static get meta(){return{name:'layout-table',description:'Presentational `<table>` elements avoid using `<th>`, `<caption>` or the '+'`[summary]` attribute.',failureDescription:'Presentational `<table>` elements do not avoid using `<th>`, '+'`<caption>` or the `[summary]` attribute.',helpText:'A table being used for layout purposes should not include data elements, '+'such as the th or caption elements or the summary attribute, because this can '+'create a confusing experience for screen reader users. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/layout-table?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=LayoutTable;},{"./axe-audit":1}],"../audits/accessibility/link-name":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class LinkName extends AxeAudit{static get meta(){return{name:'link-name',description:'Links have a discernible name',failureDescription:'Links do not have a discernible name',helpText:'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://dequeuniversity.com/rules/axe/2.2/link-name?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=LinkName;},{"./axe-audit":1}],"../audits/accessibility/listitem":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ListItem extends AxeAudit{static get meta(){return{name:'listitem',description:'List items (`<li>`) are contained within `<ul>` or `<ol>` parent elements',failureDescription:'List items (`<li>`) are not contained within `<ul>` '+'or `<ol>` parent elements.',helpText:'Screen readers require list items (`<li>`) to be contained within a '+'parent `<ul>` or `<ol>` to be announced properly. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/listitem?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ListItem;},{"./axe-audit":1}],"../audits/accessibility/list":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class List extends AxeAudit{static get meta(){return{name:'list',description:'Lists contain only `<li>` elements and script supporting elements '+'(`<script>` and `<template>`).',failureDescription:'Lists do not contain only `<li>` elements and script '+'supporting elements (`<script>` and `<template>`).',helpText:'Screen readers have a specific way of announcing lists. Ensuring proper list '+'structure aids screen reader output. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/list?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=List;},{"./axe-audit":1}],"../audits/accessibility/manual/custom-controls-labels":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class CustomControlsLabels extends ManualAudit{static get meta(){return Object.assign({name:'custom-controls-labels',helpText:'Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).',description:'Custom controls have associated labels'},super.partialMeta);}}
module.exports=CustomControlsLabels;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/custom-controls-roles":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class CustomControlsRoles extends ManualAudit{static get meta(){return Object.assign({name:'custom-controls-roles',helpText:'Custom interactive controls have appropriate ARIA roles. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).',description:'Custom controls have ARIA roles'},super.partialMeta);}}
module.exports=CustomControlsRoles;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/focus-traps":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class FocusTraps extends ManualAudit{static get meta(){return Object.assign({name:'focus-traps',helpText:'A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).',description:'User focus is not accidentally trapped in a region'},super.partialMeta);}}
module.exports=FocusTraps;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/focusable-controls":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class FocusableControls extends ManualAudit{static get meta(){return Object.assign({name:'focusable-controls',helpText:'Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).',description:'Interactive controls are keyboard focusable'},super.partialMeta);}}
module.exports=FocusableControls;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/heading-levels":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class HeadingLevels extends ManualAudit{static get meta(){return Object.assign({name:'heading-levels',helpText:'Headings are used to create an outline for the page and heading levels are not skipped. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#take_advantage_of_headings_and_landmarks).',description:'Headings don\'t skip levels'},super.partialMeta);}}
module.exports=HeadingLevels;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/logical-tab-order":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class LogicalTabOrder extends ManualAudit{static get meta(){return Object.assign({name:'logical-tab-order',helpText:'Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).',description:'The page has a logical tab order'},super.partialMeta);}}
module.exports=LogicalTabOrder;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/managed-focus":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class ManagedFocus extends ManualAudit{static get meta(){return Object.assign({name:'managed-focus',helpText:'If new content, such as a dialog, is added to the page, the user\'s focus is directed to it. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).',description:'The user\'s focus is directed to new content added to the page'},super.partialMeta);}}
module.exports=ManagedFocus;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/offscreen-content-hidden":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class OffscreenContentHidden extends ManualAudit{static get meta(){return Object.assign({name:'offscreen-content-hidden',helpText:'Offscreen content is hidden with display: none or aria-hidden=true. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).',description:'Offscreen content is hidden from assistive technology'},super.partialMeta);}}
module.exports=OffscreenContentHidden;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/use-landmarks":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class UseLandmarks extends ManualAudit{static get meta(){return Object.assign({name:'use-landmarks',helpText:'Landmark elements (<main>, <nav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#take_advantage_of_headings_and_landmarks).',description:'HTML5 landmark elements are used to improve navigation'},super.partialMeta);}}
module.exports=UseLandmarks;},{"../../manual/manual-audit":4}],"../audits/accessibility/manual/visual-order-follows-dom":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class VisualOrderFollowsDOM extends ManualAudit{static get meta(){return Object.assign({name:'visual-order-follows-dom',helpText:'DOM order matches the visual order, improving navigation for assistive technology. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).',description:'Visual order on the page follows DOM order'},super.partialMeta);}}
module.exports=VisualOrderFollowsDOM;},{"../../manual/manual-audit":4}],"../audits/accessibility/meta-refresh":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class MetaRefresh extends AxeAudit{static get meta(){return{name:'meta-refresh',description:'The document does not use `<meta http-equiv="refresh">`',failureDescription:'The document uses `<meta http-equiv="refresh">`',helpText:'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://dequeuniversity.com/rules/axe/2.2/meta-refresh?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=MetaRefresh;},{"./axe-audit":1}],"../audits/accessibility/meta-viewport":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class MetaViewport extends AxeAudit{static get meta(){return{name:'meta-viewport',description:'`[user-scalable="no"]` is not used in the `<meta name="viewport">` '+'element and the `[maximum-scale]` attribute is not less than 5.',failureDescription:'`[user-scalable="no"]` is used in the `<meta name="viewport">` '+'element or the `[maximum-scale]` attribute is less than 5.',helpText:'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://dequeuniversity.com/rules/axe/2.2/meta-viewport?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=MetaViewport;},{"./axe-audit":1}],"../audits/accessibility/object-alt":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ObjectAlt extends AxeAudit{static get meta(){return{name:'object-alt',description:'`<object>` elements have `[alt]` text',failureDescription:'`<object>` elements do not have `[alt]` text',helpText:'Screen readers cannot translate non-text content. Adding alt text to `<object>` '+'elements helps screen readers convey meaning to users. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/object-alt?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ObjectAlt;},{"./axe-audit":1}],"../audits/accessibility/tabindex":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class TabIndex extends AxeAudit{static get meta(){return{name:'tabindex',description:'No element has a `[tabindex]` value greater than 0',failureDescription:'Some elements have a `[tabindex]` value greater than 0',helpText:'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://dequeuniversity.com/rules/axe/2.2/tabindex?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=TabIndex;},{"./axe-audit":1}],"../audits/accessibility/td-headers-attr":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class TDHeadersAttr extends AxeAudit{static get meta(){return{name:'td-headers-attr',description:'Cells in a `<table>` element that use the `[headers]` attribute only refer '+'to other cells of that same table.',failureDescription:'Cells in a `<table>` element that use the `[headers]` '+'attribute refers to other cells of that same table.',helpText:'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://dequeuniversity.com/rules/axe/2.2/td-headers-attr?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=TDHeadersAttr;},{"./axe-audit":1}],"../audits/accessibility/th-has-data-cells":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class THHasDataCells extends AxeAudit{static get meta(){return{name:'th-has-data-cells',description:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have '+'data cells they describe.',failureDescription:'`<th>` elements and elements with '+'`[role="columnheader"/"rowheader"]` do not have data cells they describe.',helpText:'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://dequeuniversity.com/rules/axe/2.2/th-has-data-cells?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=THHasDataCells;},{"./axe-audit":1}],"../audits/accessibility/valid-lang":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class ValidLang extends AxeAudit{static get meta(){return{name:'valid-lang',description:'`[lang]` attributes have a valid value',failureDescription:'`[lang]` attributes do not have a valid value',helpText:'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://dequeuniversity.com/rules/axe/2.2/valid-lang?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=ValidLang;},{"./axe-audit":1}],"../audits/accessibility/video-caption":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class VideoCaption extends AxeAudit{static get meta(){return{name:'video-caption',description:'`<video>` elements contain a `<track>` element with `[kind="captions"]`',failureDescription:'`<video>` elements do not contain a `<track>` element '+'with `[kind="captions"]`.',helpText:'When a video provides a caption it is easier for deaf and hearing impaired '+'users to access its information. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/video-caption?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=VideoCaption;},{"./axe-audit":1}],"../audits/accessibility/video-description":[function(require,module,exports){'use strict';const AxeAudit=require('./axe-audit');class VideoDescription extends AxeAudit{static get meta(){return{name:'video-description',description:'`<video>` elements contain a `<track>` element with `[kind="description"]`',failureDescription:'`<video>` elements do not contain a `<track>` element with '+'`[kind="description"]`.',helpText:'Audio descriptions provide relevant information for videos that dialogue '+'cannot, such as facial expressions and scenes. '+'[Learn more](https://dequeuniversity.com/rules/axe/2.2/video-description?application=lighthouse).',requiredArtifacts:['Accessibility']};}}
module.exports=VideoDescription;},{"./axe-audit":1}],"../audits/bootup-time":[function(require,module,exports){'use strict';const Audit=require('./audit');const WebInspector=require('../lib/web-inspector');const Util=require('../report/html/renderer/util');const{groupIdToName,taskToGroup}=require('../lib/task-groups');class BootupTime extends Audit{static get meta(){return{name:'bootup-time',description:'JavaScript boot-up time',failureDescription:'JavaScript boot-up time is too high',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,helpText:'Consider reducing the time spent parsing, compiling, and executing JS. '+'You may find delivering smaller JS payloads helps with this. [Learn '+'more](https://developers.google.com/web/tools/lighthouse/audits/bootup).',requiredArtifacts:['traces']};}
static get defaultOptions(){return{scorePODR:600,scoreMedian:3500,thresholdInMs:50};}
static getExecutionTimingsByURL(timelineModel){const bottomUpByURL=timelineModel.bottomUpGroupBy('URL');const result=new Map();bottomUpByURL.children.forEach((perUrlNode,url)=>{if(!url||url==='about:blank'){return;}
const taskGroups={};perUrlNode.children.forEach(perTaskPerUrlNode=>{const task=WebInspector.TimelineUIUtils.eventStyle(perTaskPerUrlNode.event);const groupName=taskToGroup[task.title]||groupIdToName.other;const groupTotal=taskGroups[groupName]||0;taskGroups[groupName]=groupTotal+(perTaskPerUrlNode.selfTime||0);});result.set(url,taskGroups);});return result;}
static async audit(artifacts,context){const settings=context.settings||{};const trace=artifacts.traces[BootupTime.DEFAULT_PASS];const devtoolsTimelineModel=await artifacts.requestDevtoolsTimelineModel(trace);const executionTimings=BootupTime.getExecutionTimingsByURL(devtoolsTimelineModel);let totalBootupTime=0;const extendedInfo={};const headings=[{key:'url',itemType:'url',text:'URL'},{key:'scripting',granularity:1,itemType:'ms',text:groupIdToName.scripting},{key:'scriptParseCompile',granularity:1,itemType:'ms',text:groupIdToName.scriptParseCompile}];const multiplier=settings.throttlingMethod==='simulate'?settings.throttling.cpuSlowdownMultiplier:1;const results=Array.from(executionTimings).map(([url,groups])=>{for(const[name,value]of Object.entries(groups)){groups[name]=value*multiplier;totalBootupTime+=value*multiplier;}
extendedInfo[url]=groups;const scriptingTotal=groups[groupIdToName.scripting]||0;const parseCompileTotal=groups[groupIdToName.scriptParseCompile]||0;return{url:url,sum:scriptingTotal+parseCompileTotal,scripting:scriptingTotal,scriptParseCompile:parseCompileTotal};}).filter(result=>result.sum>=context.options.thresholdInMs).sort((a,b)=>b.sum-a.sum);const summary={wastedMs:totalBootupTime};const details=BootupTime.makeTableDetails(headings,results,summary);const score=Audit.computeLogNormalScore(totalBootupTime,context.options.scorePODR,context.options.scoreMedian);return{score,rawValue:totalBootupTime,displayValue:[Util.MS_DISPLAY_VALUE,totalBootupTime],details,extendedInfo:{value:extendedInfo}};}}
module.exports=BootupTime;},{"../lib/task-groups":42,"../lib/web-inspector":47,"../report/html/renderer/util":48,"./audit":2}],"../audits/byte-efficiency/efficient-animated-content":[function(require,module,exports){'use strict';const WebInspector=require('../../lib/web-inspector');const ByteEfficiencyAudit=require('./byte-efficiency-audit');const GIF_BYTE_THRESHOLD=100*1024;class EfficientAnimatedContent extends ByteEfficiencyAudit{static get meta(){return{name:'efficient-animated-content',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,description:'Use video formats for animated content',helpText:'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://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)',requiredArtifacts:['devtoolsLogs']};}
static getPercentSavings(bytes){return Math.round(29.1*Math.log10(bytes)-100.7)/100;}
static audit_(artifacts,networkRecords){const unoptimizedContent=networkRecords.filter(record=>record._mimeType==='image/gif'&&record._resourceType===WebInspector.resourceTypes.Image&&(record._resourceSize||0)>GIF_BYTE_THRESHOLD);const results=unoptimizedContent.map(record=>{const resourceSize=record._resourceSize||0;return{url:record.url,totalBytes:resourceSize,wastedBytes:Math.round(resourceSize*EfficientAnimatedContent.getPercentSavings(resourceSize))};});const headings=[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Transfer Size'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Byte Savings'}];return{results,headings};}}
module.exports=EfficientAnimatedContent;},{"../../lib/web-inspector":47,"./byte-efficiency-audit":3}],"../audits/byte-efficiency/offscreen-images":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const Sentry=require('../../lib/sentry');const URL=require('../../lib/url-shim');const ALLOWABLE_OFFSCREEN_X=100;const ALLOWABLE_OFFSCREEN_Y=200;const IGNORE_THRESHOLD_IN_BYTES=2048;const IGNORE_THRESHOLD_IN_PERCENT=75;class OffscreenImages extends ByteEfficiencyAudit{static get meta(){return{name:'offscreen-images',description:'Defer offscreen images',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Consider lazy-loading offscreen and hidden images after all critical resources have '+'finished loading to lower time to interactive. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images).',requiredArtifacts:['ImageUsage','ViewportDimensions','traces','devtoolsLogs']};}
static computeVisiblePixels(imageRect,viewportDimensions){const innerWidth=viewportDimensions.innerWidth;const innerHeight=viewportDimensions.innerHeight;const top=Math.max(imageRect.top,-1*ALLOWABLE_OFFSCREEN_Y);const right=Math.min(imageRect.right,innerWidth+ALLOWABLE_OFFSCREEN_X);const bottom=Math.min(imageRect.bottom,innerHeight+ALLOWABLE_OFFSCREEN_Y);const left=Math.max(imageRect.left,-1*ALLOWABLE_OFFSCREEN_X);return Math.max(right-left,0)*Math.max(bottom-top,0);}
static computeWaste(image,viewportDimensions){if(!image.networkRecord){return null;}
const url=URL.elideDataURI(image.src);const totalPixels=image.clientWidth*image.clientHeight;const visiblePixels=this.computeVisiblePixels(image.clientRect,viewportDimensions);const wastedRatio=totalPixels===0?1:1-visiblePixels/totalPixels;const totalBytes=image.networkRecord.resourceSize;const wastedBytes=Math.round(totalBytes*wastedRatio);if(!Number.isFinite(wastedRatio)){return new Error(`Invalid image sizing information ${url}`);}
return{url,requestStartTime:image.networkRecord.startTime,totalBytes,wastedBytes,wastedPercent:100*wastedRatio};}
static computeWasteWithTTIGraph(results,graph,simulator){return ByteEfficiencyAudit.computeWasteWithTTIGraph(results,graph,simulator,{includeLoad:false});}
static audit_(artifacts,networkRecords,context){const images=artifacts.ImageUsage;const viewportDimensions=artifacts.ViewportDimensions;const trace=artifacts.traces[ByteEfficiencyAudit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[ByteEfficiencyAudit.DEFAULT_PASS];const warnings=[];const resultsMap=images.reduce((results,image)=>{const processed=OffscreenImages.computeWaste(image,viewportDimensions);if(processed===null){return results;}
if(processed instanceof Error){warnings.push(processed.message);Sentry.captureException(processed,{tags:{audit:this.meta.name},level:'warning'});return results;}
const existing=results.get(processed.url);if(!existing||existing.wastedBytes>processed.wastedBytes){results.set(processed.url,processed);}
return results;},new Map());const settings=context.settings;return artifacts.requestFirstCPUIdle({trace,devtoolsLog,settings}).then(firstInteractive=>{const ttiTimestamp=firstInteractive.timestamp?firstInteractive.timestamp/1e6:Infinity;const results=Array.from(resultsMap.values()).filter(item=>{const isWasteful=item.wastedBytes>IGNORE_THRESHOLD_IN_BYTES&&item.wastedPercent>IGNORE_THRESHOLD_IN_PERCENT;const loadedEarly=item.requestStartTime<ttiTimestamp;return isWasteful&&loadedEarly;});const headings=[{key:'url',itemType:'thumbnail',text:''},{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}];return{warnings,results,headings};});}}
module.exports=OffscreenImages;},{"../../lib/sentry":39,"../../lib/url-shim":"url","./byte-efficiency-audit":3}],"../audits/byte-efficiency/render-blocking-resources":[function(require,module,exports){'use strict';const Audit=require('../audit');const Node=require('../../lib/dependency-graph/node');const ByteEfficiencyAudit=require('./byte-efficiency-audit');const UnusedCSS=require('./unused-css-rules');const WebInspector=require('../../lib/web-inspector');const Simulator=require('../../lib/dependency-graph/simulator/simulator');const NetworkNode=require('../../lib/dependency-graph/network-node.js');const MINIMUM_WASTED_MS=50;function getNodesAndTimingByUrl(nodeTimings){const urlMap={};const nodes=Array.from(nodeTimings.keys());nodes.forEach(node=>{if(node.type!=='network')return;const networkNode=node;const nodeTiming=nodeTimings.get(node);if(!nodeTiming)return;urlMap[networkNode.record.url]={node,nodeTiming};});return urlMap;}
class RenderBlockingResources extends Audit{static get meta(){return{name:'render-blocking-resources',description:'Eliminate render-blocking resources',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,helpText:'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://developers.google.com/web/tools/lighthouse/audits/blocking-resources).',requiredArtifacts:['URL','TagsBlockingFirstPaint','traces']};}
static async computeResults(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const simulatorData={devtoolsLog,settings:context.settings};const traceOfTab=await artifacts.requestTraceOfTab(trace);const simulator=await artifacts.requestLoadSimulator(simulatorData);const wastedCssBytes=await RenderBlockingResources.computeWastedCSSBytes(artifacts,context);const metricSettings={throttlingMethod:'simulate'};const metricComputationData={trace,devtoolsLog,simulator,settings:metricSettings};const fcpSimulation=await artifacts.requestFirstContentfulPaint(metricComputationData);const fcpTsInMs=traceOfTab.timestamps.firstContentfulPaint/1000;const nodesByUrl=getNodesAndTimingByUrl(fcpSimulation.optimisticEstimate.nodeTimings);const results=[];const deferredNodeIds=new Set();for(const resource of artifacts.TagsBlockingFirstPaint){if(resource.endTime*1000>fcpTsInMs)continue;if(!nodesByUrl[resource.tag.url])continue;const{node,nodeTiming}=nodesByUrl[resource.tag.url];node.traverse(node=>deferredNodeIds.add(node.id));const wastedMs=Math.round(nodeTiming.endTime-nodeTiming.startTime);if(wastedMs<MINIMUM_WASTED_MS)continue;results.push({url:resource.tag.url,totalBytes:resource.transferSize,wastedMs});}
if(!results.length){return{results,wastedMs:0};}
const wastedMs=RenderBlockingResources.estimateSavingsWithGraphs(simulator,fcpSimulation.optimisticGraph,deferredNodeIds,wastedCssBytes);return{results,wastedMs};}
static estimateSavingsWithGraphs(simulator,fcpGraph,deferredIds,wastedCssBytesByUrl){const originalEstimate=simulator.simulate(fcpGraph).timeInMs;let totalChildNetworkBytes=0;const minimalFCPGraph=fcpGraph.cloneWithRelationships(node=>{const canDeferRequest=deferredIds.has(node.id);if(node.type!==Node.TYPES.NETWORK)return!canDeferRequest;const networkNode=node;const isStylesheet=networkNode.record._resourceType===WebInspector.resourceTypes.Stylesheet;if(canDeferRequest&&isStylesheet){const wastedBytes=wastedCssBytesByUrl.get(networkNode.record.url)||0;totalChildNetworkBytes+=(networkNode.record._transferSize||0)-wastedBytes;}
return!canDeferRequest;});const originalTransferSize=minimalFCPGraph.record._transferSize;const safeTransferSize=originalTransferSize||0;minimalFCPGraph.record._transferSize=safeTransferSize+totalChildNetworkBytes;const estimateAfterInline=simulator.simulate(minimalFCPGraph).timeInMs;minimalFCPGraph.record._transferSize=originalTransferSize;return Math.round(Math.max(originalEstimate-estimateAfterInline,0));}
static async computeWastedCSSBytes(artifacts,context){const wastedBytesByUrl=new Map();try{const results=await UnusedCSS.audit(artifacts,context);for(const item of results.details.items){wastedBytesByUrl.set(item.url,item.wastedBytes);}}catch(_){}
return wastedBytesByUrl;}
static async audit(artifacts,context){const{results,wastedMs}=await RenderBlockingResources.computeResults(artifacts,context);let displayValue='';if(results.length>1){displayValue=`${results.length} resources delayed first paint by ${wastedMs}ms`;}else if(results.length===1){displayValue=`${results.length} resource delayed first paint by ${wastedMs}ms`;}
const headings=[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:0.01,text:'Size (KB)'},{key:'wastedMs',itemType:'ms',text:'Download Time (ms)',granularity:1}];const summary={wastedMs};const details=Audit.makeTableDetails(headings,results,summary);return{displayValue,score:ByteEfficiencyAudit.scoreForWastedMs(wastedMs),rawValue:wastedMs,details};}}
module.exports=RenderBlockingResources;},{"../../lib/dependency-graph/network-node.js":24,"../../lib/dependency-graph/node":25,"../../lib/dependency-graph/simulator/simulator":28,"../../lib/web-inspector":47,"../audit":2,"./byte-efficiency-audit":3,"./unused-css-rules":"../audits/byte-efficiency/unused-css-rules"}],"../audits/byte-efficiency/total-byte-weight":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');class TotalByteWeight extends ByteEfficiencyAudit{static get meta(){return{name:'total-byte-weight',description:'Avoids enormous network payloads',failureDescription:'Has enormous network payloads',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Large network payloads cost users real money and are highly correlated with '+'long load times. [Learn '+'more](https://developers.google.com/web/tools/lighthouse/audits/network-payloads).',requiredArtifacts:['devtoolsLogs']};}
static get defaultOptions(){return{scorePODR:2500*1024,scoreMedian:4000*1024};}
static async audit(artifacts,context){const devtoolsLogs=artifacts.devtoolsLogs[ByteEfficiencyAudit.DEFAULT_PASS];const[networkRecords,networkThroughput]=await Promise.all([artifacts.requestNetworkRecords(devtoolsLogs),artifacts.requestNetworkThroughput(devtoolsLogs)]);let totalBytes=0;let results=[];networkRecords.forEach(record=>{if(record.parsedURL.scheme==='data'||!record.finished)return;const result={url:record.url,totalBytes:record.transferSize,totalMs:ByteEfficiencyAudit.bytesToMs(record.transferSize,networkThroughput)};totalBytes+=result.totalBytes;results.push(result);});const totalCompletedRequests=results.length;results=results.sort((itemA,itemB)=>itemB.totalBytes-itemA.totalBytes).slice(0,10);const score=ByteEfficiencyAudit.computeLogNormalScore(totalBytes,context.options.scorePODR,context.options.scoreMedian);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Total Size'},{key:'totalMs',itemType:'ms',text:'Transfer Time'}];const tableDetails=ByteEfficiencyAudit.makeTableDetails(headings,results);return{score,rawValue:totalBytes,displayValue:['Total size was %d\xa0KB',totalBytes/1024],extendedInfo:{value:{results,totalCompletedRequests}},details:tableDetails};}}
module.exports=TotalByteWeight;},{"./byte-efficiency-audit":3}],"../audits/byte-efficiency/unminified-css":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const UnusedCSSRules=require('./unused-css-rules');const IGNORE_THRESHOLD_IN_PERCENT=5;const IGNORE_THRESHOLD_IN_BYTES=2048;class UnminifiedCSS extends ByteEfficiencyAudit{static get meta(){return{name:'unminified-css',description:'Minify CSS',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Minifying CSS files can reduce network payload sizes. '+'[Learn more](https://developers.google.com/speed/docs/insights/MinifyResources).',requiredArtifacts:['CSSUsage','devtoolsLogs']};}
static computeTokenLength(content){let totalTokenLength=0;let isInComment=false;let isInLicenseComment=false;let isInString=false;let stringOpenChar=null;for(let i=0;i<content.length;i++){const twoChars=content.substr(i,2);const char=twoChars.charAt(0);const isWhitespace=char===' '||char==='\n'||char==='\t';const isAStringOpenChar=char===`'`||char==='"';if(isInComment){if(isInLicenseComment)totalTokenLength++;if(twoChars==='*/'){if(isInLicenseComment)totalTokenLength++;isInComment=false;i++;}}else if(isInString){totalTokenLength++;if(char==='\\'){totalTokenLength++;i++;}else if(char===stringOpenChar){isInString=false;}}else{if(twoChars==='/*'){isInComment=true;isInLicenseComment=content.charAt(i+2)==='!';if(isInLicenseComment)totalTokenLength+=2;i++;}else if(isAStringOpenChar){isInString=true;stringOpenChar=char;totalTokenLength++;}else if(!isWhitespace){totalTokenLength++;}}}
if(isInComment||isInString){return content.length;}
return totalTokenLength;}
static computeWaste(stylesheet,networkRecord,pageUrl){const content=stylesheet.content;const totalTokenLength=UnminifiedCSS.computeTokenLength(content);let url=stylesheet.header.sourceURL;if(!url||url===pageUrl){const contentPreview=UnusedCSSRules.determineContentPreview(stylesheet.content);url={type:'code',value:contentPreview};}
const totalBytes=ByteEfficiencyAudit.estimateTransferSize(networkRecord,content.length,'stylesheet');const wastedRatio=1-totalTokenLength/content.length;const wastedBytes=Math.round(totalBytes*wastedRatio);return{url,totalBytes,wastedBytes,wastedPercent:100*wastedRatio};}
static audit_(artifacts,networkRecords){const pageUrl=artifacts.URL.finalUrl;const results=[];for(const stylesheet of artifacts.CSSUsage.stylesheets){const networkRecord=networkRecords.find(record=>record.url===stylesheet.header.sourceURL);if(!stylesheet.content)continue;const result=UnminifiedCSS.computeWaste(stylesheet,networkRecord,pageUrl);if(result.wastedPercent<IGNORE_THRESHOLD_IN_PERCENT||result.wastedBytes<IGNORE_THRESHOLD_IN_BYTES||!Number.isFinite(result.wastedBytes))continue;results.push(result);}
return{results,headings:[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}]};}}
module.exports=UnminifiedCSS;},{"./byte-efficiency-audit":3,"./unused-css-rules":"../audits/byte-efficiency/unused-css-rules"}],"../audits/byte-efficiency/unminified-javascript":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const esprima=require('esprima');const IGNORE_THRESHOLD_IN_PERCENT=10;const IGNORE_THRESHOLD_IN_BYTES=2048;class UnminifiedJavaScript extends ByteEfficiencyAudit{static get meta(){return{name:'unminified-javascript',description:'Minify JavaScript',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Minifying JavaScript files can reduce payload sizes and script parse time. '+'[Learn more](https://developers.google.com/speed/docs/insights/MinifyResources).',requiredArtifacts:['Scripts','devtoolsLogs']};}
static computeWaste(scriptContent,networkRecord){const contentLength=scriptContent.length;let totalTokenLength=0;const tokens=esprima.tokenize(scriptContent,{tolerant:true});if(!tokens.length&&tokens.errors&&tokens.errors.length){throw tokens.errors[0];}
for(const token of tokens){totalTokenLength+=token.value.length;}
const totalBytes=ByteEfficiencyAudit.estimateTransferSize(networkRecord,contentLength,'script');const wastedRatio=1-totalTokenLength/contentLength;const wastedBytes=Math.round(totalBytes*wastedRatio);return{url:networkRecord.url,totalBytes,wastedBytes,wastedPercent:100*wastedRatio};}
static audit_(artifacts,networkRecords){const results=[];const warnings=[];for(const requestId of Object.keys(artifacts.Scripts)){const scriptContent=artifacts.Scripts[requestId];const networkRecord=networkRecords.find(record=>record.requestId===requestId);if(!networkRecord||!scriptContent)continue;try{const result=UnminifiedJavaScript.computeWaste(scriptContent,networkRecord);if(result.wastedPercent<IGNORE_THRESHOLD_IN_PERCENT||result.wastedBytes<IGNORE_THRESHOLD_IN_BYTES||!Number.isFinite(result.wastedBytes))continue;results.push(result);}catch(err){warnings.push(`Unable to process ${networkRecord._url}: ${err.message}`);}}
return{results,warnings,headings:[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}]};}}
module.exports=UnminifiedJavaScript;},{"./byte-efficiency-audit":3,"esprima":136}],"../audits/byte-efficiency/unused-css-rules":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const IGNORE_THRESHOLD_IN_BYTES=2048;const PREVIEW_LENGTH=100;class UnusedCSSRules extends ByteEfficiencyAudit{static get meta(){return{name:'unused-css-rules',description:'Defer unused CSS',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Remove unused rules from stylesheets to reduce unnecessary '+'bytes consumed by network activity. '+'[Learn more](https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery).',requiredArtifacts:['CSSUsage','URL','devtoolsLogs']};}
static indexStylesheetsById(styles,networkRecords){const indexedNetworkRecords=networkRecords.reduce((indexed,record)=>{indexed[record.url]=record;return indexed;},{});return styles.reduce((indexed,stylesheet)=>{indexed[stylesheet.header.styleSheetId]=Object.assign({usedRules:[],networkRecord:indexedNetworkRecords[stylesheet.header.sourceURL]},stylesheet);return indexed;},{});}
static indexUsedRules(rules,indexedStylesheets){rules.forEach(rule=>{const stylesheetInfo=indexedStylesheets[rule.styleSheetId];if(!stylesheetInfo){return;}
if(rule.used){stylesheetInfo.usedRules.push(rule);}});}
static computeUsage(stylesheetInfo){let usedUncompressedBytes=0;const totalUncompressedBytes=stylesheetInfo.content.length;for(const usedRule of stylesheetInfo.usedRules){usedUncompressedBytes+=usedRule.endOffset-usedRule.startOffset;}
const totalTransferredBytes=ByteEfficiencyAudit.estimateTransferSize(stylesheetInfo.networkRecord,totalUncompressedBytes,'stylesheet');const percentUnused=(totalUncompressedBytes-usedUncompressedBytes)/totalUncompressedBytes;const wastedBytes=Math.round(percentUnused*totalTransferredBytes);return{wastedBytes,wastedPercent:percentUnused*100,totalBytes:totalTransferredBytes};}
static determineContentPreview(content){let preview=(content||'').slice(0,PREVIEW_LENGTH*5).replace(/( {2,}|\t)+/g,'  ').replace(/\n\s+}/g,'\n}').trim();if(preview.length>PREVIEW_LENGTH){const firstRuleStart=preview.indexOf('{');const firstRuleEnd=preview.indexOf('}');if(firstRuleStart===-1||firstRuleEnd===-1||firstRuleStart>firstRuleEnd||firstRuleStart>PREVIEW_LENGTH){preview=preview.slice(0,PREVIEW_LENGTH)+'...';}else if(firstRuleEnd<PREVIEW_LENGTH){preview=preview.slice(0,firstRuleEnd+1)+' ...';}else{const lastSemicolonIndex=preview.slice(0,PREVIEW_LENGTH).lastIndexOf(';');preview=lastSemicolonIndex<firstRuleStart?preview.slice(0,PREVIEW_LENGTH)+'... } ...':preview.slice(0,lastSemicolonIndex+1)+' ... } ...';}}
return preview;}
static mapSheetToResult(stylesheetInfo,pageUrl){let url=stylesheetInfo.header.sourceURL;if(!url||url===pageUrl){const contentPreview=UnusedCSSRules.determineContentPreview(stylesheetInfo.content);url={type:'code',value:contentPreview};}
const usage=UnusedCSSRules.computeUsage(stylesheetInfo);return Object.assign({url},usage);}
static audit_(artifacts){const styles=artifacts.CSSUsage.stylesheets;const usage=artifacts.CSSUsage.rules;const pageUrl=artifacts.URL.finalUrl;const devtoolsLogs=artifacts.devtoolsLogs[ByteEfficiencyAudit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLogs).then(networkRecords=>{const indexedSheets=UnusedCSSRules.indexStylesheetsById(styles,networkRecords);UnusedCSSRules.indexUsedRules(usage,indexedSheets);const results=Object.keys(indexedSheets).map(sheetId=>UnusedCSSRules.mapSheetToResult(indexedSheets[sheetId],pageUrl)).filter(sheet=>sheet&&sheet.wastedBytes>IGNORE_THRESHOLD_IN_BYTES);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}];return{results,headings};});}}
module.exports=UnusedCSSRules;},{"./byte-efficiency-audit":3}],"../audits/byte-efficiency/unused-javascript":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const IGNORE_THRESHOLD_IN_BYTES=2048;class UnusedJavaScript extends ByteEfficiencyAudit{static get meta(){return{name:'unused-javascript',description:'Unused JavaScript',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Remove unused JavaScript to reduce bytes consumed by network activity.',requiredArtifacts:['JsUsage','devtoolsLogs']};}
static computeWaste(script){let maximumEndOffset=0;for(const func of script.functions){for(const range of func.ranges){maximumEndOffset=Math.max(maximumEndOffset,range.endOffset);}}
const unusedByIndex=new Uint8Array(maximumEndOffset);for(const func of script.functions){for(const range of func.ranges){if(range.count===0){for(let i=range.startOffset;i<range.endOffset;i++){unusedByIndex[i]=1;}}}}
let unused=0;for(const x of unusedByIndex){unused+=x;}
return{unusedLength:unused,contentLength:maximumEndOffset};}
static mergeWaste(wasteData,networkRecord){let unusedLength=0;let contentLength=0;for(const usage of wasteData){unusedLength+=usage.unusedLength;contentLength+=usage.contentLength;}
const totalBytes=ByteEfficiencyAudit.estimateTransferSize(networkRecord,contentLength,'script');const wastedRatio=unusedLength/contentLength||0;const wastedBytes=Math.round(totalBytes*wastedRatio);return{url:networkRecord.url,totalBytes,wastedBytes,wastedPercent:100*wastedRatio};}
static audit_(artifacts,networkRecords){const scriptsByUrl=new Map();for(const script of artifacts.JsUsage){const scripts=scriptsByUrl.get(script.url)||[];scripts.push(script);scriptsByUrl.set(script.url,scripts);}
const results=[];for(const[url,scripts]of scriptsByUrl.entries()){const networkRecord=networkRecords.find(record=>record.url===url);if(!networkRecord)continue;const wasteData=scripts.map(UnusedJavaScript.computeWaste);const result=UnusedJavaScript.mergeWaste(wasteData,networkRecord);if(result.wastedBytes<=IGNORE_THRESHOLD_IN_BYTES)continue;results.push(result);}
return{results,headings:[{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}]};}}
module.exports=UnusedJavaScript;},{"./byte-efficiency-audit":3}],"../audits/byte-efficiency/uses-long-cache-ttl":[function(require,module,exports){'use strict';const assert=require('assert');const parseCacheControl=require('parse-cache-control');const Audit=require('../audit');const WebInspector=require('../../lib/web-inspector');const URL=require('../../lib/url-shim');const IGNORE_THRESHOLD_IN_PERCENT=0.925;class CacheHeaders extends Audit{static get meta(){return{name:'uses-long-cache-ttl',description:'Uses efficient cache policy on static assets',failureDescription:'Uses inefficient cache policy on static assets',helpText:'A long cache lifetime can speed up repeat visits to your page. '+'[Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#cache-control).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['devtoolsLogs']};}
static get defaultOptions(){return{scorePODR:4*1024,scoreMedian:128*1024};}
static linearInterpolation(x0,y0,x1,y1,x){const slope=(y1-y0)/(x1-x0);return y0+(x-x0)*slope;}
static getCacheHitProbability(maxAgeInSeconds){const RESOURCE_AGE_IN_HOURS_DECILES=[0,0.2,1,3,8,12,24,48,72,168,8760,Infinity];assert.ok(RESOURCE_AGE_IN_HOURS_DECILES.length===12,'deciles 0-10 and 1 for overflow');const maxAgeInHours=maxAgeInSeconds/3600;const upperDecileIndex=RESOURCE_AGE_IN_HOURS_DECILES.findIndex(decile=>decile>=maxAgeInHours);if(upperDecileIndex===RESOURCE_AGE_IN_HOURS_DECILES.length-1)return 1;if(upperDecileIndex===0)return 0;const upperDecileValue=RESOURCE_AGE_IN_HOURS_DECILES[upperDecileIndex];const lowerDecileValue=RESOURCE_AGE_IN_HOURS_DECILES[upperDecileIndex-1];const upperDecile=upperDecileIndex/10;const lowerDecile=(upperDecileIndex-1)/10;return CacheHeaders.linearInterpolation(lowerDecileValue,lowerDecile,upperDecileValue,upperDecile,maxAgeInHours);}
static computeCacheLifetimeInSeconds(headers,cacheControl){if(cacheControl){if(cacheControl['no-cache']||cacheControl['no-store'])return 0;const maxAge=cacheControl['max-age'];if(maxAge!==undefined&&Number.isFinite(maxAge))return Math.max(maxAge,0);}else if((headers.get('pragma')||'').includes('no-cache')){return 0;}
const expiresHeaders=headers.get('expires');if(expiresHeaders){const expires=new Date(expiresHeaders).getTime();if(!expires)return 0;return Math.max(0,Math.ceil((expires-Date.now())/1000));}
return null;}
static isCacheableAsset(record){const CACHEABLE_STATUS_CODES=new Set([200,203,206]);const STATIC_RESOURCE_TYPES=new Set([WebInspector.resourceTypes.Font,WebInspector.resourceTypes.Image,WebInspector.resourceTypes.Media,WebInspector.resourceTypes.Script,WebInspector.resourceTypes.Stylesheet]);const resourceUrl=record._url;return(CACHEABLE_STATUS_CODES.has(record.statusCode)&&STATIC_RESOURCE_TYPES.has(record._resourceType)&&!resourceUrl.includes('data:'));}
static audit(artifacts,context){const devtoolsLogs=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLogs).then(records=>{const results=[];let queryStringCount=0;let totalWastedBytes=0;for(const record of records){if(!CacheHeaders.isCacheableAsset(record))continue;const headers=new Map();for(const header of record._responseHeaders||[]){headers.set(header.name.toLowerCase(),header.value);}
const cacheControl=parseCacheControl(headers.get('cache-control'));let cacheLifetimeInSeconds=CacheHeaders.computeCacheLifetimeInSeconds(headers,cacheControl);if(cacheLifetimeInSeconds===0)continue;cacheLifetimeInSeconds=cacheLifetimeInSeconds||0;const cacheHitProbability=CacheHeaders.getCacheHitProbability(cacheLifetimeInSeconds);if(cacheHitProbability>IGNORE_THRESHOLD_IN_PERCENT)continue;const url=URL.elideDataURI(record._url);const totalBytes=record._transferSize||0;const wastedBytes=(1-cacheHitProbability)*totalBytes;totalWastedBytes+=wastedBytes;if(url.includes('?'))queryStringCount++;results.push({url,cacheControl,cacheLifetimeMs:cacheLifetimeInSeconds*1000,cacheHitProbability,totalBytes,wastedBytes});}
results.sort((a,b)=>a.cacheLifetimeMs-b.cacheLifetimeMs||b.totalBytes-a.totalBytes);const score=Audit.computeLogNormalScore(totalWastedBytes,context.options.scorePODR,context.options.scoreMedian);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'cacheLifetimeMs',itemType:'ms',text:'Cache TTL',displayUnit:'duration'},{key:'totalBytes',itemType:'bytes',text:'Size (KB)',displayUnit:'kb',granularity:1}];const summary={wastedBytes:totalWastedBytes};const details=Audit.makeTableDetails(headings,results,summary);return{score,rawValue:totalWastedBytes,displayValue:`${results.length} asset${results.length!==1?'s':''} found`,extendedInfo:{value:{results,queryStringCount}},details};});}}
module.exports=CacheHeaders;},{"../../lib/url-shim":"url","../../lib/web-inspector":47,"../audit":2,"assert":53,"parse-cache-control":147}],"../audits/byte-efficiency/uses-optimized-images":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const URL=require('../../lib/url-shim');const IGNORE_THRESHOLD_IN_BYTES=4096;class UsesOptimizedImages extends ByteEfficiencyAudit{static get meta(){return{name:'uses-optimized-images',description:'Efficiently encode images',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Optimized images load faster and consume less cellular data. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/optimize-images).',requiredArtifacts:['OptimizedImages','devtoolsLogs']};}
static computeSavings(image){const bytes=image.originalSize-image.jpegSize;const percent=100*bytes/image.originalSize;return{bytes,percent};}
static audit_(artifacts){const images=artifacts.OptimizedImages;const results=[];const warnings=[];for(const image of images){if(image.failed){warnings.push(`Unable to decode ${URL.getURLDisplayName(image.url)}`);continue;}else if(/(jpeg|bmp)/.test(image.mimeType)===false||image.originalSize<image.jpegSize+IGNORE_THRESHOLD_IN_BYTES){continue;}
const url=URL.elideDataURI(image.url);const jpegSavings=UsesOptimizedImages.computeSavings(image);results.push({url,fromProtocol:image.fromProtocol,isCrossOrigin:!image.isSameOrigin,totalBytes:image.originalSize,wastedBytes:jpegSavings.bytes});}
const headings=[{key:'url',itemType:'thumbnail',text:''},{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}];return{warnings,results,headings};}}
module.exports=UsesOptimizedImages;},{"../../lib/url-shim":"url","./byte-efficiency-audit":3}],"../audits/byte-efficiency/uses-responsive-images":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const Sentry=require('../../lib/sentry');const URL=require('../../lib/url-shim');const IGNORE_THRESHOLD_IN_BYTES=2048;class UsesResponsiveImages extends ByteEfficiencyAudit{static get meta(){return{name:'uses-responsive-images',description:'Properly size images',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Serve images that are appropriately-sized to save cellular data '+'and improve load time. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/oversized-images).',requiredArtifacts:['ImageUsage','ViewportDimensions','devtoolsLogs']};}
static computeWaste(image,DPR){if(!image.networkRecord){return null;}
const url=URL.elideDataURI(image.src);const actualPixels=image.naturalWidth*image.naturalHeight;const usedPixels=image.clientWidth*image.clientHeight*Math.pow(DPR,2);const wastedRatio=1-usedPixels/actualPixels;const totalBytes=image.networkRecord.resourceSize;const wastedBytes=Math.round(totalBytes*wastedRatio);if(!usedPixels){return null;}
if(!Number.isFinite(wastedRatio)){return new Error(`Invalid image sizing information ${url}`);}
return{url,totalBytes,wastedBytes,wastedPercent:100*wastedRatio};}
static audit_(artifacts){const images=artifacts.ImageUsage;const DPR=artifacts.ViewportDimensions.devicePixelRatio;const warnings=[];const resultsMap=new Map();images.forEach(image=>{if(!image.networkRecord||image.networkRecord.mimeType==='image/svg+xml'){return;}
const processed=UsesResponsiveImages.computeWaste(image,DPR);if(!processed)return;if(processed instanceof Error){warnings.push(processed.message);Sentry.captureException(processed,{tags:{audit:this.meta.name},level:'warning'});return;}
const existing=resultsMap.get(processed.url);if(!existing||existing.wastedBytes>processed.wastedBytes){resultsMap.set(processed.url,processed);}});const results=Array.from(resultsMap.values()).filter(item=>item.wastedBytes>IGNORE_THRESHOLD_IN_BYTES);const headings=[{key:'url',itemType:'thumbnail',text:''},{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}];return{warnings,results,headings};}}
module.exports=UsesResponsiveImages;},{"../../lib/sentry":39,"../../lib/url-shim":"url","./byte-efficiency-audit":3}],"../audits/byte-efficiency/uses-text-compression":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const URL=require('../../lib/url-shim');const IGNORE_THRESHOLD_IN_BYTES=1400;const IGNORE_THRESHOLD_IN_PERCENT=0.1;class ResponsesAreCompressed extends ByteEfficiencyAudit{static get meta(){return{name:'uses-text-compression',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,description:'Enable text compression',helpText:'Text-based responses should be served with compression (gzip, deflate or brotli)'+' to minimize total network bytes.'+' [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/optimize-encoding-and-transfer).',requiredArtifacts:['ResponseCompression','devtoolsLogs']};}
static audit_(artifacts){const uncompressedResponses=artifacts.ResponseCompression;const results=[];uncompressedResponses.forEach(record=>{const originalSize=record.resourceSize;const gzipSize=record.gzipSize;const gzipSavings=originalSize-gzipSize;if(1-gzipSize/originalSize<IGNORE_THRESHOLD_IN_PERCENT||gzipSavings<IGNORE_THRESHOLD_IN_BYTES||record.transferSize<gzipSize)
{return;}
const url=URL.elideDataURI(record.url);const isDuplicate=results.find(res=>res.url===url&&res.totalBytes===record.resourceSize);if(isDuplicate){return;}
results.push({url,totalBytes:originalSize,wastedBytes:gzipSavings});});const headings=[{key:'url',itemType:'url',text:'Uncompressed resource URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'GZIP Savings'}];return{results,headings};}}
module.exports=ResponsesAreCompressed;},{"../../lib/url-shim":"url","./byte-efficiency-audit":3}],"../audits/byte-efficiency/uses-webp-images":[function(require,module,exports){'use strict';const ByteEfficiencyAudit=require('./byte-efficiency-audit');const URL=require('../../lib/url-shim');const IGNORE_THRESHOLD_IN_BYTES=8192;class UsesWebPImages extends ByteEfficiencyAudit{static get meta(){return{name:'uses-webp-images',description:'Serve images in next-gen formats',scoreDisplayMode:ByteEfficiencyAudit.SCORING_MODES.NUMERIC,helpText:'Image formats like JPEG 2000, JPEG XR, and WebP often provide better '+'compression than PNG or JPEG, which means faster downloads and less data consumption. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/webp).',requiredArtifacts:['OptimizedImages','devtoolsLogs']};}
static computeSavings(image){const bytes=image.originalSize-image.webpSize;const percent=100*bytes/image.originalSize;return{bytes,percent};}
static audit_(artifacts){const images=artifacts.OptimizedImages;const results=[];const warnings=[];for(const image of images){if(image.failed){warnings.push(`Unable to decode ${URL.getURLDisplayName(image.url)}`);continue;}else if(image.originalSize<image.webpSize+IGNORE_THRESHOLD_IN_BYTES){continue;}
const url=URL.elideDataURI(image.url);const webpSavings=UsesWebPImages.computeSavings(image);results.push({url,fromProtocol:image.fromProtocol,isCrossOrigin:!image.isSameOrigin,totalBytes:image.originalSize,wastedBytes:webpSavings.bytes});}
const headings=[{key:'url',itemType:'thumbnail',text:''},{key:'url',itemType:'url',text:'URL'},{key:'totalBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Original'},{key:'wastedBytes',itemType:'bytes',displayUnit:'kb',granularity:1,text:'Potential Savings'}];return{warnings,results,headings};}}
module.exports=UsesWebPImages;},{"../../lib/url-shim":"url","./byte-efficiency-audit":3}],"../audits/content-width":[function(require,module,exports){'use strict';const Audit=require('./audit');class ContentWidth extends Audit{static get meta(){return{name:'content-width',description:'Content is sized correctly for the viewport',failureDescription:'Content is not sized correctly for the viewport',helpText:'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://developers.google.com/web/tools/lighthouse/audits/content-sized-correctly-for-viewport).',requiredArtifacts:['ViewportDimensions']};}
static audit(artifacts){const viewportWidth=artifacts.ViewportDimensions.innerWidth;const windowWidth=artifacts.ViewportDimensions.outerWidth;const widthsMatch=viewportWidth===windowWidth;return{rawValue:widthsMatch,explanation:this.createExplanation(widthsMatch,artifacts.ViewportDimensions)};}
static createExplanation(match,artifact){if(match){return'';}
return'The viewport size is '+artifact.innerWidth+'px, '+'whereas the window size is '+artifact.outerWidth+'px.';}}
module.exports=ContentWidth;},{"./audit":2}],"../audits/critical-request-chains":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');class CriticalRequestChains extends Audit{static get meta(){return{name:'critical-request-chains',description:'Critical Request Chains',scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,helpText:'The Critical Request Chains below show you what resources are '+'issued 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://developers.google.com/web/tools/lighthouse/audits/critical-request-chains).',requiredArtifacts:['devtoolsLogs','URL']};}
static _traverse(tree,cb){function walk(node,depth,startTime,transferSize=0){const children=Object.keys(node);if(children.length===0){return;}
children.forEach(id=>{const child=node[id];if(!startTime){startTime=child.request.startTime;}
cb({depth,id,node:child,chainDuration:(child.request.endTime-startTime)*1000,chainTransferSize:transferSize+child.request.transferSize});walk(child.children,depth+1,startTime);},'');}
walk(tree,0);}
static _getLongestChain(tree){const longest={duration:0,length:0,transferSize:0};CriticalRequestChains._traverse(tree,opts=>{const duration=opts.chainDuration;if(duration>longest.duration){longest.duration=duration;longest.transferSize=opts.chainTransferSize;longest.length=opts.depth;}});longest.length++;return longest;}
static flattenRequests(tree){const flattendChains={};const chainMap=new Map();function flatten(opts){const request=opts.node.request;const simpleRequest={url:request.url,startTime:request.startTime,endTime:request.endTime,_responseReceivedTime:request._responseReceivedTime,transferSize:request.transferSize};let chain=chainMap.get(opts.id);if(chain){chain.request=simpleRequest;}else{chain={request:simpleRequest,children:{}};flattendChains[opts.id]=chain;}
for(const chainId of Object.keys(opts.node.children)){const childChain={request:{},children:{}};chainMap.set(chainId,childChain);chain.children[chainId]=childChain;}
chainMap.set(opts.id,chain);}
CriticalRequestChains._traverse(tree,flatten);return flattendChains;}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const URL=artifacts.URL;return artifacts.requestCriticalRequestChains({devtoolsLog,URL}).then(chains=>{let chainCount=0;function walk(node,depth){const children=Object.keys(node);if(children.length===0){chainCount++;}
children.forEach(id=>{const child=node[id];walk(child.children,depth+1);},'');}
const flattenedChains=CriticalRequestChains.flattenRequests(chains);const initialNavKey=Object.keys(flattenedChains)[0];const initialNavChildren=initialNavKey&&flattenedChains[initialNavKey].children;if(initialNavChildren&&Object.keys(initialNavChildren).length>0){walk(initialNavChildren,0);}
const longestChain=CriticalRequestChains._getLongestChain(flattenedChains);return{rawValue:chainCount===0,notApplicable:chainCount===0,displayValue:chainCount?`${Util.formatNumber(chainCount)} chains found`:'',extendedInfo:{value:{chains:flattenedChains,longestChain}},details:{type:'criticalrequestchain',header:{type:'text',text:'View critical network waterfall:'},chains:flattenedChains,longestChain}};});}}
module.exports=CriticalRequestChains;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/deprecations":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');class Deprecations extends Audit{static get meta(){return{name:'deprecations',description:'Avoids deprecated APIs',failureDescription:'Uses deprecated API\'s',helpText:'Deprecated APIs will eventually be removed from the browser. '+'[Learn more](https://www.chromestatus.com/features#deprecated).',requiredArtifacts:['ChromeConsoleMessages']};}
static audit(artifacts){const entries=artifacts.ChromeConsoleMessages;const deprecations=entries.filter(log=>log.entry.source==='deprecation').map(log=>{return{value:log.entry.text,url:log.entry.url||'',source:log.entry.source,lineNumber:log.entry.lineNumber};});const headings=[{key:'value',itemType:'code',text:'Deprecation / Warning'},{key:'url',itemType:'url',text:'URL'},{key:'lineNumber',itemType:'text',text:'Line'}];const details=Audit.makeTableDetails(headings,deprecations);let displayValue='';if(deprecations.length>1){displayValue=`${Util.formatNumber(deprecations.length)} warnings found`;}else if(deprecations.length===1){displayValue=`${deprecations.length} warning found`;}
return{rawValue:deprecations.length===0,displayValue,extendedInfo:{value:deprecations},details};}}
module.exports=Deprecations;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/dobetterweb/appcache-manifest":[function(require,module,exports){'use strict';const Audit=require('../audit');class AppCacheManifestAttr extends Audit{static get meta(){return{name:'appcache-manifest',description:'Avoids Application Cache',failureDescription:'Uses Application Cache',helpText:'Application Cache is deprecated. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/appcache).',requiredArtifacts:['AppCacheManifest']};}
static audit(artifacts){const usingAppcache=artifacts.AppCacheManifest!==null;const displayValue=usingAppcache?`Found "${artifacts.AppCacheManifest}"`:'';return{rawValue:!usingAppcache,displayValue};}}
module.exports=AppCacheManifestAttr;},{"../audit":2}],"../audits/dobetterweb/dom-size":[function(require,module,exports){'use strict';const Audit=require('../audit');const Util=require('../../report/html/renderer/util.js');const MAX_DOM_NODES=1500;const MAX_DOM_TREE_WIDTH=60;const MAX_DOM_TREE_DEPTH=32;class DOMSize extends Audit{static get MAX_DOM_NODES(){return MAX_DOM_NODES;}
static get meta(){return{name:'dom-size',description:'Avoids an excessive DOM size',failureDescription:'Uses an excessive DOM size',helpText:'Browser engineers recommend pages contain fewer than '+`~${Util.formatNumber(DOMSize.MAX_DOM_NODES)} DOM nodes. The sweet spot is a tree `+`depth < ${MAX_DOM_TREE_DEPTH} elements and fewer than ${MAX_DOM_TREE_WIDTH} `+'children/parent element. A large DOM can 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://developers.google.com/web/tools/lighthouse/audits/dom-size).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['DOMStats']};}
static get defaultOptions(){return{scorePODR:700,scoreMedian:1400};}
static audit(artifacts,context){const stats=artifacts.DOMStats;const score=Audit.computeLogNormalScore(stats.totalDOMNodes,context.options.scorePODR,context.options.scoreMedian);const headings=[{key:'totalNodes',itemType:'text',text:'Total DOM Nodes'},{key:'depth',itemType:'text',text:'Maximum DOM Depth'},{key:'width',itemType:'text',text:'Maximum Children'}];const items=[{totalNodes:Util.formatNumber(stats.totalDOMNodes),depth:Util.formatNumber(stats.depth.max),width:Util.formatNumber(stats.width.max)},{totalNodes:'',depth:{type:'code',value:stats.depth.snippet},width:{type:'code',value:stats.width.snippet}}];return{score,rawValue:stats.totalDOMNodes,displayValue:['%d nodes',stats.totalDOMNodes],extendedInfo:{value:items},details:Audit.makeTableDetails(headings,items)};}}
module.exports=DOMSize;},{"../../report/html/renderer/util.js":48,"../audit":2}],"../audits/dobetterweb/external-anchors-use-rel-noopener":[function(require,module,exports){'use strict';const URL=require('../../lib/url-shim');const Audit=require('../audit');class ExternalAnchorsUseRelNoopenerAudit extends Audit{static get meta(){return{name:'external-anchors-use-rel-noopener',description:'Links to cross-origin destinations are safe',failureDescription:'Links to cross-origin destinations are unsafe',helpText:'Add `rel="noopener"` or `rel="noreferrer"` to any external links to improve '+'performance and prevent security vulnerabilities. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/noopener).',requiredArtifacts:['URL','AnchorsWithNoRelNoopener']};}
static audit(artifacts){const warnings=[];const pageHost=new URL(artifacts.URL.finalUrl).host;const failingAnchors=artifacts.AnchorsWithNoRelNoopener.filter(anchor=>{try{return new URL(anchor.href).host!==pageHost;}catch(err){warnings.push('Unable to determine the destination for anchor tag. '+'If not used as a hyperlink, consider removing target=_blank.');return true;}}).filter(anchor=>{return!anchor.href||anchor.href.toLowerCase().startsWith('http');}).map(anchor=>{return{href:anchor.href||'Unknown',target:anchor.target||'',rel:anchor.rel||'',url:'<a'+(anchor.href?` href="${anchor.href}"`:'')+(anchor.target?` target="${anchor.target}"`:'')+(anchor.rel?` rel="${anchor.rel}"`:'')+'>'};});const headings=[{key:'href',itemType:'url',text:'URL'},{key:'target',itemType:'text',text:'Target'},{key:'rel',itemType:'text',text:'Rel'}];const details=Audit.makeTableDetails(headings,failingAnchors);return{rawValue:failingAnchors.length===0,extendedInfo:{value:failingAnchors},details,warnings};}}
module.exports=ExternalAnchorsUseRelNoopenerAudit;},{"../../lib/url-shim":"url","../audit":2}],"../audits/dobetterweb/geolocation-on-start":[function(require,module,exports){'use strict';const ViolationAudit=require('../violation-audit');class GeolocationOnStart extends ViolationAudit{static get meta(){return{name:'geolocation-on-start',description:'Avoids requesting the geolocation permission on page load',failureDescription:'Requests the geolocation permission on page load',helpText:'Users are mistrustful of or confused by sites that request their '+'location without context. Consider tying the request to user gestures instead. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/geolocation-on-load).',requiredArtifacts:['ChromeConsoleMessages']};}
static audit(artifacts){const results=ViolationAudit.getViolationResults(artifacts,/geolocation/);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'label',itemType:'text',text:'Location'}];const details=ViolationAudit.makeTableDetails(headings,results);return{rawValue:results.length===0,extendedInfo:{value:results},details};}}
module.exports=GeolocationOnStart;},{"../violation-audit":6}],"../audits/dobetterweb/no-document-write":[function(require,module,exports){'use strict';const ViolationAudit=require('../violation-audit');class NoDocWriteAudit extends ViolationAudit{static get meta(){return{name:'no-document-write',description:'Avoids `document.write()`',failureDescription:'Uses `document.write()`',helpText:'For users on slow connections, external scripts dynamically injected via '+'`document.write()` can delay page load by tens of seconds. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/document-write).',requiredArtifacts:['ChromeConsoleMessages']};}
static audit(artifacts){const results=ViolationAudit.getViolationResults(artifacts,/document\.write/);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'label',itemType:'text',text:'Location'}];const details=ViolationAudit.makeTableDetails(headings,results);return{rawValue:results.length===0,extendedInfo:{value:results},details};}}
module.exports=NoDocWriteAudit;},{"../violation-audit":6}],"../audits/dobetterweb/no-mutation-events":[function(require,module,exports){'use strict';const URL=require('../../lib/url-shim');const Audit=require('../audit');const EventHelpers=require('../../lib/event-helpers');class NoMutationEventsAudit extends Audit{static get MUTATION_EVENTS(){return['DOMAttrModified','DOMAttributeNameChanged','DOMCharacterDataModified','DOMElementNameChanged','DOMNodeInserted','DOMNodeInsertedIntoDocument','DOMNodeRemoved','DOMNodeRemovedFromDocument','DOMSubtreeModified'];}
static get meta(){return{name:'no-mutation-events',description:'Avoids Mutation Events in its own scripts',failureDescription:'Uses Mutation Events in its own scripts',helpText:'Mutation Events are deprecated and harm performance. Consider using Mutation '+'Observers instead. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/mutation-events).',requiredArtifacts:['URL','EventListeners']};}
static audit(artifacts){const warnings=[];const listeners=artifacts.EventListeners;const results=listeners.filter(loc=>{const isMutationEvent=this.MUTATION_EVENTS.includes(loc.type);let sameHost=URL.hostsMatch(artifacts.URL.finalUrl,loc.url);if(!URL.isValid(loc.url)&&isMutationEvent){sameHost=true;warnings.push(URL.INVALID_URL_DEBUG_STRING);}
return sameHost&&isMutationEvent;}).map(EventHelpers.addFormattedCodeSnippet);const groupedResults=EventHelpers.groupCodeSnippetsByLocation(results);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'type',itemType:'code',text:'Event'},{key:'line',itemType:'text',text:'Line'},{key:'col',itemType:'text',text:'Col'},{key:'pre',itemType:'code',text:'Snippet'}];const details=NoMutationEventsAudit.makeTableDetails(headings,groupedResults);return{rawValue:groupedResults.length===0,extendedInfo:{value:{results:groupedResults}},details,warnings};}}
module.exports=NoMutationEventsAudit;},{"../../lib/event-helpers":34,"../../lib/url-shim":"url","../audit":2}],"../audits/dobetterweb/no-vulnerable-libraries":[function(require,module,exports){'use strict';const Audit=require('../audit');const Sentry=require('../../lib/sentry');const semver=require('semver');const snykDatabase=require('../../../third-party/snyk/snapshot.json');const SEMVER_REGEX=/^(\d+\.\d+\.\d+)[^-0-9]+/;class NoVulnerableLibrariesAudit extends Audit{static get meta(){return{name:'no-vulnerable-libraries',description:'Avoids front-end JavaScript libraries'+' with known security vulnerabilities',failureDescription:'Includes front-end JavaScript libraries'+' with known security vulnerabilities',helpText:'Some third-party scripts may contain known security vulnerabilities '+' that are easily identified and exploited by attackers.',requiredArtifacts:['JSLibraries']};}
static get snykDB(){return snykDatabase;}
static get severityMap(){return{high:3,medium:2,low:1};}
static normalizeVersion(version){if(!version)return version;if(semver.valid(version))return version;if(/^\d+\.\d+$/.test(version))return`${version}.0`;const versionMatch=version.match(SEMVER_REGEX);if(versionMatch)return versionMatch[1];return version;}
static getVulnerabilities(normalizedVersion,lib){const snykDB=NoVulnerableLibrariesAudit.snykDB;if(!lib.npmPkgName||!snykDB.npm[lib.npmPkgName]){return[];}
try{semver.satisfies(normalizedVersion,'*');}catch(err){err.pkgName=lib.npmPkgName;Sentry.captureException(err,{level:'warning'});return[];}
const snykInfo=snykDB.npm[lib.npmPkgName];const vulns=snykInfo.filter(vuln=>semver.satisfies(normalizedVersion,vuln.semver.vulnerable[0])).map(vuln=>{return{severity:vuln.severity,numericSeverity:this.severityMap[vuln.severity],library:`${lib.name}@${normalizedVersion}`,url:'https://snyk.io/vuln/'+vuln.id};});return vulns;}
static highestSeverity(vulnerabilities){const sortedVulns=vulnerabilities.sort((a,b)=>b.numericSeverity-a.numericSeverity);return sortedVulns[0].severity;}
static audit(artifacts){const foundLibraries=artifacts.JSLibraries;if(!foundLibraries.length){return{rawValue:true};}
let totalVulns=0;const vulnerabilityResults=[];const libraryVulns=foundLibraries.map(lib=>{const version=this.normalizeVersion(lib.version)||'';const vulns=this.getVulnerabilities(version,lib);const vulnCount=vulns.length;totalVulns+=vulnCount;let highestSeverity;if(vulns.length>0){highestSeverity=this.highestSeverity(vulns).replace(/^\w/,l=>l.toUpperCase());vulnerabilityResults.push({highestSeverity,vulnCount,detectedLib:{text:lib.name+'@'+version,url:`https://snyk.io/vuln/npm:${lib.npmPkgName}?lh@${version}`,type:'link'}});}
return{name:lib.name,npmPkgName:lib.npmPkgName,version,vulns,highestSeverity};});let displayValue='';if(totalVulns>1){displayValue=`${totalVulns} vulnerabilities detected`;}else if(totalVulns===1){displayValue=`${totalVulns} vulnerability detected`;}
const headings=[{key:'detectedLib',itemType:'link',text:'Library Version'},{key:'vulnCount',itemType:'text',text:'Vulnerability Count'},{key:'highestSeverity',itemType:'text',text:'Highest Severity'}];const details=Audit.makeTableDetails(headings,vulnerabilityResults,{});return{rawValue:totalVulns===0,displayValue,extendedInfo:{jsLibs:libraryVulns,vulnerabilities:vulnerabilityResults},details};}}
module.exports=NoVulnerableLibrariesAudit;},{"../../../third-party/snyk/snapshot.json":155,"../../lib/sentry":39,"../audit":2,"semver":150}],"../audits/dobetterweb/no-websql":[function(require,module,exports){'use strict';const Audit=require('../audit');class NoWebSQLAudit extends Audit{static get meta(){return{name:'no-websql',description:'Avoids WebSQL DB',failureDescription:'Uses WebSQL DB',helpText:'Web SQL is deprecated. Consider using IndexedDB instead. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/web-sql).',requiredArtifacts:['WebSQL']};}
static audit(artifacts){const db=artifacts.WebSQL;const displayValue=db?`Found "${db.name}" (v${db.version})`:'';return{rawValue:!db,displayValue};}}
module.exports=NoWebSQLAudit;},{"../audit":2}],"../audits/dobetterweb/notification-on-start":[function(require,module,exports){'use strict';const ViolationAudit=require('../violation-audit');class NotificationOnStart extends ViolationAudit{static get meta(){return{name:'notification-on-start',description:'Avoids requesting the notification permission on page load',failureDescription:'Requests the notification permission on page load',helpText:'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://developers.google.com/web/tools/lighthouse/audits/notifications-on-load).',requiredArtifacts:['ChromeConsoleMessages']};}
static audit(artifacts){const results=ViolationAudit.getViolationResults(artifacts,/notification permission/);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'label',itemType:'text',text:'Location'}];const details=ViolationAudit.makeTableDetails(headings,results);return{rawValue:results.length===0,extendedInfo:{value:results},details};}}
module.exports=NotificationOnStart;},{"../violation-audit":6}],"../audits/dobetterweb/password-inputs-can-be-pasted-into":[function(require,module,exports){'use strict';const Audit=require('../audit');class PasswordInputsCanBePastedIntoAudit extends Audit{static get meta(){return{name:'password-inputs-can-be-pasted-into',description:'Allows users to paste into password fields',failureDescription:'Prevents users to paste into password fields',helpText:'Preventing password pasting undermines good security policy. '+'[Learn more](https://www.ncsc.gov.uk/blog-post/let-them-paste-passwords).',requiredArtifacts:['PasswordInputsWithPreventedPaste']};}
static audit(artifacts){const passwordInputsWithPreventedPaste=artifacts.PasswordInputsWithPreventedPaste;const items=[];passwordInputsWithPreventedPaste.forEach(input=>{items.push({node:{type:'node',snippet:input.snippet}});});const headings=[{key:'node',itemType:'node',text:'Failing Elements'}];return{rawValue:passwordInputsWithPreventedPaste.length===0,extendedInfo:{value:passwordInputsWithPreventedPaste},details:Audit.makeTableDetails(headings,items)};}}
module.exports=PasswordInputsCanBePastedIntoAudit;},{"../audit":2}],"../audits/dobetterweb/uses-http2":[function(require,module,exports){'use strict';const URL=require('../../lib/url-shim');const Audit=require('../audit');const Util=require('../../report/html/renderer/util.js');class UsesHTTP2Audit extends Audit{static get meta(){return{name:'uses-http2',description:'Uses HTTP/2 for its own resources',failureDescription:'Does not use HTTP/2 for all of its resources',helpText:'HTTP/2 offers many benefits over HTTP/1.1, including binary headers, '+'multiplexing, and server push. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/http2).',requiredArtifacts:['URL','devtoolsLogs']};}
static audit(artifacts){const devtoolsLogs=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLogs).then(networkRecords=>{const finalHost=new URL(artifacts.URL.finalUrl).host;const seenURLs=new Set();const resources=networkRecords.filter(record=>{const isOldHttp=/HTTP\/[01][.\d]?/i.test(record.protocol);if(!isOldHttp)return false;const requestHost=new URL(record._url).host;return requestHost===finalHost;}).map(record=>{return{protocol:record.protocol,url:record._url};}).filter(record=>{if(seenURLs.has(record.url))return false;seenURLs.add(record.url);return true;});let displayValue='';if(resources.length>1){displayValue=`${Util.formatNumber(resources.length)} requests not served via HTTP/2`;}else if(resources.length===1){displayValue=`${resources.length} request not served via HTTP/2`;}
const headings=[{key:'url',itemType:'url',text:'URL'},{key:'protocol',itemType:'text',text:'Protocol'}];const details=Audit.makeTableDetails(headings,resources);return{rawValue:resources.length===0,displayValue:displayValue,extendedInfo:{value:{results:resources}},details};});}}
module.exports=UsesHTTP2Audit;},{"../../lib/url-shim":"url","../../report/html/renderer/util.js":48,"../audit":2}],"../audits/dobetterweb/uses-passive-event-listeners":[function(require,module,exports){'use strict';const ViolationAudit=require('../violation-audit');class PassiveEventsAudit extends ViolationAudit{static get meta(){return{name:'uses-passive-event-listeners',description:'Uses passive listeners to improve scrolling performance',failureDescription:'Does not use passive listeners to improve scrolling performance',helpText:'Consider marking your touch and wheel event listeners as `passive` '+'to improve your page\'s scroll performance. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/passive-event-listeners).',requiredArtifacts:['ChromeConsoleMessages']};}
static audit(artifacts){const results=ViolationAudit.getViolationResults(artifacts,/passive event listener/);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'label',itemType:'text',text:'Location'}];const details=ViolationAudit.makeTableDetails(headings,results);return{rawValue:results.length===0,extendedInfo:{value:results},details};}}
module.exports=PassiveEventsAudit;},{"../violation-audit":6}],"../audits/errors-in-console":[function(require,module,exports){'use strict';const Audit=require('./audit');class ErrorLogs extends Audit{static get meta(){return{name:'errors-in-console',description:'No browser errors logged to the console',helpText:'Errors logged to the console indicate unresolved problems. '+'They can come from network request failures and other browser concerns.',failureDescription:'Browser errors were logged to the console',requiredArtifacts:['ChromeConsoleMessages','RuntimeExceptions']};}
static audit(artifacts){const consoleEntries=artifacts.ChromeConsoleMessages;const runtimeExceptions=artifacts.RuntimeExceptions;const consoleRows=consoleEntries.filter(log=>log.entry&&log.entry.level==='error').map(item=>{return{source:item.entry.source,description:item.entry.text,url:item.entry.url};});const runtimeExRows=runtimeExceptions.filter(entry=>entry.exceptionDetails!==undefined).map(entry=>{const description=entry.exceptionDetails.exception?entry.exceptionDetails.exception.description:entry.exceptionDetails.text;return{source:'Runtime.exception',description,url:entry.exceptionDetails.url};});const tableRows=consoleRows.concat(runtimeExRows);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'description',itemType:'code',text:'Description'}];const details=Audit.makeTableDetails(headings,tableRows);const numErrors=tableRows.length;return{score:Number(numErrors===0),rawValue:numErrors,details};}}
module.exports=ErrorLogs;},{"./audit":2}],"../audits/estimated-input-latency":[function(require,module,exports){'use strict';const Audit=require('./audit');class EstimatedInputLatency extends Audit{static get meta(){return{name:'estimated-input-latency',description:'Estimated Input Latency',helpText:'The score above is an estimate of how long your app takes to respond to user '+'input, in milliseconds, during the busiest 5s window of page load. If your '+'latency is higher than 50 ms, users may perceive your app as laggy. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces']};}
static get defaultOptions(){return{scorePODR:50,scoreMedian:100};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestEstimatedInputLatency(metricComputationData);return{score:Audit.computeLogNormalScore(metricResult.timing,context.options.scorePODR,context.options.scoreMedian),rawValue:metricResult.timing,displayValue:['%d\xa0ms',metricResult.timing]};}}
module.exports=EstimatedInputLatency;},{"./audit":2}],"../audits/first-contentful-paint":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util.js');class FirstContentfulPaint extends Audit{static get meta(){return{name:'first-contentful-paint',description:'First Contentful Paint',helpText:'First contentful paint marks the time at which the first text/image is painted. '+`[Learn more](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint).`,scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces','devtoolsLogs']};}
static get defaultOptions(){return{scorePODR:2900,scoreMedian:4000};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestFirstContentfulPaint(metricComputationData);return{score:Audit.computeLogNormalScore(metricResult.timing,context.options.scorePODR,context.options.scoreMedian),rawValue:metricResult.timing,displayValue:[Util.MS_DISPLAY_VALUE,metricResult.timing]};}}
module.exports=FirstContentfulPaint;},{"../report/html/renderer/util.js":48,"./audit":2}],"../audits/first-cpu-idle":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util.js');class FirstCPUIdle extends Audit{static get meta(){return{name:'first-cpu-idle',description:'First CPU Idle',helpText:'First CPU Idle marks the first time at which the page\'s main thread is '+'quiet enough to handle input. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-interactive).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces']};}
static get defaultOptions(){return{scorePODR:2900,scoreMedian:6500};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestFirstCPUIdle(metricComputationData);return{score:Audit.computeLogNormalScore(metricResult.timing,context.options.scorePODR,context.options.scoreMedian),rawValue:metricResult.timing,displayValue:[Util.MS_DISPLAY_VALUE,metricResult.timing]};}}
module.exports=FirstCPUIdle;},{"../report/html/renderer/util.js":48,"./audit":2}],"../audits/first-meaningful-paint":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');class FirstMeaningfulPaint extends Audit{static get meta(){return{name:'first-meaningful-paint',description:'First Meaningful Paint',helpText:'First Meaningful Paint measures when the primary content of a page is visible. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces']};}
static get defaultOptions(){return{scorePODR:2000,scoreMedian:4000};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestFirstMeaningfulPaint(metricComputationData);return{score:Audit.computeLogNormalScore(metricResult.timing,context.options.scorePODR,context.options.scoreMedian),rawValue:metricResult.timing,displayValue:[Util.MS_DISPLAY_VALUE,metricResult.timing]};}}
module.exports=FirstMeaningfulPaint;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/font-display":[function(require,module,exports){'use strict';const Audit=require('./audit');const WebInspector=require('../lib/web-inspector');const allowedFontFaceDisplays=['block','fallback','optional','swap'];class FontDisplay extends Audit{static get meta(){return{name:'font-display',description:'All text remains visible during webfont loads',failureDescription:'Text is invisible while webfonts are loading',helpText:'Leverage the font-display CSS feature to ensure text is user-visible while '+'webfonts are loading. '+'[Learn more](https://developers.google.com/web/updates/2016/02/font-display).',requiredArtifacts:['devtoolsLogs','Fonts']};}
static audit(artifacts){const devtoolsLogs=artifacts.devtoolsLogs[this.DEFAULT_PASS];const fontFaces=artifacts.Fonts;const fontsWithoutProperDisplay=fontFaces.filter(fontFace=>!fontFace.display||!allowedFontFaceDisplays.includes(fontFace.display));return artifacts.requestNetworkRecords(devtoolsLogs).then(networkRecords=>{const results=networkRecords.filter(record=>{const isFont=record._resourceType===WebInspector.resourceTypes.Font;return isFont;}).filter(fontRecord=>{return!!fontsWithoutProperDisplay.find(fontFace=>{return!!fontFace.src&&!!fontFace.src.find(src=>fontRecord.url===src);});}).map(record=>{const wastedTime=Math.min((record.endTime-record.startTime)*1000,3000);return{url:record.url,wastedTime};});const headings=[{key:'url',itemType:'url',text:'Font URL'},{key:'wastedTime',itemType:'ms',granularity:1,text:'Font download time'}];const details=Audit.makeTableDetails(headings,results);return{score:Number(results.length===0),rawValue:results.length===0,details};});}}
module.exports=FontDisplay;},{"../lib/web-inspector":47,"./audit":2}],"../audits/image-aspect-ratio":[function(require,module,exports){'use strict';const Audit=require('./audit');const URL=require('../lib/url-shim');const THRESHOLD=0.05;class ImageAspectRatio extends Audit{static get meta(){return{name:'image-aspect-ratio',description:'Displays images with correct aspect ratio',failureDescription:'Displays images with incorrect aspect ratio',helpText:'Image display dimensions should match natural aspect ratio.',requiredArtifacts:['ImageUsage']};}
static computeAspectRatios(image){const url=URL.elideDataURI(image.src);const actualAspectRatio=image.naturalWidth/image.naturalHeight;const displayedAspectRatio=image.width/image.height;const doRatiosMatch=Math.abs(actualAspectRatio-displayedAspectRatio)<THRESHOLD;if(!Number.isFinite(actualAspectRatio)||!Number.isFinite(displayedAspectRatio)){return new Error(`Invalid image sizing information ${url}`);}
return{url,displayedAspectRatio:`${image.width} x ${image.height}
        (${displayedAspectRatio.toFixed(2)})`,actualAspectRatio:`${image.naturalWidth} x ${image.naturalHeight}
        (${actualAspectRatio.toFixed(2)})`,doRatiosMatch};}
static audit(artifacts){const images=artifacts.ImageUsage;const warnings=[];const results=[];images.filter(image=>{return image.networkRecord&&image.networkRecord.mimeType!=='image/svg+xml'&&image.width&&image.height&&!image.usesObjectFit;}).forEach(image=>{const wellDefinedImage=image;const processed=ImageAspectRatio.computeAspectRatios(wellDefinedImage);if(processed instanceof Error){warnings.push(processed.message);return;}
if(!processed.doRatiosMatch)results.push(processed);});const headings=[{key:'url',itemType:'thumbnail',text:''},{key:'url',itemType:'url',text:'URL'},{key:'displayedAspectRatio',itemType:'text',text:'Aspect Ratio (Displayed)'},{key:'actualAspectRatio',itemType:'text',text:'Aspect Ratio (Actual)'}];return{rawValue:results.length===0,warnings,details:Audit.makeTableDetails(headings,results)};}}
module.exports=ImageAspectRatio;},{"../lib/url-shim":"url","./audit":2}],"../audits/interactive":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');class InteractiveMetric extends Audit{static get meta(){return{name:'interactive',description:'Time to Interactive',helpText:'Interactive marks the time at which the page is fully interactive. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces','devtoolsLogs']};}
static get defaultOptions(){return{scorePODR:2900,scoreMedian:7300};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestInteractive(metricComputationData);const timeInMs=metricResult.timing;const extendedInfo={timeInMs,timestamp:metricResult.timestamp,optimistic:metricResult.optimisticEstimate&&metricResult.optimisticEstimate.timeInMs,pessimistic:metricResult.pessimisticEstimate&&metricResult.pessimisticEstimate.timeInMs};return{score:Audit.computeLogNormalScore(timeInMs,context.options.scorePODR,context.options.scoreMedian),rawValue:timeInMs,displayValue:[Util.MS_DISPLAY_VALUE,timeInMs],extendedInfo:{value:extendedInfo}};}}
module.exports=InteractiveMetric;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/is-on-https":[function(require,module,exports){'use strict';const Audit=require('./audit');const URL=require('../lib/url-shim');const Util=require('../report/html/renderer/util');const SECURE_SCHEMES=['data','https','wss','blob','chrome','chrome-extension','about'];const SECURE_DOMAINS=['localhost','127.0.0.1'];class HTTPS extends Audit{static get meta(){return{name:'is-on-https',description:'Uses HTTPS',failureDescription:'Does not use HTTPS',helpText:'All sites should be protected with HTTPS, even ones that don\'t handle '+'sensitive data. 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://developers.google.com/web/tools/lighthouse/audits/https).',requiredArtifacts:['devtoolsLogs']};}
static isSecureRecord(record){return SECURE_SCHEMES.includes(record.parsedURL.scheme)||SECURE_SCHEMES.includes(record.protocol)||SECURE_DOMAINS.includes(record.parsedURL.host);}
static audit(artifacts){const devtoolsLogs=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLogs).then(networkRecords=>{const insecureURLs=networkRecords.filter(record=>!HTTPS.isSecureRecord(record)).map(record=>URL.elideDataURI(record.url));let displayValue='';if(insecureURLs.length>1){displayValue=`${Util.formatNumber(insecureURLs.length)} insecure requests found`;}else if(insecureURLs.length===1){displayValue=`${insecureURLs.length} insecure request found`;}
const items=Array.from(new Set(insecureURLs)).map(url=>({url}));const headings=[{key:'url',itemType:'url',text:'Insecure URL'}];return{rawValue:items.length===0,displayValue,extendedInfo:{value:items},details:Audit.makeTableDetails(headings,items)};});}}
module.exports=HTTPS;},{"../lib/url-shim":"url","../report/html/renderer/util":48,"./audit":2}],"../audits/load-fast-enough-for-pwa":[function(require,module,exports){'use strict';const isDeepEqual=require('lodash.isequal');const Audit=require('./audit');const mobile3GThrottling=require('../config/constants').throttling.mobile3G;const MAXIMUM_TTI=10*1000;class LoadFastEnough4Pwa extends Audit{static get meta(){return{name:'load-fast-enough-for-pwa',description:'Page load is fast enough on 3G',failureDescription:'Page load is not fast enough on 3G',helpText:'A fast page load over a 3G network ensures a good mobile user experience. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/fast-3g).',requiredArtifacts:['traces','devtoolsLogs']};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const settingOverrides={throttlingMethod:'simulate',throttling:mobile3GThrottling};const settings=context.settings.throttlingMethod!=='provided'&&isDeepEqual(context.settings.throttling,mobile3GThrottling)?context.settings:Object.assign({},context.settings,settingOverrides);const metricComputationData={trace,devtoolsLog,settings};const tti=await artifacts.requestInteractive(metricComputationData);const score=Number(tti.timing<MAXIMUM_TTI);let displayValue;let explanation;if(!score){displayValue=[`Interactive at %d\xa0s`,tti.timing/1000];explanation='Your page loads too slowly and is not interactive within 10 seconds. '+'Look at the opportunities and diagnostics in the "Performance" section to learn how to '+'improve.';}
return{score,displayValue,explanation,rawValue:tti.timing};}}
module.exports=LoadFastEnough4Pwa;},{"../config/constants":8,"./audit":2,"lodash.isequal":144}],"../audits/mainthread-work-breakdown":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');const{taskToGroup}=require('../lib/task-groups');class MainThreadWorkBreakdown extends Audit{static get meta(){return{name:'mainthread-work-breakdown',description:'Minimizes main thread work',failureDescription:'Has significant main thread work',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,helpText:'Consider reducing the time spent parsing, compiling and executing JS. '+'You may find delivering smaller JS payloads helps with this.',requiredArtifacts:['traces']};}
static get defaultOptions(){return{scorePODR:1500,scoreMedian:4000};}
static getExecutionTimingsByCategory(timelineModel){const bottomUpByName=timelineModel.bottomUpGroupBy('EventName');const result=new Map();bottomUpByName.children.forEach((event,eventName)=>result.set(eventName,event.selfTime));return result;}
static async audit(artifacts,context){const settings=context.settings||{};const trace=artifacts.traces[MainThreadWorkBreakdown.DEFAULT_PASS];const devtoolsTimelineModel=await artifacts.requestDevtoolsTimelineModel(trace);const executionTimings=MainThreadWorkBreakdown.getExecutionTimingsByCategory(devtoolsTimelineModel);let totalExecutionTime=0;const multiplier=settings.throttlingMethod==='simulate'?settings.throttling.cpuSlowdownMultiplier:1;const extendedInfo={};const categoryTotals={};const results=Array.from(executionTimings).map(([eventName,duration])=>{duration*=multiplier;totalExecutionTime+=duration;extendedInfo[eventName]=duration;const groupName=taskToGroup[eventName];const categoryTotal=categoryTotals[groupName]||0;categoryTotals[groupName]=categoryTotal+duration;return{category:eventName,group:groupName,duration:duration};});const headings=[{key:'group',itemType:'text',text:'Category'},{key:'category',itemType:'text',text:'Work'},{key:'duration',itemType:'ms',granularity:1,text:'Time spent'}];results.stableSort((a,b)=>categoryTotals[b.group]-categoryTotals[a.group]);const tableDetails=MainThreadWorkBreakdown.makeTableDetails(headings,results);const score=Audit.computeLogNormalScore(totalExecutionTime,context.options.scorePODR,context.options.scoreMedian);return{score,rawValue:totalExecutionTime,displayValue:[Util.MS_DISPLAY_VALUE,totalExecutionTime],details:tableDetails,extendedInfo:{value:extendedInfo}};}}
module.exports=MainThreadWorkBreakdown;},{"../lib/task-groups":42,"../report/html/renderer/util":48,"./audit":2}],"../audits/manifest-short-name-length":[function(require,module,exports){'use strict';const Audit=require('./audit');class ManifestShortNameLength extends Audit{static get meta(){return{name:'manifest-short-name-length',description:'Manifest\'s `short_name` won\'t be truncated when displayed on homescreen',failureDescription:'Manifest\'s `short_name` will be truncated when displayed '+'on homescreen',helpText:'Make your app\'s `short_name` fewer than 12 characters to '+'ensure that it\'s not truncated on homescreens. [Learn '+'more](https://developers.google.com/web/tools/lighthouse/audits/manifest-short_name-is-not-truncated).',requiredArtifacts:['Manifest']};}
static audit(artifacts){return artifacts.requestManifestValues(artifacts.Manifest).then(manifestValues=>{if(manifestValues.isParseFailure){return{rawValue:false};}
const hasShortName=manifestValues.allChecks.find(i=>i.id==='hasShortName');if(!hasShortName||!hasShortName.passing){return{rawValue:false,explanation:'No short_name found in manifest.'};}
const isShortEnough=manifestValues.allChecks.find(i=>i.id==='shortNameLength');return{rawValue:!!isShortEnough&&isShortEnough.passing};});}}
module.exports=ManifestShortNameLength;},{"./audit":2}],"../audits/manual/pwa-cross-browser":[function(require,module,exports){'use strict';const ManualAudit=require('./manual-audit');class PWACrossBrowser extends ManualAudit{static get meta(){return Object.assign({name:'pwa-cross-browser',helpText:'To reach the most number of users, sites should work across '+'every major browser. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#site-works-cross-browser).',description:'Site works cross-browser'},super.partialMeta);}}
module.exports=PWACrossBrowser;},{"./manual-audit":4}],"../audits/manual/pwa-each-page-has-url":[function(require,module,exports){'use strict';const ManualAudit=require('./manual-audit');class PWAEachPageHasURL extends ManualAudit{static get meta(){return Object.assign({name:'pwa-each-page-has-url',helpText:'Ensure individual pages are deep linkable via the URLs and that URLs are '+'unique for the purpose of shareability on social media. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#each-page-has-a-url).',description:'Each page has a URL'},super.partialMeta);}}
module.exports=PWAEachPageHasURL;},{"./manual-audit":4}],"../audits/manual/pwa-page-transitions":[function(require,module,exports){'use strict';const ManualAudit=require('./manual-audit');class PWAPageTransitions extends ManualAudit{static get meta(){return Object.assign({name:'pwa-page-transitions',helpText:'Transitions should feel snappy as you tap around, even on a slow network, a key '+'to perceived performance. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#page-transitions-dont-feel-like-they-block-on-the-network).',description:'Page transitions don\'t feel like they block on the network'},super.partialMeta);}}
module.exports=PWAPageTransitions;},{"./manual-audit":4}],"../audits/metrics":[function(require,module,exports){'use strict';const Audit=require('./audit');class Metrics extends Audit{static get meta(){return{name:'metrics',scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,description:'Metrics',helpText:'Collects all available metrics.',requiredArtifacts:['traces','devtoolsLogs']};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const traceOfTab=await artifacts.requestTraceOfTab(trace);const speedline=await artifacts.requestSpeedline(trace);const firstContentfulPaint=await artifacts.requestFirstContentfulPaint(metricComputationData);const firstMeaningfulPaint=await artifacts.requestFirstMeaningfulPaint(metricComputationData);const firstCPUIdle=await artifacts.requestFirstCPUIdle(metricComputationData);const interactive=await artifacts.requestInteractive(metricComputationData);const speedIndex=await artifacts.requestSpeedIndex(metricComputationData);const estimatedInputLatency=await artifacts.requestEstimatedInputLatency(metricComputationData);const metrics={firstContentfulPaint:firstContentfulPaint.timing,firstContentfulPaintTs:firstContentfulPaint.timestamp,firstMeaningfulPaint:firstMeaningfulPaint.timing,firstMeaningfulPaintTs:firstMeaningfulPaint.timestamp,firstCPUIdle:firstCPUIdle.timing,firstCPUIdleTs:firstCPUIdle.timestamp,interactive:interactive.timing,interactiveTs:interactive.timestamp,speedIndex:speedIndex.timing,speedIndexTs:speedIndex.timestamp,estimatedInputLatency:estimatedInputLatency.timing,estimatedInputLatencyTs:estimatedInputLatency.timestamp,observedNavigationStart:traceOfTab.timings.navigationStart,observedNavigationStartTs:traceOfTab.timestamps.navigationStart,observedFirstPaint:traceOfTab.timings.firstPaint,observedFirstPaintTs:traceOfTab.timestamps.firstPaint,observedFirstContentfulPaint:traceOfTab.timings.firstContentfulPaint,observedFirstContentfulPaintTs:traceOfTab.timestamps.firstContentfulPaint,observedFirstMeaningfulPaint:traceOfTab.timings.firstMeaningfulPaint,observedFirstMeaningfulPaintTs:traceOfTab.timestamps.firstMeaningfulPaint,observedTraceEnd:traceOfTab.timings.traceEnd,observedTraceEndTs:traceOfTab.timestamps.traceEnd,observedLoad:traceOfTab.timings.load,observedLoadTs:traceOfTab.timestamps.load,observedDomContentLoaded:traceOfTab.timings.domContentLoaded,observedDomContentLoadedTs:traceOfTab.timestamps.domContentLoaded,observedFirstVisualChange:speedline.first,observedFirstVisualChangeTs:(speedline.first+speedline.beginning)*1000,observedLastVisualChange:speedline.complete,observedLastVisualChangeTs:(speedline.complete+speedline.beginning)*1000,observedSpeedIndex:speedline.speedIndex,observedSpeedIndexTs:(speedline.speedIndex+speedline.beginning)*1000};for(const[name,value]of Object.entries(metrics)){const key=name;if(typeof value!=='undefined'){metrics[key]=Math.round(value);}}
const details={items:[metrics]};return{score:1,rawValue:interactive.timing,details};}}
module.exports=Metrics;},{"./audit":2}],"../audits/mixed-content":[function(require,module,exports){'use strict';const Audit=require('./audit');const URL=require('../lib/url-shim');const Util=require('../report/html/renderer/util');class MixedContent extends Audit{static get meta(){return{name:'mixed-content',description:'All resources loaded are secure',failureDescription:'Some insecure resources can be upgraded to HTTPS',helpText:`Mixed content warnings can prevent you from upgrading to HTTPS.
      This audit shows which insecure resources this page uses that can be
      upgraded to HTTPS. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/mixed-content)`,requiredArtifacts:['devtoolsLogs','MixedContent']};}
static isSecureRecord(record){return record.securityState()==='secure'||record.protocol==='data';}
static upgradeURL(url){const parsedURL=new URL(url);parsedURL.protocol='https:';return parsedURL.href;}
static simplifyURL(url){const parsedURL=new URL(url);parsedURL.hash='';parsedURL.search='';return parsedURL.href;}
static displayURL(url){const displayOptions={numPathParts:4,preserveQuery:false,preserveHost:true};return URL.getURLDisplayName(url,displayOptions);}
static audit(artifacts){const defaultLogs=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const upgradeLogs=artifacts.devtoolsLogs['mixedContentPass'];const baseHostname=new URL(artifacts.MixedContent.url).host;const computedArtifacts=[artifacts.requestNetworkRecords(defaultLogs),artifacts.requestNetworkRecords(upgradeLogs)];return Promise.all(computedArtifacts).then(([defaultRecords,upgradedRecords])=>{const insecureRecords=defaultRecords.filter(record=>!MixedContent.isSecureRecord(record));const secureRecords=defaultRecords.filter(record=>MixedContent.isSecureRecord(record));const upgradePassHosts=new Set();const upgradePassSecureHosts=new Set();upgradedRecords.forEach(record=>{upgradePassHosts.add(new URL(record.url).hostname);if(MixedContent.isSecureRecord(record)&&record.finished&&!record.failed){upgradePassSecureHosts.add(new URL(record.url).hostname);}});const seen=new Set();const upgradeableResources=[];for(const record of insecureRecords){const simpleUrl=this.simplifyURL(record.url);if(seen.has(simpleUrl))continue;seen.add(simpleUrl);const resource={host:new URL(record.url).hostname,fullUrl:record.url,referrerDocUrl:this.displayURL(record._documentURL)};if(!upgradePassSecureHosts.has(resource.host))continue;if(!resource.referrerDocUrl.includes(baseHostname))continue;upgradeableResources.push(resource);}
const displayValue=`${Util.formatNumber(upgradeableResources.length)}
          ${upgradeableResources.length===1?'request':'requests'}`;const headings=[{key:'fullUrl',itemType:'url',text:'URL'}];const details=Audit.makeTableDetails(headings,upgradeableResources);const totalRecords=defaultRecords.length;const score=(secureRecords.length+0.5*upgradeableResources.length)/totalRecords;return{rawValue:upgradeableResources.length===0,score,displayValue:displayValue,details};});}}
module.exports=MixedContent;},{"../lib/url-shim":"url","../report/html/renderer/util":48,"./audit":2}],"../audits/network-requests":[function(require,module,exports){'use strict';const Audit=require('./audit');const URL=require('../lib/url-shim');class NetworkRequests extends Audit{static get meta(){return{name:'network-requests',scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,description:'Network Requests',helpText:'Lists the network requests that were made during page load.',requiredArtifacts:['devtoolsLogs']};}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLog).then(records=>{const earliestStartTime=records.reduce((min,record)=>Math.min(min,record.startTime),Infinity);const results=records.map(record=>{return{url:URL.elideDataURI(record.url),startTime:(record.startTime-earliestStartTime)*1000,endTime:(record.endTime-earliestStartTime)*1000,transferSize:record.transferSize,statusCode:record.statusCode,mimeType:record._mimeType,resourceType:record._resourceType&&record._resourceType._name};});const headings=[{key:'url',itemType:'url',text:'URL'},{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:'statusCode',itemType:'text',text:'Status Code'},{key:'mimeType',itemType:'text',text:'MIME Type'},{key:'resourceType',itemType:'text',text:'Resource Type'}];const tableDetails=Audit.makeTableDetails(headings,results);return{score:1,rawValue:results.length,extendedInfo:{value:results},details:tableDetails};});}}
module.exports=NetworkRequests;},{"../lib/url-shim":"url","./audit":2}],"../audits/predictive-perf":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');const SCORING_POINT_OF_DIMINISHING_RETURNS=1700;const SCORING_MEDIAN=10000;class PredictivePerf extends Audit{static get meta(){return{name:'predictive-perf',description:'Predicted Performance (beta)',helpText:'Predicted performance evaluates how your site will perform under '+'a 3G connection on a mobile device.',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces','devtoolsLogs']};}
static async audit(artifacts){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const settings={};const fcp=await artifacts.requestLanternFirstContentfulPaint({trace,devtoolsLog,settings});const fmp=await artifacts.requestLanternFirstMeaningfulPaint({trace,devtoolsLog,settings});const tti=await artifacts.requestLanternInteractive({trace,devtoolsLog,settings});const ttfcpui=await artifacts.requestLanternFirstCPUIdle({trace,devtoolsLog,settings});const si=await artifacts.requestLanternSpeedIndex({trace,devtoolsLog,settings});const eil=await artifacts.requestLanternEstimatedInputLatency({trace,devtoolsLog,settings});const values={roughEstimateOfFCP:fcp.timing,optimisticFCP:fcp.optimisticEstimate.timeInMs,pessimisticFCP:fcp.pessimisticEstimate.timeInMs,roughEstimateOfFMP:fmp.timing,optimisticFMP:fmp.optimisticEstimate.timeInMs,pessimisticFMP:fmp.pessimisticEstimate.timeInMs,roughEstimateOfTTI:tti.timing,optimisticTTI:tti.optimisticEstimate.timeInMs,pessimisticTTI:tti.pessimisticEstimate.timeInMs,roughEstimateOfTTFCPUI:ttfcpui.timing,optimisticTTFCPUI:ttfcpui.optimisticEstimate.timeInMs,pessimisticTTFCPUI:ttfcpui.pessimisticEstimate.timeInMs,roughEstimateOfSI:si.timing,optimisticSI:si.optimisticEstimate.timeInMs,pessimisticSI:si.pessimisticEstimate.timeInMs,roughEstimateOfEIL:eil.timing,optimisticEIL:eil.optimisticEstimate.timeInMs,pessimisticEIL:eil.pessimisticEstimate.timeInMs};const score=Audit.computeLogNormalScore(values.roughEstimateOfTTI,SCORING_POINT_OF_DIMINISHING_RETURNS,SCORING_MEDIAN);return{score,rawValue:values.roughEstimateOfTTI,displayValue:Util.formatMilliseconds(values.roughEstimateOfTTI),details:{items:[values]}};}}
module.exports=PredictivePerf;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/redirects-http":[function(require,module,exports){'use strict';const Audit=require('./audit');class RedirectsHTTP extends Audit{static get meta(){return{name:'redirects-http',description:'Redirects HTTP traffic to HTTPS',failureDescription:'Does not redirect HTTP traffic to HTTPS',helpText:'If you\'ve already set up HTTPS, make sure that you redirect all HTTP traffic '+'to HTTPS. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/http-redirects-to-https).',requiredArtifacts:['HTTPRedirect']};}
static audit(artifacts){return{rawValue:artifacts.HTTPRedirect.value};}}
module.exports=RedirectsHTTP;},{"./audit":2}],"../audits/redirects":[function(require,module,exports){'use strict';const Audit=require('./audit');const UnusedBytes=require('./byte-efficiency/byte-efficiency-audit');class Redirects extends Audit{static get meta(){return{name:'redirects',description:'Avoid multiple page redirects',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,helpText:'Redirects introduce additional delays before the page can be loaded. [Learn more](https://developers.google.com/speed/docs/insights/AvoidRedirects).',requiredArtifacts:['URL','devtoolsLogs','traces']};}
static async audit(artifacts,context){const settings=context.settings;const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const traceOfTab=await artifacts.requestTraceOfTab(trace);const networkRecords=await artifacts.requestNetworkRecords(devtoolsLog);const mainResource=await artifacts.requestMainResource({URL:artifacts.URL,devtoolsLog});const metricComputationData={trace,devtoolsLog,traceOfTab,networkRecords,settings};const metricResult=await artifacts.requestLanternInteractive(metricComputationData);const nodeTimingsByUrl=new Map();for(const[node,timing]of metricResult.pessimisticEstimate.nodeTimings.entries()){if(node.type==='network'){const networkNode=node;nodeTimingsByUrl.set(networkNode.record.url,timing);}}
const redirectRequests=Array.from(mainResource.redirects||[]);redirectRequests.push(mainResource);let totalWastedMs=0;const pageRedirects=[];if(redirectRequests.length>1){pageRedirects.push({url:`(Initial: ${redirectRequests[0].url})`,wastedMs:0});}
for(let i=1;i<redirectRequests.length;i++){const initialRequest=redirectRequests[i-1];const redirectedRequest=redirectRequests[i];const initialTiming=nodeTimingsByUrl.get(initialRequest.url);const redirectedTiming=nodeTimingsByUrl.get(redirectedRequest.url);if(!initialTiming||!redirectedTiming){throw new Error('Could not find redirects in graph');}
const wastedMs=redirectedTiming.startTime-initialTiming.startTime;totalWastedMs+=wastedMs;pageRedirects.push({url:redirectedRequest.url,wastedMs});}
const headings=[{key:'url',itemType:'text',text:'Redirected URL'},{key:'wastedMs',itemType:'ms',text:'Time for Redirect'}];const summary={wastedMs:totalWastedMs};const details=Audit.makeTableDetails(headings,pageRedirects,summary);return{score:redirectRequests.length<=2?1:UnusedBytes.scoreForWastedMs(totalWastedMs),rawValue:totalWastedMs,displayValue:['%d\xa0ms',totalWastedMs],extendedInfo:{value:{wastedMs:totalWastedMs}},details};}}
module.exports=Redirects;},{"./audit":2,"./byte-efficiency/byte-efficiency-audit":3}],"../audits/screenshot-thumbnails":[function(require,module,exports){'use strict';const Audit=require('./audit');const LHError=require('../lib/errors');const jpeg=require('jpeg-js');const NUMBER_OF_THUMBNAILS=10;const THUMBNAIL_WIDTH=120;class ScreenshotThumbnails extends Audit{static get meta(){return{name:'screenshot-thumbnails',scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,description:'Screenshot Thumbnails',helpText:'This is what the load of your site looked like.',requiredArtifacts:['traces','devtoolsLogs']};}
static scaleImageToThumbnail(imageData){const scaledWidth=THUMBNAIL_WIDTH;const scaleFactor=imageData.width/scaledWidth;const scaledHeight=Math.floor(imageData.height/scaleFactor);const outPixels=new Uint8Array(scaledWidth*scaledHeight*4);for(let i=0;i<scaledWidth;i++){for(let j=0;j<scaledHeight;j++){const origX=Math.floor(i*scaleFactor);const origY=Math.floor(j*scaleFactor);const origPos=(origY*imageData.width+origX)*4;const outPos=(j*scaledWidth+i)*4;outPixels[outPos]=imageData.data[origPos];outPixels[outPos+1]=imageData.data[origPos+1];outPixels[outPos+2]=imageData.data[origPos+2];outPixels[outPos+3]=imageData.data[origPos+3];}}
return{width:scaledWidth,height:scaledHeight,data:outPixels};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const cachedThumbnails=new Map();const speedline=await artifacts.requestSpeedline(trace);let minimumTimelineDuration=context.options.minimumTimelineDuration||3000;if(context.settings.throttlingMethod!=='simulate'){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const tti=artifacts.requestInteractive(metricComputationData);try{minimumTimelineDuration=Math.max((await tti).timing,minimumTimelineDuration);}catch(_){}}
const thumbnails=[];const analyzedFrames=speedline.frames.filter(frame=>!frame.isProgressInterpolated());const maxFrameTime=speedline.complete||Math.max(...speedline.frames.map(frame=>frame.getTimeStamp()-speedline.beginning));const timelineEnd=Math.max(maxFrameTime,minimumTimelineDuration);if(!analyzedFrames.length||!Number.isFinite(timelineEnd)){throw new LHError(LHError.errors.INVALID_SPEEDLINE);}
for(let i=1;i<=NUMBER_OF_THUMBNAILS;i++){const targetTimestamp=speedline.beginning+timelineEnd*i/NUMBER_OF_THUMBNAILS;let frameForTimestamp=null;if(i===NUMBER_OF_THUMBNAILS){frameForTimestamp=analyzedFrames[analyzedFrames.length-1];}else{analyzedFrames.forEach(frame=>{if(frame.getTimeStamp()<=targetTimestamp){frameForTimestamp=frame;}});}
const imageData=frameForTimestamp.getParsedImage();const thumbnailImageData=ScreenshotThumbnails.scaleImageToThumbnail(imageData);const base64Data=cachedThumbnails.get(frameForTimestamp)||jpeg.encode(thumbnailImageData,90).data.toString('base64');cachedThumbnails.set(frameForTimestamp,base64Data);thumbnails.push({timing:Math.round(targetTimestamp-speedline.beginning),timestamp:targetTimestamp*1000,data:base64Data});}
return{score:1,rawValue:thumbnails.length>0,details:{type:'filmstrip',scale:timelineEnd,items:thumbnails}};}}
module.exports=ScreenshotThumbnails;},{"../lib/errors":33,"./audit":2,"jpeg-js":140}],"../audits/seo/canonical":[function(require,module,exports){'use strict';const Audit=require('../audit');const LinkHeader=require('http-link-header');const URL=require('../../lib/url-shim');const LINK_HEADER='link';function getCanonicalLinksFromHeader(headerValue){const linkHeader=LinkHeader.parse(headerValue);return linkHeader.get('rel','canonical').map(c=>c.uri);}
function getHreflangsFromHeader(headerValue){const linkHeader=LinkHeader.parse(headerValue);return linkHeader.get('rel','alternate').map(h=>h.uri);}
function isValidRelativeOrAbsoluteURL(url){try{new URL(url,'https://example.com/');return true;}catch(e){return false;}}
function getPrimaryDomain(url){return url.hostname.split('.').slice(-2).join('.');}
class Canonical extends Audit{static get meta(){return{name:'canonical',description:'Document has a valid `rel=canonical`',failureDescription:'Document does not have a valid `rel=canonical`',helpText:'Canonical links suggest which URL to show in search results. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/canonical).',requiredArtifacts:['Canonical','Hreflang','URL']};}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestMainResource({devtoolsLog,URL:artifacts.URL}).then(mainResource=>{const baseURL=new URL(mainResource.url);let canonicals=[];let hreflangs=[];mainResource._responseHeaders&&mainResource._responseHeaders.filter(h=>h.name.toLowerCase()===LINK_HEADER).forEach(h=>{canonicals=canonicals.concat(getCanonicalLinksFromHeader(h.value));hreflangs=hreflangs.concat(getHreflangsFromHeader(h.value));});for(const canonical of artifacts.Canonical){if(canonical!==null){canonicals.push(canonical);}}
canonicals=Array.from(new Set(canonicals));artifacts.Hreflang.forEach(({href})=>hreflangs.push(href));hreflangs=hreflangs.filter(href=>isValidRelativeOrAbsoluteURL(href)).map(href=>new URL(href,baseURL).href);if(canonicals.length===0){return{rawValue:true,notApplicable:true};}
if(canonicals.length>1){return{rawValue:false,explanation:`Multiple conflicting URLs (${canonicals.join(', ')})`};}
const canonical=canonicals[0];if(!isValidRelativeOrAbsoluteURL(canonical)){return{rawValue:false,explanation:`Invalid URL (${canonical})`};}
if(!URL.isValid(canonical)){return{rawValue:false,explanation:`Relative URL (${canonical})`};}
const canonicalURL=new URL(canonical);if(hreflangs.includes(baseURL.href)&&hreflangs.includes(canonicalURL.href)&&baseURL.href!==canonicalURL.href){return{rawValue:false,explanation:`Points to another hreflang location (${baseURL.href})`};}
if(getPrimaryDomain(canonicalURL)!==getPrimaryDomain(baseURL)){return{rawValue:false,explanation:`Points to a different domain (${canonicalURL})`};}
if(canonicalURL.origin===baseURL.origin&&canonicalURL.pathname==='/'&&baseURL.pathname!=='/'){return{rawValue:false,explanation:'Points to a root of the same origin'};}
return{rawValue:true};});}}
module.exports=Canonical;},{"../../lib/url-shim":"url","../audit":2,"http-link-header":137}],"../audits/seo/font-size":[function(require,module,exports){'use strict';const URL=require('../../lib/url-shim');const Audit=require('../audit');const ViewportAudit=require('../viewport');const WebInspector=require('../../lib/web-inspector');const CSSStyleDeclaration=WebInspector.CSSStyleDeclaration;const MINIMAL_PERCENTAGE_OF_LEGIBLE_TEXT=60;function getUniqueFailingRules(fontSizeArtifact){const failingRules=new Map();fontSizeArtifact.forEach(({cssRule,fontSize,textLength,node})=>{const artifactId=getFontArtifactId(cssRule,node);const failingRule=failingRules.get(artifactId);if(!failingRule){failingRules.set(artifactId,{node,cssRule,fontSize,textLength});}else{failingRule.textLength+=textLength;}});return[...failingRules.values()];}
function getAttributeMap(attributes=[]){const map=new Map();for(let i=0;i<attributes.length;i+=2){const name=attributes[i].toLowerCase();const value=attributes[i+1].trim();if(value){map.set(name,value);}}
return map;}
function getSelector(node){const attributeMap=getAttributeMap(node.attributes);if(attributeMap.has('id')){return'#'+attributeMap.get('id');}else{const attrClass=attributeMap.get('class');if(attrClass){return'.'+attrClass.split(/\s+/).join('.');}}
return node.localName.toLowerCase();}
function nodeToTableNode(node){const attributes=node.attributes||[];const attributesString=attributes.map((value,idx)=>idx%2===0?` ${value}`:`="${value}"`).join('');return{type:'node',selector:node.parentNode?getSelector(node.parentNode):'',snippet:`<${node.localName}${attributesString}>`};}
function findStyleRuleSource(baseURL,styleDeclaration,node){if(!styleDeclaration||styleDeclaration.type===CSSStyleDeclaration.Type.Attributes||styleDeclaration.type===CSSStyleDeclaration.Type.Inline)
{return{selector:nodeToTableNode(node),source:baseURL};}
if(styleDeclaration.parentRule&&styleDeclaration.parentRule.origin==='user-agent'){return{selector:styleDeclaration.parentRule.selectors.map(item=>item.text).join(', '),source:'User Agent Stylesheet'};}
if(styleDeclaration.type===CSSStyleDeclaration.Type.Regular&&styleDeclaration.parentRule){const rule=styleDeclaration.parentRule;const stylesheet=styleDeclaration.stylesheet;if(stylesheet){let source;const selector=rule.selectors.map(item=>item.text).join(', ');if(stylesheet.sourceURL){const url=new URL(stylesheet.sourceURL,baseURL);const range=styleDeclaration.range;source=`${url.href}`;if(range){const absoluteStartLine=range.startLine+stylesheet.startLine+1;const absoluteStartColumn=range.startColumn+stylesheet.startColumn+1;source+=`:${absoluteStartLine}:${absoluteStartColumn}`;}}else{source='dynamic';}
return{selector,source};}}
return{selector:'',source:'Unknown'};}
function getFontArtifactId(styleDeclaration,node){if(styleDeclaration&&styleDeclaration.type===CSSStyleDeclaration.Type.Regular){const startLine=styleDeclaration.range?styleDeclaration.range.startLine:0;const startColumn=styleDeclaration.range?styleDeclaration.range.startColumn:0;return`${styleDeclaration.styleSheetId}@${startLine}:${startColumn}`;}else{return`node_${node.nodeId}`;}}
class FontSize extends Audit{static get meta(){return{name:'font-size',description:'Document uses legible font sizes',failureDescription:'Document doesn\'t use legible font sizes',helpText:'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://developers.google.com/web/tools/lighthouse/audits/font-sizes).',requiredArtifacts:['FontSize','URL','Viewport']};}
static audit(artifacts){const hasViewportSet=ViewportAudit.audit(artifacts).rawValue;if(!hasViewportSet){return{rawValue:false,explanation:'Text is illegible because of a missing viewport config'};}
const{analyzedFailingNodesData,analyzedFailingTextLength,failingTextLength,visitedTextLength,totalTextLength}=artifacts.FontSize;if(totalTextLength===0){return{rawValue:true};}
const failingRules=getUniqueFailingRules(analyzedFailingNodesData);const percentageOfPassingText=(visitedTextLength-failingTextLength)/visitedTextLength*100;const pageUrl=artifacts.URL.finalUrl;const headings=[{key:'source',itemType:'url',text:'Source'},{key:'selector',itemType:'code',text:'Selector'},{key:'coverage',itemType:'text',text:'% of Page Text'},{key:'fontSize',itemType:'text',text:'Font Size'}];const tableData=failingRules.sort((a,b)=>b.textLength-a.textLength).map(({cssRule,textLength,fontSize,node})=>{const percentageOfAffectedText=textLength/visitedTextLength*100;const origin=findStyleRuleSource(pageUrl,cssRule,node);return{source:origin.source,selector:origin.selector,coverage:`${percentageOfAffectedText.toFixed(2)}%`,fontSize:`${fontSize}px`};});if(analyzedFailingTextLength<failingTextLength){const percentageOfUnanalyzedFailingText=(failingTextLength-analyzedFailingTextLength)/visitedTextLength*100;tableData.push({source:'Add\'l illegible text',selector:'',coverage:`${percentageOfUnanalyzedFailingText.toFixed(2)}%`,fontSize:'< 12px'});}
if(percentageOfPassingText>0){tableData.push({source:'Legible text',selector:'',coverage:`${percentageOfPassingText.toFixed(2)}%`,fontSize:'≥ 12px'});}
const displayValue=['%.1d% legible text',percentageOfPassingText];const details=Audit.makeTableDetails(headings,tableData);const passed=percentageOfPassingText>=MINIMAL_PERCENTAGE_OF_LEGIBLE_TEXT;let explanation;if(!passed){const percentageOfFailingText=parseFloat((100-percentageOfPassingText).toFixed(2));let disclaimer='';if(visitedTextLength<totalTextLength){const percentageOfVisitedText=visitedTextLength/totalTextLength*100;disclaimer=` (based on ${percentageOfVisitedText.toFixed()}% sample)`;}
explanation=`${percentageOfFailingText}% of text is too small${disclaimer}.`;}
return{rawValue:passed,details,displayValue,explanation};}}
module.exports=FontSize;},{"../../lib/url-shim":"url","../../lib/web-inspector":47,"../audit":2,"../viewport":"../audits/viewport"}],"../audits/seo/hreflang":[function(require,module,exports){(function(global){'use strict';const Audit=require('../audit');const LinkHeader=require('http-link-header');const VALID_LANGS=importValidLangs();const LINK_HEADER='link';const NO_LANGUAGE='x-default';function importValidLangs(){const axeCache=global.axe;global.axe={utils:{}};require('axe-core/lib/commons/utils/valid-langs.js');const validLangs=global.axe.utils.validLangs();global.axe=axeCache;return validLangs;}
function isValidHreflang(hreflang){if(hreflang.toLowerCase()===NO_LANGUAGE){return true;}
const[lang]=hreflang.split('-');return VALID_LANGS.includes(lang.toLowerCase());}
function headerHasValidHreflangs(headerValue){const linkHeader=LinkHeader.parse(headerValue);return linkHeader.get('rel','alternate').every(link=>!!link.hreflang&&isValidHreflang(link.hreflang));}
class Hreflang extends Audit{static get meta(){return{name:'hreflang',description:'Document has a valid `hreflang`',failureDescription:'Document doesn\'t have a valid `hreflang`',helpText:'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://developers.google.com/web/tools/lighthouse/audits/hreflang).',requiredArtifacts:['Hreflang','URL']};}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const URL=artifacts.URL;return artifacts.requestMainResource({devtoolsLog,URL}).then(mainResource=>{const invalidHreflangs=[];if(artifacts.Hreflang){artifacts.Hreflang.forEach(({href,hreflang})=>{if(!isValidHreflang(hreflang)){invalidHreflangs.push({source:{type:'node',snippet:`<link name="alternate" hreflang="${hreflang}" href="${href}" />`}});}});}
mainResource._responseHeaders&&mainResource._responseHeaders.filter(h=>h.name.toLowerCase()===LINK_HEADER&&!headerHasValidHreflangs(h.value)).forEach(h=>invalidHreflangs.push({source:`${h.name}: ${h.value}`}));const headings=[{key:'source',itemType:'code',text:'Source'}];const details=Audit.makeTableDetails(headings,invalidHreflangs);return{rawValue:invalidHreflangs.length===0,details};});}}
module.exports=Hreflang;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"../audit":2,"axe-core/lib/commons/utils/valid-langs.js":98,"http-link-header":137}],"../audits/seo/http-status-code":[function(require,module,exports){'use strict';const Audit=require('../audit');const HTTP_UNSUCCESSFUL_CODE_LOW=400;const HTTP_UNSUCCESSFUL_CODE_HIGH=599;class HTTPStatusCode extends Audit{static get meta(){return{name:'http-status-code',description:'Page has successful HTTP status code',failureDescription:'Page has unsuccessful HTTP status code',helpText:'Pages with unsuccessful HTTP status codes may not be indexed properly. '+'[Learn more]'+'(https://developers.google.com/web/tools/lighthouse/audits/successful-http-code).',requiredArtifacts:['devtoolsLogs','URL']};}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const URL=artifacts.URL;return artifacts.requestMainResource({devtoolsLog,URL}).then(mainResource=>{const statusCode=mainResource.statusCode;if(statusCode>=HTTP_UNSUCCESSFUL_CODE_LOW&&statusCode<=HTTP_UNSUCCESSFUL_CODE_HIGH){return{rawValue:false,displayValue:`${statusCode}`};}
return{rawValue:true};});}}
module.exports=HTTPStatusCode;},{"../audit":2}],"../audits/seo/is-crawlable":[function(require,module,exports){'use strict';const Audit=require('../audit');const robotsParser=require('robots-parser');const URL=require('../../lib/url-shim');const BLOCKLIST=new Set(['noindex','none']);const ROBOTS_HEADER='x-robots-tag';const UNAVAILABLE_AFTER='unavailable_after';function isUnavailable(directive){const parts=directive.split(':');if(parts.length<=1||parts[0]!==UNAVAILABLE_AFTER){return false;}
const date=Date.parse(parts.slice(1).join(':'));return!isNaN(date)&&date<Date.now();}
function hasBlockingDirective(directives){return directives.split(',').map(d=>d.toLowerCase().trim()).some(d=>BLOCKLIST.has(d)||isUnavailable(d));}
function hasUserAgent(directives){const parts=directives.match(/^([^,:]+):/);return!!parts&&parts[1].toLowerCase()!==UNAVAILABLE_AFTER;}
class IsCrawlable extends Audit{static get meta(){return{name:'is-crawlable',description:'Page isn’t blocked from indexing',failureDescription:'Page is blocked from indexing',helpText:'Search engines are unable to include your pages in search results '+'if they don\'t have permission to crawl them. [Learn '+'more](https://developers.google.com/web/tools/lighthouse/audits/indexing).',requiredArtifacts:['MetaRobots','RobotsTxt','URL']};}
static audit(artifacts){const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestMainResource({devtoolsLog,URL:artifacts.URL}).then(mainResource=>{const blockingDirectives=[];if(artifacts.MetaRobots){const isBlocking=hasBlockingDirective(artifacts.MetaRobots);if(isBlocking){blockingDirectives.push({source:{type:'node',snippet:`<meta name="robots" content="${artifacts.MetaRobots}" />`}});}}
mainResource._responseHeaders&&mainResource._responseHeaders.filter(h=>h.name.toLowerCase()===ROBOTS_HEADER&&!hasUserAgent(h.value)&&hasBlockingDirective(h.value)).forEach(h=>blockingDirectives.push({source:`${h.name}: ${h.value}`}));if(artifacts.RobotsTxt.content){const robotsFileUrl=new URL('/robots.txt',mainResource.url);const robotsTxt=robotsParser(robotsFileUrl.href,artifacts.RobotsTxt.content);if(!robotsTxt.isAllowed(mainResource.url)){blockingDirectives.push({source:{type:'url',value:robotsFileUrl.href}});}}
const headings=[{key:'source',itemType:'code',text:'Blocking Directive Source'}];const details=Audit.makeTableDetails(headings,blockingDirectives);return{rawValue:blockingDirectives.length===0,details};});}}
module.exports=IsCrawlable;},{"../../lib/url-shim":"url","../audit":2,"robots-parser":149}],"../audits/seo/link-text":[function(require,module,exports){'use strict';const Audit=require('../audit');const URL=require('../../lib/url-shim');const BLOCKLIST=new Set(['click here','click this','go','here','this','start','right here','more','learn more']);class LinkText extends Audit{static get meta(){return{name:'link-text',description:'Links have descriptive text',failureDescription:'Links do not have descriptive text',helpText:'Descriptive link text helps search engines understand your content. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text).',requiredArtifacts:['URL','CrawlableLinks']};}
static audit(artifacts){const failingLinks=artifacts.CrawlableLinks.filter(link=>{if(link.href.toLowerCase().startsWith('javascript:')||URL.equalWithExcludedFragments(link.href,artifacts.URL.finalUrl))
{return false;}
return BLOCKLIST.has(link.text.trim().toLowerCase());});const headings=[{key:'href',itemType:'url',text:'Link destination'},{key:'text',itemType:'text',text:'Link Text'}];const details=Audit.makeTableDetails(headings,failingLinks,{});let displayValue;if(failingLinks.length){displayValue=failingLinks.length>1?`${failingLinks.length} links found`:'1 link found';}
return{rawValue:failingLinks.length===0,details,displayValue};}}
module.exports=LinkText;},{"../../lib/url-shim":"url","../audit":2}],"../audits/seo/manual/mobile-friendly":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class MobileFriendly extends ManualAudit{static get meta(){return Object.assign({name:'mobile-friendly',helpText:'Take the [Mobile-Friendly Test](https://search.google.com/test/mobile-friendly) to check for audits not covered by Lighthouse, like sizing tap targets appropriately. [Learn more](https://developers.google.com/search/mobile-sites/).',description:'Page is mobile friendly'},super.partialMeta);}}
module.exports=MobileFriendly;},{"../../manual/manual-audit":4}],"../audits/seo/manual/structured-data":[function(require,module,exports){'use strict';const ManualAudit=require('../../manual/manual-audit');class StructuredData extends ManualAudit{static get meta(){return Object.assign({name:'structured-data',helpText:'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://developers.google.com/search/docs/guides/mark-up-content).',description:'Structured data is valid'},super.partialMeta);}}
module.exports=StructuredData;},{"../../manual/manual-audit":4}],"../audits/seo/meta-description":[function(require,module,exports){'use strict';const Audit=require('../audit');class Description extends Audit{static get meta(){return{name:'meta-description',description:'Document has a meta description',failureDescription:'Document does not have a meta description',helpText:'Meta descriptions may be included in search results to concisely summarize '+'page content. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/description).',requiredArtifacts:['MetaDescription']};}
static audit(artifacts){if(artifacts.MetaDescription===null){return{rawValue:false};}
if(artifacts.MetaDescription.trim().length===0){return{rawValue:false,explanation:'Description text is empty.'};}
return{rawValue:true};}}
module.exports=Description;},{"../audit":2}],"../audits/seo/plugins":[function(require,module,exports){'use strict';const Audit=require('../audit');const URL=require('../../lib/url-shim');const JAVA_APPLET_TYPE='application/x-java-applet';const JAVA_BEAN_TYPE='application/x-java-bean';const TYPE_BLOCKLIST=new Set(['application/x-shockwave-flash',JAVA_APPLET_TYPE,JAVA_BEAN_TYPE,'application/x-silverlight','application/x-silverlight-2']);const FILE_EXTENSION_BLOCKLIST=new Set(['swf','flv','class','xap']);const SOURCE_PARAMS=new Set(['code','movie','source','src']);function isPluginType(type){type=type.trim().toLowerCase();return TYPE_BLOCKLIST.has(type)||type.startsWith(JAVA_APPLET_TYPE)||type.startsWith(JAVA_BEAN_TYPE);}
function isPluginURL(url){try{const filePath=new URL(url,'http://example.com').pathname;const parts=filePath.split('.');if(parts.length<2){return false;}
const part=parts.pop();return FILE_EXTENSION_BLOCKLIST.has(part.trim().toLowerCase());}catch(e){return false;}}
class Plugins extends Audit{static get meta(){return{name:'plugins',description:'Document avoids plugins',failureDescription:'Document uses plugins',helpText:'Search engines can\'t index plugin content, and '+'many devices restrict plugins or don\'t support them. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/plugins).',requiredArtifacts:['EmbeddedContent']};}
static audit(artifacts){const plugins=artifacts.EmbeddedContent.filter(item=>{if(item.tagName==='APPLET'){return true;}
if((item.tagName==='EMBED'||item.tagName==='OBJECT')&&item.type&&isPluginType(item.type))
{return true;}
const embedSrc=item.src||item.code;if(item.tagName==='EMBED'&&embedSrc&&isPluginURL(embedSrc)){return true;}
if(item.tagName==='OBJECT'&&item.data&&isPluginURL(item.data)){return true;}
const failingParams=item.params.filter(param=>SOURCE_PARAMS.has(param.name.trim().toLowerCase())&&isPluginURL(param.value));return failingParams.length>0;}).map(plugin=>{const tagName=plugin.tagName.toLowerCase();const attributeKeys=['src','data','code','type'];const attributes=attributeKeys.reduce((result,attr)=>{if(plugin[attr]!==null){result+=` ${attr}="${plugin[attr]}"`;}
return result;},'');const params=plugin.params.filter(param=>SOURCE_PARAMS.has(param.name.trim().toLowerCase())).map(param=>`<param ${param.name}="${param.value}" />`).join('');return{source:{type:'node',snippet:`<${tagName}${attributes}>${params}</${tagName}>`}};});const headings=[{key:'source',itemType:'code',text:'Element source'}];const details=Audit.makeTableDetails(headings,plugins);return{rawValue:plugins.length===0,details};}}
module.exports=Plugins;},{"../../lib/url-shim":"url","../audit":2}],"../audits/seo/robots-txt":[function(require,module,exports){'use strict';const Audit=require('../audit');const URL=require('../../lib/url-shim');const HTTP_CLIENT_ERROR_CODE_LOW=400;const HTTP_SERVER_ERROR_CODE_LOW=500;const DIRECTIVE_SITEMAP='sitemap';const DIRECTIVE_USER_AGENT='user-agent';const DIRECTIVE_ALLOW='allow';const DIRECTIVE_DISALLOW='disallow';const DIRECTIVES_GROUP_MEMBERS=new Set([DIRECTIVE_ALLOW,DIRECTIVE_DISALLOW]);const DIRECTIVE_SAFELIST=new Set([DIRECTIVE_USER_AGENT,DIRECTIVE_DISALLOW,DIRECTIVE_ALLOW,DIRECTIVE_SITEMAP,'crawl-delay','clean-param','host','request-rate','visit-time','noindex']);const SITEMAP_VALID_PROTOCOLS=new Set(['https:','http:','ftp:']);function verifyDirective(directiveName,directiveValue){if(!DIRECTIVE_SAFELIST.has(directiveName)){throw new Error('Unknown directive');}
if(directiveName===DIRECTIVE_SITEMAP){let sitemapUrl;try{sitemapUrl=new URL(directiveValue);}catch(e){throw new Error('Invalid sitemap URL');}
if(!SITEMAP_VALID_PROTOCOLS.has(sitemapUrl.protocol)){throw new Error('Invalid sitemap URL protocol');}}
if(directiveName===DIRECTIVE_USER_AGENT&&!directiveValue){throw new Error('No user-agent specified');}
if(directiveName===DIRECTIVE_ALLOW||directiveName===DIRECTIVE_DISALLOW){if(directiveValue!==''&&directiveValue[0]!=='/'&&directiveValue[0]!=='*'){throw new Error('Pattern should either be empty, start with "/" or "*"');}
const dollarIndex=directiveValue.indexOf('$');if(dollarIndex!==-1&&dollarIndex!==directiveValue.length-1){throw new Error('"$" should only be used at the end of the pattern');}}}
function parseLine(line){const hashIndex=line.indexOf('#');if(hashIndex!==-1){line=line.substr(0,hashIndex);}
line=line.trim();if(line.length===0){return null;}
const colonIndex=line.indexOf(':');if(colonIndex===-1){throw new Error('Syntax not understood');}
const directiveName=line.slice(0,colonIndex).trim().toLowerCase();const directiveValue=line.slice(colonIndex+1).trim();verifyDirective(directiveName,directiveValue);return{directive:directiveName,value:directiveValue};}
function validateRobots(content){const errors=[];let inGroup=false;content.split(/\r\n|\r|\n/).forEach((line,index)=>{let parsedLine;try{parsedLine=parseLine(line);}catch(e){errors.push({index:(index+1).toString(),line:line,message:e.message.toString()});}
if(!parsedLine){return;}
if(parsedLine.directive===DIRECTIVE_USER_AGENT){inGroup=true;}else if(!inGroup&&DIRECTIVES_GROUP_MEMBERS.has(parsedLine.directive)){errors.push({index:(index+1).toString(),line:line,message:'No user-agent specified'});}});return errors;}
class RobotsTxt extends Audit{static get meta(){return{name:'robots-txt',description:'robots.txt is valid',failureDescription:'robots.txt is not valid',helpText:'If your robots.txt file is malformed, crawlers may not be able to understand '+'how you want your website to be crawled or indexed.',requiredArtifacts:['RobotsTxt']};}
static audit(artifacts){const{status,content}=artifacts.RobotsTxt;if(!status){return{rawValue:false,explanation:'Lighthouse was unable to download your robots.txt file'};}
if(status>=HTTP_SERVER_ERROR_CODE_LOW){return{rawValue:false,displayValue:`request for robots.txt returned HTTP${status}`};}else if(status>=HTTP_CLIENT_ERROR_CODE_LOW||content===''){return{rawValue:true,notApplicable:true};}
if(content===null){throw new Error(`Status ${status} was valid, but content was null`);}
const validationErrors=validateRobots(content);const headings=[{key:'index',itemType:'text',text:'Line #'},{key:'line',itemType:'code',text:'Content'},{key:'message',itemType:'code',text:'Error'}];const details=Audit.makeTableDetails(headings,validationErrors,{});let displayValue;if(validationErrors.length){displayValue=validationErrors.length>1?`${validationErrors.length} errors found`:'1 error found';}
return{rawValue:validationErrors.length===0,details,displayValue};}}
module.exports=RobotsTxt;},{"../../lib/url-shim":"url","../audit":2}],"../audits/service-worker":[function(require,module,exports){'use strict';const URL=require('../lib/url-shim');const Audit=require('./audit');class ServiceWorker extends Audit{static get meta(){return{name:'service-worker',description:'Registers a service worker',failureDescription:'Does not register a service worker',helpText:'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://developers.google.com/web/tools/lighthouse/audits/registered-service-worker).',requiredArtifacts:['URL','ServiceWorker']};}
static audit(artifacts){const versions=artifacts.ServiceWorker.versions;const url=artifacts.URL.finalUrl;const origin=new URL(url).origin;const matchingSW=versions.filter(v=>v.status==='activated').find(v=>new URL(v.scriptURL).origin===origin);return{rawValue:!!matchingSW};}}
module.exports=ServiceWorker;},{"../lib/url-shim":"url","./audit":2}],"../audits/speed-index":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');class SpeedIndex extends Audit{static get meta(){return{name:'speed-index',description:'Speed Index',helpText:'Speed Index shows how quickly the contents of a page are visibly populated. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/speed-index).',scoreDisplayMode:Audit.SCORING_MODES.NUMERIC,requiredArtifacts:['traces','devtoolsLogs']};}
static get defaultOptions(){return{scorePODR:2900,scoreMedian:5800};}
static async audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const metricComputationData={trace,devtoolsLog,settings:context.settings};const metricResult=await artifacts.requestSpeedIndex(metricComputationData);return{score:Audit.computeLogNormalScore(metricResult.timing,context.options.scorePODR,context.options.scoreMedian),rawValue:metricResult.timing,displayValue:[Util.MS_DISPLAY_VALUE,metricResult.timing]};}}
module.exports=SpeedIndex;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/splash-screen":[function(require,module,exports){'use strict';const MultiCheckAudit=require('./multi-check-audit');class SplashScreen extends MultiCheckAudit{static get meta(){return{name:'splash-screen',description:'Configured for a custom splash screen',failureDescription:'Is not configured for a custom splash screen',helpText:'A themed splash screen ensures a high-quality experience when '+'users launch your app from their homescreens. [Learn '+'more](https://developers.google.com/web/tools/lighthouse/audits/custom-splash-screen).',requiredArtifacts:['Manifest']};}
static assessManifest(manifestValues,failures){if(manifestValues.isParseFailure&&manifestValues.parseFailureReason){failures.push(manifestValues.parseFailureReason);return;}
const splashScreenCheckIds=['hasName','hasBackgroundColor','hasThemeColor','hasIconsAtLeast512px'];manifestValues.allChecks.filter(item=>splashScreenCheckIds.includes(item.id)).forEach(item=>{if(!item.passing){failures.push(item.failureText);}});}
static audit_(artifacts){const failures=[];return artifacts.requestManifestValues(artifacts.Manifest).then(manifestValues=>{SplashScreen.assessManifest(manifestValues,failures);return{failures,manifestValues};});}}
module.exports=SplashScreen;},{"./multi-check-audit":5}],"../audits/themed-omnibox":[function(require,module,exports){'use strict';const MultiCheckAudit=require('./multi-check-audit');const validColor=require('../lib/web-inspector').Color.parse;class ThemedOmnibox extends MultiCheckAudit{static get meta(){return{name:'themed-omnibox',description:'Address bar matches brand colors',failureDescription:'Address bar does not match brand colors',helpText:'The browser address bar can be themed to match your site. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/address-bar).',requiredArtifacts:['Manifest','ThemeColor']};}
static assessMetaThemecolor(themeColorMeta,failures){if(themeColorMeta===null){failures.push('No `<meta name="theme-color">` tag found');}else if(!validColor(themeColorMeta)){failures.push('The theme-color meta tag did not contain a valid CSS color');}}
static assessManifest(manifestValues,failures){if(manifestValues.isParseFailure&&manifestValues.parseFailureReason){failures.push(manifestValues.parseFailureReason);return;}
const themeColorCheck=manifestValues.allChecks.find(i=>i.id==='hasThemeColor');if(themeColorCheck&&!themeColorCheck.passing){failures.push(themeColorCheck.failureText);}}
static audit_(artifacts){const failures=[];return artifacts.requestManifestValues(artifacts.Manifest).then(manifestValues=>{ThemedOmnibox.assessManifest(manifestValues,failures);ThemedOmnibox.assessMetaThemecolor(artifacts.ThemeColor,failures);return{failures,manifestValues,themeColor:artifacts.ThemeColor};});}}
module.exports=ThemedOmnibox;},{"../lib/web-inspector":47,"./multi-check-audit":5}],"../audits/time-to-first-byte":[function(require,module,exports){'use strict';const Audit=require('./audit');const Util=require('../report/html/renderer/util');const TTFB_THRESHOLD=600;class TTFBMetric extends Audit{static get meta(){return{name:'time-to-first-byte',description:'Keep server response times low (TTFB)',helpText:'Time To First Byte identifies the time at which your server sends a response.'+' [Learn more](https://developers.google.com/web/tools/chrome-devtools/network-performance/issues).',requiredArtifacts:['devtoolsLogs','URL']};}
static caclulateTTFB(record){const timing=record._timing;return timing.receiveHeadersEnd-timing.sendEnd;}
static audit(artifacts){const devtoolsLogs=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];return artifacts.requestNetworkRecords(devtoolsLogs).then(networkRecords=>{let displayValue='';const finalUrl=artifacts.URL.finalUrl;const finalUrlRequest=networkRecords.find(record=>record._url===finalUrl);if(!finalUrlRequest){throw new Error(`finalUrl '${finalUrl} not found in network records.`);}
const ttfb=TTFBMetric.caclulateTTFB(finalUrlRequest);const passed=ttfb<TTFB_THRESHOLD;if(!passed){displayValue=`Root document took ${Util.formatMilliseconds(ttfb,1)} `;}
return{rawValue:ttfb,score:Number(passed),displayValue,details:{summary:{wastedMs:ttfb-TTFB_THRESHOLD}},extendedInfo:{value:{wastedMs:ttfb-TTFB_THRESHOLD}}};});}}
module.exports=TTFBMetric;},{"../report/html/renderer/util":48,"./audit":2}],"../audits/user-timings":[function(require,module,exports){'use strict';const Audit=require('./audit');class UserTimings extends Audit{static get meta(){return{name:'user-timings',scoreDisplayMode:Audit.SCORING_MODES.INFORMATIVE,description:'User Timing marks and measures',helpText:'Consider instrumenting your app with the User Timing API to create custom, '+'real-world measurements of key user experiences. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing).',requiredArtifacts:['traces']};}
static filterTrace(tabTrace){const userTimings=[];const measuresStartTimes={};tabTrace.processEvents.filter(evt=>{if(!evt.cat.includes('blink.user_timing')){return false;}
return evt.name!=='requestStart'&&evt.name!=='navigationStart'&&evt.name!=='paintNonDefaultBackgroundColor'&&evt.args.frame===undefined;}).forEach(ut=>{if(ut.ph==='R'||ut.ph.toUpperCase()==='I'){userTimings.push({name:ut.name,isMark:true,args:ut.args,startTime:ut.ts});}else if(ut.ph.toLowerCase()==='b'){measuresStartTimes[ut.name]=ut.ts;}else if(ut.ph.toLowerCase()==='e'){userTimings.push({name:ut.name,isMark:false,args:ut.args,startTime:measuresStartTimes[ut.name],endTime:ut.ts,duration:ut.ts-measuresStartTimes[ut.name]});}});userTimings.forEach(ut=>{ut.startTime=(ut.startTime-tabTrace.navigationStartEvt.ts)/1000;if(!ut.isMark){ut.endTime=(ut.endTime-tabTrace.navigationStartEvt.ts)/1000;ut.duration=ut.duration/1000;}});return userTimings;}
static get blacklistedPrefixes(){return['goog_'];}
static excludeBlacklisted(evt){return UserTimings.blacklistedPrefixes.every(prefix=>!evt.name.startsWith(prefix));}
static audit(artifacts){const trace=artifacts.traces[Audit.DEFAULT_PASS];return artifacts.requestTraceOfTab(trace).then(tabTrace=>{const userTimings=this.filterTrace(tabTrace).filter(UserTimings.excludeBlacklisted);const tableRows=userTimings.map(item=>{const time=item.isMark?item.startTime:item.duration;return{name:item.name,timingType:item.isMark?'Mark':'Measure',time};}).sort((itemA,itemB)=>{if(itemA.timingType===itemB.timingType){return itemA.time-itemB.time;}else if(itemA.timingType==='Measure'){return-1;}else{return 1;}});const headings=[{key:'name',itemType:'text',text:'Name'},{key:'timingType',itemType:'text',text:'Type'},{key:'time',itemType:'ms',granularity:0.01,text:'Time'}];const details=Audit.makeTableDetails(headings,tableRows);return{rawValue:userTimings.length===0,notApplicable:userTimings.length===0,displayValue:userTimings.length?`${userTimings.length}`:'',extendedInfo:{value:userTimings},details};});}}
module.exports=UserTimings;},{"./audit":2}],"../audits/uses-rel-preconnect":[function(require,module,exports){'use strict';const Audit=require('./audit');const UnusedBytes=require('./byte-efficiency/byte-efficiency-audit');const PRECONNECT_SOCKET_MAX_IDLE=15;const IGNORE_THRESHOLD_IN_MS=50;class UsesRelPreconnectAudit extends Audit{static get meta(){return{name:'uses-rel-preconnect',description:'Avoid multiple, costly round trips to any origin',helpText:'Consider adding preconnect or dns-prefetch resource hints to establish early '+`connections to important third-party origins. [Learn more](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect).`,requiredArtifacts:['devtoolsLogs','URL'],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC};}
static hasValidTiming(record){return record._timing&&record._timing.connectEnd>0&&record._timing.connectStart>0;}
static hasAlreadyConnectedToOrigin(record){return(record._timing.dnsEnd-record._timing.dnsStart===0&&record._timing.connectEnd-record._timing.connectStart===0);}
static socketStartTimeIsBelowThreshold(record,mainResource){return Math.max(0,record.startTime-mainResource.endTime)<PRECONNECT_SOCKET_MAX_IDLE;}
static async audit(artifacts,context){const devtoolsLog=artifacts.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS];const URL=artifacts.URL;const settings=context.settings;let maxWasted=0;const[networkRecords,mainResource,loadSimulator]=await Promise.all([artifacts.requestNetworkRecords(devtoolsLog),artifacts.requestMainResource({devtoolsLog,URL}),artifacts.requestLoadSimulator({devtoolsLog,settings})]);const{rtt,additionalRttByOrigin}=loadSimulator.getOptions();const origins=new Map();networkRecords.forEach(record=>{if(!UsesRelPreconnectAudit.hasValidTiming(record)||record.initiatorRequest()===mainResource||!record.parsedURL||!record.parsedURL.securityOrigin()||mainResource.parsedURL.securityOrigin()===record.parsedURL.securityOrigin()||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(record)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(record,mainResource))
{return;}
const securityOrigin=record.parsedURL.securityOrigin();const records=origins.get(securityOrigin)||[];records.push(record);origins.set(securityOrigin,records);});let results=[];origins.forEach(records=>{const firstRecordOfOrigin=records.reduce((firstRecord,record)=>{return record.startTime<firstRecord.startTime?record:firstRecord;});const securityOrigin=firstRecordOfOrigin.parsedURL.securityOrigin();const additionalRtt=additionalRttByOrigin.get(securityOrigin)||0;let connectionTime=rtt+additionalRtt;if(firstRecordOfOrigin.parsedURL.scheme==='https')connectionTime=connectionTime*2;const timeBetweenMainResourceAndDnsStart=firstRecordOfOrigin.startTime*1000-
mainResource.endTime*1000+
firstRecordOfOrigin._timing.dnsStart;const wastedMs=Math.min(connectionTime,timeBetweenMainResourceAndDnsStart);if(wastedMs<IGNORE_THRESHOLD_IN_MS)return;maxWasted=Math.max(wastedMs,maxWasted);results.push({url:securityOrigin,wastedMs:wastedMs});});results=results.sort((a,b)=>b.wastedMs-a.wastedMs);const headings=[{key:'url',itemType:'url',text:'Origin'},{key:'wastedMs',itemType:'ms',text:'Potential Savings'}];const summary={wastedMs:maxWasted};const details=Audit.makeTableDetails(headings,results,summary);return{score:UnusedBytes.scoreForWastedMs(maxWasted),rawValue:maxWasted,displayValue:['Potential savings of %10d\xa0ms',maxWasted],extendedInfo:{value:results},details};}}
module.exports=UsesRelPreconnectAudit;},{"./audit":2,"./byte-efficiency/byte-efficiency-audit":3}],"../audits/uses-rel-preload":[function(require,module,exports){'use strict';const Audit=require('./audit');const UnusedBytes=require('./byte-efficiency/byte-efficiency-audit');const THRESHOLD_IN_MS=100;class UsesRelPreloadAudit extends Audit{static get meta(){return{name:'uses-rel-preload',description:'Preload key requests',helpText:'Consider using <link rel=preload> to prioritize fetching late-discovered '+'resources sooner. [Learn more](https://developers.google.com/web/updates/2016/03/link-rel-preload).',requiredArtifacts:['devtoolsLogs','traces','URL'],scoreDisplayMode:Audit.SCORING_MODES.NUMERIC};}
static _flattenRequests(chains,maxLevel,minLevel=0){const requests=[];const flatten=(chains,level)=>{Object.keys(chains).forEach(chain=>{if(chains[chain]){const currentChain=chains[chain];if(level>=minLevel){requests.push(currentChain.request);}
if(level<maxLevel){flatten(currentChain.children,level+1);}}});};flatten(chains,0);return requests;}
static computeWasteWithGraph(urls,graph,simulator){if(!urls.size){return{wastedMs:0,results:[]};}
const simulationBeforeChanges=simulator.simulate(graph,{flexibleOrdering:true});const modifiedGraph=graph.cloneWithRelationships();const nodesToPreload=[];let mainDocumentNode=null;modifiedGraph.traverse(node=>{if(node.type!=='network')return;const networkNode=node;if(node.isMainDocument()){mainDocumentNode=networkNode;}else if(networkNode.record&&urls.has(networkNode.record.url)){nodesToPreload.push(networkNode);}});if(!mainDocumentNode){throw new Error('Could not find main document node');}
for(const node of nodesToPreload){node.removeAllDependencies();node.addDependency(mainDocumentNode);}
const simulationAfterChanges=simulator.simulate(modifiedGraph,{flexibleOrdering:true});const originalNodesByRecord=Array.from(simulationBeforeChanges.nodeTimings.keys()).reduce((map,node)=>map.set(node.record,node),new Map());const results=[];for(const node of nodesToPreload){const originalNode=originalNodesByRecord.get(node.record);const timingAfter=simulationAfterChanges.nodeTimings.get(node);const timingBefore=simulationBeforeChanges.nodeTimings.get(originalNode);const wastedMs=Math.round(timingBefore.endTime-timingAfter.endTime);if(wastedMs<THRESHOLD_IN_MS)continue;results.push({url:node.record.url,wastedMs});}
if(!results.length){return{wastedMs:0,results};}
return{wastedMs:Math.max(...results.map(item=>item.wastedMs)),results};}
static async audit(artifacts,context){const trace=artifacts.traces[UsesRelPreloadAudit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS];const URL=artifacts.URL;const simulatorOptions={trace,devtoolsLog,settings:context.settings};const[critChains,mainResource,graph,simulator]=await Promise.all([artifacts.requestCriticalRequestChains({devtoolsLog,URL}),artifacts.requestMainResource({devtoolsLog,URL}),artifacts.requestPageDependencyGraph({trace,devtoolsLog}),artifacts.requestLoadSimulator(simulatorOptions)]);const mainResourceIndex=mainResource.redirects?mainResource.redirects.length:0;const criticalRequests=UsesRelPreloadAudit._flattenRequests(critChains,3+mainResourceIndex,2+mainResourceIndex);const urls=new Set();for(const networkRecord of criticalRequests){if(!networkRecord._isLinkPreload&&networkRecord.protocol!=='data'){urls.add(networkRecord._url);}}
const{results,wastedMs}=UsesRelPreloadAudit.computeWasteWithGraph(urls,graph,simulator);results.sort((a,b)=>b.wastedMs-a.wastedMs);const headings=[{key:'url',itemType:'url',text:'URL'},{key:'wastedMs',itemType:'ms',text:'Potential Savings',granularity:10}];const summary={wastedMs};const details=Audit.makeTableDetails(headings,results,summary);return{score:UnusedBytes.scoreForWastedMs(wastedMs),rawValue:wastedMs,displayValue:['Potential savings of %10d\xa0ms',wastedMs],extendedInfo:{value:results},details};}}
module.exports=UsesRelPreloadAudit;},{"./audit":2,"./byte-efficiency/byte-efficiency-audit":3}],"../audits/viewport":[function(require,module,exports){'use strict';const Audit=require('./audit');const Parser=require('metaviewport-parser');class Viewport extends Audit{static get meta(){return{name:'viewport',description:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureDescription:'Does not have a `<meta name="viewport">` tag with `width` '+'or `initial-scale`',helpText:'Add a viewport meta tag to optimize your app for mobile screens. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/has-viewport-meta-tag).',requiredArtifacts:['Viewport']};}
static audit(artifacts){if(artifacts.Viewport===null){return{explanation:'No viewport meta tag found',rawValue:false};}
const warnings=[];const parsedProps=Parser.parseMetaViewPortContent(artifacts.Viewport);if(Object.keys(parsedProps.unknownProperties).length){warnings.push(`Invalid properties found: ${JSON.stringify(parsedProps.unknownProperties)}`);}
if(Object.keys(parsedProps.invalidValues).length){warnings.push(`Invalid values found: ${JSON.stringify(parsedProps.invalidValues)}`);}
const viewportProps=parsedProps.validProperties;const hasMobileViewport=viewportProps.width||viewportProps['initial-scale'];return{rawValue:!!hasMobileViewport,warnings};}}
module.exports=Viewport;},{"./audit":2,"metaviewport-parser":145}],"../audits/webapp-install-banner":[function(require,module,exports){'use strict';const MultiCheckAudit=require('./multi-check-audit');const SWAudit=require('./service-worker');class WebappInstallBanner extends MultiCheckAudit{static get meta(){return{name:'webapp-install-banner',description:'User can be prompted to Install the Web App',failureDescription:'User will not be prompted to Install the Web App',helpText:'Browsers can proactively prompt users to add your app to their homescreen, '+'which can lead to higher engagement. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/install-prompt).',requiredArtifacts:['URL','ServiceWorker','Manifest','StartUrl']};}
static assessManifest(manifestValues){if(manifestValues.isParseFailure&&manifestValues.parseFailureReason){return[manifestValues.parseFailureReason];}
const failures=[];const bannerCheckIds=['hasName','hasShortName','hasStartUrl','hasPWADisplayValue','hasIconsAtLeast192px'];manifestValues.allChecks.filter(item=>bannerCheckIds.includes(item.id)).forEach(item=>{if(!item.passing){failures.push(item.failureText);}});return failures;}
static assessServiceWorker(artifacts){const failures=[];const hasServiceWorker=SWAudit.audit(artifacts).rawValue;if(!hasServiceWorker){failures.push('Site does not register a service worker');}
return failures;}
static assessOfflineStartUrl(artifacts){const failures=[];const warnings=[];const hasOfflineStartUrl=artifacts.StartUrl.statusCode===200;if(!hasOfflineStartUrl){failures.push('Service worker does not successfully serve the manifest\'s start_url');if(artifacts.StartUrl.debugString){failures.push(artifacts.StartUrl.debugString);}}
if(artifacts.StartUrl.debugString){warnings.push(artifacts.StartUrl.debugString);}
return{failures,warnings};}
static audit_(artifacts){let offlineFailures=[];let offlineWarnings=[];return artifacts.requestManifestValues(artifacts.Manifest).then(manifestValues=>{const manifestFailures=WebappInstallBanner.assessManifest(manifestValues);const swFailures=WebappInstallBanner.assessServiceWorker(artifacts);if(!swFailures.length){const{failures,warnings}=WebappInstallBanner.assessOfflineStartUrl(artifacts);offlineFailures=failures;offlineWarnings=warnings;}
return{warnings:offlineWarnings,failures:[...manifestFailures,...swFailures,...offlineFailures],manifestValues};});}}
module.exports=WebappInstallBanner;},{"./multi-check-audit":5,"./service-worker":"../audits/service-worker"}],"../audits/without-javascript":[function(require,module,exports){'use strict';const Audit=require('./audit');class WithoutJavaScript extends Audit{static get meta(){return{name:'without-javascript',description:'Contains some content when JavaScript is not available',failureDescription:'Does not provide fallback content when JavaScript is not available',helpText:'Your app should display some content when JavaScript is disabled, even if it\'s '+'just a warning to the user that JavaScript is required to use the app. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/no-js).',requiredArtifacts:['HTMLWithoutJavaScript']};}
static audit(artifacts){const artifact=artifacts.HTMLWithoutJavaScript;if(artifact.value.trim()===''){return{rawValue:false,explanation:'The page body should render some content if its scripts are not available.'};}
return{rawValue:true};}}
module.exports=WithoutJavaScript;},{"./audit":2}],"../audits/works-offline":[function(require,module,exports){'use strict';const URL=require('../lib/url-shim');const Audit=require('./audit');class WorksOffline extends Audit{static get meta(){return{name:'works-offline',description:'Responds with a 200 when offline',failureDescription:'Does not respond with a 200 when offline',helpText:'If you\'re building a Progressive Web App, consider using a service worker so '+'that your app can work offline. '+'[Learn more](https://developers.google.com/web/tools/lighthouse/audits/http-200-when-offline).',requiredArtifacts:['Offline','URL']};}
static audit(artifacts){const warnings=[];const passed=artifacts.Offline===200;if(!passed&&!URL.equalWithExcludedFragments(artifacts.URL.requestedUrl,artifacts.URL.finalUrl)){warnings.push('You may be not loading offline because your test URL '+`(${artifacts.URL.requestedUrl}) was redirected to "${artifacts.URL.finalUrl}". `+'Try testing the second URL directly.');}
return{rawValue:passed,warnings};}}
module.exports=WorksOffline;},{"../lib/url-shim":"url","./audit":2}],"../gather/gatherers/accessibility":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const axeLibSource="/*! aXe v3.0.0-beta.2\n * Copyright (c) 2018 Deque Systems, Inc.\n *\n * Your use of this Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n *\n * This entire copyright notice must appear in every copy of this file you\n * distribute or in any file that contains substantial portions of this source\n * code.\n */\n!function a(window){function b(a){this.name=\"SupportError\",this.cause=a.cause,this.message=\"`\"+a.cause+\"` - feature unsupported in your environment.\",a.ruleId&&(this.ruleId=a.ruleId,this.message+=\" Skipping \"+this.ruleId+\" rule.\"),this.stack=(new Error).stack}function c(a){\"use strict\";var b;return a?(b=axe.utils.clone(a),b.commons=a.commons):b={},b.reporter=b.reporter||null,b.rules=b.rules||[],b.checks=b.checks||[],b.data=Object.assign({checks:{},rules:{}},b.data),b}function d(a,b,c){\"use strict\";var d,e;for(d=0,e=a.length;d<e;d++)b[c](a[d])}function e(a){this.brand=\"axe\",this.application=\"axeAPI\",this.tagExclude=[\"experimental\"],this.defaultConfig=a,this._init()}function f(a,b,c){var d=a.brand,e=a.application;return axe.constants.helpUrlBase+d+\"/\"+(c||axe.version.substring(0,axe.version.lastIndexOf(\".\")))+\"/\"+b+\"?application=\"+e}function g(a){\"use strict\";this.id=a.id,this.data=null,this.relatedNodes=[],this.result=null}function h(a){\"use strict\";return\"string\"==typeof a?new Function(\"return \"+a+\";\")():a}function i(a){a&&(this.id=a.id,this.configure(a))}function j(a,b){\"use strict\";if(!axe.utils.isHidden(b)){axe.utils.findBy(a,\"node\",b)||a.push({node:b,include:[],exclude:[]})}}function k(a,b,c){\"use strict\";a.frames=a.frames||[];var d,e,f=document.querySelectorAll(c.shift());a:for(var g=0,h=f.length;g<h;g++){e=f[g];for(var i=0,j=a.frames.length;i<j;i++)if(a.frames[i].node===e){a.frames[i][b].push(c);break a}d={node:e,include:[],exclude:[]},c&&d[b].push(c),a.frames.push(d)}}function l(a){\"use strict\";if(a&&\"object\"===(void 0===a?\"undefined\":za(a))||a instanceof NodeList){if(a instanceof Node)return{include:[a],exclude:[]};if(a.hasOwnProperty(\"include\")||a.hasOwnProperty(\"exclude\"))return{include:a.include&&+a.include.length?a.include:[document],exclude:a.exclude||[]};if(a.length===+a.length)return{include:a,exclude:[]}}return\"string\"==typeof a?{include:[a],exclude:[]}:{include:[document],exclude:[]}}function m(a,b){\"use strict\";for(var c,d,e=[],f=0,g=a[b].length;f<g;f++){if(\"string\"==typeof(c=a[b][f])){d=Array.from(document.querySelectorAll(c)),e=e.concat(d.map(function(a){return axe.utils.getFlattenedTree(a)[0]}));break}!c||!c.length||c instanceof Node?c instanceof Node&&e.push(axe.utils.getFlattenedTree(c)[0]):c.length>1?k(a,b,c):(d=Array.from(document.querySelectorAll(c[0])),e=e.concat(d.map(function(a){return axe.utils.getFlattenedTree(a)[0]})))}return e.filter(function(a){return a})}function n(a){\"use strict\";if(0===a.include.length){if(0===a.frames.length){var b=axe.utils.respondable.isInFrame()?\"frame\":\"page\";return new Error(\"No elements found for include in \"+b+\" Context\")}a.frames.forEach(function(a,b){if(0===a.include.length)return new Error(\"No elements found for include in Context of frame \"+b)})}}function o(a){\"use strict\";var b=this;this.frames=[],this.initiator=!a||\"boolean\"!=typeof a.initiator||a.initiator,this.page=!1,a=l(a),this.exclude=a.exclude,this.include=a.include,this.include=m(this,\"include\"),this.exclude=m(this,\"exclude\"),axe.utils.select(\"frame, iframe\",this).forEach(function(a){wa(a,b)&&j(b.frames,a.actualNode)}),1===this.include.length&&this.include[0].actualNode===document.documentElement&&(this.page=!0);var c=n(this);if(c instanceof Error)throw c;Array.isArray(this.include)||(this.include=Array.from(this.include)),this.include.sort(axe.utils.nodeSorter)}function p(a){\"use strict\";this.id=a.id,this.result=axe.constants.NA,this.pageLevel=a.pageLevel,this.impact=null,this.nodes=[]}function q(a,b){\"use strict\";this._audit=b,this.id=a.id,this.selector=a.selector||\"*\",this.excludeHidden=\"boolean\"!=typeof a.excludeHidden||a.excludeHidden,this.enabled=\"boolean\"!=typeof a.enabled||a.enabled,this.pageLevel=\"boolean\"==typeof a.pageLevel&&a.pageLevel,this.any=a.any||[],this.all=a.all||[],this.none=a.none||[],this.tags=a.tags||[],a.matches&&(this.matches=h(a.matches))}function r(a){\"use strict\";return axe.utils.getAllChecks(a).map(function(b){var c=a._audit.checks[b.id||b];return c&&\"function\"==typeof c.after?c:null}).filter(Boolean)}function s(a,b){\"use strict\";var c=[];return a.forEach(function(a){axe.utils.getAllChecks(a).forEach(function(a){a.id===b&&c.push(a)})}),c}function t(a){\"use strict\";return a.filter(function(a){return!0!==a.filtered})}function u(a){\"use strict\";var b=[\"any\",\"all\",\"none\"],c=a.nodes.filter(function(a){var c=0;return b.forEach(function(b){a[b]=t(a[b]),c+=a[b].length}),c>0});return a.pageLevel&&c.length&&(c=[c.reduce(function(a,c){if(a)return b.forEach(function(b){a[b].push.apply(a[b],c[b])}),a})]),c}function v(a,b){\"use strict\";if(a=a||function(){},b=b||axe.log,!axe._audit)throw new Error(\"No audit configured\");var c=axe.utils.queue(),d=[];Object.keys(axe.plugins).forEach(function(a){c.defer(function(b){var c=function(a){d.push(a),b()};try{axe.plugins[a].cleanup(b,c)}catch(a){c(a)}})});var e=axe.utils.getFlattenedTree(document.body);axe.utils.querySelectorAll(e,\"iframe, frame\").forEach(function(a){c.defer(function(b,c){return axe.utils.sendCommandToFrame(a.actualNode,{command:\"cleanup-plugin\"},b,c)})}),c.then(function(c){0===d.length?a(c):b(d)}).catch(b)}function w(a){\"use strict\";var b;if(!(b=axe._audit))throw new Error(\"No audit configured\");a.reporter&&(\"function\"==typeof a.reporter||Ca[a.reporter])&&(b.reporter=a.reporter),a.checks&&a.checks.forEach(function(a){b.addCheck(a)});var c=[];a.rules&&a.rules.forEach(function(a){c.push(a.id),b.addRule(a)}),a.disableOtherRules&&b.rules.forEach(function(a){!1===c.includes(a.id)&&(a.enabled=!1)}),void 0!==a.branding?b.setBranding(a.branding):b._constructHelpUrls(),a.tagExclude&&(b.tagExclude=a.tagExclude)}function x(a,b,c){\"use strict\";var d=c,e=function(a){a instanceof Error==!1&&(a=new Error(a)),c(a)},f=a&&a.context||{};f.hasOwnProperty(\"include\")&&!f.include.length&&(f.include=[document]);var g=a&&a.options||{};switch(a.command){case\"rules\":return A(f,g,d,e);case\"cleanup-plugin\":return v(d,e);default:if(axe._audit&&axe._audit.commands&&axe._audit.commands[a.command])return axe._audit.commands[a.command](a,c)}}function y(a){\"use strict\";this._run=a.run,this._collect=a.collect,this._registry={},a.commands.forEach(function(a){axe._audit.registerCommand(a)})}function z(){\"use strict\";var a=axe._audit;if(!a)throw new Error(\"No audit configured\");a.resetRulesAndChecks()}function A(a,b,c,d){\"use strict\";try{a=new o(a)}catch(a){return d(a)}var e=axe.utils.queue(),f=axe._audit;b.performanceTimer&&axe.utils.performanceTimer.auditStart(),a.frames.length&&!1!==b.iframes&&e.defer(function(c,d){axe.utils.collectResultsFromFrames(a,b,\"rules\",null,c,d)});var g=void 0;e.defer(function(c,d){b.restoreScroll&&(g=axe.utils.getScrollState()),f.run(a,b,c,d)}),e.then(function(e){try{g&&axe.utils.setScrollState(g),b.performanceTimer&&axe.utils.performanceTimer.auditEnd();var h=axe.utils.mergeResults(e.map(function(a){return{results:a}}));a.initiator&&(h=f.after(h,b),h.forEach(axe.utils.publishMetaData),h=h.map(axe.utils.finalizeRuleResult));try{c(h)}catch(a){axe.log(a)}}catch(a){d(a)}}).catch(d)}function B(a){\"use strict\";switch(!0){case\"string\"==typeof a:case Array.isArray(a):case Node&&a instanceof Node:case NodeList&&a instanceof NodeList:return!0;case\"object\"!==(void 0===a?\"undefined\":za(a)):return!1;case void 0!==a.include:case void 0!==a.exclude:case\"number\"==typeof a.length:return!0;default:return!1}}function C(a,b,c){\"use strict\";var d=new TypeError(\"axe.run arguments are invalid\");if(!B(a)){if(void 0!==c)throw d;c=b,b=a,a=document}if(\"object\"!==(void 0===b?\"undefined\":za(b))){if(void 0!==c)throw d;c=b,b={}}if(\"function\"!=typeof c&&void 0!==c)throw d;return{context:a,options:b,callback:c||Da}}function D(a,b){\"use strict\";[\"any\",\"all\",\"none\"].forEach(function(c){Array.isArray(a[c])&&a[c].filter(function(a){return Array.isArray(a.relatedNodes)}).forEach(function(a){a.relatedNodes=a.relatedNodes.map(function(a){var c={html:a.source};return b.elementRef&&!a.fromFrame&&(c.element=a.element),(!1!==b.selectors||a.fromFrame)&&(c.target=a.selector),b.xpath&&(c.xpath=a.xpath),c})})})}function E(a,b){return Ja.reduce(function(c,d){return c[d]=(a[d]||[]).map(function(a){return b(a,d)}),c},{})}function F(a,b,c){var d=Object.assign({},b);d.nodes=(d[c]||[]).concat(),axe.constants.resultGroups.forEach(function(a){delete d[a]}),a[c].push(d)}function G(a,b,c){\"use strict\";var d=window.getComputedStyle(a,null),e=!1;return!!d&&(b.forEach(function(a){d.getPropertyValue(a.property)===a.value&&(e=!0)}),!!e||!(a.nodeName.toUpperCase()===c.toUpperCase()||!a.parentNode)&&G(a.parentNode,b,c))}function H(a,b){\"use strict\";var c;return axe._tree&&(c=axe.utils.getSelector(b)),new Error(a+\": \"+(c||b))}function I(a,b,c,d,e,f){\"use strict\";var g=axe.utils.queue();a.frames.forEach(function(e){var f={options:b,command:c,parameter:d,context:{initiator:!1,page:a.page,include:e.include||[],exclude:e.exclude||[]}};g.defer(function(a,b){var c=e.node;axe.utils.sendCommandToFrame(c,f,function(b){if(b)return a({results:b,frameElement:c,frame:axe.utils.getSelector(c)});a(null)},b)})}),g.then(function(a){e(axe.utils.mergeResults(a,b))}).catch(f)}function J(a,b){if(b=b||300,a.length>b){var c=a.indexOf(\">\");a=a.substring(0,c+1)}return a}function K(a){var b=a.outerHTML;return b||\"function\"!=typeof XMLSerializer||(b=(new XMLSerializer).serializeToString(a)),J(b||\"\")}function L(a,b,c){this._fromFrame=!!c,this.spec=c||{},b&&b.absolutePaths&&(this._options={toRoot:!0}),this.source=void 0!==this.spec.source?this.spec.source:K(a),this._element=a}function M(a,b){return{shadowId:b,children:[],actualNode:a}}function N(a){var b=[];for(a=a.firstChild;a;)b.push(a),a=a.nextSibling;return b}function O(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";return 0!==a.length&&(a.match(/[0-9]/g)||\"\").length>=a.length/2}function P(a,b){return[a.substring(0,b),a.substring(b)]}function Q(a){var b=a,c=\"\",d=\"\",e=\"\",f=\"\",g=\"\",h=\"\";if(a.includes(\"#\")){var i=P(a,a.indexOf(\"#\")),j=Ka(i,2);a=j[0],h=j[1]}if(a.includes(\"?\")){var k=P(a,a.indexOf(\"?\")),l=Ka(k,2);a=l[0],g=l[1]}if(a.includes(\"://\")){var m=a.split(\"://\"),n=Ka(m,2);c=n[0],a=n[1];var o=P(a,a.indexOf(\"/\")),p=Ka(o,2);d=p[0],a=p[1]}else if(\"//\"===a.substr(0,2)){a=a.substr(2);var q=P(a,a.indexOf(\"/\")),r=Ka(q,2);d=r[0],a=r[1]}if(\"www.\"===d.substr(0,4)&&(d=d.substr(4)),d&&d.includes(\":\")){var s=P(d,d.indexOf(\":\")),t=Ka(s,2);d=t[0],e=t[1]}return f=a,{original:b,protocol:c,domain:d,port:e,path:f,query:g,hash:h}}function R(a,b){var c=b.name,d=void 0;if(-1!==c.indexOf(\"href\")||-1!==c.indexOf(\"src\")){var e=encodeURI(axe.utils.getFriendlyUriEnd(a.getAttribute(c)));if(!e)return;d=La(b.name)+'$=\"'+e+'\"'}else d=La(c)+'=\"'+La(b.value)+'\"';return d}function S(a,b){return a.count<b.count?-1:a.count===b.count?0:1}function T(a){return!Na.includes(a.name)&&-1===a.name.indexOf(\":\")&&(!a.value||a.value.length<Oa)}function U(a,b){var c=[],d=b.classes,e=b.tags;return a.classList&&Array.from(a.classList).forEach(function(b){var f=La(b);d[f]<e[a.nodeName]&&c.push({name:f,count:d[f],species:\"class\"})}),c.sort(S)}function V(a,b){var c=a.parentNode&&Array.from(a.parentNode.children||\"\")||[];if(c.find(function(c){return c!==a&&axe.utils.matchesSelector(c,b)}))return\":nth-child(\"+(1+c.indexOf(a))+\")\";return\"\"}function W(a){if(a.getAttribute(\"id\")){var b=a.getRootNode&&a.getRootNode()||document,c=\"#\"+La(a.getAttribute(\"id\")||\"\");return c.match(/player_uid_/)||1!==b.querySelectorAll(c).length?void 0:c}}function X(a){return void 0===Ma&&(Ma=axe.utils.isXHTML(document)),La(Ma?a.localName:a.nodeName.toLowerCase())}function Y(a,b){var c=[],d=b.attributes,e=b.tags;return a.attributes&&Array.from(a.attributes).filter(T).forEach(function(b){var f=R(a,b);f&&d[f]<e[a.nodeName]&&c.push({name:f,count:d[f],species:\"attribute\"})}),c.sort(S)}function Z(a,b){var c=\"\",d=void 0,e=U(a,b),f=Y(a,b);return e.length&&1===e[0].count?d=[e[0]]:f.length&&1===f[0].count?(d=[f[0]],c=X(a)):(d=e.concat(f),d.sort(S),d=d.slice(0,3),d.some(function(a){return\"class\"===a.species})?d.sort(function(a,b){return a.species!==b.species&&\"class\"===a.species?-1:a.species===b.species?0:1}):c=X(a)),c+=d.reduce(function(a,b){switch(b.species){case\"class\":return a+\".\"+b.name;case\"attribute\":return a+\"[\"+b.name+\"]\"}return a},\"\")}function $(a,b,c){axe._selectorData||(axe._selectorData=axe.utils.getSelectorData(axe._tree));var d=b.toRoot,e=void 0!==d&&d,f=void 0,g=void 0;do{var h=W(a);h||(h=Z(a,axe._selectorData),h+=V(a,h)),f=f?h+\" > \"+f:h,g=g?g.filter(function(a){return axe.utils.matchesSelector(a,f)}):Array.from(c.querySelectorAll(f)),a=a.parentElement}while((g.length>1||e)&&a&&11!==a.nodeType);return 1===g.length?f:-1!==f.indexOf(\" > \")?\":root\"+f.substring(f.indexOf(\" > \")):\":root\"}function _(a,b){var c,d;if(!a)return[];if(!b&&9===a.nodeType)return b=[{str:\"html\"}];if(b=b||[],a.parentNode&&a.parentNode!==a&&(b=_(a.parentNode,b)),a.previousSibling){d=1,c=a.previousSibling;do{1===c.nodeType&&c.nodeName===a.nodeName&&d++,c=c.previousSibling}while(c);1===d&&(d=null)}else if(a.nextSibling){c=a.nextSibling;do{1===c.nodeType&&c.nodeName===a.nodeName?(d=1,c=null):(d=null,c=c.previousSibling)}while(c)}if(1===a.nodeType){var e={};e.str=a.nodeName.toLowerCase();var f=a.getAttribute&&axe.utils.escapeSelector(a.getAttribute(\"id\"));f&&1===a.ownerDocument.querySelectorAll(\"#\"+f).length&&(e.id=a.getAttribute(\"id\")),d>1&&(e.count=d),b.push(e)}return b}function aa(a){return a.reduce(function(a,b){return b.id?\"/\"+b.str+\"[@id='\"+b.id+\"']\":a+\"/\"+b.str+(b.count>0?\"[\"+b.count+\"]\":\"\")},\"\")}function ba(a){\"use strict\";if(Pa&&Pa.parentNode)return void 0===Pa.styleSheet?Pa.appendChild(document.createTextNode(a)):Pa.styleSheet.cssText+=a,Pa;if(a){var b=document.head||document.getElementsByTagName(\"head\")[0];return Pa=document.createElement(\"style\"),Pa.type=\"text/css\",void 0===Pa.styleSheet?Pa.appendChild(document.createTextNode(a)):Pa.styleSheet.cssText=a,b.appendChild(Pa),Pa}}function ca(a,b,c,d){\"use strict\";var e=axe.utils.getXpath(c),f={element:c,selector:d,xpath:e};a.forEach(function(a){a.node=axe.utils.DqElement.fromFrame(a.node,b,f);var c=axe.utils.getAllChecks(a);c.length&&c.forEach(function(a){a.relatedNodes=a.relatedNodes.map(function(a){return axe.utils.DqElement.fromFrame(a,b,f)})})})}function da(a,b){\"use strict\";for(var c,d,e=b[0].node,f=0,g=a.length;f<g;f++)if(d=a[f].node,(c=axe.utils.nodeSorter({actualNode:d.element},{actualNode:e.element}))>0||0===c&&e.selector.length<d.selector.length)return void a.splice.apply(a,[f,0].concat(b));a.push.apply(a,b)}function ea(a){\"use strict\";return a&&a.results?Array.isArray(a.results)?a.results.length?a.results:null:[a.results]:null}function fa(a,b){function c(a){return a.incomplete&&a.incomplete.default?a.incomplete.default:Aa.incompleteFallbackMessage()}if(!a||!a.missingData)return c(b);try{var d=b.incomplete[a.missingData[0].reason];if(!d)throw new Error;return d}catch(d){return\"string\"==typeof a.missingData?b.incomplete[a.missingData]:c(b)}}function ga(a,b){\"use strict\";return function(c){var d=a[c.id]||{},e=d.messages||{},f=Object.assign({},d);delete f.messages,void 0===c.result?\"object\"===za(e.incomplete)?f.message=function(){return fa(c.data,e)}:f.message=e.incomplete:f.message=c.result===b?e.pass:e.fail,axe.utils.extendMetaData(c,f)}}function ha(a,b){return 1===a.nodeType&&(\"*\"===b.tag||a.nodeName.toLowerCase()===b.tag)}function ia(a,b){return!b.classes||b.classes.reduce(function(b,c){return b&&a.className&&a.className.match(c.regexp)},!0)}function ja(a,b){return!b.attributes||b.attributes.reduce(function(b,c){var d=a.getAttribute(c.key);return b&&null!==d&&(!c.value||c.test(d))},!0)}function ka(a,b){return!b.id||a.id===b.id}function la(a,b){return!(b.pseudos&&!b.pseudos.reduce(function(b,c){if(\"not\"===c.name)return b&&!Sa([a],c.expressions,!1).length;throw new Error(\"the pseudo selector \"+c.name+\" has not yet been implemented\")},!0))}function ma(a){/*! Credit Mootools Copyright Mootools, MIT License */\nif(a)return a.map(function(a){var b,c,d=a.name.replace(Ua,\"\"),e=(a.value||\"\").replace(Ua,\"\");switch(a.operator){case\"^=\":c=new RegExp(\"^\"+Ta(e));break;case\"$=\":c=new RegExp(Ta(e)+\"$\");break;case\"~=\":c=new RegExp(\"(^|\\\\s)\"+Ta(e)+\"(\\\\s|$)\");break;case\"|=\":c=new RegExp(\"^\"+Ta(e)+\"(-|$)\");break;case\"=\":b=function(a){return e===a};break;case\"*=\":b=function(a){return a&&a.includes(e)};break;case\"!=\":b=function(a){return e!==a};break;default:b=function(a){return!!a}}return\"\"===e&&/^[*$^]=$/.test(a.operator)&&(b=function(){return!1}),b||(b=function(a){return a&&c.test(a)}),{key:d,value:e,test:b}})}function na(a){if(a)return a.map(function(a){return a=a.replace(Ua,\"\"),{value:a,regexp:new RegExp(\"(^|\\\\s)\"+Ta(a)+\"(\\\\s|$)\")}})}function oa(a){if(a)return a.map(function(a){var b;return\"not\"===a.name&&(b=axe.utils.cssParser.parse(a.value),b=b.selectors?b.selectors:[b],b=Ra(b)),{name:a.name,expressions:b,value:a.value}})}function pa(a,b,c,d){var e={nodes:a.slice(),anyLevel:b,thisLevel:c,parentShadowId:d};return e.nodes.reverse(),e}function qa(a,b){return ha(a.actualNode,b[0])&&ia(a.actualNode,b[0])&&ja(a.actualNode,b[0])&&ka(a.actualNode,b[0])&&la(a,b[0])}function ra(a,b){\"use strict\";var c,d,e=axe._audit&&axe._audit.tagExclude?axe._audit.tagExclude:[];return b.hasOwnProperty(\"include\")||b.hasOwnProperty(\"exclude\")?(c=b.include||[],c=Array.isArray(c)?c:[c],d=b.exclude||[],d=Array.isArray(d)?d:[d],d=d.concat(e.filter(function(a){return-1===c.indexOf(a)}))):(c=Array.isArray(b)?b:[b],d=e.filter(function(a){return-1===c.indexOf(a)})),!!(c.some(function(b){return-1!==a.tags.indexOf(b)})||0===c.length&&!1!==a.enabled)&&d.every(function(b){return-1===a.tags.indexOf(b)})}function sa(a){var b=window.getComputedStyle(a),c=\"visible\"===b.getPropertyValue(\"overflow-y\"),d=\"visible\"===b.getPropertyValue(\"overflow-x\");if(!c&&a.scrollHeight>a.clientHeight||!d&&a.scrollWidth>a.clientWidth)return{elm:a,top:a.scrollTop,left:a.scrollLeft}}function ta(a,b,c){if(a===window)return a.scroll(b,c);a.scrollTop=b,a.scrollLeft=c}function ua(a){return Array.from(a.children).reduce(function(a,b){var c=sa(b);return c&&a.push(c),a.concat(ua(b))},[])}function va(a){\"use strict\";return a.sort(function(a,b){return axe.utils.contains(a,b)?1:-1})[0]}function wa(a,b){\"use strict\";var c=b.include&&va(b.include.filter(function(b){return axe.utils.contains(b,a)})),d=b.exclude&&va(b.exclude.filter(function(b){return axe.utils.contains(b,a)}));return!!(!d&&c||d&&axe.utils.contains(d,c))}function xa(a,b){\"use strict\";var c;if(0===a.length)return b;a.length<b.length&&(c=a,a=b,b=c);for(var d=0,e=b.length;d<e;d++)a.includes(b[d])||a.push(b[d]);return a}function ya(a){return a.reduce(function(a,b){return a.length&&a[a.length-1].actualNode.contains(b.actualNode)||a.push(b),a},[])}var document=window.document,za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},axe=axe||{};axe.version=\"3.0.0-beta.2\",\"function\"==typeof define&&define.amd&&define([],function(){\"use strict\";return axe}),\"object\"===(\"undefined\"==typeof module?\"undefined\":za(module))&&module.exports&&\"function\"==typeof a.toString&&(axe.source=\"(\"+a.toString()+')(typeof window === \"object\" ? window : this);',module.exports=axe),\"function\"==typeof window.getComputedStyle&&(window.axe=axe);var commons;b.prototype=Object.create(Error.prototype),b.prototype.constructor=b;var utils=axe.utils={},Aa={},za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};e.prototype._init=function(){var a=c(this.defaultConfig);axe.commons=commons=a.commons,this.reporter=a.reporter,this.commands={},this.rules=[],this.checks={},d(a.rules,this,\"addRule\"),d(a.checks,this,\"addCheck\"),this.data={},this.data.checks=a.data&&a.data.checks||{},this.data.rules=a.data&&a.data.rules||{},this.data.failureSummaries=a.data&&a.data.failureSummaries||{},this.data.incompleteFallbackMessage=a.data&&a.data.incompleteFallbackMessage||\"\",this._constructHelpUrls()},e.prototype.registerCommand=function(a){\"use strict\";this.commands[a.id]=a.callback},e.prototype.addRule=function(a){\"use strict\";a.metadata&&(this.data.rules[a.id]=a.metadata);var b=this.getRule(a.id);b?b.configure(a):this.rules.push(new q(a,this))},e.prototype.addCheck=function(a){\"use strict\";var b=a.metadata;\"object\"===(void 0===b?\"undefined\":za(b))&&(this.data.checks[a.id]=b,\"object\"===za(b.messages)&&Object.keys(b.messages).filter(function(a){return b.messages.hasOwnProperty(a)&&\"string\"==typeof b.messages[a]}).forEach(function(a){0===b.messages[a].indexOf(\"function\")&&(b.messages[a]=new Function(\"return \"+b.messages[a]+\";\")())})),this.checks[a.id]?this.checks[a.id].configure(a):this.checks[a.id]=new i(a)},e.prototype.run=function(a,b,c,d){\"use strict\";this.validateOptions(b),axe._tree=axe.utils.getFlattenedTree(document.documentElement),axe._selectCache=[];var e=axe.utils.queue();this.rules.forEach(function(c){if(axe.utils.ruleShouldRun(c,a,b)){if(b.performanceTimer){var d=\"mark_rule_end_\"+c.id,f=\"mark_rule_start_\"+c.id;axe.utils.performanceTimer.mark(f)}e.defer(function(e,g){c.run(a,b,function(a){b.performanceTimer&&(axe.utils.performanceTimer.mark(d),axe.utils.performanceTimer.measure(\"rule_\"+c.id,f,d)),e(a)},function(a){if(b.debug)g(a);else{var d=Object.assign(new p(c),{result:axe.constants.CANTTELL,description:\"An error occured while running this rule\",message:a.message,stack:a.stack,error:a});e(d)}})})}}),e.then(function(a){axe._selectCache=void 0,c(a.filter(function(a){return!!a}))}).catch(d)},e.prototype.after=function(a,b){\"use strict\";var c=this.rules;return a.map(function(a){return axe.utils.findBy(c,\"id\",a.id).after(a,b)})},e.prototype.getRule=function(a){return this.rules.find(function(b){return b.id===a})},e.prototype.validateOptions=function(a){\"use strict\";var b=this;if(\"object\"===za(a.runOnly)){var c=a.runOnly;if(\"rule\"===c.type&&Array.isArray(c.value))c.value.forEach(function(a){if(!b.getRule(a))throw new Error(\"unknown rule `\"+a+\"` in options.runOnly\")});else if(Array.isArray(c.value)&&c.value.length>0){var d=[].concat(c.value);if(b.rules.forEach(function(a){var b,c,e;if(d)for(c=0,e=a.tags.length;c<e;c++)-1!==(b=d.indexOf(a.tags[c]))&&d.splice(b,1)}),0!==d.length)throw new Error(\"could not find tags `\"+d.join(\"`, `\")+\"`\")}}return\"object\"===za(a.rules)&&Object.keys(a.rules).forEach(function(a){if(!b.getRule(a))throw new Error(\"unknown rule `\"+a+\"` in options.rules\")}),a},e.prototype.setBranding=function(a){\"use strict\";var b={brand:this.brand,application:this.application};a&&a.hasOwnProperty(\"brand\")&&a.brand&&\"string\"==typeof a.brand&&(this.brand=a.brand),a&&a.hasOwnProperty(\"application\")&&a.application&&\"string\"==typeof a.application&&(this.application=a.application),this._constructHelpUrls(b)},e.prototype._constructHelpUrls=function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,c=(axe.version.match(/^[1-9][0-9]*\\.[0-9]+/)||[\"x.y\"])[0];this.rules.forEach(function(d){a.data.rules[d.id]||(a.data.rules[d.id]={});var e=a.data.rules[d.id];(\"string\"!=typeof e.helpUrl||b&&e.helpUrl===f(b,d.id,c))&&(e.helpUrl=f(a,d.id,c))})},e.prototype.resetRulesAndChecks=function(){\"use strict\";this._init()},i.prototype.enabled=!0,i.prototype.run=function(a,b,c,d){\"use strict\";b=b||{};var e=b.hasOwnProperty(\"enabled\")?b.enabled:this.enabled,f=b.options||this.options;if(e){var h,i=new g(this),j=axe.utils.checkHelper(i,b,c,d);try{h=this.evaluate.call(j,a.actualNode,f,a)}catch(a){return void d(a)}j.isAsync||(i.result=h,setTimeout(function(){c(i)},0))}else c(null)},i.prototype.configure=function(a){var b=this;[\"options\",\"enabled\"].filter(function(b){return a.hasOwnProperty(b)}).forEach(function(c){return b[c]=a[c]}),[\"evaluate\",\"after\"].filter(function(b){return a.hasOwnProperty(b)}).forEach(function(c){return b[c]=h(a[c])})};var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};q.prototype.matches=function(){\"use strict\";return!0},q.prototype.gather=function(a){\"use strict\";var b=axe.utils.select(this.selector,a);return this.excludeHidden?b.filter(function(a){return!axe.utils.isHidden(a.actualNode)}):b},q.prototype.runChecks=function(a,b,c,d,e){\"use strict\";var f=this,g=axe.utils.queue();this[a].forEach(function(a){var d=f._audit.checks[a.id||a],e=axe.utils.getCheckOption(d,f.id,c);g.defer(function(a,c){d.run(b,e,a,c)})}),g.then(function(b){b=b.filter(function(a){return a}),d({type:a,results:b})}).catch(e)},q.prototype.run=function(a,c,d,e){var f=this,g=axe.utils.queue(),h=new p(this),i=\"mark_runchecks_start_\"+this.id,j=\"mark_runchecks_end_\"+this.id,k=void 0;try{k=this.gather(a).filter(function(a){return f.matches(a.actualNode,a)})}catch(a){return void e(new b({cause:a,ruleId:this.id}))}c.performanceTimer&&(axe.log(\"gather (\",k.length,\"):\",axe.utils.performanceTimer.timeElapsed()+\"ms\"),axe.utils.performanceTimer.mark(i)),k.forEach(function(a){g.defer(function(b,d){var e=axe.utils.queue();e.defer(function(b,d){f.runChecks(\"any\",a,c,b,d)}),e.defer(function(b,d){f.runChecks(\"all\",a,c,b,d)}),e.defer(function(b,d){f.runChecks(\"none\",a,c,b,d)}),e.then(function(d){if(d.length){var e=!1,f={};d.forEach(function(a){var b=a.results.filter(function(a){return a});f[a.type]=b,b.length&&(e=!0)}),e&&(f.node=new axe.utils.DqElement(a.actualNode,c),h.nodes.push(f))}b()}).catch(function(a){return d(a)})})}),c.performanceTimer&&(axe.utils.performanceTimer.mark(j),axe.utils.performanceTimer.measure(\"runchecks_\"+this.id,i,j)),g.then(function(){return d(h)}).catch(function(a){return e(a)})},q.prototype.after=function(a,b){\"use strict\";var c=r(this),d=this.id;return c.forEach(function(c){var e=s(a.nodes,c.id),f=axe.utils.getCheckOption(c,d,b),g=c.after(e,f);e.forEach(function(a){-1===g.indexOf(a)&&(a.filtered=!0)})}),a.nodes=u(a),a},q.prototype.configure=function(a){\"use strict\";a.hasOwnProperty(\"selector\")&&(this.selector=a.selector),a.hasOwnProperty(\"excludeHidden\")&&(this.excludeHidden=\"boolean\"!=typeof a.excludeHidden||a.excludeHidden),a.hasOwnProperty(\"enabled\")&&(this.enabled=\"boolean\"!=typeof a.enabled||a.enabled),a.hasOwnProperty(\"pageLevel\")&&(this.pageLevel=\"boolean\"==typeof a.pageLevel&&a.pageLevel),a.hasOwnProperty(\"any\")&&(this.any=a.any),a.hasOwnProperty(\"all\")&&(this.all=a.all),a.hasOwnProperty(\"none\")&&(this.none=a.none),a.hasOwnProperty(\"tags\")&&(this.tags=a.tags),a.hasOwnProperty(\"matches\")&&(\"string\"==typeof a.matches?this.matches=new Function(\"return \"+a.matches+\";\")():this.matches=a.matches)},function(axe){var a=[{name:\"NA\",value:\"inapplicable\",priority:0,group:\"inapplicable\"},{name:\"PASS\",value:\"passed\",priority:1,group:\"passes\"},{name:\"CANTTELL\",value:\"cantTell\",priority:2,group:\"incomplete\"},{name:\"FAIL\",value:\"failed\",priority:3,group:\"violations\"}],b={helpUrlBase:\"https://dequeuniversity.com/rules/\",results:[],resultGroups:[],resultGroupMap:{},impact:Object.freeze([\"minor\",\"moderate\",\"serious\",\"critical\"])};a.forEach(function(a){var c=a.name,d=a.value,e=a.priority,f=a.group;b[c]=d,b[c+\"_PRIO\"]=e,b[c+\"_GROUP\"]=f,b.results[e]=d,b.resultGroups[e]=f,b.resultGroupMap[d]=f}),Object.freeze(b.results),Object.freeze(b.resultGroups),Object.freeze(b.resultGroupMap),Object.freeze(b),Object.defineProperty(axe,\"constants\",{value:b,enumerable:!0,configurable:!1,writable:!1})}(axe);var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};axe.log=function(){\"use strict\";\"object\"===(\"undefined\"==typeof console?\"undefined\":za(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},axe.cleanup=v,axe.configure=w,axe.getRules=function(a){\"use strict\";a=a||[];var b=a.length?axe._audit.rules.filter(function(b){return!!a.filter(function(a){return-1!==b.tags.indexOf(a)}).length}):axe._audit.rules,c=axe._audit.data.rules||{};return b.map(function(a){var b=c[a.id]||{};return{ruleId:a.id,description:b.description,help:b.help,helpUrl:b.helpUrl,tags:a.tags}})},axe._load=function(a){\"use strict\";axe.utils.respondable.subscribe(\"axe.ping\",function(a,b,c){c({axe:!0})}),axe.utils.respondable.subscribe(\"axe.start\",x),axe._audit=new e(a)};var axe=axe||{};axe.plugins={},y.prototype.run=function(){\"use strict\";return this._run.apply(this,arguments)},y.prototype.collect=function(){\"use strict\";return this._collect.apply(this,arguments)},y.prototype.cleanup=function(a){\"use strict\";var b=axe.utils.queue(),c=this;Object.keys(this._registry).forEach(function(a){b.defer(function(b){c._registry[a].cleanup(b)})}),b.then(function(){a()})},y.prototype.add=function(a){\"use strict\";this._registry[a.id]=a},axe.registerPlugin=function(a){\"use strict\";axe.plugins[a.id]=new y(a)};var Ba,Ca={};axe.getReporter=function(a){\"use strict\";return\"string\"==typeof a&&Ca[a]?Ca[a]:\"function\"==typeof a?a:Ba},axe.addReporter=function(a,b,c){\"use strict\";Ca[a]=b,c&&(Ba=b)},axe.reset=z,axe._runRules=A;var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},Da=function(){};axe.run=function(a,b,c){\"use strict\";if(!axe._audit)throw new Error(\"No audit configured\");var d=C(a,b,c);a=d.context,b=d.options,c=d.callback,b.reporter=b.reporter||axe._audit.reporter||\"v1\",b.performanceTimer&&axe.utils.performanceTimer.start();var e=void 0,f=Da,g=Da;return window.Promise&&c===Da&&(e=new Promise(function(a,b){f=b,g=a})),axe._runRules(a,b,function(a){var d=function(a){try{c(null,a)}catch(a){axe.log(a)}g(a)};b.performanceTimer&&axe.utils.performanceTimer.end();try{var e=axe.getReporter(b.reporter),h=e(a,b,d);axe._selectorData=void 0,axe._tree=void 0,void 0!==h&&d(h)}catch(a){c(a),f(a)}},function(a){c(a),f(a)}),e},Aa.failureSummary=function(a){\"use strict\";var b={};return b.none=a.none.concat(a.all),b.any=a.any,Object.keys(b).map(function(a){if(b[a].length){var c=axe._audit.data.failureSummaries[a];return c&&\"function\"==typeof c.failureMessage?c.failureMessage(b[a].map(function(a){return a.message||\"\"})):void 0}}).filter(function(a){return void 0!==a}).join(\"\\n\\n\")},Aa.incompleteFallbackMessage=function(){\"use strict\";return axe._audit.data.incompleteFallbackMessage()};var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},Ea=axe.constants.resultGroups;Aa.processAggregate=function(a,b){var c=axe.utils.aggregateResult(a);return c.timestamp=(new Date).toISOString(),c.url=window.location.href,Ea.forEach(function(a){b.resultTypes&&!b.resultTypes.includes(a)&&(c[a]||[]).forEach(function(a){Array.isArray(a.nodes)&&a.nodes.length>0&&(a.nodes=[a.nodes[0]])}),c[a]=(c[a]||[]).map(function(a){return a=Object.assign({},a),Array.isArray(a.nodes)&&a.nodes.length>0&&(a.nodes=a.nodes.map(function(a){return\"object\"===za(a.node)&&(a.html=a.node.source,b.elementRef&&!a.node.fromFrame&&(a.element=a.node.element),(!1!==b.selectors||a.node.fromFrame)&&(a.target=a.node.selector),b.xpath&&(a.xpath=a.node.xpath)),delete a.result,delete a.node,D(a,b),a})),Ea.forEach(function(b){return delete a[b]}),delete a.pageLevel,delete a.result,a})}),c},axe.addReporter(\"na\",function(a,b,c){\"use strict\";\"function\"==typeof b&&(c=b,b={});var d=Aa.processAggregate(a,b);c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})}),axe.addReporter(\"no-passes\",function(a,b,c){\"use strict\";\"function\"==typeof b&&(c=b,b={}),b.resultTypes=[\"violations\"];var d=Aa.processAggregate(a,b);c({violations:d.violations,timestamp:d.timestamp,url:d.url})}),axe.addReporter(\"raw\",function(a,b,c){\"use strict\";\"function\"==typeof b&&(c=b,b={}),c(a)}),axe.addReporter(\"v1\",function(a,b,c){\"use strict\";\"function\"==typeof b&&(c=b,b={});var d=Aa.processAggregate(a,b);d.violations.forEach(function(a){return a.nodes.forEach(function(a){a.failureSummary=Aa.failureSummary(a)})}),c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})}),axe.addReporter(\"v2\",function(a,b,c){\"use strict\";\"function\"==typeof b&&(c=b,b={});var d=Aa.processAggregate(a,b);c({violations:d.violations,passes:d.passes,incomplete:d.incomplete,inapplicable:d.inapplicable,timestamp:d.timestamp,url:d.url})},!0),axe.utils.aggregate=function(a,b,c){b=b.slice(),c&&b.push(c);var d=b.map(function(b){return a.indexOf(b)}).sort();return a[d.pop()]};var Fa=axe.constants,Ga=Fa.CANTTELL_PRIO,Ha=Fa.FAIL_PRIO,Ia=[];Ia[axe.constants.PASS_PRIO]=!0,Ia[axe.constants.CANTTELL_PRIO]=null,Ia[axe.constants.FAIL_PRIO]=!1;var Ja=[\"any\",\"all\",\"none\"];axe.utils.aggregateChecks=function(a){var b=Object.assign({},a);E(b,function(a,b){var c=Ia.indexOf(a.result);a.priority=-1!==c?c:axe.constants.CANTTELL_PRIO,\"none\"===b&&(a.priority=4-a.priority)});var c={all:b.all.reduce(function(a,b){return Math.max(a,b.priority)},0),none:b.none.reduce(function(a,b){return Math.max(a,b.priority)},0),any:b.any.reduce(function(a,b){return Math.min(a,b.priority)},4)%4};b.priority=Math.max(c.all,c.none,c.any);var d=[];return Ja.forEach(function(a){b[a]=b[a].filter(function(d){return d.priority===b.priority&&d.priority===c[a]}),b[a].forEach(function(a){return d.push(a.impact)})}),[Ga,Ha].includes(b.priority)?b.impact=axe.utils.aggregate(axe.constants.impact,d):b.impact=null,E(b,function(a){delete a.result,delete a.priority}),b.result=axe.constants.results[b.priority],delete b.priority,b},function(){axe.utils.aggregateNodeResults=function(a){var b={};if((a=a.map(function(a){if(a.any&&a.all&&a.none)return axe.utils.aggregateChecks(a);if(Array.isArray(a.node))return axe.utils.finalizeRuleResult(a);throw new TypeError(\"Invalid Result type\")}))&&a.length){var c=a.map(function(a){return a.result});b.result=axe.utils.aggregate(axe.constants.results,c,b.result)}else b.result=\"inapplicable\";axe.constants.resultGroups.forEach(function(a){return b[a]=[]}),a.forEach(function(a){var c=axe.constants.resultGroupMap[a.result];b[c].push(a)});var d=axe.constants.FAIL_GROUP;if(0===b[d].length&&(d=axe.constants.CANTTELL_GROUP),b[d].length>0){var e=b[d].map(function(a){return a.impact});b.impact=axe.utils.aggregate(axe.constants.impact,e)||null}else b.impact=null;return b}}(),axe.utils.aggregateResult=function(a){var b={};return axe.constants.resultGroups.forEach(function(a){return b[a]=[]}),a.forEach(function(a){a.error?F(b,a,axe.constants.CANTTELL_GROUP):a.result===axe.constants.NA?F(b,a,axe.constants.NA_GROUP):axe.constants.resultGroups.forEach(function(c){Array.isArray(a[c])&&a[c].length>0&&F(b,a,c)})}),b},axe.utils.areStylesSet=G,axe.utils.checkHelper=function(a,b,c,d){\"use strict\";return{isAsync:!1,async:function(){return this.isAsync=!0,function(b){b instanceof Error==!1?(a.result=b,c(a)):d(b)}},data:function(b){a.data=b},relatedNodes:function(c){c=c instanceof Node?[c]:axe.utils.toArray(c),a.relatedNodes=c.map(function(a){return new axe.utils.DqElement(a,b)})}}};var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};axe.utils.clone=function(a){\"use strict\";var b,c,d=a;if(null!==a&&\"object\"===(void 0===a?\"undefined\":za(a)))if(Array.isArray(a))for(d=[],b=0,c=a.length;b<c;b++)d[b]=axe.utils.clone(a[b]);else{d={};for(b in a)d[b]=axe.utils.clone(a[b])}return d},axe.utils.sendCommandToFrame=function(a,b,c,d){\"use strict\";var e=a.contentWindow;if(!e)return axe.log(\"Frame does not have a content window\",a),void c(null);var f=setTimeout(function(){f=setTimeout(function(){var e=H(\"No response from frame\",a);b.debug?d(e):(axe.log(e),c(null))},0)},500);axe.utils.respondable(e,\"axe.ping\",null,void 0,function(){clearTimeout(f);var g=b.options&&b.options.frameWaitTime||6e4;f=setTimeout(function(){d(H(\"Axe in frame timed out\",a))},g),axe.utils.respondable(e,\"axe.start\",b,void 0,function(a){clearTimeout(f),a instanceof Error==!1?c(a):d(a)})})},axe.utils.collectResultsFromFrames=I,axe.utils.contains=function(a,b){\"use strict\";function c(a,b){return a.shadowId===b.shadowId||!!a.children.find(function(a){return c(a,b)})}return a.shadowId||b.shadowId?c(a,b):\"function\"==typeof a.actualNode.contains?a.actualNode.contains(b.actualNode):!!(16&a.actualNode.compareDocumentPosition(b.actualNode))},function(axe){/*!\n  * The copyright below covers the code within this function block only\n  *\n  * Copyright (c) 2013 Dulin Marat\n  * \n  * Permission is hereby granted, free of charge, to any person obtaining a copy\n  * of this software and associated documentation files (the \"Software\"), to deal\n  * in the Software without restriction, including without limitation the rights\n  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  * copies of the Software, and to permit persons to whom the Software is\n  * furnished to do so, subject to the following conditions:\n  * \n  * The above copyright notice and this permission notice shall be included in\n  * all copies or substantial portions of the Software.\n  * \n  * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  * THE SOFTWARE.\n  */\nfunction a(){this.pseudos={},this.attrEqualityMods={},this.ruleNestingOperators={},this.substitutesEnabled=!1}function b(a){return a>=\"a\"&&a<=\"z\"||a>=\"A\"&&a<=\"Z\"||\"-\"===a||\"_\"===a}function c(a){return a>=\"a\"&&a<=\"z\"||a>=\"A\"&&a<=\"Z\"||a>=\"0\"&&a<=\"9\"||\"-\"===a||\"_\"===a}function d(a){return a>=\"a\"&&a<=\"f\"||a>=\"A\"&&a<=\"F\"||a>=\"0\"&&a<=\"9\"}function e(a,e,g,j,k,l){var m,n,o,p,q;return p=a.length,m=null,o=function(b,c){var f,g,h;for(h=\"\",e++,m=a.charAt(e);e<p;){if(m===b)return e++,h;if(\"\\\\\"===m)if(e++,(m=a.charAt(e))===b)h+=b;else if(f=c[m])h+=f;else{if(d(m)){for(g=m,e++,m=a.charAt(e);d(m);)g+=m,e++,m=a.charAt(e);\" \"===m&&(e++,m=a.charAt(e)),h+=String.fromCharCode(parseInt(g,16));continue}h+=m}else h+=m;e++,m=a.charAt(e)}return h},n=function(){var b=\"\";for(m=a.charAt(e);e<p;){if(c(m))b+=m;else{if(\"\\\\\"!==m)return b;if(++e>=p)throw Error(\"Expected symbol but end of file reached.\");if(m=a.charAt(e),f[m])b+=m;else{if(d(m)){var g=m;for(e++,m=a.charAt(e);d(m);)g+=m,e++,m=a.charAt(e);\" \"===m&&(e++,m=a.charAt(e)),b+=String.fromCharCode(parseInt(g,16));continue}b+=m}}e++,m=a.charAt(e)}return b},q=function(){m=a.charAt(e);for(var b=!1;\" \"===m||\"\\t\"===m||\"\\n\"===m||\"\\r\"===m||\"\\f\"===m;)b=!0,e++,m=a.charAt(e);return b},this.parse=function(){var b=this.parseSelector();if(e<p)throw Error('Rule expected but \"'+a.charAt(e)+'\" found.');return b},this.parseSelector=function(){var b,c=b=this.parseSingleSelector();for(m=a.charAt(e);\",\"===m;){if(e++,q(),\"selectors\"!==b.type&&(b={type:\"selectors\",selectors:[c]}),!(c=this.parseSingleSelector()))throw Error('Rule expected after \",\".');b.selectors.push(c)}return b},this.parseSingleSelector=function(){q();var b={type:\"ruleSet\"},c=this.parseRule();if(!c)return null;for(var d=b;c&&(c.type=\"rule\",d.rule=c,d=c,q(),m=a.charAt(e),!(e>=p||\",\"===m||\")\"===m));)if(k[m]){var f=m;if(e++,q(),!(c=this.parseRule()))throw Error('Rule expected after \"'+f+'\".');c.nestingOperator=f}else(c=this.parseRule())&&(c.nestingOperator=null);return b},this.parseRule=function(){for(var c=null;e<p;)if(\"*\"===(m=a.charAt(e)))e++,(c=c||{}).tagName=\"*\";else if(b(m)||\"\\\\\"===m)(c=c||{}).tagName=n();else if(\".\"===m)e++,c=c||{},(c.classNames=c.classNames||[]).push(n());else if(\"#\"===m)e++,(c=c||{}).id=n();else if(\"[\"===m){e++,q();var d={name:n()};if(q(),\"]\"===m)e++;else{var f=\"\";if(j[m]&&(f=m,e++,m=a.charAt(e)),e>=p)throw Error('Expected \"=\" but end of file reached.');if(\"=\"!==m)throw Error('Expected \"=\" but \"'+m+'\" found.');d.operator=f+\"=\",e++,q();var k=\"\";if(d.valueType=\"string\",'\"'===m)k=o('\"',i);else if(\"'\"===m)k=o(\"'\",h);else if(l&&\"$\"===m)e++,k=n(),d.valueType=\"substitute\";else{for(;e<p&&\"]\"!==m;)k+=m,e++,m=a.charAt(e);k=k.trim()}if(q(),e>=p)throw Error('Expected \"]\" but end of file reached.');if(\"]\"!==m)throw Error('Expected \"]\" but \"'+m+'\" found.');e++,d.value=k}c=c||{},(c.attrs=c.attrs||[]).push(d)}else{if(\":\"!==m)break;e++;var r=n(),s={name:r};if(\"(\"===m){e++;var t=\"\";if(q(),\"selector\"===g[r])s.valueType=\"selector\",t=this.parseSelector();else{if(s.valueType=g[r]||\"string\",'\"'===m)t=o('\"',i);else if(\"'\"===m)t=o(\"'\",h);else if(l&&\"$\"===m)e++,t=n(),s.valueType=\"substitute\";else{for(;e<p&&\")\"!==m;)t+=m,e++,m=a.charAt(e);t=t.trim()}q()}if(e>=p)throw Error('Expected \")\" but end of file reached.');if(\")\"!==m)throw Error('Expected \")\" but \"'+m+'\" found.');e++,s.value=t}c=c||{},(c.pseudos=c.pseudos||[]).push(s)}return c},this}a.prototype.registerSelectorPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.pseudos[a]=\"selector\";return this},a.prototype.unregisterSelectorPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.pseudos[a];return this},a.prototype.registerNumericPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.pseudos[a]=\"numeric\";return this},a.prototype.unregisterNumericPseudos=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.pseudos[a];return this},a.prototype.registerNestingOperators=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.ruleNestingOperators[a]=!0;return this},a.prototype.unregisterNestingOperators=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.ruleNestingOperators[a];return this},a.prototype.registerAttrEqualityMods=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],this.attrEqualityMods[a]=!0;return this},a.prototype.unregisterAttrEqualityMods=function(a){for(var b=0,c=arguments.length;b<c;b++)a=arguments[b],delete this.attrEqualityMods[a];return this},a.prototype.enableSubstitutes=function(){return this.substitutesEnabled=!0,this},a.prototype.disableSubstitutes=function(){return this.substitutesEnabled=!1,this};var f={\"!\":!0,'\"':!0,\"#\":!0,$:!0,\"%\":!0,\"&\":!0,\"'\":!0,\"(\":!0,\")\":!0,\"*\":!0,\"+\":!0,\",\":!0,\".\":!0,\"/\":!0,\";\":!0,\"<\":!0,\"=\":!0,\">\":!0,\"?\":!0,\"@\":!0,\"[\":!0,\"\\\\\":!0,\"]\":!0,\"^\":!0,\"`\":!0,\"{\":!0,\"|\":!0,\"}\":!0,\"~\":!0},g={\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\f\":\"\\\\f\",\"\\v\":\"\\\\v\"},h={n:\"\\n\",r:\"\\r\",t:\"\\t\",f:\"\\f\",\"\\\\\":\"\\\\\",\"'\":\"'\"},i={n:\"\\n\",r:\"\\r\",t:\"\\t\",f:\"\\f\",\"\\\\\":\"\\\\\",'\"':'\"'};a.prototype.parse=function(a){return new e(a,0,this.pseudos,this.attrEqualityMods,this.ruleNestingOperators,this.substitutesEnabled).parse()},a.prototype.escapeIdentifier=function(a){for(var b=\"\",c=0,d=a.length;c<d;){var e=a.charAt(c);if(f[e])b+=\"\\\\\"+e;else if(\"_\"===e||\"-\"===e||e>=\"A\"&&e<=\"Z\"||e>=\"a\"&&e<=\"z\"||0!==c&&e>=\"0\"&&e<=\"9\")b+=e;else{var g=e.charCodeAt(0);if(55296==(63488&g)){var h=a.charCodeAt(c++);if(55296!=(64512&g)||56320!=(64512&h))throw Error(\"UCS-2(decode): illegal sequence\");g=((1023&g)<<10)+(1023&h)+65536}b+=\"\\\\\"+g.toString(16)+\" \"}c++}return b},a.prototype.escapeStr=function(a){for(var b,c,d=\"\",e=0,f=a.length;e<f;)b=a.charAt(e),'\"'===b?b='\\\\\"':\"\\\\\"===b?b=\"\\\\\\\\\":(c=g[b])&&(b=c),d+=b,e++;return'\"'+d+'\"'},a.prototype.render=function(a){return this._renderEntity(a).trim()},a.prototype._renderEntity=function(a){var b,c,d;switch(d=\"\",a.type){case\"ruleSet\":for(b=a.rule,c=[];b;)b.nestingOperator&&c.push(b.nestingOperator),c.push(this._renderEntity(b)),b=b.rule;d=c.join(\" \");break;case\"selectors\":d=a.selectors.map(this._renderEntity,this).join(\", \");break;case\"rule\":a.tagName&&(d=\"*\"===a.tagName?\"*\":this.escapeIdentifier(a.tagName)),a.id&&(d+=\"#\"+this.escapeIdentifier(a.id)),a.classNames&&(d+=a.classNames.map(function(a){return\".\"+this.escapeIdentifier(a)},this).join(\"\")),a.attrs&&(d+=a.attrs.map(function(a){return a.operator?\"substitute\"===a.valueType?\"[\"+this.escapeIdentifier(a.name)+a.operator+\"$\"+a.value+\"]\":\"[\"+this.escapeIdentifier(a.name)+a.operator+this.escapeStr(a.value)+\"]\":\"[\"+this.escapeIdentifier(a.name)+\"]\"},this).join(\"\")),a.pseudos&&(d+=a.pseudos.map(function(a){return a.valueType?\"selector\"===a.valueType?\":\"+this.escapeIdentifier(a.name)+\"(\"+this._renderEntity(a.value)+\")\":\"substitute\"===a.valueType?\":\"+this.escapeIdentifier(a.name)+\"($\"+a.value+\")\":\"numeric\"===a.valueType?\":\"+this.escapeIdentifier(a.name)+\"(\"+a.value+\")\":\":\"+this.escapeIdentifier(a.name)+\"(\"+this.escapeIdentifier(a.value)+\")\":\":\"+this.escapeIdentifier(a.name)},this).join(\"\"));break;default:throw Error('Unknown entity type: \"'+a.type(NaN))}return d};var j=new a;j.registerNestingOperators(\">\"),axe.utils.cssParser=j}(axe),L.prototype={get selector(){return this.spec.selector||[axe.utils.getSelector(this.element,this._options)]},get xpath(){return this.spec.xpath||[axe.utils.getXpath(this.element)]},get element(){return this._element},get fromFrame(){return this._fromFrame},toJSON:function(){\"use strict\";return{selector:this.selector,source:this.source,xpath:this.xpath}}},L.fromFrame=function(a,b,c){return a.selector.unshift(c.selector),a.xpath.unshift(c.xpath),new axe.utils.DqElement(c.element,b,a)},axe.utils.DqElement=L,axe.utils.matchesSelector=function(){\"use strict\";function a(a){var b,c,d=a.Element.prototype,e=[\"matches\",\"matchesSelector\",\"mozMatchesSelector\",\"webkitMatchesSelector\",\"msMatchesSelector\"],f=e.length;for(b=0;b<f;b++)if(c=e[b],d[c])return c}var b;return function(c,d){return b&&c[b]||(b=a(c.ownerDocument.defaultView)),c[b](d)}}(),axe.utils.escapeSelector=function(a){\"use strict\";for(var b,c=String(a),d=c.length,e=-1,f=\"\",g=c.charCodeAt(0);++e<d;){if(0==(b=c.charCodeAt(e)))throw new Error(\"INVALID_CHARACTER_ERR\");b>=1&&b<=31||b>=127&&b<=159||0==e&&b>=48&&b<=57||1==e&&b>=48&&b<=57&&45==g?f+=\"\\\\\"+b.toString(16)+\" \":f+=(1!=e||45!=b||45!=g)&&(b>=128||45==b||95==b||b>=48&&b<=57||b>=65&&b<=90||b>=97&&b<=122)?c.charAt(e):\"\\\\\"+c.charAt(e)}return f},axe.utils.extendMetaData=function(a,b){Object.assign(a,b),Object.keys(b).filter(function(a){return\"function\"==typeof b[a]}).forEach(function(c){a[c]=null;try{a[c]=b[c](a)}catch(a){}})},axe.utils.finalizeRuleResult=function(a){return Object.assign(a,axe.utils.aggregateNodeResults(a.nodes)),delete a.nodes,a};var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};axe.utils.findBy=function(a,b,c){if(Array.isArray(a))return a.find(function(a){return\"object\"===(void 0===a?\"undefined\":za(a))&&a[b]===c})};var axe=axe||{utils:{}};axe.utils.getFlattenedTree=function(a,b){function c(a,c){var d=axe.utils.getFlattenedTree(c,b);return d&&(a=a.concat(d)),a}var d,e,f;if(a.documentElement&&(a=a.documentElement),f=a.nodeName.toLowerCase(),axe.utils.isShadowRoot(a))return d=M(a,b),b=\"a\"+Math.random().toString().substring(2),e=Array.from(a.shadowRoot.childNodes),d.children=e.reduce(c,[]),[d];if(\"content\"===f)return e=Array.from(a.getDistributedNodes()),e.reduce(c,[]);if(\"slot\"===f){e=Array.from(a.assignedNodes()),e.length||(e=N(a));window.getComputedStyle(a);return e.reduce(c,[])}return 1===a.nodeType?(d=M(a,b),e=Array.from(a.childNodes),d.children=e.reduce(c,[]),[d]):3===a.nodeType?[M(a)]:void 0},axe.utils.getNodeFromTree=function(a,b){var c;return a.actualNode===b?a:(a.children.forEach(function(a){var d;a.actualNode===b?c=a:(d=axe.utils.getNodeFromTree(a,b))&&(c=d)}),c)},axe.utils.getAllChecks=function(a){\"use strict\";return[].concat(a.any||[]).concat(a.all||[]).concat(a.none||[])},axe.utils.getCheckOption=function(a,b,c){var d=((c.rules&&c.rules[b]||{}).checks||{})[a.id],e=(c.checks||{})[a.id],f=a.enabled,g=a.options;return e&&(e.hasOwnProperty(\"enabled\")&&(f=e.enabled),e.hasOwnProperty(\"options\")&&(g=e.options)),d&&(d.hasOwnProperty(\"enabled\")&&(f=d.enabled),d.hasOwnProperty(\"options\")&&(g=d.options)),{enabled:f,options:g,absolutePaths:c.absolutePaths}};var Ka=function(){function a(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(a){e=!0,f=a}finally{try{!d&&h.return&&h.return()}finally{if(e)throw f}}return c}return function(b,c){if(Array.isArray(b))return b;if(Symbol.iterator in Object(b))return a(b,c);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}();axe.utils.getFriendlyUriEnd=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(a.length<=1||\"data:\"===a.substr(0,5)||\"javascript:\"===a.substr(0,11)||a.includes(\"?\"))){var c=b.currentDomain,d=b.maxLength,e=void 0===d?25:d,f=Q(a),g=f.path,h=f.domain,i=f.hash,j=g.substr(g.substr(0,g.length-2).lastIndexOf(\"/\")+1);if(i)return j&&(j+i).length<=e?j+i:j.length<2&&i.length>2&&i.length<=e?i:void 0;if(h&&h.length<e&&g.length<=1)return h+g;if(g===\"/\"+j&&h&&c&&h!==c&&(h+g).length<=e)return h+g;var k=j.lastIndexOf(\".\");return(-1===k||k>1)&&(-1!==k||j.length>2)&&j.length<=e&&!j.match(/index(\\.[a-zA-Z]{2-4})?/)&&!O(j)?j:void 0}};var La=axe.utils.escapeSelector,Ma=void 0,Na=[\"class\",\"style\",\"id\",\"selected\",\"checked\",\"disabled\",\"tabindex\",\"aria-checked\",\"aria-selected\",\"aria-invalid\",\"aria-activedescendant\",\"aria-busy\",\"aria-disabled\",\"aria-expanded\",\"aria-grabbed\",\"aria-pressed\",\"aria-valuenow\"],Oa=31;axe.utils.getSelectorData=function(a){var b={classes:{},tags:{},attributes:{}};a=Array.isArray(a)?a:[a];for(var c=a.slice(),d=[];c.length;)!function(){var a=c.pop(),e=a.actualNode;if(e.querySelectorAll){var f=e.nodeName;b.tags[f]?b.tags[f]++:b.tags[f]=1,e.classList&&Array.from(e.classList).forEach(function(a){var c=La(a);b.classes[c]?b.classes[c]++:b.classes[c]=1}),e.attributes&&Array.from(e.attributes).filter(T).forEach(function(a){var c=R(e,a);c&&(b.attributes[c]?b.attributes[c]++:b.attributes[c]=1)})}for(a.children.length&&(d.push(c),c=a.children.slice());!c.length&&d.length;)c=d.pop()}();return b},axe.utils.getSelector=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!a)return\"\";var c=a.getRootNode&&a.getRootNode()||document;if(11===c.nodeType){for(var d=[];11===c.nodeType;)d.push({elm:a,doc:c}),a=c.host,c=a.getRootNode();return d.push({elm:a,doc:c}),d.reverse().map(function(a){return $(a.elm,b,a.doc)})}return $(a,b,c)},axe.utils.getXpath=function(a){return aa(_(a))};var Pa;axe.utils.injectStyle=ba,axe.utils.isHidden=function(a,b){\"use strict\";var c;if(9===a.nodeType)return!1;11===a.nodeType&&(a=a.host);var d=window.getComputedStyle(a,null);return!d||!a.parentNode||\"none\"===d.getPropertyValue(\"display\")||!b&&\"hidden\"===d.getPropertyValue(\"visibility\")||\"true\"===a.getAttribute(\"aria-hidden\")||(c=a.assignedSlot?a.assignedSlot:a.parentNode,axe.utils.isHidden(c,!0))};var Qa=[\"article\",\"aside\",\"blockquote\",\"body\",\"div\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"main\",\"nav\",\"p\",\"section\",\"span\"];axe.utils.isShadowRoot=function(a){var b=a.nodeName.toLowerCase();return!(!a.shadowRoot||!/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(b)&&!Qa.includes(b))},axe.utils.isXHTML=function(a){\"use strict\";return!!a.createElement&&\"A\"===a.createElement(\"A\").localName},axe.utils.mergeResults=function(a,b){\"use strict\";var c=[];return a.forEach(function(a){var d=ea(a);d&&d.length&&d.forEach(function(d){d.nodes&&a.frame&&ca(d.nodes,b,a.frameElement,a.frame);var e=axe.utils.findBy(c,\"id\",d.id);e?d.nodes.length&&da(e.nodes,d.nodes):c.push(d)})}),c},axe.utils.nodeSorter=function(a,b){\"use strict\";return a.actualNode===b.actualNode?0:4&a.actualNode.compareDocumentPosition(b.actualNode)?-1:1},utils.performanceTimer=function(){\"use strict\";function a(){if(window.performance&&window.performance)return window.performance.now()}var b=null,c=a();return{start:function(){this.mark(\"mark_axe_start\")},end:function(){this.mark(\"mark_axe_end\"),this.measure(\"axe\",\"mark_axe_start\",\"mark_axe_end\"),this.logMeasures(\"axe\")},auditStart:function(){this.mark(\"mark_audit_start\")},auditEnd:function(){this.mark(\"mark_audit_end\"),this.measure(\"audit_start_to_end\",\"mark_audit_start\",\"mark_audit_end\"),this.logMeasures()},mark:function(a){window.performance&&void 0!==window.performance.mark&&window.performance.mark(a)},measure:function(a,b,c){window.performance&&void 0!==window.performance.measure&&window.performance.measure(a,b,c)},logMeasures:function(a){function b(a){axe.log(\"Measure \"+a.name+\" took \"+a.duration+\"ms\")}if(window.performance&&void 0!==window.performance.getEntriesByType)for(var c=window.performance.getEntriesByType(\"measure\"),d=0;d<c.length;++d){var e=c[d];if(e.name===a)return void b(e);b(e)}},timeElapsed:function(){return a()-c},reset:function(){b||(b=a()),c=a()}}}(),\"function\"!=typeof Object.assign&&function(){Object.assign=function(a){\"use strict\";if(void 0===a||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)d.hasOwnProperty(e)&&(b[e]=d[e])}return b}}(),Array.prototype.find||Object.defineProperty(Array.prototype,\"find\",{value:function(a){if(null===this)throw new TypeError(\"Array.prototype.find called on null or undefined\");if(\"function\"!=typeof a)throw new TypeError(\"predicate must be a function\");for(var b,c=Object(this),d=c.length>>>0,e=arguments[1],f=0;f<d;f++)if(b=c[f],a.call(e,b,f,c))return b}}),axe.utils.pollyfillElementsFromPoint=function(){if(document.elementsFromPoint)return document.elementsFromPoint;if(document.msElementsFromPoint)return document.msElementsFromPoint;var a=function(){var a=document.createElement(\"x\");return a.style.cssText=\"pointer-events:auto\",\"auto\"===a.style.pointerEvents}(),b=a?\"pointer-events\":\"visibility\",c=a?\"none\":\"hidden\",d=document.createElement(\"style\");return d.innerHTML=a?\"* { pointer-events: all }\":\"* { visibility: visible }\",function(a,e){var f,g,h,i=[],j=[];for(document.head.appendChild(d);(f=document.elementFromPoint(a,e))&&-1===i.indexOf(f);)i.push(f),j.push({value:f.style.getPropertyValue(b),priority:f.style.getPropertyPriority(b)}),f.style.setProperty(b,c,\"important\");for(i.indexOf(document.documentElement)<i.length-1&&(i.splice(i.indexOf(document.documentElement),1),i.push(document.documentElement)),g=j.length;h=j[--g];)i[g].style.setProperty(b,h.value?h.value:\"\",h.priority);return document.head.removeChild(d),i}},\"function\"==typeof window.addEventListener&&(document.elementsFromPoint=axe.utils.pollyfillElementsFromPoint()),Array.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{value:function(a){\"use strict\";var b=Object(this),c=parseInt(b.length,10)||0;if(0===c)return!1;var d,e=parseInt(arguments[1],10)||0;e>=0?d=e:(d=c+e)<0&&(d=0);for(var f;d<c;){if(f=b[d],a===f||a!==a&&f!==f)return!0;d++}return!1}}),Array.prototype.some||Object.defineProperty(Array.prototype,\"some\",{value:function(a){\"use strict\";if(null==this)throw new TypeError(\"Array.prototype.some called on null or undefined\");if(\"function\"!=typeof a)throw new TypeError;for(var b=Object(this),c=b.length>>>0,d=arguments.length>=2?arguments[1]:void 0,e=0;e<c;e++)if(e in b&&a.call(d,b[e],e,b))return!0;return!1}}),Array.from||Object.defineProperty(Array,\"from\",{value:function(){var a=Object.prototype.toString,b=function(b){return\"function\"==typeof b||\"[object Function]\"===a.call(b)},c=function(a){var b=Number(a);return isNaN(b)?0:0!==b&&isFinite(b)?(b>0?1:-1)*Math.floor(Math.abs(b)):b},d=Math.pow(2,53)-1,e=function(a){var b=c(a);return Math.min(Math.max(b,0),d)};return function(a){var c=this,d=Object(a);if(null==a)throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");var f,g=arguments.length>1?arguments[1]:void 0;if(void 0!==g){if(!b(g))throw new TypeError(\"Array.from: when provided, the second argument must be a function\");arguments.length>2&&(f=arguments[2])}for(var h,i=e(d.length),j=b(c)?Object(new c(i)):new Array(i),k=0;k<i;)h=d[k],j[k]=g?void 0===f?g(h,k):g.call(f,h,k):h,k+=1;return j.length=i,j}}()}),String.prototype.includes||(String.prototype.includes=function(a,b){return\"number\"!=typeof b&&(b=0),!(b+a.length>this.length)&&-1!==this.indexOf(a,b)});var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};axe.utils.publishMetaData=function(a){\"use strict\";var b=axe._audit.data.checks||{},c=axe._audit.data.rules||{},d=axe.utils.findBy(axe._audit.rules,\"id\",a.id)||{};a.tags=axe.utils.clone(d.tags||[]);var e=ga(b,!0),f=ga(b,!1);a.nodes.forEach(function(a){a.any.forEach(e),a.all.forEach(e),a.none.forEach(f)}),axe.utils.extendMetaData(a,axe.utils.clone(c[a.id]||{}))};var Ra=function(){},Sa=function(){},Ta=function(){/*! Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License */\nvar a=/(?=[\\-\\[\\]{}()*+?.\\\\\\^$|,#\\s])/g;return function(b){return b.replace(a,\"\\\\\")}}(),Ua=/\\\\/g;Ra=function(a){return a.map(function(a){for(var b=[],c=a.rule;c;)b.push({tag:c.tagName?c.tagName.toLowerCase():\"*\",combinator:c.nestingOperator?c.nestingOperator:\" \",id:c.id,attributes:ma(c.attrs),classes:na(c.classNames),pseudos:oa(c.pseudos)}),c=c.rule;return b})},Sa=function(a,b,c,d){for(var e=[],f=Array.isArray(a)?a:[a],g=pa(f,b,[],a[0].shadowId),h=[];g.nodes.length;){for(var i=g.nodes.pop(),j=[],k=[],l=g.anyLevel.slice().concat(g.thisLevel),m=!1,n=0;n<l.length;n++){var o=l[n];if(qa(i,o)&&(!o[0].id||i.shadowId===g.parentShadowId))if(1===o.length)m||d&&!d(i)||(h.push(i),m=!0);else{var p=o.slice(1);if(!1===[\" \",\">\"].includes(p[0].combinator))throw new Error(\"axe.utils.querySelectorAll does not support the combinator: \"+o[1].combinator);\">\"===p[0].combinator?j.push(p):k.push(p)}!g.anyLevel.includes(o)||o[0].id&&i.shadowId!==g.parentShadowId||k.push(o)}for(i.children&&i.children.length&&c&&(e.push(g),g=pa(i.children,k,j,i.shadowId));!g.nodes.length&&e.length;)g=e.pop()}return h},axe.utils.querySelectorAll=function(a,b){return axe.utils.querySelectorAllFilter(a,b)},axe.utils.querySelectorAllFilter=function(a,b,c){a=Array.isArray(a)?a:[a];var d=axe.utils.cssParser.parse(b);return d=d.selectors?d.selectors:[d],d=Ra(d),Sa(a,d,!0,c)};var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};!function(){\"use strict\";function a(){}function b(a){if(\"function\"!=typeof a)throw new TypeError(\"Queue methods require functions as arguments\")}function c(){function c(b){return function(c){g[b]=c,(i-=1)||j===a||(k=!0,j(g))}}function d(b){return j=a,m(b),g}function e(){for(var a=g.length;h<a;h++){var b=g[h];try{b.call(null,c(h),d)}catch(a){d(a)}}}var f,g=[],h=0,i=0,j=a,k=!1,l=function(a){f=a,setTimeout(function(){void 0!==f&&null!==f&&axe.log(\"Uncaught error (of queue)\",f)},1)},m=l,n={defer:function(a){if(\"object\"===(void 0===a?\"undefined\":za(a))&&a.then&&a.catch){var c=a;a=function(a,b){c.then(a).catch(b)}}if(b(a),void 0===f){if(k)throw new Error(\"Queue already completed\");return g.push(a),++i,e(),n}},then:function(c){if(b(c),j!==a)throw new Error(\"queue `then` already set\");return f||(j=c,i||(k=!0,j(g))),n},catch:function(a){if(b(a),m!==l)throw new Error(\"queue `catch` already set\");return f?(a(f),f=null):m=a,n},abort:d};return n}axe.utils.queue=c}();var za=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a};!function(a){\"use strict\";function b(){var a=\"axe\",b=\"\";return void 0!==axe&&axe._audit&&!axe._audit.application&&(a=axe._audit.application),void 0!==axe&&(b=axe.version),a+\".\"+b}function c(a){if(\"object\"===(void 0===a?\"undefined\":za(a))&&\"string\"==typeof a.uuid&&!0===a._respondable){var c=b();return a._source===c||\"axe.x.y.z\"===a._source||\"axe.x.y.z\"===c}return!1}function d(a,c,d,e,f,g){var h;d instanceof Error&&(h={name:d.name,message:d.message,stack:d.stack},d=void 0);var i={uuid:e,topic:c,message:d,error:h,_respondable:!0,_source:b(),_keepalive:f};\"function\"==typeof g&&(j[e]=g),a.postMessage(JSON.stringify(i),\"*\")}function e(a,b,c,e,f){d(a,b,c,Va.v1(),e,f)}function f(a,b,c){return function(e,f,g){d(a,b,e,c,f,g)}}function g(a,b,c){var d=b.topic,e=k[d];if(e){var g=f(a,null,b.uuid);e(b.message,c,g)}}function h(a){var b=a.message||\"Unknown error occurred\",c=l.includes(a.name)?a.name:\"Error\",d=window[c]||Error;return a.stack&&(b+=\"\\n\"+a.stack.replace(a.message,\"\")),new d(b)}function i(a){var b;if(\"string\"==typeof a){try{b=JSON.parse(a)}catch(a){}if(c(b))return\"object\"===za(b.error)?b.error=h(b.error):b.error=void 0,b}}var j={},k={},l=Object.freeze([\"EvalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"]);e.subscribe=function(a,b){k[a]=b},e.isInFrame=function(a){return a=a||window,!!a.frameElement},\"function\"==typeof window.addEventListener&&window.addEventListener(\"message\",function(a){var b=i(a.data);if(b){var c=b.uuid,e=b._keepalive,h=j[c];if(h){h(b.error||b.message,e,f(a.source,b.topic,c)),e||delete j[c]}if(!b.error)try{g(a.source,b,e)}catch(e){d(a.source,b.topic,e,c,!1)}}},!1),a.respondable=e}(utils),axe.utils.ruleShouldRun=function(a,b,c){\"use strict\";var d=c.runOnly||{},e=(c.rules||{})[a.id];return!(a.pageLevel&&!b.page)&&(\"rule\"===d.type?-1!==d.values.indexOf(a.id):e&&\"boolean\"==typeof e.enabled?e.enabled:\"tag\"===d.type&&d.values?ra(a,d.values):ra(a,[]))},axe.utils.getScrollState=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window,b=a.document.documentElement;return[void 0!==a.pageXOffset?{elm:a,top:a.pageYOffset,left:a.pageXOffset}:{elm:b,top:b.scrollTop,left:b.scrollLeft}].concat(ua(document.body))},axe.utils.setScrollState=function(a){a.forEach(function(a){return ta(a.elm,a.top,a.left)})},axe.utils.select=function(a,b){\"use strict\";var c,d=[];if(axe._selectCache)for(var e=0,f=axe._selectCache.length;e<f;e++){var g=axe._selectCache[e];if(g.selector===a)return g.result}for(var h=function(a){return function(b){return wa(b,a)}}(b),i=ya(b.include),j=0;j<i.length;j++)c=i[j],c.actualNode.nodeType===c.actualNode.ELEMENT_NODE&&axe.utils.matchesSelector(c.actualNode,a)&&h(c)&&(d=xa(d,[c])),d=xa(d,axe.utils.querySelectorAllFilter(c,a,h));return axe._selectCache&&axe._selectCache.push({selector:a,result:d}),d},axe.utils.toArray=function(a){\"use strict\";return Array.prototype.slice.call(a)},axe.utils.uniqueArray=function(a,b){return a.concat(b).filter(function(a,b,c){return c.indexOf(a)===b})};var Va;!function(a){function b(a,b,c){var d=b&&c||0,e=0;for(b=b||[],a.toLowerCase().replace(/[0-9a-f]{2}/g,function(a){e<16&&(b[d+e++]=l[a])});e<16;)b[d+e++]=0;return b}function c(a,b){var c=b||0,d=k;return d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+\"-\"+d[a[c++]]+d[a[c++]]+\"-\"+d[a[c++]]+d[a[c++]]+\"-\"+d[a[c++]]+d[a[c++]]+\"-\"+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]}function d(a,b,d){var e=b&&d||0,f=b||[];a=a||{};var g=null!=a.clockseq?a.clockseq:p,h=null!=a.msecs?a.msecs:(new Date).getTime(),i=null!=a.nsecs?a.nsecs:r+1,j=h-q+(i-r)/1e4;if(j<0&&null==a.clockseq&&(g=g+1&16383),(j<0||h>q)&&null==a.nsecs&&(i=0),i>=1e4)throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");q=h,r=i,p=g,h+=122192928e5;var k=(1e4*(268435455&h)+i)%4294967296;f[e++]=k>>>24&255,f[e++]=k>>>16&255,f[e++]=k>>>8&255,f[e++]=255&k;var l=h/4294967296*1e4&268435455;f[e++]=l>>>8&255,f[e++]=255&l,f[e++]=l>>>24&15|16,f[e++]=l>>>16&255,f[e++]=g>>>8|128,f[e++]=255&g;for(var m=a.node||o,n=0;n<6;n++)f[e+n]=m[n];return b||c(f)}function e(a,b,d){var e=b&&d||0;\"string\"==typeof a&&(b=\"binary\"==a?new j(16):null,a=null),a=a||{};var g=a.random||(a.rng||f)();if(g[6]=15&g[6]|64,g[8]=63&g[8]|128,b)for(var h=0;h<16;h++)b[e+h]=g[h];return b||c(g)}var f,g=a.crypto||a.msCrypto;if(!f&&g&&g.getRandomValues){var h=new Uint8Array(16);f=function(){return g.getRandomValues(h),h}}if(!f){var i=new Array(16);f=function(){for(var a,b=0;b<16;b++)0==(3&b)&&(a=4294967296*Math.random()),i[b]=a>>>((3&b)<<3)&255;return i}}for(var j=\"function\"==typeof a.Buffer?a.Buffer:Array,k=[],l={},m=0;m<256;m++)k[m]=(m+256).toString(16).substr(1),l[k[m]]=m;var n=f(),o=[1|n[0],n[1],n[2],n[3],n[4],n[5]],p=16383&(n[6]<<8|n[7]),q=0,r=0;Va=e,Va.v1=d,Va.v4=e,Va.parse=b,Va.unparse=c,Va.BufferClass=j}(window),axe._load({data:{rules:{accesskeys:{description:\"Ensures every accesskey attribute value is unique\",help:\"accesskey attribute value must be unique\"},\"area-alt\":{description:\"Ensures <area> elements of image maps have alternate text\",help:\"Active <area> elements must have alternate text\"},\"aria-allowed-attr\":{description:\"Ensures ARIA attributes are allowed for an element's role\",help:\"Elements must only use allowed ARIA attributes\"},\"aria-hidden-body\":{description:\"Ensures aria-hidden='true' is not present on the document body.\",help:\"aria-hidden='true' must not be present on the document body\"},\"aria-required-attr\":{description:\"Ensures elements with ARIA roles have all required ARIA attributes\",help:\"Required ARIA attributes must be provided\"},\"aria-required-children\":{description:\"Ensures elements with an ARIA role that require child roles contain them\",help:\"Certain ARIA roles must contain particular children\"},\"aria-required-parent\":{description:\"Ensures elements with an ARIA role that require parent roles are contained by them\",help:\"Certain ARIA roles must be contained by particular parents\"},\"aria-roles\":{description:\"Ensures all elements with a role attribute use a valid value\",help:\"ARIA roles used must conform to valid values\"},\"aria-valid-attr-value\":{description:\"Ensures all ARIA attributes have valid values\",help:\"ARIA attributes must conform to valid values\"},\"aria-valid-attr\":{description:\"Ensures attributes that begin with aria- are valid ARIA attributes\",help:\"ARIA attributes must conform to valid names\"},\"audio-caption\":{description:\"Ensures <audio> elements have captions\",help:\"<audio> elements must have a captions track\"},blink:{description:\"Ensures <blink> elements are not used\",help:\"<blink> elements are deprecated and must not be used\"},\"button-name\":{description:\"Ensures buttons have discernible text\",help:\"Buttons must have discernible text\"},bypass:{description:\"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content\",help:\"Page must have means to bypass repeated blocks\"},checkboxgroup:{description:'Ensures related <input type=\"checkbox\"> elements have a group and that that group designation is consistent',help:\"Checkbox inputs with the same name attribute value must be part of a group\"},\"color-contrast\":{description:\"Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds\",help:\"Elements must have sufficient color contrast\"},\"definition-list\":{description:\"Ensures <dl> elements are structured correctly\",help:\"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements\"},dlitem:{description:\"Ensures <dt> and <dd> elements are contained by a <dl>\",help:\"<dt> and <dd> elements must be contained by a <dl>\"},\"document-title\":{description:\"Ensures each HTML document contains a non-empty <title> element\",help:\"Documents must have <title> element to aid in navigation\"},\"duplicate-id\":{description:\"Ensures every id attribute value is unique\",help:\"id attribute value must be unique\"},\"empty-heading\":{description:\"Ensures headings have discernible text\",help:\"Headings must not be empty\"},\"focus-order-semantics\":{description:\"Ensures elements in the focus order have an appropriate role\",help:\"Elements in the focus order need a role appropriate for interactive content\"},\"frame-title-unique\":{description:\"Ensures <iframe> and <frame> elements contain a unique title attribute\",help:\"Frames must have a unique title attribute\"},\"frame-title\":{description:\"Ensures <iframe> and <frame> elements contain a non-empty title attribute\",help:\"Frames must have title attribute\"},\"heading-order\":{description:\"Ensures the order of headings is semantically correct\",help:\"Heading levels should only increase by one\"},\"hidden-content\":{description:\"Informs users about hidden content.\",help:\"Hidden content on the page cannot be analyzed\"},\"html-has-lang\":{description:\"Ensures every HTML document has a lang attribute\",help:\"<html> element must have a lang attribute\"},\"html-lang-valid\":{description:\"Ensures the lang attribute of the <html> element has a valid value\",help:\"<html> element must have a valid value for the lang attribute\"},\"image-alt\":{description:\"Ensures <img> elements have alternate text or a role of none or presentation\",help:\"Images must have alternate text\"},\"image-redundant-alt\":{description:\"Ensure button and link text is not repeated as image alternative\",help:\"Text of buttons and links should not be repeated in the image alternative\"},\"input-image-alt\":{description:'Ensures <input type=\"image\"> elements have alternate text',help:\"Image buttons must have alternate text\"},\"label-title-only\":{description:\"Ensures that every form element is not solely labeled using the title or aria-describedby attributes\",help:\"Form elements should have a visible label\"},label:{description:\"Ensures every form element has a label\",help:\"Form elements must have labels\"},\"landmark-main-is-top-level\":{description:\"The main landmark should not be contained in another landmark\",help:\"Main landmark is not at top level\"},\"landmark-one-main\":{description:\"Ensures a navigation point to the primary content of the page. If the page contains iframes, each iframe should contain either no main landmarks or just one.\",help:\"Page must contain one main landmark.\"},\"layout-table\":{description:\"Ensures presentational <table> elements do not use <th>, <caption> elements or the summary attribute\",help:\"Layout tables must not use data table elements\"},\"link-in-text-block\":{description:\"Links can be distinguished without relying on color\",help:\"Links must be distinguished from surrounding text in a way that does not rely on color\"},\"link-name\":{description:\"Ensures links have discernible text\",help:\"Links must have discernible text\"},list:{description:\"Ensures that lists are structured correctly\",help:\"<ul> and <ol> must only directly contain <li>, <script> or <template> elements\"},listitem:{description:\"Ensures <li> elements are used semantically\",help:\"<li> elements must be contained in a <ul> or <ol>\"},marquee:{description:\"Ensures <marquee> elements are not used\",help:\"<marquee> elements are deprecated and must not be used\"},\"meta-refresh\":{description:'Ensures <meta http-equiv=\"refresh\"> is not used',help:\"Timed refresh must not exist\"},\"meta-viewport-large\":{description:'Ensures <meta name=\"viewport\"> can scale a significant amount',help:\"Users should be able to zoom and scale the text up to 500%\"},\"meta-viewport\":{description:'Ensures <meta name=\"viewport\"> does not disable text scaling and zooming',help:\"Zooming and scaling must not be disabled\"},\"object-alt\":{description:\"Ensures <object> elements have alternate text\",help:\"<object> elements must have alternate text\"},\"p-as-heading\":{description:\"Ensure p elements are not used to style headings\",help:\"Bold, italic text and font-size are not used to style p elements as a heading\"},radiogroup:{description:'Ensures related <input type=\"radio\"> elements have a group and that the group designation is consistent',help:\"Radio inputs with the same name attribute value must be part of a group\"},region:{description:\"Ensures all content is contained within a landmark region\",help:\"Content should be contained in a landmark region\"},\"scope-attr-valid\":{description:\"Ensures the scope attribute is used correctly on tables\",help:\"scope attribute should be used correctly\"},\"server-side-image-map\":{description:\"Ensures that server-side image maps are not used\",help:\"Server-side image maps must not be used\"},\"skip-link\":{description:\"Ensure all skip links have a focusable target\",help:\"The skip-link target should exist and be focusable\"},tabindex:{description:\"Ensures tabindex attribute values are not greater than 0\",help:\"Elements should not have tabindex greater than zero\"},\"table-duplicate-name\":{description:\"Ensure that tables do not have the same summary and caption\",help:\"The <caption> element should not contain the same text as the summary attribute\"},\"table-fake-caption\":{description:\"Ensure that tables with a caption use the <caption> element.\",help:\"Data or header cells should not be used to give caption to a data table.\"},\"td-has-header\":{description:\"Ensure that each non-empty data cell in a large table has one or more table headers\",help:\"All non-empty td element in table larger than 3 by 3 must have an associated table header\"},\"td-headers-attr\":{description:\"Ensure that each cell in a table using the headers refers to another cell in that table\",help:\"All cells in a table element that use the headers attribute must only refer to other cells of that same table\"},\"th-has-data-cells\":{description:\"Ensure that each table header in a data table refers to data cells\",help:\"All th elements and elements with role=columnheader/rowheader must have data cells they describe\"},\"valid-lang\":{description:\"Ensures lang attributes have valid values\",help:\"lang attribute must have a valid value\"},\"video-caption\":{description:\"Ensures <video> elements have captions\",help:\"<video> elements must have captions\"},\"video-description\":{description:\"Ensures <video> elements have audio descriptions\",help:\"<video> elements must have an audio description track\"}},checks:{accesskeys:{impact:\"serious\",messages:{pass:function(a){return\"Accesskey attribute value is unique\"},fail:function(a){return\"Document has multiple elements with the same accesskey\"}}},\"non-empty-alt\":{impact:\"critical\",messages:{pass:function(a){return\"Element has a non-empty alt attribute\"},fail:function(a){return\"Element has no alt attribute or the alt attribute is empty\"}}},\"non-empty-title\":{impact:\"serious\",messages:{pass:function(a){return\"Element has a title attribute\"},fail:function(a){return\"Element has no title attribute or the title attribute is empty\"}}},\"aria-label\":{impact:\"serious\",messages:{pass:function(a){return\"aria-label attribute exists and is not empty\"},fail:function(a){return\"aria-label attribute does not exist or is empty\"}}},\"aria-labelledby\":{impact:\"serious\",messages:{pass:function(a){return\"aria-labelledby attribute exists and references elements that are visible to screen readers\"},fail:function(a){return\"aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty or not visible\"}}},\"aria-allowed-attr\":{impact:\"critical\",messages:{pass:function(a){return\"ARIA attributes are used correctly for the defined role\"},fail:function(a){var b=\"ARIA attribute\"+(a.data&&a.data.length>1?\"s are\":\" is\")+\" not allowed:\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},\"aria-hidden-body\":{impact:\"critical\",messages:{pass:function(a){return\"No aria-hidden attribute is present on document body\"},fail:function(a){return\"aria-hidden=true should not be present on the document body\"}}},\"aria-required-attr\":{impact:\"critical\",messages:{pass:function(a){return\"All required ARIA attributes are present\"},fail:function(a){var b=\"Required ARIA attribute\"+(a.data&&a.data.length>1?\"s\":\"\")+\" not present:\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},\"aria-required-children\":{impact:\"critical\",messages:{pass:function(a){return\"Required ARIA children are present\"},fail:function(a){var b=\"Required ARIA \"+(a.data&&a.data.length>1?\"children\":\"child\")+\" role not present:\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},\"aria-required-parent\":{impact:\"critical\",messages:{pass:function(a){return\"Required ARIA parent role present\"},fail:function(a){var b=\"Required ARIA parent\"+(a.data&&a.data.length>1?\"s\":\"\")+\" role not present:\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},invalidrole:{impact:\"critical\",messages:{pass:function(a){return\"ARIA role is valid\"},fail:function(a){return\"Role must be one of the valid ARIA roles\"}}},abstractrole:{impact:\"serious\",messages:{pass:function(a){return\"Abstract roles are not used\"},fail:function(a){return\"Abstract roles cannot be directly used\"}}},\"aria-valid-attr-value\":{impact:\"critical\",messages:{pass:function(a){return\"ARIA attribute values are valid\"},fail:function(a){var b=\"Invalid ARIA attribute value\"+(a.data&&a.data.length>1?\"s\":\"\")+\":\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},\"aria-errormessage\":{impact:\"critical\",messages:{pass:function(a){return\"Uses a supported aria-errormessage technique\"},fail:function(a){var b=\"aria-errormessage value\"+(a.data&&a.data.length>1?\"s\":\"\")+\" \",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" `\"+d;return b+=\"` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)\"}}},\"aria-valid-attr\":{impact:\"critical\",messages:{pass:function(a){return\"ARIA attribute name\"+(a.data&&a.data.length>1?\"s\":\"\")+\" are valid\"},fail:function(a){var b=\"Invalid ARIA attribute name\"+(a.data&&a.data.length>1?\"s\":\"\")+\":\",c=a.data;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\" \"+d;return b}}},caption:{impact:\"critical\",messages:{pass:function(a){return\"The multimedia element has a captions track\"},fail:function(a){return\"The multimedia element does not have a captions track\"},incomplete:function(a){return\"A captions track for this element could not be found\"}}},\"is-on-screen\":{impact:\"serious\",messages:{pass:function(a){return\"Element is not visible\"},fail:function(a){return\"Element is visible\"}}},\"non-empty-if-present\":{impact:\"critical\",messages:{pass:function(a){var b=\"Element \";return a.data?b+=\"has a non-empty value attribute\":b+=\"does not have a value attribute\",b},fail:function(a){return\"Element has a value attribute and the value attribute is empty\"}}},\"non-empty-value\":{impact:\"critical\",messages:{pass:function(a){return\"Element has a non-empty value attribute\"},fail:function(a){return\"Element has no value attribute or the value attribute is empty\"}}},\"button-has-visible-text\":{impact:\"critical\",messages:{pass:function(a){return\"Element has inner text that is visible to screen readers\"},fail:function(a){return\"Element does not have inner text that is visible to screen readers\"}}},\"role-presentation\":{impact:\"minor\",messages:{pass:function(a){return'Element\\'s default semantics were overriden with role=\"presentation\"'},fail:function(a){return'Element\\'s default semantics were not overridden with role=\"presentation\"'}}},\"role-none\":{impact:\"minor\",messages:{pass:function(a){return'Element\\'s default semantics were overriden with role=\"none\"'},fail:function(a){return'Element\\'s default semantics were not overridden with role=\"none\"'}}},\"focusable-no-name\":{impact:\"serious\",messages:{pass:function(a){return\"Element is not in tab order or has accessible text\"},fail:function(a){return\"Element is in tab order and does not have accessible text\"}}},\"internal-link-present\":{impact:\"serious\",messages:{pass:function(a){return\"Valid skip link found\"},fail:function(a){return\"No valid skip link found\"}}},\"header-present\":{impact:\"serious\",messages:{pass:function(a){return\"Page has a header\"},fail:function(a){return\"Page does not have a header\"}}},landmark:{impact:\"serious\",messages:{pass:function(a){return\"Page has a landmark region\"},fail:function(a){return\"Page does not have a landmark region\"}}},\"group-labelledby\":{impact:\"critical\",messages:{pass:function(a){return'All elements with the name \"'+a.data.name+'\" reference the same element with aria-labelledby'},fail:function(a){return'All elements with the name \"'+a.data.name+'\" do not reference the same element with aria-labelledby'}}},fieldset:{impact:\"critical\",messages:{pass:function(a){return\"Element is contained in a fieldset\"},fail:function(a){var b=\"\",c=a.data&&a.data.failureCode;return b+=\"no-legend\"===c?\"Fieldset does not have a legend as its first child\":\"empty-legend\"===c?\"Legend does not have text that is visible to screen readers\":\"mixed-inputs\"===c?\"Fieldset contains unrelated inputs\":\"no-group-label\"===c?\"ARIA group does not have aria-label or aria-labelledby\":\"group-mixed-inputs\"===c?\"ARIA group contains unrelated inputs\":\"Element does not have a containing fieldset or ARIA group\"}}},\"color-contrast\":{impact:\"serious\",messages:{pass:function(a){return\"Element has sufficient color contrast of \"+a.data.contrastRatio},fail:function(a){return\"Element has insufficient color contrast of \"+a.data.contrastRatio+\" (foreground color: \"+a.data.fgColor+\", background color: \"+a.data.bgColor+\", font size: \"+a.data.fontSize+\", font weight: \"+a.data.fontWeight+\"). Expected contrast ratio of \"+a.data.expectedContrastRatio},incomplete:{bgImage:\"Element's background color could not be determined due to a background image\",bgGradient:\"Element's background color could not be determined due to a background gradient\",imgNode:\"Element's background color could not be determined because element contains an image node\",bgOverlap:\"Element's background color could not be determined because it is overlapped by another element\",fgAlpha:\"Element's foreground color could not be determined because of alpha transparency\",elmPartiallyObscured:\"Element's background color could not be determined because it's partially obscured by another element\",elmPartiallyObscuring:\"Element's background color could not be determined because it partially overlaps other elements\",outsideViewport:\"Element's background color could not be determined because it's outside the viewport\",equalRatio:\"Element has a 1:1 contrast ratio with the background\",default:\"Unable to determine contrast ratio\"}}},\"structured-dlitems\":{impact:\"serious\",messages:{pass:function(a){return\"When not empty, element has both <dt> and <dd> elements\"},fail:function(a){return\"When not empty, element does not have at least one <dt> element followed by at least one <dd> element\"}}},\"only-dlitems\":{impact:\"serious\",messages:{pass:function(a){return\"List element only has direct children that are allowed inside <dt> or <dd> elements\"},fail:function(a){return\"List element has direct children that are not allowed inside <dt> or <dd> elements\"}}},dlitem:{impact:\"serious\",messages:{pass:function(a){return\"Description list item has a <dl> parent element\"},fail:function(a){return\"Description list item does not have a <dl> parent element\"}}},\"doc-has-title\":{impact:\"serious\",messages:{pass:function(a){return\"Document has a non-empty <title> element\"},fail:function(a){return\"Document does not have a non-empty <title> element\"}}},\"duplicate-id\":{impact:\"moderate\",messages:{pass:function(a){return\"Document has no elements that share the same id attribute\"},fail:function(a){return\"Document has multiple elements with the same id attribute: \"+a.data}}},\"has-visible-text\":{impact:\"minor\",messages:{pass:function(a){return\"Element has text that is visible to screen readers\"},fail:function(a){return\"Element does not have text that is visible to screen readers\"}}},\"has-widget-role\":{impact:\"minor\",messages:{pass:function(a){return\"Element has a widget role.\"},fail:function(a){return\"Element does not have a widget role.\"}}},\"valid-scrollable-semantics\":{impact:\"minor\",messages:{pass:function(a){return\"Element has valid semantics for an element in the focus order.\"},fail:function(a){return\"Element has invalid semantics for an element in the focus order.\"}}},\"unique-frame-title\":{impact:\"serious\",messages:{pass:function(a){return\"Element's title attribute is unique\"},fail:function(a){return\"Element's title attribute is not unique\"}}},\"heading-order\":{impact:\"moderate\",messages:{pass:function(a){return\"Heading order valid\"},fail:function(a){return\"Heading order invalid\"}}},\"hidden-content\":{impact:\"minor\",messages:{pass:function(a){return\"All content on the page has been analyzed.\"},fail:function(a){return\"There were problems analyzing the content on this page.\"},incomplete:function(a){return\"There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it.\"}}},\"has-lang\":{impact:\"serious\",messages:{pass:function(a){return\"The <html> element has a lang attribute\"},fail:function(a){return\"The <html> element does not have a lang attribute\"}}},\"valid-lang\":{impact:\"serious\",messages:{pass:function(a){return\"Value of lang attribute is included in the list of valid languages\"},fail:function(a){return\"Value of lang attribute not included in the list of valid languages\"}}},\"has-alt\":{impact:\"critical\",messages:{pass:function(a){return\"Element has an alt attribute\"},fail:function(a){return\"Element does not have an alt attribute\"}}},\"duplicate-img-label\":{impact:\"minor\",messages:{pass:function(a){return\"Element does not duplicate existing text in <img> alt text\"},fail:function(a){return\"Element contains <img> element with alt text that duplicates existing text\"}}},\"title-only\":{impact:\"serious\",messages:{pass:function(a){return\"Form element does not solely use title attribute for its label\"},fail:function(a){return\"Only title used to generate label for form element\"}}},\"implicit-label\":{impact:\"critical\",messages:{pass:function(a){return\"Form element has an implicit (wrapped) <label>\"},fail:function(a){return\"Form element does not have an implicit (wrapped) <label>\"}}},\"explicit-label\":{impact:\"critical\",messages:{pass:function(a){return\"Form element has an explicit <label>\"},fail:function(a){return\"Form element does not have an explicit <label>\"}}},\"help-same-as-label\":{impact:\"minor\",messages:{pass:function(a){return\"Help text (title or aria-describedby) does not duplicate label text\"},fail:function(a){return\"Help text (title or aria-describedby) text is the same as the label text\"}}},\"multiple-label\":{impact:\"serious\",messages:{pass:function(a){return\"Form element does not have multiple <label> elements\"},fail:function(a){return\"Form element has multiple <label> elements\"}}},\"main-is-top-level\":{impact:\"moderate\",messages:{pass:function(a){return\"The main landmark is at the top level.\"},fail:function(a){return\"The main landmark is contained in another landmark.\"}}},\"has-at-least-one-main\":{impact:\"moderate\",messages:{pass:function(a){return\"Document has at least one main landmark\"},fail:function(a){return\"Document has no main landmarks\"}}},\"has-no-more-than-one-main\":{impact:\"moderate\",messages:{pass:function(a){return\"Document has no more than one main landmark\"},fail:function(a){return\"Document has more than one main landmark\"}}},\"has-th\":{impact:\"serious\",messages:{pass:function(a){return\"Layout table does not use <th> elements\"},fail:function(a){return\"Layout table uses <th> elements\"}}},\"has-caption\":{impact:\"serious\",messages:{pass:function(a){return\"Layout table does not use <caption> element\"},fail:function(a){return\"Layout table uses <caption> element\"}}},\"has-summary\":{impact:\"serious\",messages:{pass:function(a){return\"Layout table does not use summary attribute\"},fail:function(a){return\"Layout table uses summary attribute\"}}},\"link-in-text-block\":{impact:\"serious\",messages:{pass:function(a){return\"Links can be distinguished from surrounding text in some way other than by color\"},fail:function(a){return\"Links need to be distinguished from surrounding text in some way other than by color\"},incomplete:{bgContrast:\"Element's contrast ratio could not be determined. Check for a distinct hover/focus style\",bgImage:\"Element's contrast ratio could not be determined due to a background image\",bgGradient:\"Element's contrast ratio could not be determined due to a background gradient\",imgNode:\"Element's contrast ratio could not be determined because element contains an image node\",bgOverlap:\"Element's contrast ratio could not be determined because of element overlap\",default:\"Unable to determine contrast ratio\"}}},\"only-listitems\":{impact:\"serious\",messages:{pass:function(a){return\"List element only has direct children that are allowed inside <li> elements\"},fail:function(a){return\"List element has direct children that are not allowed inside <li> elements\"}}},listitem:{impact:\"serious\",messages:{pass:function(a){return'List item has a <ul>, <ol> or role=\"list\" parent element'},fail:function(a){return'List item does not have a <ul>, <ol> or role=\"list\" parent element'}}},\"meta-refresh\":{impact:\"critical\",messages:{pass:function(a){return\"<meta> tag does not immediately refresh the page\"},fail:function(a){return\"<meta> tag forces timed refresh of page\"}}},\"meta-viewport-large\":{impact:\"minor\",messages:{pass:function(a){\nreturn\"<meta> tag does not prevent significant zooming on mobile devices\"},fail:function(a){return\"<meta> tag limits zooming on mobile devices\"}}},\"meta-viewport\":{impact:\"critical\",messages:{pass:function(a){return\"<meta> tag does not disable zooming on mobile devices\"},fail:function(a){return\"<meta> tag disables zooming on mobile devices\"}}},\"p-as-heading\":{impact:\"serious\",messages:{pass:function(a){return\"<p> elements are not styled as headings\"},fail:function(a){return\"Heading elements should be used instead of styled p elements\"}}},region:{impact:\"moderate\",messages:{pass:function(a){return\"Content contained by ARIA landmark\"},fail:function(a){return\"Content not contained by an ARIA landmark\"}}},\"html5-scope\":{impact:\"moderate\",messages:{pass:function(a){return\"Scope attribute is only used on table header elements (<th>)\"},fail:function(a){return\"In HTML 5, scope attributes may only be used on table header elements (<th>)\"}}},\"scope-value\":{impact:\"critical\",messages:{pass:function(a){return\"Scope attribute is used correctly\"},fail:function(a){return\"The value of the scope attribute may only be 'row' or 'col'\"}}},exists:{impact:\"minor\",messages:{pass:function(a){return\"Element does not exist\"},fail:function(a){return\"Element exists\"}}},\"skip-link\":{impact:\"moderate\",messages:{pass:function(a){return\"Skip link target exists\"},incomplete:function(a){return\"Skip link target should become visible on activation\"},fail:function(a){return\"No skip link target\"}}},tabindex:{impact:\"serious\",messages:{pass:function(a){return\"Element does not have a tabindex greater than 0\"},fail:function(a){return\"Element has a tabindex greater than 0\"}}},\"same-caption-summary\":{impact:\"minor\",messages:{pass:function(a){return\"Content of summary attribute and <caption> are not duplicated\"},fail:function(a){return\"Content of summary attribute and <caption> element are identical\"}}},\"caption-faked\":{impact:\"serious\",messages:{pass:function(a){return\"The first row of a table is not used as a caption\"},fail:function(a){return\"The first row of the table should be a caption instead of a table cell\"}}},\"td-has-header\":{impact:\"critical\",messages:{pass:function(a){return\"All non-empty data cells have table headers\"},fail:function(a){return\"Some non-empty data cells do not have table headers\"}}},\"td-headers-attr\":{impact:\"serious\",messages:{pass:function(a){return\"The headers attribute is exclusively used to refer to other cells in the table\"},fail:function(a){return\"The headers attribute is not exclusively used to refer to other cells in the table\"}}},\"th-has-data-cells\":{impact:\"serious\",messages:{pass:function(a){return\"All table header cells refer to data cells\"},fail:function(a){return\"Not all table header cells refer to data cells\"},incomplete:function(a){return\"Table data cells are missing or empty\"}}},description:{impact:\"critical\",messages:{pass:function(a){return\"The multimedia element has an audio description track\"},fail:function(a){return\"The multimedia element does not have an audio description track\"},incomplete:function(a){return\"An audio description track for this element could not be found\"}}}},failureSummaries:{any:{failureMessage:function(a){var b=\"Fix any of the following:\",c=a;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\"\\n  \"+d.split(\"\\n\").join(\"\\n  \");return b}},none:{failureMessage:function(a){var b=\"Fix all of the following:\",c=a;if(c)for(var d,e=-1,f=c.length-1;e<f;)d=c[e+=1],b+=\"\\n  \"+d.split(\"\\n\").join(\"\\n  \");return b}}},incompleteFallbackMessage:function(a){return\"aXe couldn't tell the reason. Time to break out the element inspector!\"}},rules:[{id:\"accesskeys\",selector:\"[accesskey]\",excludeHidden:!1,tags:[\"wcag2a\",\"wcag211\",\"cat.keyboard\"],all:[],any:[],none:[\"accesskeys\"]},{id:\"area-alt\",selector:\"map area[href]\",excludeHidden:!1,tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag111\",\"section508\",\"section508.22.a\"],all:[],any:[\"non-empty-alt\",\"non-empty-title\",\"aria-label\",\"aria-labelledby\"],none:[]},{id:\"aria-allowed-attr\",matches:function(a,b){var c=a.getAttribute(\"role\");c||(c=axe.commons.aria.implicitRole(a));var d=axe.commons.aria.allowedAttr(c);if(c&&d){var e=/^aria-/;if(a.hasAttributes())for(var f=a.attributes,g=0,h=f.length;g<h;g++)if(e.test(f[g].name))return!0}return!1},tags:[\"cat.aria\",\"wcag2a\",\"wcag411\",\"wcag412\"],all:[],any:[\"aria-allowed-attr\"],none:[]},{id:\"aria-hidden-body\",selector:\"body\",excludeHidden:!1,tags:[\"cat.aria\",\"wcag2a\",\"wcag412\"],all:[],any:[\"aria-hidden-body\"],none:[]},{id:\"aria-required-attr\",selector:\"[role]\",tags:[\"cat.aria\",\"wcag2a\",\"wcag411\",\"wcag412\"],all:[],any:[\"aria-required-attr\"],none:[]},{id:\"aria-required-children\",selector:\"[role]\",tags:[\"cat.aria\",\"wcag2a\",\"wcag131\"],all:[],any:[\"aria-required-children\"],none:[]},{id:\"aria-required-parent\",selector:\"[role]\",tags:[\"cat.aria\",\"wcag2a\",\"wcag131\"],all:[],any:[\"aria-required-parent\"],none:[]},{id:\"aria-roles\",selector:\"[role]\",tags:[\"cat.aria\",\"wcag2a\",\"wcag131\",\"wcag411\",\"wcag412\"],all:[],any:[],none:[\"invalidrole\",\"abstractrole\"]},{id:\"aria-valid-attr-value\",matches:function(a,b){var c=/^aria-/;if(a.hasAttributes())for(var d=a.attributes,e=0,f=d.length;e<f;e++)if(c.test(d[e].name))return!0;return!1},tags:[\"cat.aria\",\"wcag2a\",\"wcag131\",\"wcag411\",\"wcag412\"],all:[{options:[],id:\"aria-valid-attr-value\"},\"aria-errormessage\"],any:[],none:[]},{id:\"aria-valid-attr\",matches:function(a,b){var c=/^aria-/;if(a.hasAttributes())for(var d=a.attributes,e=0,f=d.length;e<f;e++)if(c.test(d[e].name))return!0;return!1},tags:[\"cat.aria\",\"wcag2a\",\"wcag411\"],all:[],any:[{options:[],id:\"aria-valid-attr\"}],none:[]},{id:\"audio-caption\",selector:\"audio\",excludeHidden:!1,tags:[\"cat.time-and-media\",\"wcag2a\",\"wcag121\",\"section508\",\"section508.22.a\"],all:[],any:[],none:[\"caption\"]},{id:\"blink\",selector:\"blink\",excludeHidden:!1,tags:[\"cat.time-and-media\",\"wcag2a\",\"wcag222\",\"section508\",\"section508.22.j\"],all:[],any:[],none:[\"is-on-screen\"]},{id:\"button-name\",selector:'button, [role=\"button\"], input[type=\"button\"], input[type=\"submit\"], input[type=\"reset\"]',tags:[\"cat.name-role-value\",\"wcag2a\",\"wcag412\",\"section508\",\"section508.22.a\"],all:[],any:[\"non-empty-if-present\",\"non-empty-value\",\"button-has-visible-text\",\"aria-label\",\"aria-labelledby\",\"role-presentation\",\"role-none\"],none:[\"focusable-no-name\"]},{id:\"bypass\",selector:\"html\",pageLevel:!0,matches:function(a,b){return!!a.querySelector(\"a[href]\")},tags:[\"cat.keyboard\",\"wcag2a\",\"wcag241\",\"section508\",\"section508.22.o\"],all:[],any:[\"internal-link-present\",\"header-present\",\"landmark\"],none:[]},{id:\"checkboxgroup\",selector:\"input[type=checkbox][name]\",tags:[\"cat.forms\",\"best-practice\"],all:[],any:[\"group-labelledby\",\"fieldset\"],none:[]},{id:\"color-contrast\",matches:function(a,b){var c=a.nodeName.toUpperCase(),d=a.type;if(\"true\"===a.getAttribute(\"aria-disabled\")||axe.commons.dom.findUpVirtual(b,'[aria-disabled=\"true\"]'))return!1;if(\"INPUT\"===c)return-1===[\"hidden\",\"range\",\"color\",\"checkbox\",\"radio\",\"image\"].indexOf(d)&&!a.disabled;if(\"SELECT\"===c)return!!a.options.length&&!a.disabled;if(\"TEXTAREA\"===c)return!a.disabled;if(\"OPTION\"===c)return!1;if(\"BUTTON\"===c&&a.disabled||axe.commons.dom.findUpVirtual(b,\"button[disabled]\"))return!1;if(\"FIELDSET\"===c&&a.disabled||axe.commons.dom.findUpVirtual(b,\"fieldset[disabled]\"))return!1;var e=axe.commons.dom.findUpVirtual(b,\"label\");if(\"LABEL\"===c||e){var f=a,g=b;e&&(f=e,g=axe.utils.getNodeFromTree(axe._tree[0],e));var h=axe.commons.dom.getRootNode(f),i=f.htmlFor&&h.getElementById(f.htmlFor);if(i&&i.disabled)return!1;var i=axe.utils.querySelectorAll(g,'input:not([type=\"hidden\"]):not([type=\"image\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]), select, textarea');if(i.length&&i[0].actualNode.disabled)return!1}if(a.getAttribute(\"id\")){var j=axe.commons.utils.escapeSelector(a.getAttribute(\"id\")),k=axe.commons.dom.getRootNode(a),i=k.querySelector(\"[aria-labelledby~=\"+j+\"]\");if(i&&i.disabled)return!1}if(\"\"===axe.commons.text.visibleVirtual(b,!1,!0))return!1;var l,m,n=document.createRange(),o=b.children,p=o.length;for(m=0;m<p;m++)l=o[m],3===l.actualNode.nodeType&&\"\"!==axe.commons.text.sanitize(l.actualNode.nodeValue)&&n.selectNodeContents(l.actualNode);var q=n.getClientRects();for(p=q.length,m=0;m<p;m++)if(axe.commons.dom.visuallyOverlaps(q[m],a))return!0;return!1},excludeHidden:!1,options:{noScroll:!1},tags:[\"cat.color\",\"wcag2aa\",\"wcag143\"],all:[],any:[\"color-contrast\"],none:[]},{id:\"definition-list\",selector:\"dl\",matches:function(a,b){return!a.getAttribute(\"role\")},tags:[\"cat.structure\",\"wcag2a\",\"wcag131\"],all:[],any:[],none:[\"structured-dlitems\",\"only-dlitems\"]},{id:\"dlitem\",selector:\"dd, dt\",matches:function(a,b){return!a.getAttribute(\"role\")},tags:[\"cat.structure\",\"wcag2a\",\"wcag131\"],all:[],any:[\"dlitem\"],none:[]},{id:\"document-title\",selector:\"html\",matches:function(a,b){return a.ownerDocument.defaultView.self===a.ownerDocument.defaultView.top},tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag242\"],all:[],any:[\"doc-has-title\"],none:[]},{id:\"duplicate-id\",selector:\"[id]\",excludeHidden:!1,tags:[\"cat.parsing\",\"wcag2a\",\"wcag411\"],all:[],any:[\"duplicate-id\"],none:[]},{id:\"empty-heading\",selector:'h1, h2, h3, h4, h5, h6, [role=\"heading\"]',matches:function(a,b){var c=void 0;return a.hasAttribute(\"role\")&&(c=a.getAttribute(\"role\").split(/\\s+/i).filter(axe.commons.aria.isValidRole)),c&&c.length>0?c.includes(\"heading\"):\"heading\"===axe.commons.aria.implicitRole(a)},tags:[\"cat.name-role-value\",\"best-practice\"],all:[],any:[\"has-visible-text\"],none:[]},{id:\"focus-order-semantics\",selector:\"div, h1, h2, h3, h4, h5, h6, [role=heading], p, span\",matches:function(a,b){return axe.commons.dom.insertedIntoFocusOrder(a)},tags:[\"cat.keyboard\",\"best-practice\",\"experimental\"],all:[],any:[{options:[],id:\"has-widget-role\"},{options:[],id:\"valid-scrollable-semantics\"}],none:[]},{id:\"frame-title-unique\",selector:\"frame[title], iframe[title]\",matches:function(a,b){var c=a.getAttribute(\"title\");return!!(c?axe.commons.text.sanitize(c).trim():\"\")},tags:[\"cat.text-alternatives\",\"best-practice\"],all:[],any:[],none:[\"unique-frame-title\"]},{id:\"frame-title\",selector:\"frame, iframe\",tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag241\",\"section508\",\"section508.22.i\"],all:[],any:[\"aria-label\",\"aria-labelledby\",\"non-empty-title\",\"role-presentation\",\"role-none\"],none:[]},{id:\"heading-order\",selector:\"h1, h2, h3, h4, h5, h6, [role=heading]\",matches:function(a,b){var c=void 0;return a.hasAttribute(\"role\")&&(c=a.getAttribute(\"role\").split(/\\s+/i).filter(axe.commons.aria.isValidRole)),c&&c.length>0?c.includes(\"heading\"):\"heading\"===axe.commons.aria.implicitRole(a)},tags:[\"cat.semantics\",\"best-practice\"],all:[],any:[\"heading-order\"],none:[]},{id:\"hidden-content\",selector:\"*\",excludeHidden:!1,tags:[\"experimental\",\"review-item\"],all:[],any:[\"hidden-content\"],none:[]},{id:\"html-has-lang\",selector:\"html\",tags:[\"cat.language\",\"wcag2a\",\"wcag311\"],all:[],any:[\"has-lang\"],none:[]},{id:\"html-lang-valid\",selector:\"html[lang]\",tags:[\"cat.language\",\"wcag2a\",\"wcag311\"],all:[],any:[],none:[\"valid-lang\"]},{id:\"image-alt\",selector:\"img, [role='img']:not(svg)\",tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag111\",\"section508\",\"section508.22.a\"],all:[],any:[\"has-alt\",\"aria-label\",\"aria-labelledby\",\"non-empty-title\",\"role-presentation\",\"role-none\"],none:[]},{id:\"image-redundant-alt\",selector:'button, [role=\"button\"], a[href], p, li, td, th',tags:[\"cat.text-alternatives\",\"best-practice\"],all:[],any:[],none:[\"duplicate-img-label\"]},{id:\"input-image-alt\",selector:'input[type=\"image\"]',tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag111\",\"section508\",\"section508.22.a\"],all:[],any:[\"non-empty-alt\",\"aria-label\",\"aria-labelledby\",\"non-empty-title\"],none:[]},{id:\"label-title-only\",selector:\"input, select, textarea\",matches:function(a,b){return\"input\"!==a.nodeName.toLowerCase()||!1===a.hasAttribute(\"type\")||!1===[\"hidden\",\"image\",\"button\",\"submit\",\"reset\"].includes(a.getAttribute(\"type\").toLowerCase())},tags:[\"cat.forms\",\"best-practice\"],all:[],any:[],none:[\"title-only\"]},{id:\"label\",selector:\"input, select, textarea\",matches:function(a,b){return\"input\"!==a.nodeName.toLowerCase()||!1===a.hasAttribute(\"type\")||!1===[\"hidden\",\"image\",\"button\",\"submit\",\"reset\"].includes(a.getAttribute(\"type\").toLowerCase())},tags:[\"cat.forms\",\"wcag2a\",\"wcag332\",\"wcag131\",\"section508\",\"section508.22.n\"],all:[],any:[\"aria-label\",\"aria-labelledby\",\"implicit-label\",\"explicit-label\",\"non-empty-title\"],none:[\"help-same-as-label\",\"multiple-label\"]},{id:\"landmark-main-is-top-level\",selector:\"main, [role=main]\",tags:[\"best-practice\"],all:[],any:[\"main-is-top-level\"],none:[]},{id:\"landmark-one-main\",selector:\"html\",tags:[\"best-practice\"],all:[\"has-at-least-one-main\",\"has-no-more-than-one-main\"],any:[],none:[]},{id:\"layout-table\",selector:\"table\",matches:function(a,b){return!axe.commons.table.isDataTable(a)},tags:[\"cat.semantics\",\"wcag2a\",\"wcag131\"],all:[],any:[],none:[\"has-th\",\"has-caption\",\"has-summary\"]},{id:\"link-in-text-block\",selector:\"a[href], [role=link]\",matches:function(a,b){var c=axe.commons.text.sanitize(a.textContent),d=a.getAttribute(\"role\");return(!d||\"link\"===d)&&(!!c&&(!!axe.commons.dom.isVisible(a,!1)&&axe.commons.dom.isInTextBlock(a)))},excludeHidden:!1,tags:[\"cat.color\",\"experimental\",\"wcag2a\",\"wcag141\"],all:[\"link-in-text-block\"],any:[],none:[]},{id:\"link-name\",selector:\"a[href], [role=link][href]\",matches:function(a,b){return\"button\"!==a.getAttribute(\"role\")},tags:[\"cat.name-role-value\",\"wcag2a\",\"wcag111\",\"wcag412\",\"wcag244\",\"section508\",\"section508.22.a\"],all:[],any:[\"has-visible-text\",\"aria-label\",\"aria-labelledby\",\"role-presentation\",\"role-none\"],none:[\"focusable-no-name\"]},{id:\"list\",selector:\"ul, ol\",matches:function(a,b){return!a.getAttribute(\"role\")},tags:[\"cat.structure\",\"wcag2a\",\"wcag131\"],all:[],any:[],none:[\"only-listitems\"]},{id:\"listitem\",selector:\"li\",matches:function(a,b){return!a.getAttribute(\"role\")},tags:[\"cat.structure\",\"wcag2a\",\"wcag131\"],all:[],any:[\"listitem\"],none:[]},{id:\"marquee\",selector:\"marquee\",excludeHidden:!1,tags:[\"cat.parsing\",\"wcag2a\",\"wcag222\"],all:[],any:[],none:[\"is-on-screen\"]},{id:\"meta-refresh\",selector:'meta[http-equiv=\"refresh\"]',excludeHidden:!1,tags:[\"cat.time\",\"wcag2a\",\"wcag2aaa\",\"wcag221\",\"wcag224\",\"wcag325\"],all:[],any:[\"meta-refresh\"],none:[]},{id:\"meta-viewport-large\",selector:'meta[name=\"viewport\"]',excludeHidden:!1,tags:[\"cat.sensory-and-visual-cues\",\"best-practice\"],all:[],any:[{options:{scaleMinimum:5,lowerBound:2},id:\"meta-viewport-large\"}],none:[]},{id:\"meta-viewport\",selector:'meta[name=\"viewport\"]',excludeHidden:!1,tags:[\"cat.sensory-and-visual-cues\",\"wcag2aa\",\"wcag144\"],all:[],any:[{options:{scaleMinimum:2},id:\"meta-viewport\"}],none:[]},{id:\"object-alt\",selector:\"object\",tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag111\",\"section508\",\"section508.22.a\"],all:[],any:[\"has-visible-text\",\"aria-label\",\"aria-labelledby\",\"non-empty-title\"],none:[]},{id:\"p-as-heading\",selector:\"p\",matches:function(a,b){var c=Array.from(a.parentNode.childNodes),d=a.textContent.trim(),e=/[.!?:;](?![.!?:;])/g;return!(0===d.length||(d.match(e)||[]).length>=2)&&0!==c.slice(c.indexOf(a)+1).filter(function(a){return\"P\"===a.nodeName.toUpperCase()&&\"\"!==a.textContent.trim()}).length},tags:[\"cat.semantics\",\"wcag2a\",\"wcag131\",\"experimental\"],all:[{options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]},id:\"p-as-heading\"}],any:[],none:[]},{id:\"radiogroup\",selector:\"input[type=radio][name]\",tags:[\"cat.forms\",\"best-practice\"],all:[],any:[\"group-labelledby\",\"fieldset\"],none:[]},{id:\"region\",selector:\"html\",pageLevel:!0,tags:[\"cat.keyboard\",\"best-practice\"],all:[],any:[\"region\"],none:[]},{id:\"scope-attr-valid\",selector:\"td[scope], th[scope]\",tags:[\"cat.tables\",\"best-practice\"],all:[\"html5-scope\",\"scope-value\"],any:[],none:[]},{id:\"server-side-image-map\",selector:\"img[ismap]\",tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag211\",\"section508\",\"section508.22.f\"],all:[],any:[],none:[\"exists\"]},{id:\"skip-link\",selector:\"a[href]\",matches:function(a,b){var c=a.getAttribute(\"href\");return\"#\"===c[0]&&c.length>1},tags:[\"cat.keyboard\",\"best-practice\"],all:[],any:[\"skip-link\"],none:[]},{id:\"tabindex\",selector:\"[tabindex]\",tags:[\"cat.keyboard\",\"best-practice\"],all:[],any:[\"tabindex\"],none:[]},{id:\"table-duplicate-name\",selector:\"table\",tags:[\"cat.tables\",\"best-practice\"],all:[],any:[],none:[\"same-caption-summary\"]},{id:\"table-fake-caption\",selector:\"table\",matches:function(a,b){return axe.commons.table.isDataTable(a)},tags:[\"cat.tables\",\"experimental\",\"wcag2a\",\"wcag131\",\"section508\",\"section508.22.g\"],all:[\"caption-faked\"],any:[],none:[]},{id:\"td-has-header\",selector:\"table\",matches:function(a,b){if(axe.commons.table.isDataTable(a)){var c=axe.commons.table.toArray(a);return c.length>=3&&c[0].length>=3&&c[1].length>=3&&c[2].length>=3}return!1},tags:[\"cat.tables\",\"experimental\",\"wcag2a\",\"wcag131\",\"section508\",\"section508.22.g\"],all:[\"td-has-header\"],any:[],none:[]},{id:\"td-headers-attr\",selector:\"table\",tags:[\"cat.tables\",\"wcag2a\",\"wcag131\",\"section508\",\"section508.22.g\"],all:[\"td-headers-attr\"],any:[],none:[]},{id:\"th-has-data-cells\",selector:\"table\",matches:function(a,b){return axe.commons.table.isDataTable(a)},tags:[\"cat.tables\",\"wcag2a\",\"wcag131\",\"section508\",\"section508.22.g\"],all:[\"th-has-data-cells\"],any:[],none:[]},{id:\"valid-lang\",selector:\"[lang], [xml\\\\:lang]\",matches:function(a,b){return\"html\"!==a.nodeName.toLowerCase()},tags:[\"cat.language\",\"wcag2aa\",\"wcag312\"],all:[],any:[],none:[\"valid-lang\"]},{id:\"video-caption\",selector:\"video\",excludeHidden:!1,tags:[\"cat.text-alternatives\",\"wcag2a\",\"wcag122\",\"wcag123\",\"section508\",\"section508.22.a\"],all:[],any:[],none:[\"caption\"]},{id:\"video-description\",selector:\"video\",excludeHidden:!1,tags:[\"cat.text-alternatives\",\"wcag2aa\",\"wcag125\",\"section508\",\"section508.22.b\"],all:[],any:[],none:[\"description\"]}],checks:[{id:\"abstractrole\",evaluate:function(a,b,c){return\"abstract\"===axe.commons.aria.getRoleType(a.getAttribute(\"role\"))}},{id:\"aria-allowed-attr\",evaluate:function(a,b,c){b=b||{};var d,e,f,g=[],h=a.getAttribute(\"role\"),i=a.attributes;if(h||(h=axe.commons.aria.implicitRole(a)),f=axe.commons.aria.allowedAttr(h),Array.isArray(b[h])&&(f=axe.utils.uniqueArray(b[h].concat(f))),h&&f)for(var j=0,k=i.length;j<k;j++)d=i[j],e=d.name,axe.commons.aria.validateAttr(e)&&!f.includes(e)&&g.push(e+'=\"'+d.nodeValue+'\"');return!g.length||(this.data(g),!1)}},{id:\"aria-hidden-body\",evaluate:function(a,b,c){return\"true\"!==a.getAttribute(\"aria-hidden\")}},{id:\"aria-errormessage\",evaluate:function(a,b,c){b=Array.isArray(b)?b:[];var d=a.getAttribute(\"aria-errormessage\"),e=a.hasAttribute(\"aria-errormessage\"),f=axe.commons.dom.getRootNode(a);return!(-1===b.indexOf(d)&&e&&!function(){var b=d&&f.getElementById(d);if(b)return\"alert\"===b.getAttribute(\"role\")||\"assertive\"===b.getAttribute(\"aria-live\")||axe.utils.tokenList(a.getAttribute(\"aria-describedby\")||\"\").indexOf(d)>-1}())||(this.data(d),!1)}},{id:\"has-widget-role\",evaluate:function(a,b,c){var d=a.getAttribute(\"role\");if(null===d)return!1;var e=axe.commons.aria.getRoleType(d);return\"widget\"===e||\"composite\"===e},options:[]},{id:\"invalidrole\",evaluate:function(a,b,c){return!axe.commons.aria.isValidRole(a.getAttribute(\"role\"))}},{id:\"aria-required-attr\",evaluate:function(a,b,c){b=b||{};var d=[];if(a.hasAttributes()){var e,f=a.getAttribute(\"role\"),g=axe.commons.aria.requiredAttr(f);if(Array.isArray(b[f])&&(g=axe.utils.uniqueArray(b[f],g)),f&&g)for(var h=0,i=g.length;h<i;h++)e=g[h],a.getAttribute(e)||d.push(e)}return!d.length||(this.data(d),!1)}},{id:\"aria-required-children\",evaluate:function(a,b,c){function d(a,b,c,d){if(null===a)return!1;var e=g(c),f=['[role=\"'+c+'\"]'];return e&&(f=f.concat(e)),f=f.join(\",\"),d?h(a,f)||!!axe.utils.querySelectorAll(b,f)[0]:!!axe.utils.querySelectorAll(b,f)[0]}function e(a,b){var c,e;for(c=0,e=a.length;c<e;c++)if(null!==a[c]){var f=axe.utils.getNodeFromTree(axe._tree[0],a[c]);if(d(a[c],f,b,!0))return!0}return!1}var f=axe.commons.aria.requiredOwned,g=axe.commons.aria.implicitNodes,h=axe.commons.utils.matchesSelector,i=axe.commons.dom.idrefs,j=a.getAttribute(\"role\"),k=f(j);if(!k)return!0;var l=!1,m=k.one;if(!m){var l=!0;m=k.all}var n=function(a,b,f,g){var h,j=b.length,k=[],l=i(a,\"aria-owns\");for(h=0;h<j;h++){var m=b[h];if(d(a,c,m)||e(l,m)){if(!f)return null}else f&&k.push(m)}if(\"combobox\"===g){var n=k.indexOf(\"textbox\"),o=[\"text\",\"search\",\"email\",\"url\",\"tel\"];n>=0&&\"INPUT\"===a.tagName&&o.includes(a.type)&&k.splice(n,1);var p=k.indexOf(\"listbox\"),q=a.getAttribute(\"aria-expanded\");p>=0&&(!q||\"false\"===q)&&k.splice(p,1)}return k.length?k:!f&&b.length?b:null}(a,m,l,j);return!n||(this.data(n),!1)}},{id:\"aria-required-parent\",evaluate:function(a,b,c){function d(a){return(axe.commons.aria.implicitNodes(a)||[]).concat('[role=\"'+a+'\"]').join(\",\")}function e(a,b,c){var e,f,g=a.actualNode.getAttribute(\"role\"),h=[];if(b||(b=axe.commons.aria.requiredContext(g)),!b)return null;for(e=0,f=b.length;e<f;e++){if(c&&axe.utils.matchesSelector(a.actualNode,d(b[e])))return null;if(axe.commons.dom.findUpVirtual(a,d(b[e])))return null;h.push(b[e])}return h}var f=e(c);if(!f)return!0;var g=function(a){for(var b=[],c=null;a;){if(a.getAttribute(\"id\")){var d=axe.commons.utils.escapeSelector(a.getAttribute(\"id\"));c=axe.commons.dom.getRootNode(a).querySelector(\"[aria-owns~=\"+d+\"]\"),c&&b.push(c)}a=a.parentElement}return b.length?b:null}(a);if(g)for(var h=0,i=g.length;h<i;h++)if(!(f=e(axe.utils.getNodeFromTree(axe._tree[0],g[h]),f,!0)))return!0;return this.data(f),!1}},{id:\"aria-valid-attr-value\",evaluate:function(a,b,c){b=Array.isArray(b)?b:[];for(var d,e,f=[],g=/^aria-/,h=a.attributes,i=[\"aria-errormessage\"],j=0,k=h.length;j<k;j++)d=h[j],e=d.name,i.includes(e)||-1===b.indexOf(e)&&g.test(e)&&!axe.commons.aria.validateAttrValue(a,e)&&f.push(e+'=\"'+d.nodeValue+'\"');return!f.length||(this.data(f),!1)},options:[]},{id:\"aria-valid-attr\",evaluate:function(a,b,c){b=Array.isArray(b)?b:[];for(var d,e=[],f=/^aria-/,g=a.attributes,h=0,i=g.length;h<i;h++)d=g[h].name,-1===b.indexOf(d)&&f.test(d)&&!axe.commons.aria.validateAttr(d)&&e.push(d);return!e.length||(this.data(e),!1)},options:[]},{id:\"valid-scrollable-semantics\",evaluate:function(a,b,c){function d(a){var b=a.tagName.toUpperCase();return f[b]||!1}function e(a){var b=a.getAttribute(\"role\");return!!b&&(g[b.toLowerCase()]||!1)}var f={ARTICLE:!0,ASIDE:!0,NAV:!0,SECTION:!0},g={banner:!1,complementary:!0,contentinfo:!0,form:!0,main:!0,navigation:!0,region:!0,search:!1};return function(a){return e(a)||d(a)}(a)},options:[]},{id:\"color-contrast\",evaluate:function(a,b,c){if(!axe.commons.dom.isVisible(a,!1))return!0;var d,e=!!(b||{}).noScroll,f=[],g=axe.commons.color.getBackgroundColor(a,f,e),h=axe.commons.color.getForegroundColor(a,e),i=window.getComputedStyle(a),j=parseFloat(i.getPropertyValue(\"font-size\")),k=i.getPropertyValue(\"font-weight\"),l=-1!==[\"bold\",\"bolder\",\"600\",\"700\",\"800\",\"900\"].indexOf(k),m=axe.commons.color.hasValidContrastRatio(g,h,j,l),n=Math.floor(100*m.contrastRatio)/100;null===g&&(d=axe.commons.color.incompleteData.get(\"bgColor\"));var o=!1;1===n&&(o=!0,d=axe.commons.color.incompleteData.set(\"bgColor\",\"equalRatio\"));var p={fgColor:h?h.toHexString():void 0,bgColor:g?g.toHexString():void 0,contrastRatio:m?n:void 0,fontSize:(72*j/96).toFixed(1)+\"pt\",fontWeight:l?\"bold\":\"normal\",missingData:d,expectedContrastRatio:m.expectedContrastRatio+\":1\"};return this.data(p),null===h||null===g||o?(d=null,axe.commons.color.incompleteData.clear(),void this.relatedNodes(f)):(m.isValid||this.relatedNodes(f),m.isValid)}},{id:\"link-in-text-block\",evaluate:function(a,b,c){function d(a,b){var c=a.getRelativeLuminance(),d=b.getRelativeLuminance();return(Math.max(c,d)+.05)/(Math.min(c,d)+.05)}function e(a){var b=window.getComputedStyle(a).getPropertyValue(\"display\");return-1!==i.indexOf(b)||\"table-\"===b.substr(0,6)}var f=axe.commons,g=f.color,h=f.dom,i=[\"block\",\"list-item\",\"table\",\"flex\",\"grid\",\"inline-block\"];if(e(a))return!1;for(var j=h.getComposedParent(a);1===j.nodeType&&!e(j);)j=h.getComposedParent(j);if(this.relatedNodes([j]),g.elementIsDistinct(a,j))return!0;var k,l;if(k=g.getForegroundColor(a),l=g.getForegroundColor(j),k&&l){var m=d(k,l);if(1===m)return!0;if(m>=3)return axe.commons.color.incompleteData.set(\"fgColor\",\"bgContrast\"),this.data({missingData:axe.commons.color.incompleteData.get(\"fgColor\")}),void axe.commons.color.incompleteData.clear();if(k=g.getBackgroundColor(a),l=g.getBackgroundColor(j),!k||!l||d(k,l)>=3){var n=void 0;return n=k&&l?\"bgContrast\":axe.commons.color.incompleteData.get(\"bgColor\"),axe.commons.color.incompleteData.set(\"fgColor\",n),this.data({missingData:axe.commons.color.incompleteData.get(\"fgColor\")}),void axe.commons.color.incompleteData.clear()}return!1}}},{id:\"fieldset\",evaluate:function(a,b,c){function d(a,b){return axe.commons.utils.toArray(a.querySelectorAll('select,textarea,button,input:not([name=\"'+b+'\"]):not([type=\"hidden\"])'))}function e(a,b){var c=a.firstElementChild;if(!c||\"LEGEND\"!==c.nodeName.toUpperCase())return i.relatedNodes([a]),h=\"no-legend\",!1;if(!axe.commons.text.accessibleText(c))return i.relatedNodes([c]),h=\"empty-legend\",!1;var e=d(a,b);return!e.length||(i.relatedNodes(e),h=\"mixed-inputs\",!1)}function f(a,b){var c=axe.commons.dom.idrefs(a,\"aria-labelledby\").some(function(a){return a&&axe.commons.text.accessibleText(a)}),e=a.getAttribute(\"aria-label\");if(!(c||e&&axe.commons.text.sanitize(e)))return i.relatedNodes(a),h=\"no-group-label\",!1;var f=d(a,b);return!f.length||(i.relatedNodes(f),h=\"group-mixed-inputs\",!1)}function g(a,b){return axe.commons.utils.toArray(a).filter(function(a){return a!==b})}var h,i=this,j={name:a.getAttribute(\"name\"),type:a.getAttribute(\"type\")},k=function(a){var b=axe.commons.utils.escapeSelector(a.actualNode.name),c=axe.commons.dom.getRootNode(a.actualNode),d=c.querySelectorAll('input[type=\"'+axe.commons.utils.escapeSelector(a.actualNode.type)+'\"][name=\"'+b+'\"]');if(d.length<2)return!0;var j=axe.commons.dom.findUpVirtual(a,\"fieldset\"),k=axe.commons.dom.findUpVirtual(a,'[role=\"group\"]'+(\"radio\"===a.actualNode.type?',[role=\"radiogroup\"]':\"\"));return k||j?j?e(j,b):f(k,b):(h=\"no-group\",i.relatedNodes(g(d,a.actualNode)),!1)}(c);return k||(j.failureCode=h),this.data(j),k},after:function(a,b){var c={};return a.filter(function(a){if(a.result)return!0;var b=a.data;if(b){if(c[b.type]=c[b.type]||{},!c[b.type][b.name])return c[b.type][b.name]=[b],!0;var d=c[b.type][b.name].some(function(a){return a.failureCode===b.failureCode});return d||c[b.type][b.name].push(b),!d}return!1})}},{id:\"group-labelledby\",evaluate:function(a,b,c){this.data({name:a.getAttribute(\"name\"),type:a.getAttribute(\"type\")});var d=axe.commons.dom.getRootNode(a),e=d.querySelectorAll('input[type=\"'+axe.commons.utils.escapeSelector(a.type)+'\"][name=\"'+axe.commons.utils.escapeSelector(a.name)+'\"]');return e.length<=1||0!==[].map.call(e,function(a){var b=a.getAttribute(\"aria-labelledby\");return b?b.split(/\\s+/):[]}).reduce(function(a,b){return a.filter(function(a){return b.includes(a)})}).filter(function(a){var b=d.getElementById(a);return b&&axe.commons.text.accessibleText(b,!0)}).length},after:function(a,b){var c={};return a.filter(function(a){var b=a.data;return!(!b||(c[b.type]=c[b.type]||{},c[b.type][b.name]))&&(c[b.type][b.name]=!0,!0)})}},{id:\"accesskeys\",evaluate:function(a,b,c){return axe.commons.dom.isVisible(a,!1)&&(this.data(a.getAttribute(\"accesskey\")),this.relatedNodes([a])),!0},after:function(a,b){var c={};return a.filter(function(a){if(!a.data)return!1;var b=a.data.toUpperCase();return c[b]?(c[b].relatedNodes.push(a.relatedNodes[0]),!1):(c[b]=a,a.relatedNodes=[],!0)}).map(function(a){return a.result=!!a.relatedNodes.length,a})}},{id:\"focusable-no-name\",evaluate:function(a,b,c){var d=a.getAttribute(\"tabindex\");return!!(axe.commons.dom.isFocusable(a)&&d>-1)&&!axe.commons.text.accessibleTextVirtual(c)}},{id:\"has-at-least-one-main\",evaluate:function(a,b,c){var d=axe.utils.querySelectorAll(c,\"main,[role=main]\");return this.data(!!d[0]),!!d[0]},after:function(a,b){for(var c=!1,d=0;d<a.length&&!c;d++)c=a[d].data;for(var d=0;d<a.length;d++)a[d].result=c;return a}},{id:\"has-no-more-than-one-main\",evaluate:function(a,b,c){return axe.utils.querySelectorAll(c,\"main,[role=main]\").length<=1}},{id:\"main-is-top-level\",evaluate:function(a,b,c){for(var d=axe.commons.aria.getRolesByType(\"landmark\"),e=axe.commons.dom.getComposedParent(a);e;){var f=e.getAttribute(\"role\");if(f||\"form\"===e.tagName.toLowerCase()||(f=axe.commons.aria.implicitRole(e)),f&&d.includes(f))return!1;e=axe.commons.dom.getComposedParent(e)}return!0}},{id:\"tabindex\",evaluate:function(a,b,c){return a.tabIndex<=0}},{id:\"duplicate-img-label\",evaluate:function(a,b,c){var d=axe.commons.text.visibleVirtual(c,!0).toLowerCase();return\"\"!==d&&axe.utils.querySelectorAll(c,\"img\").filter(function(a){var b=a.actualNode;return axe.commons.dom.isVisible(b)&&![\"none\",\"presentation\"].includes(b.getAttribute(\"role\"))}).some(function(a){return d===axe.commons.text.accessibleTextVirtual(a).toLowerCase()})}},{id:\"explicit-label\",evaluate:function(a,b,c){if(a.getAttribute(\"id\")){var d=axe.commons.dom.getRootNode(a),e=axe.commons.utils.escapeSelector(a.getAttribute(\"id\")),f=d.querySelector('label[for=\"'+e+'\"]');if(f)return!!axe.commons.text.accessibleText(f)}return!1}},{id:\"help-same-as-label\",evaluate:function(a,b,c){var d=axe.commons.text.labelVirtual(c),e=a.getAttribute(\"title\");if(!d)return!1;if(!e&&(e=\"\",a.getAttribute(\"aria-describedby\"))){e=axe.commons.dom.idrefs(a,\"aria-describedby\").map(function(a){return a?axe.commons.text.accessibleText(a):\"\"}).join(\"\")}return axe.commons.text.sanitize(e)===axe.commons.text.sanitize(d)},enabled:!1},{id:\"implicit-label\",evaluate:function(a,b,c){var d=axe.commons.dom.findUpVirtual(c,\"label\");return!!d&&!!axe.commons.text.accessibleTextVirtual(d)}},{id:\"multiple-label\",evaluate:function(a,b,c){var d=axe.commons.utils.escapeSelector(a.getAttribute(\"id\")),e=Array.from(document.querySelectorAll('label[for=\"'+d+'\"]')),f=a.parentNode;for(e.length&&(e=e.filter(function(a,b){if(0===b&&!axe.commons.dom.isVisible(a,!0)||axe.commons.dom.isVisible(a,!0))return a}));f;)\"LABEL\"===f.tagName&&-1===e.indexOf(f)&&e.push(f),f=f.parentNode;return this.relatedNodes(e),e.length>1}},{id:\"title-only\",evaluate:function(a,b,c){return!(axe.commons.text.labelVirtual(c)||!a.getAttribute(\"title\")&&!a.getAttribute(\"aria-describedby\"))}},{id:\"has-lang\",evaluate:function(a,b,c){return!!(a.getAttribute(\"lang\")||a.getAttribute(\"xml:lang\")||\"\").trim()}},{id:\"valid-lang\",evaluate:function(a,b,c){function d(a){return a.trim().split(\"-\")[0].toLowerCase()}var e,f;return e=(b||axe.commons.utils.validLangs()).map(d),f=[\"lang\",\"xml:lang\"].reduce(function(b,c){var f=a.getAttribute(c);if(\"string\"!=typeof f)return b;var g=d(f);return\"\"!==g&&-1===e.indexOf(g)&&b.push(c+'=\"'+a.getAttribute(c)+'\"'),b},[]),!!f.length&&(this.data(f),!0)}},{id:\"dlitem\",evaluate:function(a,b,c){return\"DL\"===axe.commons.dom.getComposedParent(a).nodeName.toUpperCase()}},{id:\"has-listitem\",evaluate:function(a,b,c){return c.children.every(function(a){return\"LI\"!==a.actualNode.nodeName.toUpperCase()})}},{id:\"listitem\",evaluate:function(a,b,c){var d=axe.commons.dom.getComposedParent(a);return[\"UL\",\"OL\"].includes(d.nodeName.toUpperCase())||\"list\"===(d.getAttribute(\"role\")||\"\").toLowerCase()}},{id:\"only-dlitems\",evaluate:function(a,b,c){var d=[],e=[\"STYLE\",\"META\",\"LINK\",\"MAP\",\"AREA\",\"SCRIPT\",\"DATALIST\",\"TEMPLATE\"],f=!1;return c.children.forEach(function(a){var b=a.actualNode,c=b.nodeName.toUpperCase();1===b.nodeType&&\"DT\"!==c&&\"DD\"!==c&&-1===e.indexOf(c)?d.push(b):3===b.nodeType&&\"\"!==b.nodeValue.trim()&&(f=!0)}),d.length&&this.relatedNodes(d),!!d.length||f}},{id:\"only-listitems\",evaluate:function(a,b,c){var d=[],e=[\"STYLE\",\"META\",\"LINK\",\"MAP\",\"AREA\",\"SCRIPT\",\"DATALIST\",\"TEMPLATE\"],f=!1;return c.children.forEach(function(a){var b=a.actualNode,c=b.nodeName.toUpperCase();1===b.nodeType&&\"LI\"!==c&&-1===e.indexOf(c)?d.push(b):3===b.nodeType&&\"\"!==b.nodeValue.trim()&&(f=!0)}),d.length&&this.relatedNodes(d),!!d.length||f}},{id:\"structured-dlitems\",\nevaluate:function(a,b,c){var d=c.children;if(!d||!d.length)return!1;for(var e,f=!1,g=!1,h=0;h<d.length;h++){if(e=d[h].actualNode.nodeName.toUpperCase(),\"DT\"===e&&(f=!0),f&&\"DD\"===e)return!1;\"DD\"===e&&(g=!0)}return f||g}},{id:\"caption\",evaluate:function(a,b,c){var d=axe.utils.querySelectorAll(c,\"track\");if(d.length)return!d.some(function(a){return\"captions\"===(a.actualNode.getAttribute(\"kind\")||\"\").toLowerCase()})}},{id:\"description\",evaluate:function(a,b,c){var d=axe.utils.querySelectorAll(c,\"track\");if(d.length){return!d.some(function(a){return\"descriptions\"===(a.actualNode.getAttribute(\"kind\")||\"\").toLowerCase()})}}},{id:\"meta-viewport-large\",evaluate:function(a,b,c){b=b||{};for(var d,e=a.getAttribute(\"content\")||\"\",f=e.split(/[;,]/),g={},h=b.scaleMinimum||2,i=b.lowerBound||!1,j=0,k=f.length;j<k;j++){d=f[j].split(\"=\");var l=d.shift().toLowerCase();l&&d.length&&(g[l.trim()]=d.shift().trim().toLowerCase())}return!!(i&&g[\"maximum-scale\"]&&parseFloat(g[\"maximum-scale\"])<i)||!(!i&&\"no\"===g[\"user-scalable\"])&&!(g[\"maximum-scale\"]&&parseFloat(g[\"maximum-scale\"])<h)},options:{scaleMinimum:5,lowerBound:2}},{id:\"meta-viewport\",evaluate:function(a,b,c){b=b||{};for(var d,e=a.getAttribute(\"content\")||\"\",f=e.split(/[;,]/),g={},h=b.scaleMinimum||2,i=b.lowerBound||!1,j=0,k=f.length;j<k;j++){d=f[j].split(\"=\");var l=d.shift().toLowerCase();l&&d.length&&(g[l.trim()]=d.shift().trim().toLowerCase())}return!!(i&&g[\"maximum-scale\"]&&parseFloat(g[\"maximum-scale\"])<i)||!(!i&&\"no\"===g[\"user-scalable\"])&&!(g[\"maximum-scale\"]&&parseFloat(g[\"maximum-scale\"])<h)},options:{scaleMinimum:2}},{id:\"header-present\",evaluate:function(a,b,c){return!!axe.utils.querySelectorAll(c,'h1, h2, h3, h4, h5, h6, [role=\"heading\"]')[0]}},{id:\"heading-order\",evaluate:function(a,b,c){var d=a.getAttribute(\"aria-level\");if(null!==d)return this.data(parseInt(d,10)),!0;var e=a.tagName.match(/H(\\d)/);return!e||(this.data(parseInt(e[1],10)),!0)},after:function(a,b){if(a.length<2)return a;for(var c=a[0].data,d=1;d<a.length;d++)a[d].result&&a[d].data>c+1&&(a[d].result=!1),c=a[d].data;return a}},{id:\"internal-link-present\",evaluate:function(a,b,c){return axe.utils.querySelectorAll(c,\"a[href]\").some(function(a){return\"#\"===a.actualNode.getAttribute(\"href\")[0]})}},{id:\"landmark\",evaluate:function(a,b,c){return axe.utils.querySelectorAll(c,'main, [role=\"main\"]').length>0}},{id:\"meta-refresh\",evaluate:function(a,b,c){var d=a.getAttribute(\"content\")||\"\",e=d.split(/[;,]/);return\"\"===d||\"0\"===e[0]}},{id:\"p-as-heading\",evaluate:function(a,b,c){function d(a){for(var b=a,c=a.textContent.trim(),d=c;d===c&&void 0!==b;){var e=-1;if(a=b,0===a.children.length)return a;do{e++,d=a.children[e].textContent.trim()}while(\"\"===d&&e+1<a.children.length);b=a.children[e]}return a}function e(a){switch(a){case\"lighter\":return 100;case\"normal\":return 400;case\"bold\":return 700;case\"bolder\":return 900}return a=parseInt(a),isNaN(a)?400:a}function f(a){var b=window.getComputedStyle(d(a));return{fontWeight:e(b.getPropertyValue(\"font-weight\")),fontSize:parseInt(b.getPropertyValue(\"font-size\")),isItalic:\"italic\"===b.getPropertyValue(\"font-style\")}}function g(a,b,c){return c.reduce(function(c,d){return c||(!d.size||a.fontSize/d.size>b.fontSize)&&(!d.weight||a.fontWeight-d.weight>b.fontWeight)&&(!d.italic||a.isItalic&&!b.isItalic)},!1)}var h=Array.from(a.parentNode.children),i=h.indexOf(a);b=b||{};var j=b.margins||[],k=h.slice(i+1).find(function(a){return\"P\"===a.nodeName.toUpperCase()}),l=h.slice(0,i).reverse().find(function(a){return\"P\"===a.nodeName.toUpperCase()}),m=f(a),n=k?f(k):null,o=l?f(l):null;if(!n||!g(m,n,j))return!0;var p=axe.commons.dom.findUpVirtual(c,\"blockquote\");return!!(p&&\"BLOCKQUOTE\"===p.nodeName.toUpperCase()||o&&!g(m,o,j))&&void 0},options:{margins:[{weight:150,italic:!0},{weight:150,size:1.15},{italic:!0,size:1.15},{size:1.4}]}},{id:\"region\",evaluate:function(a,b,c){function d(a){return j&&j===a}function e(a){return a.hasAttribute(\"role\")?k.includes(a.getAttribute(\"role\").toLowerCase()):l.some(function(b){return axe.utils.matchesSelector(a,b)})}function f(a){var b=a.actualNode;return e(b)||d(b)||!h.isVisible(b,!0)?[]:h.hasContent(b,!0)?[b]:a.children.filter(function(a){return 1===a.actualNode.nodeType}).map(f).reduce(function(a,b){return a.concat(b)},[])}var g=axe.commons,h=g.dom,i=g.aria,j=function(a){var b=axe.utils.querySelectorAll(a,\"a[href]\")[0];if(b&&axe.commons.dom.getElementByReference(b.actualNode,\"href\"))return b.actualNode}(c),k=i.getRolesByType(\"landmark\"),l=k.reduce(function(a,b){return a.concat(i.implicitNodes(b))},[]).filter(function(a){return null!==a}),m=f(c);return this.relatedNodes(m),0===m.length},after:function(a,b){return[a[0]]}},{id:\"skip-link\",evaluate:function(a,b,c){var d=axe.commons.dom.getElementByReference(a,\"href\");return!!d&&(axe.commons.dom.isVisible(d,!0)||void 0)}},{id:\"unique-frame-title\",evaluate:function(a,b,c){var d=axe.commons.text.sanitize(a.title).trim().toLowerCase();return this.data(d),!0},after:function(a,b){var c={};return a.forEach(function(a){c[a.data]=void 0!==c[a.data]?++c[a.data]:0}),a.forEach(function(a){a.result=!!c[a.data]}),a}},{id:\"aria-label\",evaluate:function(a,b,c){var d=a.getAttribute(\"aria-label\");return!!(d?axe.commons.text.sanitize(d).trim():\"\")}},{id:\"aria-labelledby\",evaluate:function(a,b,c){return(0,axe.commons.dom.idrefs)(a,\"aria-labelledby\").some(function(a){return a&&axe.commons.text.accessibleText(a,!0)})}},{id:\"button-has-visible-text\",evaluate:function(a,b,c){var d=a.nodeName.toUpperCase(),e=a.getAttribute(\"role\"),f=void 0;return(\"BUTTON\"===d||\"button\"===e&&\"INPUT\"!==d)&&(f=axe.commons.text.accessibleTextVirtual(c),this.data(f),!!f)}},{id:\"doc-has-title\",evaluate:function(a,b,c){var d=document.title;return!!(d?axe.commons.text.sanitize(d).trim():\"\")}},{id:\"duplicate-id\",evaluate:function(a,b,c){var d=a.getAttribute(\"id\").trim();if(!d)return!0;var e=axe.commons.dom.getRootNode(a),f=Array.from(e.querySelectorAll('[id=\"'+axe.commons.utils.escapeSelector(d)+'\"]')).filter(function(b){return b!==a});return f.length&&this.relatedNodes(f),this.data(d),0===f.length},after:function(a,b){var c=[];return a.filter(function(a){return-1===c.indexOf(a.data)&&(c.push(a.data),!0)})}},{id:\"exists\",evaluate:function(a,b,c){return!0}},{id:\"has-alt\",evaluate:function(a,b,c){var d=a.nodeName.toLowerCase();return a.hasAttribute(\"alt\")&&(\"img\"===d||\"input\"===d||\"area\"===d)}},{id:\"has-visible-text\",evaluate:function(a,b,c){return axe.commons.text.accessibleTextVirtual(c).length>0}},{id:\"is-on-screen\",evaluate:function(a,b,c){return axe.commons.dom.isVisible(a,!1)&&!axe.commons.dom.isOffscreen(a)}},{id:\"non-empty-alt\",evaluate:function(a,b,c){var d=a.getAttribute(\"alt\");return!!(d?axe.commons.text.sanitize(d).trim():\"\")}},{id:\"non-empty-if-present\",evaluate:function(a,b,c){var d=a.nodeName.toUpperCase(),e=(a.getAttribute(\"type\")||\"\").toLowerCase(),f=a.getAttribute(\"value\");return this.data(f),!(\"INPUT\"!==d||![\"submit\",\"reset\"].includes(e))&&null===f}},{id:\"non-empty-title\",evaluate:function(a,b,c){var d=a.getAttribute(\"title\");return!!(d?axe.commons.text.sanitize(d).trim():\"\")}},{id:\"non-empty-value\",evaluate:function(a,b,c){var d=a.getAttribute(\"value\");return!!(d?axe.commons.text.sanitize(d).trim():\"\")}},{id:\"role-none\",evaluate:function(a,b,c){return\"none\"===a.getAttribute(\"role\")}},{id:\"role-presentation\",evaluate:function(a,b,c){return\"presentation\"===a.getAttribute(\"role\")}},{id:\"caption-faked\",evaluate:function(a,b,c){var d=axe.commons.table.toGrid(a),e=d[0];return d.length<=1||e.length<=1||a.rows.length<=1||e.reduce(function(a,b,c){return a||b!==e[c+1]&&void 0!==e[c+1]},!1)}},{id:\"has-caption\",evaluate:function(a,b,c){return!!a.caption}},{id:\"has-summary\",evaluate:function(a,b,c){return!!a.summary}},{id:\"has-th\",evaluate:function(a,b,c){for(var d,e,f=[],g=0,h=a.rows.length;g<h;g++){d=a.rows[g];for(var i=0,j=d.cells.length;i<j;i++)e=d.cells[i],\"TH\"!==e.nodeName.toUpperCase()&&-1===[\"rowheader\",\"columnheader\"].indexOf(e.getAttribute(\"role\"))||f.push(e)}return!!f.length&&(this.relatedNodes(f),!0)}},{id:\"html5-scope\",evaluate:function(a,b,c){return!axe.commons.dom.isHTML5(document)||\"TH\"===a.nodeName.toUpperCase()}},{id:\"same-caption-summary\",evaluate:function(a,b,c){return!(!a.summary||!a.caption)&&a.summary===axe.commons.text.accessibleText(a.caption)}},{id:\"scope-value\",evaluate:function(a,b,c){b=b||{};var d=a.getAttribute(\"scope\").toLowerCase();return-1!==([\"row\",\"col\",\"rowgroup\",\"colgroup\"]||b.values).indexOf(d)}},{id:\"td-has-header\",evaluate:function(a,b,c){var d=axe.commons.table,e=[];return d.getAllCells(a).forEach(function(a){if(axe.commons.dom.hasContent(a)&&d.isDataCell(a)&&!axe.commons.aria.label(a)){var b=d.getHeaders(a);(b=b.reduce(function(a,b){return a||null!==b&&!!axe.commons.dom.hasContent(b)},!1))||e.push(a)}}),!e.length||(this.relatedNodes(e),!1)}},{id:\"td-headers-attr\",evaluate:function(a,b,c){for(var d=[],e=0,f=a.rows.length;e<f;e++)for(var g=a.rows[e],h=0,i=g.cells.length;h<i;h++)d.push(g.cells[h]);var j=d.reduce(function(a,b){return b.getAttribute(\"id\")&&a.push(b.getAttribute(\"id\")),a},[]),k=d.reduce(function(a,b){var c,d,e=(b.getAttribute(\"headers\")||\"\").split(/\\s/).reduce(function(a,b){return b=b.trim(),b&&a.push(b),a},[]);return 0!==e.length&&(b.getAttribute(\"id\")&&(c=-1!==e.indexOf(b.getAttribute(\"id\").trim())),d=e.reduce(function(a,b){return a||-1===j.indexOf(b)},!1),(c||d)&&a.push(b)),a},[]);return!(k.length>0)||(this.relatedNodes(k),!1)}},{id:\"th-has-data-cells\",evaluate:function(a,b,c){var d=axe.commons.table,e=d.getAllCells(a),f=this,g=[];e.forEach(function(a){var b=a.getAttribute(\"headers\");b&&(g=g.concat(b.split(/\\s+/)));var c=a.getAttribute(\"aria-labelledby\");c&&(g=g.concat(c.split(/\\s+/)))});var h=e.filter(function(a){return\"\"!==axe.commons.text.sanitize(a.textContent)&&(\"TH\"===a.nodeName.toUpperCase()||-1!==[\"rowheader\",\"columnheader\"].indexOf(a.getAttribute(\"role\")))}),i=d.toGrid(a);return!!h.reduce(function(a,b){if(b.getAttribute(\"id\")&&g.includes(b.getAttribute(\"id\")))return!!a||a;var c=!1,e=d.getCellPosition(b,i);return d.isColumnHeader(b)&&(c=d.traverse(\"down\",e,i).reduce(function(a,b){return a||axe.commons.dom.hasContent(b)&&!d.isColumnHeader(b)},!1)),!c&&d.isRowHeader(b)&&(c=d.traverse(\"right\",e,i).reduce(function(a,b){return a||axe.commons.dom.hasContent(b)&&!d.isRowHeader(b)},!1)),c||f.relatedNodes(b),a&&c},!0)||void 0}},{id:\"hidden-content\",evaluate:function(a,b,c){if(![\"SCRIPT\",\"HEAD\",\"TITLE\",\"NOSCRIPT\",\"STYLE\",\"TEMPLATE\"].includes(a.tagName.toUpperCase())&&axe.commons.dom.hasContentVirtual(c)){var d=window.getComputedStyle(a);if(\"none\"===d.getPropertyValue(\"display\"))return;if(\"hidden\"===d.getPropertyValue(\"visibility\")){var e=axe.commons.dom.getComposedParent(a),f=e&&window.getComputedStyle(e);if(!f||\"hidden\"!==f.getPropertyValue(\"visibility\"))return}}return!0}}],commons:function(){function a(a){return a.getPropertyValue(\"font-family\").split(/[,;]/g).map(function(a){return a.trim().toLowerCase()})}function b(b,c){var d=window.getComputedStyle(b);if(\"none\"!==d.getPropertyValue(\"background-image\"))return!0;if([\"border-bottom\",\"border-top\",\"outline\"].reduce(function(a,b){var c=new C.Color;return c.parseRgbString(d.getPropertyValue(b+\"-color\")),a||\"none\"!==d.getPropertyValue(b+\"-style\")&&parseFloat(d.getPropertyValue(b+\"-width\"))>0&&0!==c.alpha},!1))return!0;var e=window.getComputedStyle(c);if(a(d)[0]!==a(e)[0])return!0;var f=[\"text-decoration-line\",\"text-decoration-style\",\"font-weight\",\"font-style\",\"font-size\"].reduce(function(a,b){return a||d.getPropertyValue(b)!==e.getPropertyValue(b)},!1),g=d.getPropertyValue(\"text-decoration\");return g.split(\" \").length<3&&(f=f||g!==e.getPropertyValue(\"text-decoration\")),f}function c(a,b){var c=a.nodeName.toUpperCase();if(G.includes(c))return axe.commons.color.incompleteData.set(\"bgColor\",\"imgNode\"),!0;b=b||window.getComputedStyle(a);var d=b.getPropertyValue(\"background-image\"),e=\"none\"!==d;if(e){var f=/gradient/.test(d);axe.commons.color.incompleteData.set(\"bgColor\",f?\"bgGradient\":\"bgImage\")}return e}function d(a,b){b=b||window.getComputedStyle(a);var c=new C.Color;if(c.parseRgbString(b.getPropertyValue(\"background-color\")),0!==c.alpha){var d=b.getPropertyValue(\"opacity\");c.alpha=c.alpha*d}return c}function e(a,b){var c=a.getClientRects()[0],d=D.shadowElementsFromPoint(c.left,c.top);if(d)for(var e=0;e<d.length;e++)if(d[e]!==a&&d[e]===b)return!0;return!1}function f(a,b,c){var f=0;if(a>0)for(var g=a-1;g>=0;g--){var h=b[g],i=window.getComputedStyle(h),j=d(h,i);j.alpha&&e(c,h)?f+=j.alpha:b.splice(g,1)}return f}function g(a,b,c){var d=a!==b&&!D.visuallyContains(a,b)&&0!==c.alpha;return d&&axe.commons.color.incompleteData.set(\"bgColor\",\"elmPartiallyObscured\"),d}function h(a,b){var c={TD:[\"TR\",\"TBODY\"],TH:[\"TR\",\"THEAD\"],INPUT:[\"LABEL\"]},d=a.map(function(a){return a.tagName}),e=a;for(var f in c)if(d.includes(f))for(var g in c[f])if(f.hasOwnProperty(g)){var h=axe.commons.dom.findUp(b,c[f][g]);if(h&&-1===a.indexOf(h)){var i=axe.commons.dom.visuallyOverlaps(b.getBoundingClientRect(),h);i&&e.splice(d.indexOf(f)+1,0,h)}b.tagName===c[f][g]&&-1===d.indexOf(b.tagName)&&e.splice(d.indexOf(f)+1,0,b)}return e}function i(a){var b=a.indexOf(document.body),e=a;return b>1&&!c(document.documentElement)&&0===d(document.documentElement).alpha&&(e.splice(b,1),e.splice(a.indexOf(document.documentElement),1),e.push(document.body)),e}function j(a){if(!H.includes(a.actualNode.nodeName.toUpperCase()))return a.children.some(function(a){var b=a.actualNode;return 3===b.nodeType&&b.nodeValue.trim()})}function k(a){return a.disabled||!D.isVisible(a,!0)&&\"AREA\"!==a.nodeName.toUpperCase()}function l(a,b){!1!==b(a.actualNode)&&a.children.forEach(function(a){return l(a,b)})}function m(a){var b=window.getComputedStyle(a).getPropertyValue(\"display\");return I.includes(b)||\"table-\"===b.substr(0,6)}function n(a){for(var b=D.getComposedParent(a);b&&!m(b);)b=D.getComposedParent(b);return axe.utils.getNodeFromTree(axe._tree[0],b)}function o(a,b){for(a=D.getComposedParent(a);a&&\"html\"!==a.nodeName.toLowerCase();){if(a.scrollTop&&(b+=a.scrollTop)>=0)return!1;a=D.getComposedParent(a)}return!0}function p(a){\"use strict\";var b=a.match(/rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/);return!(!b||5!==b.length)&&(b[3]-b[1]<=0&&b[2]-b[4]<=0)}function q(a){var b=void 0;return b=a.actualNode.id?D.findElmsInContext({elm:\"label\",attr:\"for\",value:a.actualNode.id,context:a.actualNode})[0]:D.findUpVirtual(a,\"label\"),axe.utils.getNodeFromTree(axe._tree[0],b)}function r(a){return[\"button\",\"reset\",\"submit\"].includes(a.actualNode.type.toLowerCase())}function s(a){var b=a.actualNode,c=b.nodeName.toUpperCase();return\"TEXTAREA\"===c||\"SELECT\"===c||\"INPUT\"===c&&\"hidden\"!==b.type.toLowerCase()}function t(a){return[\"BUTTON\",\"SUMMARY\",\"A\"].includes(a.actualNode.nodeName.toUpperCase())}function u(a){return[\"TABLE\",\"FIGURE\"].includes(a.actualNode.nodeName.toUpperCase())}function v(a){var b=a.actualNode,c=b.nodeName.toUpperCase();if(\"INPUT\"===c)return!b.hasAttribute(\"type\")||L.includes(b.type.toLowerCase())?b.value:\"\";if(\"SELECT\"===c){var d=b.options;if(d&&d.length){for(var e=\"\",f=0;f<d.length;f++)d[f].selected&&(e+=\" \"+d[f].text);return F.sanitize(e)}return\"\"}return\"TEXTAREA\"===c&&b.value?b.value:\"\"}function w(a,b){var c=a.actualNode,d=c.querySelector(b.toLowerCase());return d?F.accessibleText(d):\"\"}function x(a){if(!a)return!1;var b=a.actualNode;switch(b.nodeName.toUpperCase()){case\"SELECT\":case\"TEXTAREA\":return!0;case\"INPUT\":return!b.hasAttribute(\"type\")||L.includes(b.getAttribute(\"type\").toLowerCase());default:return!1}}function y(a){var b=a.actualNode,c=b.nodeName.toUpperCase();return[\"IMG\",\"APPLET\",\"AREA\"].includes(c)||\"INPUT\"===c&&\"image\"===b.type.toLowerCase()}function z(a){return!!F.sanitize(a)}var commons={},A=commons.aria={},B=A.lookupTable={};B.attributes={\"aria-activedescendant\":{type:\"idref\"},\"aria-atomic\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-autocomplete\":{type:\"nmtoken\",values:[\"inline\",\"list\",\"both\",\"none\"]},\"aria-busy\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-checked\":{type:\"nmtoken\",values:[\"true\",\"false\",\"mixed\",\"undefined\"]},\"aria-colcount\":{type:\"int\"},\"aria-colindex\":{type:\"int\"},\"aria-colspan\":{type:\"int\"},\"aria-controls\":{type:\"idrefs\"},\"aria-current\":{type:\"nmtoken\",values:[\"page\",\"step\",\"location\",\"date\",\"time\",\"true\",\"false\"]},\"aria-describedby\":{type:\"idrefs\"},\"aria-disabled\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-dropeffect\":{type:\"nmtokens\",values:[\"copy\",\"move\",\"reference\",\"execute\",\"popup\",\"none\"]},\"aria-errormessage\":{type:\"idref\"},\"aria-expanded\":{type:\"nmtoken\",values:[\"true\",\"false\",\"undefined\"]},\"aria-flowto\":{type:\"idrefs\"},\"aria-grabbed\":{type:\"nmtoken\",values:[\"true\",\"false\",\"undefined\"]},\"aria-haspopup\":{type:\"nmtoken\",values:[\"true\",\"false\",\"menu\",\"listbox\",\"tree\",\"grid\",\"dialog\"]},\"aria-hidden\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-invalid\":{type:\"nmtoken\",values:[\"true\",\"false\",\"spelling\",\"grammar\"]},\"aria-keyshortcuts\":{type:\"string\"},\"aria-label\":{type:\"string\"},\"aria-labelledby\":{type:\"idrefs\"},\"aria-level\":{type:\"int\"},\"aria-live\":{type:\"nmtoken\",values:[\"off\",\"polite\",\"assertive\"]},\"aria-modal\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-multiline\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-multiselectable\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-orientation\":{type:\"nmtoken\",values:[\"horizontal\",\"vertical\"]},\"aria-owns\":{type:\"idrefs\"},\"aria-placeholder\":{type:\"string\"},\"aria-posinset\":{type:\"int\"},\"aria-pressed\":{type:\"nmtoken\",values:[\"true\",\"false\",\"mixed\",\"undefined\"]},\"aria-readonly\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-relevant\":{type:\"nmtokens\",values:[\"additions\",\"removals\",\"text\",\"all\"]},\"aria-required\":{type:\"boolean\",values:[\"true\",\"false\"]},\"aria-rowcount\":{type:\"int\"},\"aria-rowindex\":{type:\"int\"},\"aria-rowspan\":{type:\"int\"},\"aria-selected\":{type:\"nmtoken\",values:[\"true\",\"false\",\"undefined\"]},\"aria-setsize\":{type:\"int\"},\"aria-sort\":{type:\"nmtoken\",values:[\"ascending\",\"descending\",\"other\",\"none\"]},\"aria-valuemax\":{type:\"decimal\"},\"aria-valuemin\":{type:\"decimal\"},\"aria-valuenow\":{type:\"decimal\"},\"aria-valuetext\":{type:\"string\"}},B.globalAttributes=[\"aria-atomic\",\"aria-busy\",\"aria-controls\",\"aria-current\",\"aria-describedby\",\"aria-disabled\",\"aria-dropeffect\",\"aria-flowto\",\"aria-grabbed\",\"aria-haspopup\",\"aria-hidden\",\"aria-invalid\",\"aria-keyshortcuts\",\"aria-label\",\"aria-labelledby\",\"aria-live\",\"aria-owns\",\"aria-relevant\"],B.role={alert:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},alertdialog:{type:\"widget\",attributes:{allowed:[\"aria-expanded\",\"aria-modal\"]},owned:null,nameFrom:[\"author\"],context:null},application:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},article:{type:\"structure\",attributes:{allowed:[\"aria-expanded\",\"aria-posinset\",\"aria-setsize\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"article\"]},banner:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"header\"]},button:{type:\"widget\",attributes:{allowed:[\"aria-expanded\",\"aria-pressed\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:[\"button\",'input[type=\"button\"]','input[type=\"image\"]','input[type=\"reset\"]','input[type=\"submit\"]',\"summary\"]},cell:{type:\"structure\",attributes:{allowed:[\"aria-colindex\",\"aria-colspan\",\"aria-rowindex\",\"aria-rowspan\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"row\"],implicit:[\"td\",\"th\"]},checkbox:{type:\"widget\",attributes:{allowed:[\"aria-checked\",\"aria-required\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:['input[type=\"checkbox\"]']},columnheader:{type:\"structure\",attributes:{allowed:[\"aria-colindex\",\"aria-colspan\",\"aria-expanded\",\"aria-rowindex\",\"aria-rowspan\",\"aria-required\",\"aria-readonly\",\"aria-selected\",\"aria-sort\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"row\"],implicit:[\"th\"]},combobox:{type:\"composite\",attributes:{allowed:[\"aria-expanded\",\"aria-autocomplete\",\"aria-required\",\"aria-activedescendant\",\"aria-orientation\"]},owned:{all:[\"listbox\",\"textbox\"]},nameFrom:[\"author\"],context:null},command:{nameFrom:[\"author\"],type:\"abstract\"},complementary:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"aside\"]},composite:{nameFrom:[\"author\"],type:\"abstract\"},contentinfo:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"footer\"]},definition:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"dd\",\"dfn\"]},dialog:{type:\"widget\",attributes:{allowed:[\"aria-expanded\",\"aria-modal\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"dialog\"]},directory:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null},document:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"body\"]},feed:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:{one:[\"article\"]},nameFrom:[\"author\"],context:null},form:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"form\"]},grid:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\",\"aria-colcount\",\"aria-level\",\"aria-multiselectable\",\"aria-readonly\",\"aria-rowcount\"]},owned:{one:[\"rowgroup\",\"row\"]},nameFrom:[\"author\"],context:null,implicit:[\"table\"]},gridcell:{type:\"widget\",attributes:{allowed:[\"aria-colindex\",\"aria-colspan\",\"aria-expanded\",\"aria-rowindex\",\"aria-rowspan\",\"aria-selected\",\"aria-readonly\",\"aria-required\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"row\"],implicit:[\"td\",\"th\"]},group:{type:\"structure\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"details\",\"optgroup\"]},heading:{type:\"structure\",attributes:{allowed:[\"aria-level\",\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"]},img:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"img\"]},input:{nameFrom:[\"author\"],type:\"abstract\"},landmark:{nameFrom:[\"author\"],type:\"abstract\"},link:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:[\"a[href]\"]},list:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:{all:[\"listitem\"]},nameFrom:[\"author\"],context:null,implicit:[\"ol\",\"ul\",\"dl\"]},listbox:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-multiselectable\",\"aria-required\",\"aria-expanded\",\"aria-orientation\"]},owned:{all:[\"option\"]},nameFrom:[\"author\"],context:null,implicit:[\"select\"]},listitem:{type:\"structure\",attributes:{allowed:[\"aria-level\",\"aria-posinset\",\"aria-setsize\",\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"list\"],implicit:[\"li\",\"dt\"]},log:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},main:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"main\"]},marquee:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},math:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"math\"]},menu:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\",\"aria-orientation\"]},owned:{one:[\"menuitem\",\"menuitemradio\",\"menuitemcheckbox\"]},nameFrom:[\"author\"],context:null,implicit:['menu[type=\"context\"]']},menubar:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\",\"aria-orientation\"]},owned:null,nameFrom:[\"author\"],context:null},menuitem:{type:\"widget\",attributes:{allowed:[\"aria-posinset\",\"aria-setsize\",\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"menu\",\"menubar\"],implicit:['menuitem[type=\"command\"]']},menuitemcheckbox:{type:\"widget\",attributes:{allowed:[\"aria-checked\",\"aria-posinset\",\"aria-setsize\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"menu\",\"menubar\"],implicit:['menuitem[type=\"checkbox\"]']},menuitemradio:{type:\"widget\",attributes:{allowed:[\"aria-checked\",\"aria-selected\",\"aria-posinset\",\"aria-setsize\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"menu\",\"menubar\"],implicit:['menuitem[type=\"radio\"]']},navigation:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"nav\"]},none:{type:\"structure\",attributes:null,owned:null,nameFrom:[\"author\"],context:null},note:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},option:{type:\"widget\",attributes:{allowed:[\"aria-selected\",\"aria-posinset\",\"aria-setsize\",\"aria-checked\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"listbox\"],implicit:[\"option\"]},presentation:{type:\"structure\",attributes:null,owned:null,nameFrom:[\"author\"],context:null},progressbar:{type:\"widget\",attributes:{allowed:[\"aria-valuetext\",\"aria-valuenow\",\"aria-valuemax\",\"aria-valuemin\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"progress\"]},radio:{type:\"widget\",attributes:{allowed:[\"aria-checked\",\"aria-selected\",\"aria-posinset\",\"aria-setsize\",\"aria-required\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:['input[type=\"radio\"]']},radiogroup:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-required\",\"aria-expanded\"]},owned:{all:[\"radio\"]},nameFrom:[\"author\"],context:null},range:{nameFrom:[\"author\"],type:\"abstract\"},region:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"section[aria-label]\",\"section[aria-labelledby]\",\"section[title]\"]},roletype:{type:\"abstract\"},row:{type:\"structure\",attributes:{allowed:[\"aria-activedescendant\",\"aria-colindex\",\"aria-expanded\",\"aria-level\",\"aria-selected\",\"aria-rowindex\"]},owned:{one:[\"cell\",\"columnheader\",\"rowheader\",\"gridcell\"]},nameFrom:[\"author\",\"contents\"],context:[\"rowgroup\",\"grid\",\"treegrid\",\"table\"],implicit:[\"tr\"]},rowgroup:{type:\"structure\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\"]},owned:{all:[\"row\"]},nameFrom:[\"author\",\"contents\"],context:[\"grid\",\"table\"],implicit:[\"tbody\",\"thead\",\"tfoot\"]},rowheader:{type:\"structure\",attributes:{allowed:[\"aria-colindex\",\"aria-colspan\",\"aria-expanded\",\"aria-rowindex\",\"aria-rowspan\",\"aria-required\",\"aria-readonly\",\"aria-selected\",\"aria-sort\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"row\"],implicit:[\"th\"]},scrollbar:{type:\"widget\",attributes:{required:[\"aria-controls\",\"aria-valuenow\",\"aria-valuemax\",\"aria-valuemin\"],allowed:[\"aria-valuetext\",\"aria-orientation\"]},owned:null,nameFrom:[\"author\"],context:null},search:{type:\"landmark\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},searchbox:{type:\"widget\",attributes:{allowed:[\"aria-activedescendant\",\"aria-autocomplete\",\"aria-multiline\",\"aria-readonly\",\"aria-required\",\"aria-placeholder\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:['input[type=\"search\"]']},section:{nameFrom:[\"author\",\"contents\"],type:\"abstract\"},sectionhead:{nameFrom:[\"author\",\"contents\"],type:\"abstract\"},select:{nameFrom:[\"author\"],type:\"abstract\"},separator:{type:\"structure\",attributes:{allowed:[\"aria-expanded\",\"aria-orientation\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"hr\"]},slider:{type:\"widget\",attributes:{allowed:[\"aria-valuetext\",\"aria-orientation\"],required:[\"aria-valuenow\",\"aria-valuemax\",\"aria-valuemin\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:['input[type=\"range\"]']},spinbutton:{type:\"widget\",attributes:{allowed:[\"aria-valuetext\",\"aria-required\"],required:[\"aria-valuenow\",\"aria-valuemax\",\"aria-valuemin\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:['input[type=\"number\"]']},status:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:[\"output\"]},structure:{type:\"abstract\"},switch:{type:\"widget\",attributes:{required:[\"aria-checked\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null},tab:{type:\"widget\",attributes:{allowed:[\"aria-selected\",\"aria-expanded\",\"aria-setsize\",\"aria-posinset\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"tablist\"]},table:{type:\"structure\",attributes:{allowed:[\"aria-colcount\",\"aria-rowcount\"]},owned:{one:[\"rowgroup\",\"row\"]},nameFrom:[\"author\"],context:null,implicit:[\"table\"]},tablist:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\",\"aria-level\",\"aria-multiselectable\",\"aria-orientation\"]},owned:{all:[\"tab\"]},nameFrom:[\"author\"],context:null},tabpanel:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},term:{type:\"structure\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null,implicit:[\"dt\"]},text:{type:\"structure\",owned:null,nameFrom:[\"author\",\"contents\"],context:null},textbox:{type:\"widget\",attributes:{allowed:[\"aria-activedescendant\",\"aria-autocomplete\",\"aria-multiline\",\"aria-readonly\",\"aria-required\",\"aria-placeholder\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:['input[type=\"text\"]','input[type=\"email\"]','input[type=\"password\"]','input[type=\"tel\"]','input[type=\"url\"]',\"input:not([type])\",\"textarea\"]},timer:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null},toolbar:{type:\"structure\",attributes:{allowed:[\"aria-activedescendant\",\"aria-expanded\"]},owned:null,nameFrom:[\"author\"],context:null,implicit:['menu[type=\"toolbar\"]']},tooltip:{type:\"widget\",attributes:{allowed:[\"aria-expanded\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:null},tree:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-multiselectable\",\"aria-required\",\"aria-expanded\",\"aria-orientation\"]},owned:{all:[\"treeitem\"]},nameFrom:[\"author\"],context:null},treegrid:{type:\"composite\",attributes:{allowed:[\"aria-activedescendant\",\"aria-colcount\",\"aria-expanded\",\"aria-level\",\"aria-multiselectable\",\"aria-readonly\",\"aria-required\",\"aria-rowcount\",\"aria-orientation\"]},owned:{one:[\"rowgroup\",\"row\"]},nameFrom:[\"author\"],context:null},treeitem:{type:\"widget\",attributes:{allowed:[\"aria-checked\",\"aria-selected\",\"aria-expanded\",\"aria-level\",\"aria-posinset\",\"aria-setsize\"]},owned:null,nameFrom:[\"author\",\"contents\"],context:[\"group\",\"tree\"]},widget:{type:\"abstract\"},window:{nameFrom:[\"author\"],type:\"abstract\"}};var C={};commons.color=C;var D=commons.dom={},E=commons.table={},F=commons.text={EdgeFormDefaults:{}};commons.utils=axe.utils;A.requiredAttr=function(a){\"use strict\";var b=A.lookupTable.role[a];return b&&b.attributes&&b.attributes.required||[]},A.allowedAttr=function(a){\"use strict\";var b=A.lookupTable.role[a],c=b&&b.attributes&&b.attributes.allowed||[],d=b&&b.attributes&&b.attributes.required||[];return c.concat(A.lookupTable.globalAttributes).concat(d)},A.validateAttr=function(a){\"use strict\";return!!A.lookupTable.attributes[a]},A.validateAttrValue=function(a,b){\"use strict\";var c,d,e=a.getAttribute(b),f=A.lookupTable.attributes[b],g=D.getRootNode(a);if(!f)return!0;switch(f.type){case\"boolean\":case\"nmtoken\":return\"string\"==typeof e&&-1!==f.values.indexOf(e.toLowerCase());case\"nmtokens\":return d=axe.utils.tokenList(e),d.reduce(function(a,b){return a&&-1!==f.values.indexOf(b)},0!==d.length);case\"idref\":return!(!e||!g.getElementById(e));case\"idrefs\":return d=axe.utils.tokenList(e),d.reduce(function(a,b){return!(!a||!g.getElementById(b))},0!==d.length);case\"string\":return!0;case\"decimal\":return!(!(c=e.match(/^[-+]?([0-9]*)\\.?([0-9]*)$/))||!c[1]&&!c[2]);case\"int\":return/^[-+]?[0-9]+$/.test(e)}},A.labelVirtual=function(a){var b=a.actualNode,c=void 0,d=void 0;return b.getAttribute(\"aria-labelledby\")&&(c=D.idrefs(b,\"aria-labelledby\"),d=c.map(function(a){\nvar b=axe.utils.getNodeFromTree(axe._tree[0],a);return b?F.visibleVirtual(b,!0):\"\"}).join(\" \").trim())?d:(d=b.getAttribute(\"aria-label\"),d&&(d=F.sanitize(d).trim())?d:null)},A.label=function(a){return a=axe.utils.getNodeFromTree(axe._tree[0],a),A.labelVirtual(a)},A.isValidRole=function(a){\"use strict\";return!!A.lookupTable.role[a]},A.getRolesWithNameFromContents=function(){return Object.keys(A.lookupTable.role).filter(function(a){return A.lookupTable.role[a].nameFrom&&-1!==A.lookupTable.role[a].nameFrom.indexOf(\"contents\")})},A.getRolesByType=function(a){return Object.keys(A.lookupTable.role).filter(function(b){return A.lookupTable.role[b].type===a})},A.getRoleType=function(a){var b=A.lookupTable.role[a];return b&&b.type||null},A.requiredOwned=function(a){\"use strict\";var b=null,c=A.lookupTable.role[a];return c&&(b=axe.utils.clone(c.owned)),b},A.requiredContext=function(a){\"use strict\";var b=null,c=A.lookupTable.role[a];return c&&(b=axe.utils.clone(c.context)),b},A.implicitNodes=function(a){\"use strict\";var b=null,c=A.lookupTable.role[a];return c&&c.implicit&&(b=axe.utils.clone(c.implicit)),b},A.implicitRole=function(a){\"use strict\";var b=function(b,c){var d=function(b){return axe.utils.matchesSelector(a,b)};return c.implicit&&c.implicit.some(d)&&b.push(c.name),b},c=Object.keys(A.lookupTable.role).map(function(a){var b=A.lookupTable.role[a];return{name:a,implicit:b&&b.implicit}}),d=c.reduce(b,[]);if(!d.length)return null;for(var e=a.attributes,f=[],g=0,h=e.length;g<h;g++){var i=e[g];i.name.match(/^aria-/)&&f.push(i.name)}return function(a,b){var c=function(a){return A.allowedAttr(a).reduce(function(a,c){return a+(b.indexOf(c)>-1?1:0)},0)};return a.map(function(a){return{score:c(a),name:a}}).sort(function(a,b){return b.score-a.score}).map(function(a){return a.name})}(d,f).shift()},C.Color=function(a,b,c,d){this.red=a,this.green=b,this.blue=c,this.alpha=d,this.toHexString=function(){var a=Math.round(this.red).toString(16),b=Math.round(this.green).toString(16),c=Math.round(this.blue).toString(16);return\"#\"+(this.red>15.5?a:\"0\"+a)+(this.green>15.5?b:\"0\"+b)+(this.blue>15.5?c:\"0\"+c)};var e=/^rgb\\((\\d+), (\\d+), (\\d+)\\)$/,f=/^rgba\\((\\d+), (\\d+), (\\d+), (\\d*(\\.\\d+)?)\\)/;this.parseRgbString=function(a){if(\"transparent\"===a)return this.red=0,this.green=0,this.blue=0,void(this.alpha=0);var b=a.match(e);return b?(this.red=parseInt(b[1],10),this.green=parseInt(b[2],10),this.blue=parseInt(b[3],10),void(this.alpha=1)):(b=a.match(f),b?(this.red=parseInt(b[1],10),this.green=parseInt(b[2],10),this.blue=parseInt(b[3],10),void(this.alpha=parseFloat(b[4]))):void 0)},this.getRelativeLuminance=function(){var a=this.red/255,b=this.green/255,c=this.blue/255;return.2126*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))+.7152*(b<=.03928?b/12.92:Math.pow((b+.055)/1.055,2.4))+.0722*(c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4))}},C.flattenColors=function(a,b){var c=a.alpha,d=(1-c)*b.red+c*a.red,e=(1-c)*b.green+c*a.green,f=(1-c)*b.blue+c*a.blue,g=a.alpha+b.alpha*(1-a.alpha);return new C.Color(d,e,f,g)},C.getContrast=function(a,b){if(!b||!a)return null;b.alpha<1&&(b=C.flattenColors(b,a));var c=a.getRelativeLuminance(),d=b.getRelativeLuminance();return(Math.max(d,c)+.05)/(Math.min(d,c)+.05)},C.hasValidContrastRatio=function(a,b,c,d){var e=C.getContrast(a,b),f=d&&Math.ceil(72*c)/96<14||!d&&Math.ceil(72*c)/96<18,g=f?4.5:3;return{isValid:e>g,contrastRatio:e,expectedContrastRatio:g}},C.elementIsDistinct=b;var G=[\"IMG\",\"CANVAS\",\"OBJECT\",\"IFRAME\",\"VIDEO\",\"SVG\"];C.getCoords=function(a){var b=void 0,c=void 0;if(!(a.left>window.innerWidth||a.top>window.innerHeight))return b=Math.min(Math.ceil(a.left+a.width/2),window.innerWidth-1),c=Math.min(Math.ceil(a.top+a.height/2),window.innerHeight-1),{x:b,y:c}},C.getRectStack=function(a){var b=C.getCoords(a.getBoundingClientRect());if(b){var c=D.shadowElementsFromPoint(b.x,b.y),d=Array.from(a.getClientRects());if(d&&d.length>1){var e=d.filter(function(a){return a.width&&a.width>0}).map(function(a){var b=C.getCoords(a);if(b)return D.shadowElementsFromPoint(b.x,b.y)});return e.splice(0,0,c),e}return[c]}return null},C.filteredRectStack=function(a){var b=C.getRectStack(a);if(b&&1===b.length)return b[0];if(b&&b.length>1){var c=b.shift(),d=void 0;return b.forEach(function(e,f){if(0!==f){var g=b[f-1],h=b[f];d=g.every(function(a,b){return a===h[b]})||c.includes(a)}}),d?b[0]:(axe.commons.color.incompleteData.set(\"bgColor\",\"elmPartiallyObscuring\"),null)}return axe.commons.color.incompleteData.set(\"bgColor\",\"outsideViewport\"),null},C.getBackgroundStack=function(a){var b=C.filteredRectStack(a);if(null===b)return null;b=h(b,a),b=D.reduceToElementsBelowFloating(b,a),b=i(b);var c=b.indexOf(a);return f(c,b,a)>=.99?(axe.commons.color.incompleteData.set(\"bgColor\",\"bgOverlap\"),null):-1!==c?b:null},C.getBackgroundColor=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!0!==(arguments.length>2&&void 0!==arguments[2]&&arguments[2])){var e=a.clientHeight-2>=2*window.innerHeight;a.scrollIntoView(e)}var f=[],h=C.getBackgroundStack(a);if((h||[]).some(function(e){var h=window.getComputedStyle(e),i=d(e,h);return g(a,e,i)||c(e,h)?(f=null,b.push(e),!0):0!==i.alpha&&(b.push(e),f.push(i),1===i.alpha)}),null!==f&&null!==h){f.push(new C.Color(255,255,255,1));return f.reduce(C.flattenColors)}return null},D.isOpaque=function(a){var b=window.getComputedStyle(a);return c(a,b)||1===d(a,b).alpha},C.getForegroundColor=function(a,b){var c=window.getComputedStyle(a),d=new C.Color;d.parseRgbString(c.getPropertyValue(\"color\"));var e=c.getPropertyValue(\"opacity\");if(d.alpha=d.alpha*e,1===d.alpha)return d;var f=C.getBackgroundColor(a,[],b);if(null===f){var g=axe.commons.color.incompleteData.get(\"bgColor\");return axe.commons.color.incompleteData.set(\"fgColor\",g),null}return C.flattenColors(d,f)},C.incompleteData=function(){var a={};return{set:function(b,c){if(\"string\"!=typeof b)throw new Error(\"Incomplete data: key must be a string\");return c&&(a[b]=c),a[b]},get:function(b){return a[b]},clear:function(){a={}}}}(),D.reduceToElementsBelowFloating=function(a,b){var c,d,e,f=[\"fixed\",\"sticky\"],g=[],h=!1;for(c=0;c<a.length;++c)d=a[c],d===b&&(h=!0),e=window.getComputedStyle(d),h||-1===f.indexOf(e.position)?g.push(d):g=[];return g},D.findElmsInContext=function(a){var b=a.context,c=a.value,d=a.attr,e=a.elm,f=void 0===e?\"\":e,g=void 0,h=axe.utils.escapeSelector(c);return g=9===b.nodeType||11===b.nodeType?b:D.getRootNode(b),Array.from(g.querySelectorAll(f+\"[\"+d+\"=\"+h+\"]\"))},D.findUp=function(a,b){return D.findUpVirtual(axe.utils.getNodeFromTree(axe._tree[0],a),b)},D.findUpVirtual=function(a,b){var c=void 0;if(c=a.actualNode,!a.shadowId&&\"function\"==typeof a.actualNode.closest){var d=a.actualNode.closest(b);return d||null}do{(c=c.assignedSlot?c.assignedSlot:c.parentNode)&&11===c.nodeType&&(c=c.host)}while(c&&!axe.utils.matchesSelector(c,b)&&c!==document.documentElement);return axe.utils.matchesSelector(c,b)?c:null},D.getComposedParent=function a(b){if(b.assignedSlot)return a(b.assignedSlot);if(b.parentNode){var c=b.parentNode;if(1===c.nodeType)return c;if(c.host)return c.host}return null},D.getElementByReference=function(a,b){var c=a.getAttribute(b);if(c&&\"#\"===c.charAt(0)){c=c.substring(1);var d=document.getElementById(c);if(d)return d;if(d=document.getElementsByName(c),d.length)return d[0]}return null},D.getElementCoordinates=function(a){\"use strict\";var b=D.getScrollOffset(document),c=b.left,d=b.top,e=a.getBoundingClientRect();return{top:e.top+d,right:e.right+c,bottom:e.bottom+d,left:e.left+c,width:e.right-e.left,height:e.bottom-e.top}},D.getRootNode=function(a){var b=a.getRootNode&&a.getRootNode()||document;return b===a&&(b=document),b},D.getScrollOffset=function(a){\"use strict\";if(!a.nodeType&&a.document&&(a=a.document),9===a.nodeType){var b=a.documentElement,c=a.body;return{left:b&&b.scrollLeft||c&&c.scrollLeft||0,top:b&&b.scrollTop||c&&c.scrollTop||0}}return{left:a.scrollLeft,top:a.scrollTop}},D.getViewportSize=function(a){\"use strict\";var b,c=a.document,d=c.documentElement;return a.innerWidth?{width:a.innerWidth,height:a.innerHeight}:d?{width:d.clientWidth,height:d.clientHeight}:(b=c.body,{width:b.clientWidth,height:b.clientHeight})};var H=[\"HEAD\",\"TITLE\",\"TEMPLATE\",\"SCRIPT\",\"STYLE\",\"IFRAME\",\"OBJECT\",\"VIDEO\",\"AUDIO\",\"NOSCRIPT\"];D.hasContentVirtual=function(a,b){return j(a)||D.isVisualContent(a.actualNode)||!!A.labelVirtual(a)||!b&&a.children.some(function(a){return 1===a.actualNode.nodeType&&D.hasContentVirtual(a)})},D.hasContent=function(a,b){return a=axe.utils.getNodeFromTree(axe._tree[0],a),D.hasContentVirtual(a,b)},D.idrefs=function(a,b){\"use strict\";var c,d,e=D.getRootNode(a),f=[],g=a.getAttribute(b);if(g)for(g=axe.utils.tokenList(g),c=0,d=g.length;c<d;c++)f.push(e.getElementById(g[c]));return f},D.isFocusable=function(a){\"use strict\";if(k(a))return!1;if(D.isNativelyFocusable(a))return!0;var b=a.getAttribute(\"tabindex\");return!(!b||isNaN(parseInt(b,10)))},D.isNativelyFocusable=function(a){\"use strict\";if(!a||k(a))return!1;switch(a.nodeName.toUpperCase()){case\"A\":case\"AREA\":if(a.href)return!0;break;case\"INPUT\":return\"hidden\"!==a.type;case\"TEXTAREA\":case\"SELECT\":case\"DETAILS\":case\"BUTTON\":return!0}return!1},D.insertedIntoFocusOrder=function(a){return a.tabIndex>-1&&D.isFocusable(a)&&!D.isNativelyFocusable(a)},D.isHTML5=function(a){var b=a.doctype;return null!==b&&(\"html\"===b.name&&!b.publicId&&!b.systemId)};var I=[\"block\",\"list-item\",\"table\",\"flex\",\"grid\",\"inline-block\"];D.isInTextBlock=function(a){if(m(a))return!1;var b=n(a),c=\"\",d=\"\",e=0;return l(b,function(b){if(2===e)return!1;if(3===b.nodeType&&(c+=b.nodeValue),1===b.nodeType){var f=(b.nodeName||\"\").toUpperCase();if([\"BR\",\"HR\"].includes(f))0===e?(c=\"\",d=\"\"):e=2;else{if(\"none\"===b.style.display||\"hidden\"===b.style.overflow||![\"\",null,\"none\"].includes(b.style.float)||![\"\",null,\"relative\"].includes(b.style.position))return!1;if(\"A\"===f&&b.href||\"link\"===(b.getAttribute(\"role\")||\"\").toLowerCase())return b===a&&(e=1),d+=b.textContent,!1}}}),c=axe.commons.text.sanitize(c),d=axe.commons.text.sanitize(d),c.length>d.length},D.isNode=function(a){\"use strict\";return a instanceof Node},D.isOffscreen=function(a){var b=void 0,c=document.documentElement,d=window.getComputedStyle(a),e=window.getComputedStyle(document.body||c).getPropertyValue(\"direction\"),f=D.getElementCoordinates(a);if(f.bottom<0&&(o(a,f.bottom)||\"absolute\"===d.position))return!0;if(0===f.left&&0===f.right)return!1;if(\"ltr\"===e){if(f.right<=0)return!0}else if(b=Math.max(c.scrollWidth,D.getViewportSize(window).width),f.left>=b)return!0;return!1},D.isVisible=function(a,b,c){\"use strict\";var d,e,f;return 9===a.nodeType||(11===a.nodeType&&(a=a.host),null!==(d=window.getComputedStyle(a,null))&&(e=a.nodeName.toUpperCase(),!(\"none\"===d.getPropertyValue(\"display\")||\"STYLE\"===e.toUpperCase()||\"SCRIPT\"===e.toUpperCase()||!b&&p(d.getPropertyValue(\"clip\"))||!c&&(\"hidden\"===d.getPropertyValue(\"visibility\")||!b&&D.isOffscreen(a))||b&&\"true\"===a.getAttribute(\"aria-hidden\"))&&(!!(f=a.assignedSlot?a.assignedSlot:a.parentNode)&&D.isVisible(f,b,!0))))};var J=[\"checkbox\",\"img\",\"radio\",\"range\",\"slider\",\"spinbutton\",\"textbox\"];D.isVisualContent=function(a){var b=a.getAttribute(\"role\");if(b)return-1!==J.indexOf(b);switch(a.tagName.toUpperCase()){case\"IMG\":case\"IFRAME\":case\"OBJECT\":case\"VIDEO\":case\"AUDIO\":case\"CANVAS\":case\"SVG\":case\"MATH\":case\"BUTTON\":case\"SELECT\":case\"TEXTAREA\":case\"KEYGEN\":case\"PROGRESS\":case\"METER\":return!0;case\"INPUT\":return\"hidden\"!==a.type;default:return!1}},D.shadowElementsFromPoint=function(a,b){return(arguments.length>2&&void 0!==arguments[2]?arguments[2]:document).elementsFromPoint(a,b).reduce(function(c,d){if(axe.utils.isShadowRoot(d)){var e=D.shadowElementsFromPoint(a,b,d.shadowRoot);c=c.concat(e),c.length&&axe.commons.dom.visuallyContains(c[0],d)&&c.push(d)}else c.push(d);return c},[])},D.visuallyContains=function(a,b){var c=a.getBoundingClientRect(),d={top:c.top+.01,bottom:c.bottom-.01,left:c.left+.01,right:c.right-.01},e=b.getBoundingClientRect(),f=e.top,g=e.left,h={top:f-b.scrollTop,bottom:f-b.scrollTop+b.scrollHeight,left:g-b.scrollLeft,right:g-b.scrollLeft+b.scrollWidth},i=window.getComputedStyle(b);return\"inline\"===i.getPropertyValue(\"display\")||!(d.left<h.left&&d.left<e.left||d.top<h.top&&d.top<e.top||d.right>h.right&&d.right>e.right||d.bottom>h.bottom&&d.bottom>e.bottom)&&(!(d.right>e.right||d.bottom>e.bottom)||(\"scroll\"===i.overflow||\"auto\"===i.overflow||\"hidden\"===i.overflow||b instanceof HTMLBodyElement||b instanceof HTMLHtmlElement))},D.visuallyOverlaps=function(a,b){var c=b.getBoundingClientRect(),d=c.top,e=c.left,f={top:d-b.scrollTop,bottom:d-b.scrollTop+b.scrollHeight,left:e-b.scrollLeft,right:e-b.scrollLeft+b.scrollWidth};if(a.left>f.right&&a.left>c.right||a.top>f.bottom&&a.top>c.bottom||a.right<f.left&&a.right<c.left||a.bottom<f.top&&a.bottom<c.top)return!1;var g=window.getComputedStyle(b);return!(a.left>c.right||a.top>c.bottom)||(\"scroll\"===g.overflow||\"auto\"===g.overflow||b instanceof HTMLBodyElement||b instanceof HTMLHtmlElement)},E.getAllCells=function(a){var b,c,d,e,f=[];for(b=0,d=a.rows.length;b<d;b++)for(c=0,e=a.rows[b].cells.length;c<e;c++)f.push(a.rows[b].cells[c]);return f},E.getCellPosition=function(a,b){var c,d;for(b||(b=E.toGrid(D.findUp(a,\"table\"))),c=0;c<b.length;c++)if(b[c]&&-1!==(d=b[c].indexOf(a)))return{x:d,y:c}},E.getHeaders=function(a){if(a.hasAttribute(\"headers\"))return commons.dom.idrefs(a,\"headers\");var b=commons.table.toGrid(commons.dom.findUp(a,\"table\")),c=commons.table.getCellPosition(a,b);return[].concat(E.traverse(\"left\",c,b).filter(function(a){return E.isRowHeader(a)}),E.traverse(\"up\",c,b).filter(function(a){return E.isColumnHeader(a)})).reverse()},E.getScope=function(a){var b=a.getAttribute(\"scope\"),c=a.getAttribute(\"role\");if(a instanceof Element==!1||-1===[\"TD\",\"TH\"].indexOf(a.nodeName.toUpperCase()))throw new TypeError(\"Expected TD or TH element\");if(\"columnheader\"===c)return\"col\";if(\"rowheader\"===c)return\"row\";if(\"col\"===b||\"row\"===b)return b;if(\"TH\"!==a.nodeName.toUpperCase())return!1;var d=E.toGrid(D.findUp(a,\"table\")),e=E.getCellPosition(a);return d[e.y].reduce(function(a,b){return a&&\"TH\"===b.nodeName.toUpperCase()},!0)?\"col\":d.map(function(a){return a[e.x]}).reduce(function(a,b){return a&&\"TH\"===b.nodeName.toUpperCase()},!0)?\"row\":\"auto\"},E.isColumnHeader=function(a){return-1!==[\"col\",\"auto\"].indexOf(E.getScope(a))},E.isDataCell=function(a){return!(!a.children.length&&!a.textContent.trim())&&\"TD\"===a.nodeName.toUpperCase()},E.isDataTable=function(a){var b=(a.getAttribute(\"role\")||\"\").toLowerCase();if((\"presentation\"===b||\"none\"===b)&&!D.isFocusable(a))return!1;if(\"true\"===a.getAttribute(\"contenteditable\")||D.findUp(a,'[contenteditable=\"true\"]'))return!0;if(\"grid\"===b||\"treegrid\"===b||\"table\"===b)return!0;if(\"landmark\"===commons.aria.getRoleType(b))return!0;if(\"0\"===a.getAttribute(\"datatable\"))return!1;if(a.getAttribute(\"summary\"))return!0;if(a.tHead||a.tFoot||a.caption)return!0;for(var c=0,d=a.children.length;c<d;c++)if(\"COLGROUP\"===a.children[c].nodeName.toUpperCase())return!0;for(var e,f,g=0,h=a.rows.length,i=!1,j=0;j<h;j++){e=a.rows[j];for(var k=0,l=e.cells.length;k<l;k++){if(f=e.cells[k],\"TH\"===f.nodeName.toUpperCase())return!0;if(i||f.offsetWidth===f.clientWidth&&f.offsetHeight===f.clientHeight||(i=!0),f.getAttribute(\"scope\")||f.getAttribute(\"headers\")||f.getAttribute(\"abbr\"))return!0;if([\"columnheader\",\"rowheader\"].includes((f.getAttribute(\"role\")||\"\").toLowerCase()))return!0;if(1===f.children.length&&\"ABBR\"===f.children[0].nodeName.toUpperCase())return!0;g++}}if(a.getElementsByTagName(\"table\").length)return!1;if(h<2)return!1;var m=a.rows[Math.ceil(h/2)];if(1===m.cells.length&&1===m.cells[0].colSpan)return!1;if(m.cells.length>=5)return!0;if(i)return!0;var n,o;for(j=0;j<h;j++){if(e=a.rows[j],n&&n!==window.getComputedStyle(e).getPropertyValue(\"background-color\"))return!0;if(n=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o&&o!==window.getComputedStyle(e).getPropertyValue(\"background-image\"))return!0;o=window.getComputedStyle(e).getPropertyValue(\"background-image\")}return h>=20||!(D.getElementCoordinates(a).width>.95*D.getViewportSize(window).width)&&(!(g<10)&&!a.querySelector(\"object, embed, iframe, applet\"))},E.isHeader=function(a){if(E.isColumnHeader(a)||E.isRowHeader(a))return!0;if(a.getAttribute(\"id\")){var b=axe.utils.escapeSelector(a.getAttribute(\"id\"));return!!document.querySelector('[headers~=\"'+b+'\"]')}return!1},E.isRowHeader=function(a){return[\"row\",\"auto\"].includes(E.getScope(a))},E.toGrid=function(a){for(var b=[],c=a.rows,d=0,e=c.length;d<e;d++){var f=c[d].cells;b[d]=b[d]||[];for(var g=0,h=0,i=f.length;h<i;h++)for(var j=0;j<f[h].colSpan;j++){for(var k=0;k<f[h].rowSpan;k++){for(b[d+k]=b[d+k]||[];b[d+k][g];)g++;b[d+k][g]=f[h]}g++}}return b},E.toArray=E.toGrid,function(a){var b=function a(b,c,d,e){var f,g=d[c.y]?d[c.y][c.x]:void 0;return g?\"function\"==typeof e&&!0===(f=e(g,c,d))?[g]:(f=a(b,{x:c.x+b.x,y:c.y+b.y},d,e),f.unshift(g),f):[]};a.traverse=function(a,c,d,e){if(Array.isArray(c)&&(e=d,d=c,c={x:0,y:0}),\"string\"==typeof a)switch(a){case\"left\":a={x:-1,y:0};break;case\"up\":a={x:0,y:-1};break;case\"right\":a={x:1,y:0};break;case\"down\":a={x:0,y:1}}return b(a,{x:c.x+a.x,y:c.y+a.y},d,e)}}(E);var K={submit:\"Submit\",reset:\"Reset\"},L=[\"text\",\"search\",\"tel\",\"url\",\"email\",\"date\",\"time\",\"number\",\"range\",\"color\"],M=[\"A\",\"EM\",\"STRONG\",\"SMALL\",\"MARK\",\"ABBR\",\"DFN\",\"I\",\"B\",\"S\",\"U\",\"CODE\",\"VAR\",\"SAMP\",\"KBD\",\"SUP\",\"SUB\",\"Q\",\"CITE\",\"SPAN\",\"BDO\",\"BDI\",\"BR\",\"WBR\",\"INS\",\"DEL\",\"IMG\",\"EMBED\",\"OBJECT\",\"IFRAME\",\"MAP\",\"AREA\",\"SCRIPT\",\"NOSCRIPT\",\"RUBY\",\"VIDEO\",\"AUDIO\",\"INPUT\",\"TEXTAREA\",\"SELECT\",\"BUTTON\",\"LABEL\",\"OUTPUT\",\"DATALIST\",\"KEYGEN\",\"PROGRESS\",\"COMMAND\",\"CANVAS\",\"TIME\",\"METER\"];F.accessibleText=function(a,b){var c=axe.utils.getNodeFromTree(axe._tree[0],a);return axe.commons.text.accessibleTextVirtual(c,b)},F.accessibleTextVirtual=function(a,b){function c(a,b,c){return a.children.reduce(function(a,d){var e=d.actualNode;return 3===e.nodeType?a+=e.nodeValue:1===e.nodeType&&(M.includes(e.nodeName.toUpperCase())||(a+=\" \"),a+=g(d,b,c)),a},\"\")}function d(a){return axe.commons.table.isDataTable(a.actualNode)||1!==axe.commons.table.getAllCells(a.actualNode).length?\"\":c(a,!1,!1).trim()}function e(a,b,e){var f=\"\",h=a.actualNode,i=h.nodeName.toUpperCase();if(t(a)&&(f=c(a,!1,!1)||\"\",z(f)))return f;if(\"FIGURE\"===i&&(f=w(a,\"figcaption\"),z(f)))return f;if(\"TABLE\"===i){if(f=w(a,\"caption\"),z(f))return f;if(f=h.getAttribute(\"title\")||h.getAttribute(\"summary\")||d(a)||\"\",z(f))return f}if(y(a))return h.getAttribute(\"alt\")||\"\";if(s(a)&&!e){if(r(a))return h.value||h.title||K[h.type]||\"\";var j=q(a);if(j)return g(j,b,!0)}return\"\"}function f(a,b,c){var d=\"\",e=a.actualNode;return!b&&e.hasAttribute(\"aria-labelledby\")&&(d=F.sanitize(D.idrefs(e,\"aria-labelledby\").map(function(a){if(null!==a){e===a&&h.pop();var b=axe.utils.getNodeFromTree(axe._tree[0],a);return g(b,!0,e!==a)}return\"\"}).join(\" \"))),d||c&&x(a)||!e.hasAttribute(\"aria-label\")?d:F.sanitize(e.getAttribute(\"aria-label\"))}var g=void 0,h=[];return a instanceof Node&&(a=axe.utils.getNodeFromTree(axe._tree[0],a)),g=function(a,b,d){var g=void 0;if(!a||h.includes(a))return\"\";if(null!==a&&a.actualNode instanceof Node!=!0)throw new Error(\"Invalid argument. Virtual Node must be provided\");if(!b&&!D.isVisible(a.actualNode,!0))return\"\";h.push(a);var i=a.actualNode.getAttribute(\"role\");return g=f(a,b,d),z(g)?g:(g=e(a,b,d),z(g)?g:d&&(g=v(a),z(g))?g:u(a)||i&&-1===A.getRolesWithNameFromContents().indexOf(i)||(g=c(a,b,d),!z(g))?a.actualNode.hasAttribute(\"title\")?a.actualNode.getAttribute(\"title\"):\"\":g)},F.sanitize(g(a,b))},F.labelVirtual=function(a){var b,c,d;if(c=A.labelVirtual(a))return c;if(a.actualNode.id){var e=axe.commons.utils.escapeSelector(a.actualNode.getAttribute(\"id\"));if(d=axe.commons.dom.getRootNode(a.actualNode),b=d.querySelector('label[for=\"'+e+'\"]'),c=b&&F.visible(b,!0))return c}return b=D.findUpVirtual(a,\"label\"),(c=b&&F.visible(b,!0))||null},F.label=function(a){return a=axe.utils.getNodeFromTree(axe._tree[0],a),F.labelVirtual(a)},F.sanitize=function(a){\"use strict\";return a.replace(/\\r\\n/g,\"\\n\").replace(/\\u00A0/g,\" \").replace(/[\\s]{2,}/g,\" \").trim()},F.visibleVirtual=function(a,b,c){var d=a.children.map(function(d){if(3===d.actualNode.nodeType){var e=d.actualNode.nodeValue;if(e&&D.isVisible(a.actualNode,b))return e}else if(!c)return F.visibleVirtual(d,b)}).join(\"\");return F.sanitize(d)},F.visible=function(a,b,c){return a=axe.utils.getNodeFromTree(axe._tree[0],a),F.visibleVirtual(a,b,c)},axe.utils.tokenList=function(a){\"use strict\";return a.trim().replace(/\\s{2,}/g,\" \").split(\" \")}\n;var N=[\"aa\",\"ab\",\"ae\",\"af\",\"ak\",\"am\",\"an\",\"ar\",\"as\",\"av\",\"ay\",\"az\",\"ba\",\"be\",\"bg\",\"bh\",\"bi\",\"bm\",\"bn\",\"bo\",\"br\",\"bs\",\"ca\",\"ce\",\"ch\",\"co\",\"cr\",\"cs\",\"cu\",\"cv\",\"cy\",\"da\",\"de\",\"dv\",\"dz\",\"ee\",\"el\",\"en\",\"eo\",\"es\",\"et\",\"eu\",\"fa\",\"ff\",\"fi\",\"fj\",\"fo\",\"fr\",\"fy\",\"ga\",\"gd\",\"gl\",\"gn\",\"gu\",\"gv\",\"ha\",\"he\",\"hi\",\"ho\",\"hr\",\"ht\",\"hu\",\"hy\",\"hz\",\"ia\",\"id\",\"ie\",\"ig\",\"ii\",\"ik\",\"in\",\"io\",\"is\",\"it\",\"iu\",\"iw\",\"ja\",\"ji\",\"jv\",\"jw\",\"ka\",\"kg\",\"ki\",\"kj\",\"kk\",\"kl\",\"km\",\"kn\",\"ko\",\"kr\",\"ks\",\"ku\",\"kv\",\"kw\",\"ky\",\"la\",\"lb\",\"lg\",\"li\",\"ln\",\"lo\",\"lt\",\"lu\",\"lv\",\"mg\",\"mh\",\"mi\",\"mk\",\"ml\",\"mn\",\"mo\",\"mr\",\"ms\",\"mt\",\"my\",\"na\",\"nb\",\"nd\",\"ne\",\"ng\",\"nl\",\"nn\",\"no\",\"nr\",\"nv\",\"ny\",\"oc\",\"oj\",\"om\",\"or\",\"os\",\"pa\",\"pi\",\"pl\",\"ps\",\"pt\",\"qu\",\"rm\",\"rn\",\"ro\",\"ru\",\"rw\",\"sa\",\"sc\",\"sd\",\"se\",\"sg\",\"sh\",\"si\",\"sk\",\"sl\",\"sm\",\"sn\",\"so\",\"sq\",\"sr\",\"ss\",\"st\",\"su\",\"sv\",\"sw\",\"ta\",\"te\",\"tg\",\"th\",\"ti\",\"tk\",\"tl\",\"tn\",\"to\",\"tr\",\"ts\",\"tt\",\"tw\",\"ty\",\"ug\",\"uk\",\"ur\",\"uz\",\"ve\",\"vi\",\"vo\",\"wa\",\"wo\",\"xh\",\"yi\",\"yo\",\"za\",\"zh\",\"zu\",\"aaa\",\"aab\",\"aac\",\"aad\",\"aae\",\"aaf\",\"aag\",\"aah\",\"aai\",\"aak\",\"aal\",\"aam\",\"aan\",\"aao\",\"aap\",\"aaq\",\"aas\",\"aat\",\"aau\",\"aav\",\"aaw\",\"aax\",\"aaz\",\"aba\",\"abb\",\"abc\",\"abd\",\"abe\",\"abf\",\"abg\",\"abh\",\"abi\",\"abj\",\"abl\",\"abm\",\"abn\",\"abo\",\"abp\",\"abq\",\"abr\",\"abs\",\"abt\",\"abu\",\"abv\",\"abw\",\"abx\",\"aby\",\"abz\",\"aca\",\"acb\",\"acd\",\"ace\",\"acf\",\"ach\",\"aci\",\"ack\",\"acl\",\"acm\",\"acn\",\"acp\",\"acq\",\"acr\",\"acs\",\"act\",\"acu\",\"acv\",\"acw\",\"acx\",\"acy\",\"acz\",\"ada\",\"adb\",\"add\",\"ade\",\"adf\",\"adg\",\"adh\",\"adi\",\"adj\",\"adl\",\"adn\",\"ado\",\"adp\",\"adq\",\"adr\",\"ads\",\"adt\",\"adu\",\"adw\",\"adx\",\"ady\",\"adz\",\"aea\",\"aeb\",\"aec\",\"aed\",\"aee\",\"aek\",\"ael\",\"aem\",\"aen\",\"aeq\",\"aer\",\"aes\",\"aeu\",\"aew\",\"aey\",\"aez\",\"afa\",\"afb\",\"afd\",\"afe\",\"afg\",\"afh\",\"afi\",\"afk\",\"afn\",\"afo\",\"afp\",\"afs\",\"aft\",\"afu\",\"afz\",\"aga\",\"agb\",\"agc\",\"agd\",\"age\",\"agf\",\"agg\",\"agh\",\"agi\",\"agj\",\"agk\",\"agl\",\"agm\",\"agn\",\"ago\",\"agp\",\"agq\",\"agr\",\"ags\",\"agt\",\"agu\",\"agv\",\"agw\",\"agx\",\"agy\",\"agz\",\"aha\",\"ahb\",\"ahg\",\"ahh\",\"ahi\",\"ahk\",\"ahl\",\"ahm\",\"ahn\",\"aho\",\"ahp\",\"ahr\",\"ahs\",\"aht\",\"aia\",\"aib\",\"aic\",\"aid\",\"aie\",\"aif\",\"aig\",\"aih\",\"aii\",\"aij\",\"aik\",\"ail\",\"aim\",\"ain\",\"aio\",\"aip\",\"aiq\",\"air\",\"ais\",\"ait\",\"aiw\",\"aix\",\"aiy\",\"aja\",\"ajg\",\"aji\",\"ajn\",\"ajp\",\"ajt\",\"aju\",\"ajw\",\"ajz\",\"akb\",\"akc\",\"akd\",\"ake\",\"akf\",\"akg\",\"akh\",\"aki\",\"akj\",\"akk\",\"akl\",\"akm\",\"ako\",\"akp\",\"akq\",\"akr\",\"aks\",\"akt\",\"aku\",\"akv\",\"akw\",\"akx\",\"aky\",\"akz\",\"ala\",\"alc\",\"ald\",\"ale\",\"alf\",\"alg\",\"alh\",\"ali\",\"alj\",\"alk\",\"all\",\"alm\",\"aln\",\"alo\",\"alp\",\"alq\",\"alr\",\"als\",\"alt\",\"alu\",\"alv\",\"alw\",\"alx\",\"aly\",\"alz\",\"ama\",\"amb\",\"amc\",\"ame\",\"amf\",\"amg\",\"ami\",\"amj\",\"amk\",\"aml\",\"amm\",\"amn\",\"amo\",\"amp\",\"amq\",\"amr\",\"ams\",\"amt\",\"amu\",\"amv\",\"amw\",\"amx\",\"amy\",\"amz\",\"ana\",\"anb\",\"anc\",\"and\",\"ane\",\"anf\",\"ang\",\"anh\",\"ani\",\"anj\",\"ank\",\"anl\",\"anm\",\"ann\",\"ano\",\"anp\",\"anq\",\"anr\",\"ans\",\"ant\",\"anu\",\"anv\",\"anw\",\"anx\",\"any\",\"anz\",\"aoa\",\"aob\",\"aoc\",\"aod\",\"aoe\",\"aof\",\"aog\",\"aoh\",\"aoi\",\"aoj\",\"aok\",\"aol\",\"aom\",\"aon\",\"aor\",\"aos\",\"aot\",\"aou\",\"aox\",\"aoz\",\"apa\",\"apb\",\"apc\",\"apd\",\"ape\",\"apf\",\"apg\",\"aph\",\"api\",\"apj\",\"apk\",\"apl\",\"apm\",\"apn\",\"apo\",\"app\",\"apq\",\"apr\",\"aps\",\"apt\",\"apu\",\"apv\",\"apw\",\"apx\",\"apy\",\"apz\",\"aqa\",\"aqc\",\"aqd\",\"aqg\",\"aql\",\"aqm\",\"aqn\",\"aqp\",\"aqr\",\"aqt\",\"aqz\",\"arb\",\"arc\",\"ard\",\"are\",\"arh\",\"ari\",\"arj\",\"ark\",\"arl\",\"arn\",\"aro\",\"arp\",\"arq\",\"arr\",\"ars\",\"art\",\"aru\",\"arv\",\"arw\",\"arx\",\"ary\",\"arz\",\"asa\",\"asb\",\"asc\",\"asd\",\"ase\",\"asf\",\"asg\",\"ash\",\"asi\",\"asj\",\"ask\",\"asl\",\"asn\",\"aso\",\"asp\",\"asq\",\"asr\",\"ass\",\"ast\",\"asu\",\"asv\",\"asw\",\"asx\",\"asy\",\"asz\",\"ata\",\"atb\",\"atc\",\"atd\",\"ate\",\"atg\",\"ath\",\"ati\",\"atj\",\"atk\",\"atl\",\"atm\",\"atn\",\"ato\",\"atp\",\"atq\",\"atr\",\"ats\",\"att\",\"atu\",\"atv\",\"atw\",\"atx\",\"aty\",\"atz\",\"aua\",\"aub\",\"auc\",\"aud\",\"aue\",\"auf\",\"aug\",\"auh\",\"aui\",\"auj\",\"auk\",\"aul\",\"aum\",\"aun\",\"auo\",\"aup\",\"auq\",\"aur\",\"aus\",\"aut\",\"auu\",\"auw\",\"aux\",\"auy\",\"auz\",\"avb\",\"avd\",\"avi\",\"avk\",\"avl\",\"avm\",\"avn\",\"avo\",\"avs\",\"avt\",\"avu\",\"avv\",\"awa\",\"awb\",\"awc\",\"awd\",\"awe\",\"awg\",\"awh\",\"awi\",\"awk\",\"awm\",\"awn\",\"awo\",\"awr\",\"aws\",\"awt\",\"awu\",\"awv\",\"aww\",\"awx\",\"awy\",\"axb\",\"axe\",\"axg\",\"axk\",\"axl\",\"axm\",\"axx\",\"aya\",\"ayb\",\"ayc\",\"ayd\",\"aye\",\"ayg\",\"ayh\",\"ayi\",\"ayk\",\"ayl\",\"ayn\",\"ayo\",\"ayp\",\"ayq\",\"ayr\",\"ays\",\"ayt\",\"ayu\",\"ayx\",\"ayy\",\"ayz\",\"aza\",\"azb\",\"azc\",\"azd\",\"azg\",\"azj\",\"azm\",\"azn\",\"azo\",\"azt\",\"azz\",\"baa\",\"bab\",\"bac\",\"bad\",\"bae\",\"baf\",\"bag\",\"bah\",\"bai\",\"baj\",\"bal\",\"ban\",\"bao\",\"bap\",\"bar\",\"bas\",\"bat\",\"bau\",\"bav\",\"baw\",\"bax\",\"bay\",\"baz\",\"bba\",\"bbb\",\"bbc\",\"bbd\",\"bbe\",\"bbf\",\"bbg\",\"bbh\",\"bbi\",\"bbj\",\"bbk\",\"bbl\",\"bbm\",\"bbn\",\"bbo\",\"bbp\",\"bbq\",\"bbr\",\"bbs\",\"bbt\",\"bbu\",\"bbv\",\"bbw\",\"bbx\",\"bby\",\"bbz\",\"bca\",\"bcb\",\"bcc\",\"bcd\",\"bce\",\"bcf\",\"bcg\",\"bch\",\"bci\",\"bcj\",\"bck\",\"bcl\",\"bcm\",\"bcn\",\"bco\",\"bcp\",\"bcq\",\"bcr\",\"bcs\",\"bct\",\"bcu\",\"bcv\",\"bcw\",\"bcy\",\"bcz\",\"bda\",\"bdb\",\"bdc\",\"bdd\",\"bde\",\"bdf\",\"bdg\",\"bdh\",\"bdi\",\"bdj\",\"bdk\",\"bdl\",\"bdm\",\"bdn\",\"bdo\",\"bdp\",\"bdq\",\"bdr\",\"bds\",\"bdt\",\"bdu\",\"bdv\",\"bdw\",\"bdx\",\"bdy\",\"bdz\",\"bea\",\"beb\",\"bec\",\"bed\",\"bee\",\"bef\",\"beg\",\"beh\",\"bei\",\"bej\",\"bek\",\"bem\",\"beo\",\"bep\",\"beq\",\"ber\",\"bes\",\"bet\",\"beu\",\"bev\",\"bew\",\"bex\",\"bey\",\"bez\",\"bfa\",\"bfb\",\"bfc\",\"bfd\",\"bfe\",\"bff\",\"bfg\",\"bfh\",\"bfi\",\"bfj\",\"bfk\",\"bfl\",\"bfm\",\"bfn\",\"bfo\",\"bfp\",\"bfq\",\"bfr\",\"bfs\",\"bft\",\"bfu\",\"bfw\",\"bfx\",\"bfy\",\"bfz\",\"bga\",\"bgb\",\"bgc\",\"bgd\",\"bge\",\"bgf\",\"bgg\",\"bgi\",\"bgj\",\"bgk\",\"bgl\",\"bgm\",\"bgn\",\"bgo\",\"bgp\",\"bgq\",\"bgr\",\"bgs\",\"bgt\",\"bgu\",\"bgv\",\"bgw\",\"bgx\",\"bgy\",\"bgz\",\"bha\",\"bhb\",\"bhc\",\"bhd\",\"bhe\",\"bhf\",\"bhg\",\"bhh\",\"bhi\",\"bhj\",\"bhk\",\"bhl\",\"bhm\",\"bhn\",\"bho\",\"bhp\",\"bhq\",\"bhr\",\"bhs\",\"bht\",\"bhu\",\"bhv\",\"bhw\",\"bhx\",\"bhy\",\"bhz\",\"bia\",\"bib\",\"bic\",\"bid\",\"bie\",\"bif\",\"big\",\"bij\",\"bik\",\"bil\",\"bim\",\"bin\",\"bio\",\"bip\",\"biq\",\"bir\",\"bit\",\"biu\",\"biv\",\"biw\",\"bix\",\"biy\",\"biz\",\"bja\",\"bjb\",\"bjc\",\"bjd\",\"bje\",\"bjf\",\"bjg\",\"bjh\",\"bji\",\"bjj\",\"bjk\",\"bjl\",\"bjm\",\"bjn\",\"bjo\",\"bjp\",\"bjq\",\"bjr\",\"bjs\",\"bjt\",\"bju\",\"bjv\",\"bjw\",\"bjx\",\"bjy\",\"bjz\",\"bka\",\"bkb\",\"bkc\",\"bkd\",\"bkf\",\"bkg\",\"bkh\",\"bki\",\"bkj\",\"bkk\",\"bkl\",\"bkm\",\"bkn\",\"bko\",\"bkp\",\"bkq\",\"bkr\",\"bks\",\"bkt\",\"bku\",\"bkv\",\"bkw\",\"bkx\",\"bky\",\"bkz\",\"bla\",\"blb\",\"blc\",\"bld\",\"ble\",\"blf\",\"blg\",\"blh\",\"bli\",\"blj\",\"blk\",\"bll\",\"blm\",\"bln\",\"blo\",\"blp\",\"blq\",\"blr\",\"bls\",\"blt\",\"blv\",\"blw\",\"blx\",\"bly\",\"blz\",\"bma\",\"bmb\",\"bmc\",\"bmd\",\"bme\",\"bmf\",\"bmg\",\"bmh\",\"bmi\",\"bmj\",\"bmk\",\"bml\",\"bmm\",\"bmn\",\"bmo\",\"bmp\",\"bmq\",\"bmr\",\"bms\",\"bmt\",\"bmu\",\"bmv\",\"bmw\",\"bmx\",\"bmy\",\"bmz\",\"bna\",\"bnb\",\"bnc\",\"bnd\",\"bne\",\"bnf\",\"bng\",\"bni\",\"bnj\",\"bnk\",\"bnl\",\"bnm\",\"bnn\",\"bno\",\"bnp\",\"bnq\",\"bnr\",\"bns\",\"bnt\",\"bnu\",\"bnv\",\"bnw\",\"bnx\",\"bny\",\"bnz\",\"boa\",\"bob\",\"boe\",\"bof\",\"bog\",\"boh\",\"boi\",\"boj\",\"bok\",\"bol\",\"bom\",\"bon\",\"boo\",\"bop\",\"boq\",\"bor\",\"bot\",\"bou\",\"bov\",\"bow\",\"box\",\"boy\",\"boz\",\"bpa\",\"bpb\",\"bpd\",\"bpg\",\"bph\",\"bpi\",\"bpj\",\"bpk\",\"bpl\",\"bpm\",\"bpn\",\"bpo\",\"bpp\",\"bpq\",\"bpr\",\"bps\",\"bpt\",\"bpu\",\"bpv\",\"bpw\",\"bpx\",\"bpy\",\"bpz\",\"bqa\",\"bqb\",\"bqc\",\"bqd\",\"bqf\",\"bqg\",\"bqh\",\"bqi\",\"bqj\",\"bqk\",\"bql\",\"bqm\",\"bqn\",\"bqo\",\"bqp\",\"bqq\",\"bqr\",\"bqs\",\"bqt\",\"bqu\",\"bqv\",\"bqw\",\"bqx\",\"bqy\",\"bqz\",\"bra\",\"brb\",\"brc\",\"brd\",\"brf\",\"brg\",\"brh\",\"bri\",\"brj\",\"brk\",\"brl\",\"brm\",\"brn\",\"bro\",\"brp\",\"brq\",\"brr\",\"brs\",\"brt\",\"bru\",\"brv\",\"brw\",\"brx\",\"bry\",\"brz\",\"bsa\",\"bsb\",\"bsc\",\"bse\",\"bsf\",\"bsg\",\"bsh\",\"bsi\",\"bsj\",\"bsk\",\"bsl\",\"bsm\",\"bsn\",\"bso\",\"bsp\",\"bsq\",\"bsr\",\"bss\",\"bst\",\"bsu\",\"bsv\",\"bsw\",\"bsx\",\"bsy\",\"bta\",\"btb\",\"btc\",\"btd\",\"bte\",\"btf\",\"btg\",\"bth\",\"bti\",\"btj\",\"btk\",\"btl\",\"btm\",\"btn\",\"bto\",\"btp\",\"btq\",\"btr\",\"bts\",\"btt\",\"btu\",\"btv\",\"btw\",\"btx\",\"bty\",\"btz\",\"bua\",\"bub\",\"buc\",\"bud\",\"bue\",\"buf\",\"bug\",\"buh\",\"bui\",\"buj\",\"buk\",\"bum\",\"bun\",\"buo\",\"bup\",\"buq\",\"bus\",\"but\",\"buu\",\"buv\",\"buw\",\"bux\",\"buy\",\"buz\",\"bva\",\"bvb\",\"bvc\",\"bvd\",\"bve\",\"bvf\",\"bvg\",\"bvh\",\"bvi\",\"bvj\",\"bvk\",\"bvl\",\"bvm\",\"bvn\",\"bvo\",\"bvp\",\"bvq\",\"bvr\",\"bvt\",\"bvu\",\"bvv\",\"bvw\",\"bvx\",\"bvy\",\"bvz\",\"bwa\",\"bwb\",\"bwc\",\"bwd\",\"bwe\",\"bwf\",\"bwg\",\"bwh\",\"bwi\",\"bwj\",\"bwk\",\"bwl\",\"bwm\",\"bwn\",\"bwo\",\"bwp\",\"bwq\",\"bwr\",\"bws\",\"bwt\",\"bwu\",\"bww\",\"bwx\",\"bwy\",\"bwz\",\"bxa\",\"bxb\",\"bxc\",\"bxd\",\"bxe\",\"bxf\",\"bxg\",\"bxh\",\"bxi\",\"bxj\",\"bxk\",\"bxl\",\"bxm\",\"bxn\",\"bxo\",\"bxp\",\"bxq\",\"bxr\",\"bxs\",\"bxu\",\"bxv\",\"bxw\",\"bxx\",\"bxz\",\"bya\",\"byb\",\"byc\",\"byd\",\"bye\",\"byf\",\"byg\",\"byh\",\"byi\",\"byj\",\"byk\",\"byl\",\"bym\",\"byn\",\"byo\",\"byp\",\"byq\",\"byr\",\"bys\",\"byt\",\"byv\",\"byw\",\"byx\",\"byy\",\"byz\",\"bza\",\"bzb\",\"bzc\",\"bzd\",\"bze\",\"bzf\",\"bzg\",\"bzh\",\"bzi\",\"bzj\",\"bzk\",\"bzl\",\"bzm\",\"bzn\",\"bzo\",\"bzp\",\"bzq\",\"bzr\",\"bzs\",\"bzt\",\"bzu\",\"bzv\",\"bzw\",\"bzx\",\"bzy\",\"bzz\",\"caa\",\"cab\",\"cac\",\"cad\",\"cae\",\"caf\",\"cag\",\"cah\",\"cai\",\"caj\",\"cak\",\"cal\",\"cam\",\"can\",\"cao\",\"cap\",\"caq\",\"car\",\"cas\",\"cau\",\"cav\",\"caw\",\"cax\",\"cay\",\"caz\",\"cba\",\"cbb\",\"cbc\",\"cbd\",\"cbe\",\"cbg\",\"cbh\",\"cbi\",\"cbj\",\"cbk\",\"cbl\",\"cbn\",\"cbo\",\"cbq\",\"cbr\",\"cbs\",\"cbt\",\"cbu\",\"cbv\",\"cbw\",\"cby\",\"cca\",\"ccc\",\"ccd\",\"cce\",\"ccg\",\"cch\",\"ccj\",\"ccl\",\"ccm\",\"ccn\",\"cco\",\"ccp\",\"ccq\",\"ccr\",\"ccs\",\"cda\",\"cdc\",\"cdd\",\"cde\",\"cdf\",\"cdg\",\"cdh\",\"cdi\",\"cdj\",\"cdm\",\"cdn\",\"cdo\",\"cdr\",\"cds\",\"cdy\",\"cdz\",\"cea\",\"ceb\",\"ceg\",\"cek\",\"cel\",\"cen\",\"cet\",\"cfa\",\"cfd\",\"cfg\",\"cfm\",\"cga\",\"cgc\",\"cgg\",\"cgk\",\"chb\",\"chc\",\"chd\",\"chf\",\"chg\",\"chh\",\"chj\",\"chk\",\"chl\",\"chm\",\"chn\",\"cho\",\"chp\",\"chq\",\"chr\",\"cht\",\"chw\",\"chx\",\"chy\",\"chz\",\"cia\",\"cib\",\"cic\",\"cid\",\"cie\",\"cih\",\"cik\",\"cim\",\"cin\",\"cip\",\"cir\",\"ciw\",\"ciy\",\"cja\",\"cje\",\"cjh\",\"cji\",\"cjk\",\"cjm\",\"cjn\",\"cjo\",\"cjp\",\"cjr\",\"cjs\",\"cjv\",\"cjy\",\"cka\",\"ckb\",\"ckh\",\"ckl\",\"ckn\",\"cko\",\"ckq\",\"ckr\",\"cks\",\"ckt\",\"cku\",\"ckv\",\"ckx\",\"cky\",\"ckz\",\"cla\",\"clc\",\"cld\",\"cle\",\"clh\",\"cli\",\"clj\",\"clk\",\"cll\",\"clm\",\"clo\",\"clt\",\"clu\",\"clw\",\"cly\",\"cma\",\"cmc\",\"cme\",\"cmg\",\"cmi\",\"cmk\",\"cml\",\"cmm\",\"cmn\",\"cmo\",\"cmr\",\"cms\",\"cmt\",\"cna\",\"cnb\",\"cnc\",\"cng\",\"cnh\",\"cni\",\"cnk\",\"cnl\",\"cno\",\"cns\",\"cnt\",\"cnu\",\"cnw\",\"cnx\",\"coa\",\"cob\",\"coc\",\"cod\",\"coe\",\"cof\",\"cog\",\"coh\",\"coj\",\"cok\",\"col\",\"com\",\"con\",\"coo\",\"cop\",\"coq\",\"cot\",\"cou\",\"cov\",\"cow\",\"cox\",\"coy\",\"coz\",\"cpa\",\"cpb\",\"cpc\",\"cpe\",\"cpf\",\"cpg\",\"cpi\",\"cpn\",\"cpo\",\"cpp\",\"cps\",\"cpu\",\"cpx\",\"cpy\",\"cqd\",\"cqu\",\"cra\",\"crb\",\"crc\",\"crd\",\"crf\",\"crg\",\"crh\",\"cri\",\"crj\",\"crk\",\"crl\",\"crm\",\"crn\",\"cro\",\"crp\",\"crq\",\"crr\",\"crs\",\"crt\",\"crv\",\"crw\",\"crx\",\"cry\",\"crz\",\"csa\",\"csb\",\"csc\",\"csd\",\"cse\",\"csf\",\"csg\",\"csh\",\"csi\",\"csj\",\"csk\",\"csl\",\"csm\",\"csn\",\"cso\",\"csq\",\"csr\",\"css\",\"cst\",\"csu\",\"csv\",\"csw\",\"csy\",\"csz\",\"cta\",\"ctc\",\"ctd\",\"cte\",\"ctg\",\"cth\",\"ctl\",\"ctm\",\"ctn\",\"cto\",\"ctp\",\"cts\",\"ctt\",\"ctu\",\"ctz\",\"cua\",\"cub\",\"cuc\",\"cug\",\"cuh\",\"cui\",\"cuj\",\"cuk\",\"cul\",\"cum\",\"cuo\",\"cup\",\"cuq\",\"cur\",\"cus\",\"cut\",\"cuu\",\"cuv\",\"cuw\",\"cux\",\"cvg\",\"cvn\",\"cwa\",\"cwb\",\"cwd\",\"cwe\",\"cwg\",\"cwt\",\"cya\",\"cyb\",\"cyo\",\"czh\",\"czk\",\"czn\",\"czo\",\"czt\",\"daa\",\"dac\",\"dad\",\"dae\",\"daf\",\"dag\",\"dah\",\"dai\",\"daj\",\"dak\",\"dal\",\"dam\",\"dao\",\"dap\",\"daq\",\"dar\",\"das\",\"dau\",\"dav\",\"daw\",\"dax\",\"day\",\"daz\",\"dba\",\"dbb\",\"dbd\",\"dbe\",\"dbf\",\"dbg\",\"dbi\",\"dbj\",\"dbl\",\"dbm\",\"dbn\",\"dbo\",\"dbp\",\"dbq\",\"dbr\",\"dbt\",\"dbu\",\"dbv\",\"dbw\",\"dby\",\"dcc\",\"dcr\",\"dda\",\"ddd\",\"dde\",\"ddg\",\"ddi\",\"ddj\",\"ddn\",\"ddo\",\"ddr\",\"dds\",\"ddw\",\"dec\",\"ded\",\"dee\",\"def\",\"deg\",\"deh\",\"dei\",\"dek\",\"del\",\"dem\",\"den\",\"dep\",\"deq\",\"der\",\"des\",\"dev\",\"dez\",\"dga\",\"dgb\",\"dgc\",\"dgd\",\"dge\",\"dgg\",\"dgh\",\"dgi\",\"dgk\",\"dgl\",\"dgn\",\"dgo\",\"dgr\",\"dgs\",\"dgt\",\"dgu\",\"dgw\",\"dgx\",\"dgz\",\"dha\",\"dhd\",\"dhg\",\"dhi\",\"dhl\",\"dhm\",\"dhn\",\"dho\",\"dhr\",\"dhs\",\"dhu\",\"dhv\",\"dhw\",\"dhx\",\"dia\",\"dib\",\"dic\",\"did\",\"dif\",\"dig\",\"dih\",\"dii\",\"dij\",\"dik\",\"dil\",\"dim\",\"din\",\"dio\",\"dip\",\"diq\",\"dir\",\"dis\",\"dit\",\"diu\",\"diw\",\"dix\",\"diy\",\"diz\",\"dja\",\"djb\",\"djc\",\"djd\",\"dje\",\"djf\",\"dji\",\"djj\",\"djk\",\"djl\",\"djm\",\"djn\",\"djo\",\"djr\",\"dju\",\"djw\",\"dka\",\"dkk\",\"dkl\",\"dkr\",\"dks\",\"dkx\",\"dlg\",\"dlk\",\"dlm\",\"dln\",\"dma\",\"dmb\",\"dmc\",\"dmd\",\"dme\",\"dmg\",\"dmk\",\"dml\",\"dmm\",\"dmn\",\"dmo\",\"dmr\",\"dms\",\"dmu\",\"dmv\",\"dmw\",\"dmx\",\"dmy\",\"dna\",\"dnd\",\"dne\",\"dng\",\"dni\",\"dnj\",\"dnk\",\"dnn\",\"dnr\",\"dnt\",\"dnu\",\"dnv\",\"dnw\",\"dny\",\"doa\",\"dob\",\"doc\",\"doe\",\"dof\",\"doh\",\"doi\",\"dok\",\"dol\",\"don\",\"doo\",\"dop\",\"doq\",\"dor\",\"dos\",\"dot\",\"dov\",\"dow\",\"dox\",\"doy\",\"doz\",\"dpp\",\"dra\",\"drb\",\"drc\",\"drd\",\"dre\",\"drg\",\"drh\",\"dri\",\"drl\",\"drn\",\"dro\",\"drq\",\"drr\",\"drs\",\"drt\",\"dru\",\"drw\",\"dry\",\"dsb\",\"dse\",\"dsh\",\"dsi\",\"dsl\",\"dsn\",\"dso\",\"dsq\",\"dta\",\"dtb\",\"dtd\",\"dth\",\"dti\",\"dtk\",\"dtm\",\"dtn\",\"dto\",\"dtp\",\"dtr\",\"dts\",\"dtt\",\"dtu\",\"dty\",\"dua\",\"dub\",\"duc\",\"dud\",\"due\",\"duf\",\"dug\",\"duh\",\"dui\",\"duj\",\"duk\",\"dul\",\"dum\",\"dun\",\"duo\",\"dup\",\"duq\",\"dur\",\"dus\",\"duu\",\"duv\",\"duw\",\"dux\",\"duy\",\"duz\",\"dva\",\"dwa\",\"dwl\",\"dwr\",\"dws\",\"dwu\",\"dww\",\"dwy\",\"dya\",\"dyb\",\"dyd\",\"dyg\",\"dyi\",\"dym\",\"dyn\",\"dyo\",\"dyu\",\"dyy\",\"dza\",\"dzd\",\"dze\",\"dzg\",\"dzl\",\"dzn\",\"eaa\",\"ebg\",\"ebk\",\"ebo\",\"ebr\",\"ebu\",\"ecr\",\"ecs\",\"ecy\",\"eee\",\"efa\",\"efe\",\"efi\",\"ega\",\"egl\",\"ego\",\"egx\",\"egy\",\"ehu\",\"eip\",\"eit\",\"eiv\",\"eja\",\"eka\",\"ekc\",\"eke\",\"ekg\",\"eki\",\"ekk\",\"ekl\",\"ekm\",\"eko\",\"ekp\",\"ekr\",\"eky\",\"ele\",\"elh\",\"eli\",\"elk\",\"elm\",\"elo\",\"elp\",\"elu\",\"elx\",\"ema\",\"emb\",\"eme\",\"emg\",\"emi\",\"emk\",\"emm\",\"emn\",\"emo\",\"emp\",\"ems\",\"emu\",\"emw\",\"emx\",\"emy\",\"ena\",\"enb\",\"enc\",\"end\",\"enf\",\"enh\",\"enl\",\"enm\",\"enn\",\"eno\",\"enq\",\"enr\",\"enu\",\"env\",\"enw\",\"enx\",\"eot\",\"epi\",\"era\",\"erg\",\"erh\",\"eri\",\"erk\",\"ero\",\"err\",\"ers\",\"ert\",\"erw\",\"ese\",\"esg\",\"esh\",\"esi\",\"esk\",\"esl\",\"esm\",\"esn\",\"eso\",\"esq\",\"ess\",\"esu\",\"esx\",\"esy\",\"etb\",\"etc\",\"eth\",\"etn\",\"eto\",\"etr\",\"ets\",\"ett\",\"etu\",\"etx\",\"etz\",\"euq\",\"eve\",\"evh\",\"evn\",\"ewo\",\"ext\",\"eya\",\"eyo\",\"eza\",\"eze\",\"faa\",\"fab\",\"fad\",\"faf\",\"fag\",\"fah\",\"fai\",\"faj\",\"fak\",\"fal\",\"fam\",\"fan\",\"fap\",\"far\",\"fat\",\"fau\",\"fax\",\"fay\",\"faz\",\"fbl\",\"fcs\",\"fer\",\"ffi\",\"ffm\",\"fgr\",\"fia\",\"fie\",\"fil\",\"fip\",\"fir\",\"fit\",\"fiu\",\"fiw\",\"fkk\",\"fkv\",\"fla\",\"flh\",\"fli\",\"fll\",\"fln\",\"flr\",\"fly\",\"fmp\",\"fmu\",\"fnb\",\"fng\",\"fni\",\"fod\",\"foi\",\"fom\",\"fon\",\"for\",\"fos\",\"fox\",\"fpe\",\"fqs\",\"frc\",\"frd\",\"frk\",\"frm\",\"fro\",\"frp\",\"frq\",\"frr\",\"frs\",\"frt\",\"fse\",\"fsl\",\"fss\",\"fub\",\"fuc\",\"fud\",\"fue\",\"fuf\",\"fuh\",\"fui\",\"fuj\",\"fum\",\"fun\",\"fuq\",\"fur\",\"fut\",\"fuu\",\"fuv\",\"fuy\",\"fvr\",\"fwa\",\"fwe\",\"gaa\",\"gab\",\"gac\",\"gad\",\"gae\",\"gaf\",\"gag\",\"gah\",\"gai\",\"gaj\",\"gak\",\"gal\",\"gam\",\"gan\",\"gao\",\"gap\",\"gaq\",\"gar\",\"gas\",\"gat\",\"gau\",\"gav\",\"gaw\",\"gax\",\"gay\",\"gaz\",\"gba\",\"gbb\",\"gbc\",\"gbd\",\"gbe\",\"gbf\",\"gbg\",\"gbh\",\"gbi\",\"gbj\",\"gbk\",\"gbl\",\"gbm\",\"gbn\",\"gbo\",\"gbp\",\"gbq\",\"gbr\",\"gbs\",\"gbu\",\"gbv\",\"gbw\",\"gbx\",\"gby\",\"gbz\",\"gcc\",\"gcd\",\"gce\",\"gcf\",\"gcl\",\"gcn\",\"gcr\",\"gct\",\"gda\",\"gdb\",\"gdc\",\"gdd\",\"gde\",\"gdf\",\"gdg\",\"gdh\",\"gdi\",\"gdj\",\"gdk\",\"gdl\",\"gdm\",\"gdn\",\"gdo\",\"gdq\",\"gdr\",\"gds\",\"gdt\",\"gdu\",\"gdx\",\"gea\",\"geb\",\"gec\",\"ged\",\"geg\",\"geh\",\"gei\",\"gej\",\"gek\",\"gel\",\"gem\",\"geq\",\"ges\",\"gev\",\"gew\",\"gex\",\"gey\",\"gez\",\"gfk\",\"gft\",\"gfx\",\"gga\",\"ggb\",\"ggd\",\"gge\",\"ggg\",\"ggk\",\"ggl\",\"ggn\",\"ggo\",\"ggr\",\"ggt\",\"ggu\",\"ggw\",\"gha\",\"ghc\",\"ghe\",\"ghh\",\"ghk\",\"ghl\",\"ghn\",\"gho\",\"ghr\",\"ghs\",\"ght\",\"gia\",\"gib\",\"gic\",\"gid\",\"gie\",\"gig\",\"gih\",\"gil\",\"gim\",\"gin\",\"gio\",\"gip\",\"giq\",\"gir\",\"gis\",\"git\",\"giu\",\"giw\",\"gix\",\"giy\",\"giz\",\"gji\",\"gjk\",\"gjm\",\"gjn\",\"gjr\",\"gju\",\"gka\",\"gke\",\"gkn\",\"gko\",\"gkp\",\"gku\",\"glc\",\"gld\",\"glh\",\"gli\",\"glj\",\"glk\",\"gll\",\"glo\",\"glr\",\"glu\",\"glw\",\"gly\",\"gma\",\"gmb\",\"gmd\",\"gme\",\"gmg\",\"gmh\",\"gml\",\"gmm\",\"gmn\",\"gmq\",\"gmu\",\"gmv\",\"gmw\",\"gmx\",\"gmy\",\"gmz\",\"gna\",\"gnb\",\"gnc\",\"gnd\",\"gne\",\"gng\",\"gnh\",\"gni\",\"gnk\",\"gnl\",\"gnm\",\"gnn\",\"gno\",\"gnq\",\"gnr\",\"gnt\",\"gnu\",\"gnw\",\"gnz\",\"goa\",\"gob\",\"goc\",\"god\",\"goe\",\"gof\",\"gog\",\"goh\",\"goi\",\"goj\",\"gok\",\"gol\",\"gom\",\"gon\",\"goo\",\"gop\",\"goq\",\"gor\",\"gos\",\"got\",\"gou\",\"gow\",\"gox\",\"goy\",\"goz\",\"gpa\",\"gpe\",\"gpn\",\"gqa\",\"gqi\",\"gqn\",\"gqr\",\"gqu\",\"gra\",\"grb\",\"grc\",\"grd\",\"grg\",\"grh\",\"gri\",\"grj\",\"grk\",\"grm\",\"gro\",\"grq\",\"grr\",\"grs\",\"grt\",\"gru\",\"grv\",\"grw\",\"grx\",\"gry\",\"grz\",\"gse\",\"gsg\",\"gsl\",\"gsm\",\"gsn\",\"gso\",\"gsp\",\"gss\",\"gsw\",\"gta\",\"gti\",\"gtu\",\"gua\",\"gub\",\"guc\",\"gud\",\"gue\",\"guf\",\"gug\",\"guh\",\"gui\",\"guk\",\"gul\",\"gum\",\"gun\",\"guo\",\"gup\",\"guq\",\"gur\",\"gus\",\"gut\",\"guu\",\"guv\",\"guw\",\"gux\",\"guz\",\"gva\",\"gvc\",\"gve\",\"gvf\",\"gvj\",\"gvl\",\"gvm\",\"gvn\",\"gvo\",\"gvp\",\"gvr\",\"gvs\",\"gvy\",\"gwa\",\"gwb\",\"gwc\",\"gwd\",\"gwe\",\"gwf\",\"gwg\",\"gwi\",\"gwj\",\"gwm\",\"gwn\",\"gwr\",\"gwt\",\"gwu\",\"gww\",\"gwx\",\"gxx\",\"gya\",\"gyb\",\"gyd\",\"gye\",\"gyf\",\"gyg\",\"gyi\",\"gyl\",\"gym\",\"gyn\",\"gyr\",\"gyy\",\"gza\",\"gzi\",\"gzn\",\"haa\",\"hab\",\"hac\",\"had\",\"hae\",\"haf\",\"hag\",\"hah\",\"hai\",\"haj\",\"hak\",\"hal\",\"ham\",\"han\",\"hao\",\"hap\",\"haq\",\"har\",\"has\",\"hav\",\"haw\",\"hax\",\"hay\",\"haz\",\"hba\",\"hbb\",\"hbn\",\"hbo\",\"hbu\",\"hca\",\"hch\",\"hdn\",\"hds\",\"hdy\",\"hea\",\"hed\",\"heg\",\"heh\",\"hei\",\"hem\",\"hgm\",\"hgw\",\"hhi\",\"hhr\",\"hhy\",\"hia\",\"hib\",\"hid\",\"hif\",\"hig\",\"hih\",\"hii\",\"hij\",\"hik\",\"hil\",\"him\",\"hio\",\"hir\",\"hit\",\"hiw\",\"hix\",\"hji\",\"hka\",\"hke\",\"hkk\",\"hks\",\"hla\",\"hlb\",\"hld\",\"hle\",\"hlt\",\"hlu\",\"hma\",\"hmb\",\"hmc\",\"hmd\",\"hme\",\"hmf\",\"hmg\",\"hmh\",\"hmi\",\"hmj\",\"hmk\",\"hml\",\"hmm\",\"hmn\",\"hmp\",\"hmq\",\"hmr\",\"hms\",\"hmt\",\"hmu\",\"hmv\",\"hmw\",\"hmx\",\"hmy\",\"hmz\",\"hna\",\"hnd\",\"hne\",\"hnh\",\"hni\",\"hnj\",\"hnn\",\"hno\",\"hns\",\"hnu\",\"hoa\",\"hob\",\"hoc\",\"hod\",\"hoe\",\"hoh\",\"hoi\",\"hoj\",\"hok\",\"hol\",\"hom\",\"hoo\",\"hop\",\"hor\",\"hos\",\"hot\",\"hov\",\"how\",\"hoy\",\"hoz\",\"hpo\",\"hps\",\"hra\",\"hrc\",\"hre\",\"hrk\",\"hrm\",\"hro\",\"hrp\",\"hrr\",\"hrt\",\"hru\",\"hrw\",\"hrx\",\"hrz\",\"hsb\",\"hsh\",\"hsl\",\"hsn\",\"hss\",\"hti\",\"hto\",\"hts\",\"htu\",\"htx\",\"hub\",\"huc\",\"hud\",\"hue\",\"huf\",\"hug\",\"huh\",\"hui\",\"huj\",\"huk\",\"hul\",\"hum\",\"huo\",\"hup\",\"huq\",\"hur\",\"hus\",\"hut\",\"huu\",\"huv\",\"huw\",\"hux\",\"huy\",\"huz\",\"hvc\",\"hve\",\"hvk\",\"hvn\",\"hvv\",\"hwa\",\"hwc\",\"hwo\",\"hya\",\"hyx\",\"iai\",\"ian\",\"iap\",\"iar\",\"iba\",\"ibb\",\"ibd\",\"ibe\",\"ibg\",\"ibh\",\"ibi\",\"ibl\",\"ibm\",\"ibn\",\"ibr\",\"ibu\",\"iby\",\"ica\",\"ich\",\"icl\",\"icr\",\"ida\",\"idb\",\"idc\",\"idd\",\"ide\",\"idi\",\"idr\",\"ids\",\"idt\",\"idu\",\"ifa\",\"ifb\",\"ife\",\"iff\",\"ifk\",\"ifm\",\"ifu\",\"ify\",\"igb\",\"ige\",\"igg\",\"igl\",\"igm\",\"ign\",\"igo\",\"igs\",\"igw\",\"ihb\",\"ihi\",\"ihp\",\"ihw\",\"iin\",\"iir\",\"ijc\",\"ije\",\"ijj\",\"ijn\",\"ijo\",\"ijs\",\"ike\",\"iki\",\"ikk\",\"ikl\",\"iko\",\"ikp\",\"ikr\",\"iks\",\"ikt\",\"ikv\",\"ikw\",\"ikx\",\"ikz\",\"ila\",\"ilb\",\"ilg\",\"ili\",\"ilk\",\"ill\",\"ilm\",\"ilo\",\"ilp\",\"ils\",\"ilu\",\"ilv\",\"ilw\",\"ima\",\"ime\",\"imi\",\"iml\",\"imn\",\"imo\",\"imr\",\"ims\",\"imy\",\"inb\",\"inc\",\"ine\",\"ing\",\"inh\",\"inj\",\"inl\",\"inm\",\"inn\",\"ino\",\"inp\",\"ins\",\"int\",\"inz\",\"ior\",\"iou\",\"iow\",\"ipi\",\"ipo\",\"iqu\",\"iqw\",\"ira\",\"ire\",\"irh\",\"iri\",\"irk\",\"irn\",\"iro\",\"irr\",\"iru\",\"irx\",\"iry\",\"isa\",\"isc\",\"isd\",\"ise\",\"isg\",\"ish\",\"isi\",\"isk\",\"ism\",\"isn\",\"iso\",\"isr\",\"ist\",\"isu\",\"itb\",\"itc\",\"itd\",\"ite\",\"iti\",\"itk\",\"itl\",\"itm\",\"ito\",\"itr\",\"its\",\"itt\",\"itv\",\"itw\",\"itx\",\"ity\",\"itz\",\"ium\",\"ivb\",\"ivv\",\"iwk\",\"iwm\",\"iwo\",\"iws\",\"ixc\",\"ixl\",\"iya\",\"iyo\",\"iyx\",\"izh\",\"izi\",\"izr\",\"izz\",\"jaa\",\"jab\",\"jac\",\"jad\",\"jae\",\"jaf\",\"jah\",\"jaj\",\"jak\",\"jal\",\"jam\",\"jan\",\"jao\",\"jaq\",\"jar\",\"jas\",\"jat\",\"jau\",\"jax\",\"jay\",\"jaz\",\"jbe\",\"jbi\",\"jbj\",\"jbk\",\"jbn\",\"jbo\",\"jbr\",\"jbt\",\"jbu\",\"jbw\",\"jcs\",\"jct\",\"jda\",\"jdg\",\"jdt\",\"jeb\",\"jee\",\"jeg\",\"jeh\",\"jei\",\"jek\",\"jel\",\"jen\",\"jer\",\"jet\",\"jeu\",\"jgb\",\"jge\",\"jgk\",\"jgo\",\"jhi\",\"jhs\",\"jia\",\"jib\",\"jic\",\"jid\",\"jie\",\"jig\",\"jih\",\"jii\",\"jil\",\"jim\",\"jio\",\"jiq\",\"jit\",\"jiu\",\"jiv\",\"jiy\",\"jje\",\"jjr\",\"jka\",\"jkm\",\"jko\",\"jkp\",\"jkr\",\"jku\",\"jle\",\"jls\",\"jma\",\"jmb\",\"jmc\",\"jmd\",\"jmi\",\"jml\",\"jmn\",\"jmr\",\"jms\",\"jmw\",\"jmx\",\"jna\",\"jnd\",\"jng\",\"jni\",\"jnj\",\"jnl\",\"jns\",\"job\",\"jod\",\"jog\",\"jor\",\"jos\",\"jow\",\"jpa\",\"jpr\",\"jpx\",\"jqr\",\"jra\",\"jrb\",\"jrr\",\"jrt\",\"jru\",\"jsl\",\"jua\",\"jub\",\"juc\",\"jud\",\"juh\",\"jui\",\"juk\",\"jul\",\"jum\",\"jun\",\"juo\",\"jup\",\"jur\",\"jus\",\"jut\",\"juu\",\"juw\",\"juy\",\"jvd\",\"jvn\",\"jwi\",\"jya\",\"jye\",\"jyy\",\"kaa\",\"kab\",\"kac\",\"kad\",\"kae\",\"kaf\",\"kag\",\"kah\",\"kai\",\"kaj\",\"kak\",\"kam\",\"kao\",\"kap\",\"kaq\",\"kar\",\"kav\",\"kaw\",\"kax\",\"kay\",\"kba\",\"kbb\",\"kbc\",\"kbd\",\"kbe\",\"kbf\",\"kbg\",\"kbh\",\"kbi\",\"kbj\",\"kbk\",\"kbl\",\"kbm\",\"kbn\",\"kbo\",\"kbp\",\"kbq\",\"kbr\",\"kbs\",\"kbt\",\"kbu\",\"kbv\",\"kbw\",\"kbx\",\"kby\",\"kbz\",\"kca\",\"kcb\",\"kcc\",\"kcd\",\"kce\",\"kcf\",\"kcg\",\"kch\",\"kci\",\"kcj\",\"kck\",\"kcl\",\"kcm\",\"kcn\",\"kco\",\"kcp\",\"kcq\",\"kcr\",\"kcs\",\"kct\",\"kcu\",\"kcv\",\"kcw\",\"kcx\",\"kcy\",\"kcz\",\"kda\",\"kdc\",\"kdd\",\"kde\",\"kdf\",\"kdg\",\"kdh\",\"kdi\",\"kdj\",\"kdk\",\"kdl\",\"kdm\",\"kdn\",\"kdo\",\"kdp\",\"kdq\",\"kdr\",\"kdt\",\"kdu\",\"kdv\",\"kdw\",\"kdx\",\"kdy\",\"kdz\",\"kea\",\"keb\",\"kec\",\"ked\",\"kee\",\"kef\",\"keg\",\"keh\",\"kei\",\"kej\",\"kek\",\"kel\",\"kem\",\"ken\",\"keo\",\"kep\",\"keq\",\"ker\",\"kes\",\"ket\",\"keu\",\"kev\",\"kew\",\"kex\",\"key\",\"kez\",\"kfa\",\"kfb\",\"kfc\",\"kfd\",\"kfe\",\"kff\",\"kfg\",\"kfh\",\"kfi\",\"kfj\",\"kfk\",\"kfl\",\"kfm\",\"kfn\",\"kfo\",\"kfp\",\"kfq\",\"kfr\",\"kfs\",\"kft\",\"kfu\",\"kfv\",\"kfw\",\"kfx\",\"kfy\",\"kfz\",\"kga\",\"kgb\",\"kgc\",\"kgd\",\"kge\",\"kgf\",\"kgg\",\"kgh\",\"kgi\",\"kgj\",\"kgk\",\"kgl\",\"kgm\",\"kgn\",\"kgo\",\"kgp\",\"kgq\",\"kgr\",\"kgs\",\"kgt\",\"kgu\",\"kgv\",\"kgw\",\"kgx\",\"kgy\",\"kha\",\"khb\",\"khc\",\"khd\",\"khe\",\"khf\",\"khg\",\"khh\",\"khi\",\"khj\",\"khk\",\"khl\",\"khn\",\"kho\",\"khp\",\"khq\",\"khr\",\"khs\",\"kht\",\"khu\",\"khv\",\"khw\",\"khx\",\"khy\",\"khz\",\"kia\",\"kib\",\"kic\",\"kid\",\"kie\",\"kif\",\"kig\",\"kih\",\"kii\",\"kij\",\"kil\",\"kim\",\"kio\",\"kip\",\"kiq\",\"kis\",\"kit\",\"kiu\",\"kiv\",\"kiw\",\"kix\",\"kiy\",\"kiz\",\"kja\",\"kjb\",\"kjc\",\"kjd\",\"kje\",\"kjf\",\"kjg\",\"kjh\",\"kji\",\"kjj\",\"kjk\",\"kjl\",\"kjm\",\"kjn\",\"kjo\",\"kjp\",\"kjq\",\"kjr\",\"kjs\",\"kjt\",\"kju\",\"kjv\",\"kjx\",\"kjy\",\"kjz\",\"kka\",\"kkb\",\"kkc\",\"kkd\",\"kke\",\"kkf\",\"kkg\",\"kkh\",\"kki\",\"kkj\",\"kkk\",\"kkl\",\"kkm\",\"kkn\",\"kko\",\"kkp\",\"kkq\",\"kkr\",\"kks\",\"kkt\",\"kku\",\"kkv\",\"kkw\",\"kkx\",\"kky\",\"kkz\",\"kla\",\"klb\",\"klc\",\"kld\",\"kle\",\"klf\",\"klg\",\"klh\",\"kli\",\"klj\",\"klk\",\"kll\",\"klm\",\"kln\",\"klo\",\"klp\",\"klq\",\"klr\",\"kls\",\"klt\",\"klu\",\"klv\",\"klw\",\"klx\",\"kly\",\"klz\",\"kma\",\"kmb\",\"kmc\",\"kmd\",\"kme\",\"kmf\",\"kmg\",\"kmh\",\"kmi\",\"kmj\",\"kmk\",\"kml\",\"kmm\",\"kmn\",\"kmo\",\"kmp\",\"kmq\",\"kmr\",\"kms\",\"kmt\",\"kmu\",\"kmv\",\"kmw\",\"kmx\",\"kmy\",\"kmz\",\"kna\",\"knb\",\"knc\",\"knd\",\"kne\",\"knf\",\"kng\",\"kni\",\"knj\",\"knk\",\"knl\",\"knm\",\"knn\",\"kno\",\"knp\",\"knq\",\"knr\",\"kns\",\"knt\",\"knu\",\"knv\",\"knw\",\"knx\",\"kny\",\"knz\",\"koa\",\"koc\",\"kod\",\"koe\",\"kof\",\"kog\",\"koh\",\"koi\",\"koj\",\"kok\",\"kol\",\"koo\",\"kop\",\"koq\",\"kos\",\"kot\",\"kou\",\"kov\",\"kow\",\"kox\",\"koy\",\"koz\",\"kpa\",\"kpb\",\"kpc\",\"kpd\",\"kpe\",\"kpf\",\"kpg\",\"kph\",\"kpi\",\"kpj\",\"kpk\",\"kpl\",\"kpm\",\"kpn\",\"kpo\",\"kpp\",\"kpq\",\"kpr\",\"kps\",\"kpt\",\"kpu\",\"kpv\",\"kpw\",\"kpx\",\"kpy\",\"kpz\",\"kqa\",\"kqb\",\"kqc\",\"kqd\",\"kqe\",\"kqf\",\"kqg\",\"kqh\",\"kqi\",\"kqj\",\"kqk\",\"kql\",\"kqm\",\"kqn\",\"kqo\",\"kqp\",\"kqq\",\"kqr\",\"kqs\",\"kqt\",\"kqu\",\"kqv\",\"kqw\",\"kqx\",\"kqy\",\"kqz\",\"kra\",\"krb\",\"krc\",\"krd\",\"kre\",\"krf\",\"krh\",\"kri\",\"krj\",\"krk\",\"krl\",\"krm\",\"krn\",\"kro\",\"krp\",\"krr\",\"krs\",\"krt\",\"kru\",\"krv\",\"krw\",\"krx\",\"kry\",\"krz\",\"ksa\",\"ksb\",\"ksc\",\"ksd\",\"kse\",\"ksf\",\"ksg\",\"ksh\",\"ksi\",\"ksj\",\"ksk\",\"ksl\",\"ksm\",\"ksn\",\"kso\",\"ksp\",\"ksq\",\"ksr\",\"kss\",\"kst\",\"ksu\",\"ksv\",\"ksw\",\"ksx\",\"ksy\",\"ksz\",\"kta\",\"ktb\",\"ktc\",\"ktd\",\"kte\",\"ktf\",\"ktg\",\"kth\",\"kti\",\"ktj\",\"ktk\",\"ktl\",\"ktm\",\"ktn\",\"kto\",\"ktp\",\"ktq\",\"ktr\",\"kts\",\"ktt\",\"ktu\",\"ktv\",\"ktw\",\"ktx\",\"kty\",\"ktz\",\"kub\",\"kuc\",\"kud\",\"kue\",\"kuf\",\"kug\",\"kuh\",\"kui\",\"kuj\",\"kuk\",\"kul\",\"kum\",\"kun\",\"kuo\",\"kup\",\"kuq\",\"kus\",\"kut\",\"kuu\",\"kuv\",\"kuw\",\"kux\",\"kuy\",\"kuz\",\"kva\",\"kvb\",\"kvc\",\"kvd\",\"kve\",\"kvf\",\"kvg\",\"kvh\",\"kvi\",\"kvj\",\"kvk\",\"kvl\",\"kvm\",\"kvn\",\"kvo\",\"kvp\",\"kvq\",\"kvr\",\"kvs\",\"kvt\",\"kvu\",\"kvv\",\"kvw\",\"kvx\",\"kvy\",\"kvz\",\"kwa\",\"kwb\",\"kwc\",\"kwd\",\"kwe\",\"kwf\",\"kwg\",\"kwh\",\"kwi\",\"kwj\",\"kwk\",\"kwl\",\"kwm\",\"kwn\",\"kwo\",\"kwp\",\"kwq\",\"kwr\",\"kws\",\"kwt\",\"kwu\",\"kwv\",\"kww\",\"kwx\",\"kwy\",\"kwz\",\"kxa\",\"kxb\",\"kxc\",\"kxd\",\"kxe\",\"kxf\",\"kxh\",\"kxi\",\"kxj\",\"kxk\",\"kxl\",\"kxm\",\"kxn\",\"kxo\",\"kxp\",\"kxq\",\"kxr\",\"kxs\",\"kxt\",\"kxu\",\"kxv\",\"kxw\",\"kxx\",\"kxy\",\"kxz\",\"kya\",\"kyb\",\"kyc\",\"kyd\",\"kye\",\"kyf\",\"kyg\",\"kyh\",\"kyi\",\"kyj\",\"kyk\",\"kyl\",\"kym\",\"kyn\",\"kyo\",\"kyp\",\"kyq\",\"kyr\",\"kys\",\"kyt\",\"kyu\",\"kyv\",\"kyw\",\"kyx\",\"kyy\",\"kyz\",\"kza\",\"kzb\",\"kzc\",\"kzd\",\"kze\",\"kzf\",\"kzg\",\"kzh\",\"kzi\",\"kzj\",\"kzk\",\"kzl\",\"kzm\",\"kzn\",\"kzo\",\"kzp\",\"kzq\",\"kzr\",\"kzs\",\"kzt\",\"kzu\",\"kzv\",\"kzw\",\"kzx\",\"kzy\",\"kzz\",\"laa\",\"lab\",\"lac\",\"lad\",\"lae\",\"laf\",\"lag\",\"lah\",\"lai\",\"laj\",\"lak\",\"lal\",\"lam\",\"lan\",\"lap\",\"laq\",\"lar\",\"las\",\"lau\",\"law\",\"lax\",\"lay\",\"laz\",\"lba\",\"lbb\",\"lbc\",\"lbe\",\"lbf\",\"lbg\",\"lbi\",\"lbj\",\"lbk\",\"lbl\",\"lbm\",\"lbn\",\"lbo\",\"lbq\",\"lbr\",\"lbs\",\"lbt\",\"lbu\",\"lbv\",\"lbw\",\"lbx\",\"lby\",\"lbz\",\"lcc\",\"lcd\",\"lce\",\"lcf\",\"lch\",\"lcl\",\"lcm\",\"lcp\",\"lcq\",\"lcs\",\"lda\",\"ldb\",\"ldd\",\"ldg\",\"ldh\",\"ldi\",\"ldj\",\"ldk\",\"ldl\",\"ldm\",\"ldn\",\"ldo\",\"ldp\",\"ldq\",\"lea\",\"leb\",\"lec\",\"led\",\"lee\",\"lef\",\"leg\",\"leh\",\"lei\",\"lej\",\"lek\",\"lel\",\"lem\",\"len\",\"leo\",\"lep\",\"leq\",\"ler\",\"les\",\"let\",\"leu\",\"lev\",\"lew\",\"lex\",\"ley\",\"lez\",\"lfa\",\"lfn\",\"lga\",\"lgb\",\"lgg\",\"lgh\",\"lgi\",\"lgk\",\"lgl\",\"lgm\",\"lgn\",\"lgq\",\"lgr\",\"lgt\",\"lgu\",\"lgz\",\"lha\",\"lhh\",\"lhi\",\"lhl\",\"lhm\",\"lhn\",\"lhp\",\"lhs\",\"lht\",\"lhu\",\"lia\",\"lib\",\"lic\",\"lid\",\"lie\",\"lif\",\"lig\",\"lih\",\"lii\",\"lij\",\"lik\",\"lil\",\"lio\",\"lip\",\"liq\",\"lir\",\"lis\",\"liu\",\"liv\",\"liw\",\"lix\",\"liy\",\"liz\",\"lja\",\"lje\",\"lji\",\"ljl\",\"ljp\",\"ljw\",\"ljx\",\"lka\",\"lkb\",\"lkc\",\"lkd\",\"lke\",\"lkh\",\"lki\",\"lkj\",\"lkl\",\"lkm\",\"lkn\",\"lko\",\"lkr\",\"lks\",\"lkt\",\"lku\",\"lky\",\"lla\",\"llb\",\"llc\",\"lld\",\"lle\",\"llf\",\"llg\",\"llh\",\"lli\",\"llj\",\"llk\",\"lll\",\"llm\",\"lln\",\"llo\",\"llp\",\"llq\",\"lls\",\"llu\",\"llx\",\"lma\",\"lmb\",\"lmc\",\"lmd\",\"lme\",\"lmf\",\"lmg\",\"lmh\",\"lmi\",\"lmj\",\"lmk\",\"lml\",\"lmm\",\"lmn\",\"lmo\",\"lmp\",\"lmq\",\"lmr\",\"lmu\",\"lmv\",\"lmw\",\"lmx\",\"lmy\",\"lmz\",\"lna\",\"lnb\",\"lnd\",\"lng\",\"lnh\",\"lni\",\"lnj\",\"lnl\",\"lnm\",\"lnn\",\"lno\",\"lns\",\"lnu\",\"lnw\",\"lnz\",\"loa\",\"lob\",\"loc\",\"loe\",\"lof\",\"log\",\"loh\",\"loi\",\"loj\",\"lok\",\"lol\",\"lom\",\"lon\",\"loo\",\"lop\",\"loq\",\"lor\",\"los\",\"lot\",\"lou\",\"lov\",\"low\",\"lox\",\"loy\",\"loz\",\"lpa\",\"lpe\",\"lpn\",\"lpo\",\"lpx\",\"lra\",\"lrc\",\"lre\",\"lrg\",\"lri\",\"lrk\",\"lrl\",\"lrm\",\"lrn\",\"lro\",\"lrr\",\"lrt\",\"lrv\",\"lrz\",\"lsa\",\"lsd\",\"lse\",\"lsg\",\"lsh\",\"lsi\",\"lsl\",\"lsm\",\"lso\",\"lsp\",\"lsr\",\"lss\",\"lst\",\"lsy\",\"ltc\",\"ltg\",\"lth\",\"lti\",\"ltn\",\"lto\",\"lts\",\"ltu\",\"lua\",\"luc\",\"lud\",\"lue\",\"luf\",\"lui\",\"luj\",\"luk\",\"lul\",\"lum\",\"lun\",\"luo\",\"lup\",\"luq\",\"lur\",\"lus\",\"lut\",\"luu\",\"luv\",\"luw\",\"luy\",\"luz\",\"lva\",\"lvk\",\"lvs\",\"lvu\",\"lwa\",\"lwe\",\"lwg\",\"lwh\",\"lwl\",\"lwm\",\"lwo\",\"lwt\",\"lwu\",\"lww\",\"lya\",\"lyg\",\"lyn\",\"lzh\",\"lzl\",\"lzn\",\"lzz\",\"maa\",\"mab\",\"mad\",\"mae\",\"maf\",\"mag\",\"mai\",\"maj\",\"mak\",\"mam\",\"man\",\"map\",\"maq\",\"mas\",\"mat\",\"mau\",\"mav\",\"maw\",\"max\",\"maz\",\"mba\",\"mbb\",\"mbc\",\"mbd\",\"mbe\",\"mbf\",\"mbh\",\"mbi\",\"mbj\",\"mbk\",\"mbl\",\"mbm\",\"mbn\",\"mbo\",\"mbp\",\"mbq\",\"mbr\",\"mbs\",\"mbt\",\"mbu\",\"mbv\",\"mbw\",\"mbx\",\"mby\",\"mbz\",\"mca\",\"mcb\",\"mcc\",\"mcd\",\"mce\",\"mcf\",\"mcg\",\"mch\",\"mci\",\"mcj\",\"mck\",\"mcl\",\"mcm\",\"mcn\",\"mco\",\"mcp\",\"mcq\",\"mcr\",\"mcs\",\"mct\",\"mcu\",\"mcv\",\"mcw\",\"mcx\",\"mcy\",\"mcz\",\"mda\",\"mdb\",\"mdc\",\"mdd\",\"mde\",\"mdf\",\"mdg\",\"mdh\",\"mdi\",\"mdj\",\"mdk\",\"mdl\",\"mdm\",\"mdn\",\"mdp\",\"mdq\",\"mdr\",\"mds\",\"mdt\",\"mdu\",\"mdv\",\"mdw\",\"mdx\",\"mdy\",\"mdz\",\"mea\",\"meb\",\"mec\",\"med\",\"mee\",\"mef\",\"meg\",\"meh\",\"mei\",\"mej\",\"mek\",\"mel\",\"mem\",\"men\",\"meo\",\"mep\",\"meq\",\"mer\",\"mes\",\"met\",\"meu\",\"mev\",\"mew\",\"mey\",\"mez\",\"mfa\",\"mfb\",\"mfc\",\"mfd\",\"mfe\",\"mff\",\"mfg\",\"mfh\",\"mfi\",\"mfj\",\"mfk\",\"mfl\",\"mfm\",\"mfn\",\"mfo\",\"mfp\",\"mfq\",\"mfr\",\"mfs\",\"mft\",\"mfu\",\"mfv\",\"mfw\",\"mfx\",\"mfy\",\"mfz\",\"mga\",\"mgb\",\"mgc\",\"mgd\",\"mge\",\"mgf\",\"mgg\",\"mgh\",\"mgi\",\"mgj\",\"mgk\",\"mgl\",\"mgm\",\"mgn\",\"mgo\",\"mgp\",\"mgq\",\"mgr\",\"mgs\",\"mgt\",\"mgu\",\"mgv\",\"mgw\",\"mgx\",\"mgy\",\"mgz\",\"mha\",\"mhb\",\"mhc\",\"mhd\",\"mhe\",\"mhf\",\"mhg\",\"mhh\",\"mhi\",\"mhj\",\"mhk\",\"mhl\",\"mhm\",\"mhn\",\"mho\",\"mhp\",\"mhq\",\"mhr\",\"mhs\",\"mht\",\"mhu\",\"mhw\",\"mhx\",\"mhy\",\"mhz\",\"mia\",\"mib\",\"mic\",\"mid\",\"mie\",\"mif\",\"mig\",\"mih\",\"mii\",\"mij\",\"mik\",\"mil\",\"mim\",\"min\",\"mio\",\"mip\",\"miq\",\"mir\",\"mis\",\"mit\",\"miu\",\"miw\",\"mix\",\"miy\",\"miz\",\"mja\",\"mjb\",\"mjc\",\"mjd\",\"mje\",\"mjg\",\"mjh\",\"mji\",\"mjj\",\"mjk\",\"mjl\",\"mjm\",\"mjn\",\"mjo\",\"mjp\",\"mjq\",\"mjr\",\"mjs\",\"mjt\",\"mju\",\"mjv\",\"mjw\",\"mjx\",\"mjy\",\"mjz\",\"mka\",\"mkb\",\"mkc\",\"mke\",\"mkf\",\"mkg\",\"mkh\",\"mki\",\"mkj\",\"mkk\",\"mkl\",\"mkm\",\"mkn\",\"mko\",\"mkp\",\"mkq\",\"mkr\",\"mks\",\"mkt\",\"mku\",\"mkv\",\"mkw\",\"mkx\",\"mky\",\"mkz\",\"mla\",\"mlb\",\"mlc\",\"mld\",\"mle\",\"mlf\",\"mlh\",\"mli\",\"mlj\",\"mlk\",\"mll\",\"mlm\",\"mln\",\"mlo\",\"mlp\",\"mlq\",\"mlr\",\"mls\",\"mlu\",\"mlv\",\"mlw\",\"mlx\",\"mlz\",\"mma\",\"mmb\",\"mmc\",\"mmd\",\"mme\",\"mmf\",\"mmg\",\"mmh\",\"mmi\",\"mmj\",\"mmk\",\"mml\",\"mmm\",\"mmn\",\"mmo\",\"mmp\",\"mmq\",\"mmr\",\"mmt\",\"mmu\",\"mmv\",\"mmw\",\"mmx\",\"mmy\",\"mmz\",\"mna\",\"mnb\",\"mnc\",\"mnd\",\"mne\",\"mnf\",\"mng\",\"mnh\",\"mni\",\"mnj\",\"mnk\",\"mnl\",\"mnm\",\"mnn\",\"mno\",\"mnp\",\"mnq\",\"mnr\",\"mns\",\"mnt\",\"mnu\",\"mnv\",\"mnw\",\"mnx\",\"mny\",\"mnz\",\"moa\",\"moc\",\"mod\",\"moe\",\"mof\",\"mog\",\"moh\",\"moi\",\"moj\",\"mok\",\"mom\",\"moo\",\"mop\",\"moq\",\"mor\",\"mos\",\"mot\",\"mou\",\"mov\",\"mow\",\"mox\",\"moy\",\"moz\",\"mpa\",\"mpb\",\"mpc\",\"mpd\",\"mpe\",\"mpg\",\"mph\",\"mpi\",\"mpj\",\"mpk\",\"mpl\",\"mpm\",\"mpn\",\"mpo\",\"mpp\",\"mpq\",\"mpr\",\"mps\",\"mpt\",\"mpu\",\"mpv\",\"mpw\",\"mpx\",\"mpy\",\"mpz\",\"mqa\",\"mqb\",\"mqc\",\"mqe\",\"mqf\",\"mqg\",\"mqh\",\"mqi\",\"mqj\",\"mqk\",\"mql\",\"mqm\",\"mqn\",\"mqo\",\"mqp\",\"mqq\",\"mqr\",\"mqs\",\"mqt\",\"mqu\",\"mqv\",\"mqw\",\"mqx\",\"mqy\",\"mqz\",\"mra\",\"mrb\",\"mrc\",\"mrd\",\"mre\",\"mrf\",\"mrg\",\"mrh\",\"mrj\",\"mrk\",\"mrl\",\"mrm\",\"mrn\",\"mro\",\"mrp\",\"mrq\",\"mrr\",\"mrs\",\"mrt\",\"mru\",\"mrv\",\"mrw\",\"mrx\",\"mry\",\"mrz\",\"msb\",\"msc\",\"msd\",\"mse\",\"msf\",\"msg\",\"msh\",\"msi\",\"msj\",\"msk\",\"msl\",\"msm\",\"msn\",\"mso\",\"msp\",\"msq\",\"msr\",\"mss\",\"mst\",\"msu\",\"msv\",\"msw\",\"msx\",\"msy\",\"msz\",\"mta\",\"mtb\",\"mtc\",\"mtd\",\"mte\",\"mtf\",\"mtg\",\"mth\",\"mti\",\"mtj\",\"mtk\",\"mtl\",\"mtm\",\"mtn\",\"mto\",\"mtp\",\"mtq\",\"mtr\",\"mts\",\"mtt\",\"mtu\",\"mtv\",\"mtw\",\"mtx\",\"mty\",\"mua\",\"mub\",\"muc\",\"mud\",\"mue\",\"mug\",\"muh\",\"mui\",\"muj\",\"muk\",\"mul\",\"mum\",\"mun\",\"muo\",\"mup\",\"muq\",\"mur\",\"mus\",\"mut\",\"muu\",\"muv\",\"mux\",\"muy\",\"muz\",\"mva\",\"mvb\",\"mvd\",\"mve\",\"mvf\",\"mvg\",\"mvh\",\"mvi\",\"mvk\",\"mvl\",\"mvm\",\"mvn\",\"mvo\",\"mvp\",\"mvq\",\"mvr\",\"mvs\",\"mvt\",\"mvu\",\"mvv\",\"mvw\",\"mvx\",\"mvy\",\"mvz\",\"mwa\",\"mwb\",\"mwc\",\"mwd\",\"mwe\",\"mwf\",\"mwg\",\"mwh\",\"mwi\",\"mwj\",\"mwk\",\"mwl\",\"mwm\",\"mwn\",\"mwo\",\"mwp\",\"mwq\",\"mwr\",\"mws\",\"mwt\",\"mwu\",\"mwv\",\"mww\",\"mwx\",\"mwy\",\"mwz\",\"mxa\",\"mxb\",\"mxc\",\"mxd\",\"mxe\",\"mxf\",\"mxg\",\"mxh\",\"mxi\",\"mxj\",\"mxk\",\"mxl\",\"mxm\",\"mxn\",\"mxo\",\"mxp\",\"mxq\",\"mxr\",\"mxs\",\"mxt\",\"mxu\",\"mxv\",\"mxw\",\"mxx\",\"mxy\",\"mxz\",\"myb\",\"myc\",\"myd\",\"mye\",\"myf\",\"myg\",\"myh\",\"myi\",\"myj\",\"myk\",\"myl\",\"mym\",\"myn\",\"myo\",\"myp\",\"myq\",\"myr\",\"mys\",\"myt\",\"myu\",\"myv\",\"myw\",\"myx\",\"myy\",\"myz\",\"mza\",\"mzb\",\"mzc\",\"mzd\",\"mze\",\"mzg\",\"mzh\",\"mzi\",\"mzj\",\"mzk\",\"mzl\",\"mzm\",\"mzn\",\"mzo\",\"mzp\",\"mzq\",\"mzr\",\"mzs\",\"mzt\",\"mzu\",\"mzv\",\"mzw\",\"mzx\",\"mzy\",\"mzz\",\"naa\",\"nab\",\"nac\",\"nad\",\"nae\",\"naf\",\"nag\",\"nah\",\"nai\",\"naj\",\"nak\",\"nal\",\"nam\",\"nan\",\"nao\",\"nap\",\"naq\",\"nar\",\"nas\",\"nat\",\"naw\",\"nax\",\"nay\",\"naz\",\"nba\",\"nbb\",\"nbc\",\"nbd\",\"nbe\",\"nbf\",\"nbg\",\"nbh\",\"nbi\",\"nbj\",\"nbk\",\"nbm\",\"nbn\",\"nbo\",\"nbp\",\"nbq\",\"nbr\",\"nbs\",\"nbt\",\"nbu\",\"nbv\",\"nbw\",\"nbx\",\"nby\",\"nca\",\"ncb\",\"ncc\",\"ncd\",\"nce\",\"ncf\",\"ncg\",\"nch\",\"nci\",\"ncj\",\"nck\",\"ncl\",\"ncm\",\"ncn\",\"nco\",\"ncp\",\"ncq\",\"ncr\",\"ncs\",\"nct\",\"ncu\",\"ncx\",\"ncz\",\"nda\",\"ndb\",\"ndc\",\"ndd\",\"ndf\",\"ndg\",\"ndh\",\"ndi\",\"ndj\",\"ndk\",\"ndl\",\"ndm\",\"ndn\",\"ndp\",\"ndq\",\"ndr\",\"nds\",\"ndt\",\"ndu\",\"ndv\",\"ndw\",\"ndx\",\"ndy\",\"ndz\",\"nea\",\"neb\",\"nec\",\"ned\",\"nee\",\"nef\",\"neg\",\"neh\",\"nei\",\"nej\",\"nek\",\"nem\",\"nen\",\"neo\",\"neq\",\"ner\",\"nes\",\"net\",\"neu\",\"nev\",\"new\",\"nex\",\"ney\",\"nez\",\"nfa\",\"nfd\",\"nfl\",\"nfr\",\"nfu\",\"nga\",\"ngb\",\"ngc\",\"ngd\",\"nge\",\"ngf\",\"ngg\",\"ngh\",\"ngi\",\"ngj\",\"ngk\",\"ngl\",\"ngm\",\"ngn\",\"ngo\",\"ngp\",\"ngq\",\"ngr\",\"ngs\",\"ngt\",\"ngu\",\"ngv\",\"ngw\",\"ngx\",\"ngy\",\"ngz\",\"nha\",\"nhb\",\"nhc\",\"nhd\",\"nhe\",\"nhf\",\"nhg\",\"nhh\",\"nhi\",\"nhk\",\"nhm\",\"nhn\",\"nho\",\"nhp\",\"nhq\",\"nhr\",\"nht\",\"nhu\",\"nhv\",\"nhw\",\"nhx\",\"nhy\",\"nhz\",\"nia\",\"nib\",\"nic\",\"nid\",\"nie\",\"nif\",\"nig\",\"nih\",\"nii\",\"nij\",\"nik\",\"nil\",\"nim\",\"nin\",\"nio\",\"niq\",\"nir\",\"nis\",\"nit\",\"niu\",\"niv\",\"niw\",\"nix\",\"niy\",\"niz\",\"nja\",\"njb\",\"njd\",\"njh\",\"nji\",\"njj\",\"njl\",\"njm\",\"njn\",\"njo\",\"njr\",\"njs\",\"njt\",\"nju\",\"njx\",\"njy\",\"njz\",\"nka\",\"nkb\",\"nkc\",\"nkd\",\"nke\",\"nkf\",\"nkg\",\"nkh\",\"nki\",\"nkj\",\"nkk\",\"nkm\",\"nkn\",\"nko\",\"nkp\",\"nkq\",\"nkr\",\"nks\",\"nkt\",\"nku\",\"nkv\",\"nkw\",\"nkx\",\"nkz\",\"nla\",\"nlc\",\"nle\",\"nlg\",\"nli\",\"nlj\",\"nlk\",\"nll\",\"nln\",\"nlo\",\"nlq\",\"nlr\",\"nlu\",\"nlv\",\"nlw\",\"nlx\",\"nly\",\"nlz\",\"nma\",\"nmb\",\"nmc\",\"nmd\",\"nme\",\"nmf\",\"nmg\",\"nmh\",\"nmi\",\"nmj\",\"nmk\",\"nml\",\"nmm\",\"nmn\",\"nmo\",\"nmp\",\"nmq\",\"nmr\",\"nms\",\"nmt\",\"nmu\",\"nmv\",\"nmw\",\"nmx\",\"nmy\",\"nmz\",\"nna\",\"nnb\",\"nnc\",\"nnd\",\"nne\",\"nnf\",\"nng\",\"nnh\",\"nni\",\"nnj\",\"nnk\",\"nnl\",\"nnm\",\"nnn\",\"nnp\",\"nnq\",\"nnr\",\"nns\",\"nnt\",\"nnu\",\"nnv\",\"nnw\",\"nnx\",\"nny\",\"nnz\",\"noa\",\"noc\",\"nod\",\"noe\",\"nof\",\"nog\",\"noh\",\"noi\",\"noj\",\"nok\",\"nol\",\"nom\",\"non\",\"noo\",\"nop\",\"noq\",\"nos\",\"not\",\"nou\",\"nov\",\"now\",\"noy\",\"noz\",\"npa\",\"npb\",\"npg\",\"nph\",\"npi\",\"npl\",\"npn\",\"npo\",\"nps\",\"npu\",\"npx\",\"npy\",\"nqg\",\"nqk\",\"nql\",\"nqm\",\"nqn\",\"nqo\",\"nqq\",\"nqy\",\"nra\",\"nrb\",\"nrc\",\"nre\",\"nrf\",\"nrg\",\"nri\",\"nrk\",\"nrl\",\"nrm\",\"nrn\",\"nrp\",\"nrr\",\"nrt\",\"nru\",\"nrx\",\"nrz\",\"nsa\",\"nsc\",\"nsd\",\"nse\",\"nsf\",\"nsg\",\"nsh\",\"nsi\",\"nsk\",\"nsl\",\"nsm\",\"nsn\",\"nso\",\"nsp\",\"nsq\",\"nsr\",\"nss\",\"nst\",\"nsu\",\"nsv\",\"nsw\",\"nsx\",\"nsy\",\"nsz\",\"ntd\",\"nte\",\"ntg\",\"nti\",\"ntj\",\"ntk\",\"ntm\",\"nto\",\"ntp\",\"ntr\",\"nts\",\"ntu\",\"ntw\",\"ntx\",\"nty\",\"ntz\",\"nua\",\"nub\",\"nuc\",\"nud\",\"nue\",\"nuf\",\"nug\",\"nuh\",\"nui\",\"nuj\",\"nuk\",\"nul\",\"num\",\"nun\",\"nuo\",\"nup\",\"nuq\",\"nur\",\"nus\",\"nut\",\"nuu\",\"nuv\",\"nuw\",\"nux\",\"nuy\",\"nuz\",\"nvh\",\"nvm\",\"nvo\",\"nwa\",\"nwb\",\"nwc\",\"nwe\",\"nwg\",\"nwi\",\"nwm\",\"nwo\",\"nwr\",\"nwx\",\"nwy\",\"nxa\",\"nxd\",\"nxe\",\"nxg\",\"nxi\",\"nxk\",\"nxl\",\"nxm\",\"nxn\",\"nxo\",\"nxq\",\"nxr\",\"nxu\",\"nxx\",\"nyb\",\"nyc\",\"nyd\",\"nye\",\"nyf\",\"nyg\",\"nyh\",\"nyi\",\"nyj\",\"nyk\",\"nyl\",\"nym\",\"nyn\",\"nyo\",\"nyp\",\"nyq\",\"nyr\",\"nys\",\"nyt\",\"nyu\",\"nyv\",\"nyw\",\"nyx\",\"nyy\",\"nza\",\"nzb\",\"nzi\",\"nzk\",\"nzm\",\"nzs\",\"nzu\",\"nzy\",\"nzz\",\"oaa\",\"oac\",\"oar\",\"oav\",\"obi\",\"obk\",\"obl\",\"obm\",\"obo\",\"obr\",\"obt\",\"obu\",\"oca\",\"och\",\"oco\",\"ocu\",\"oda\",\"odk\",\"odt\",\"odu\",\"ofo\",\"ofs\",\"ofu\",\"ogb\",\"ogc\",\"oge\",\"ogg\",\"ogo\",\"ogu\",\"oht\",\"ohu\",\"oia\",\"oin\",\"ojb\",\"ojc\",\"ojg\",\"ojp\",\"ojs\",\"ojv\",\"ojw\",\"oka\",\"okb\",\"okd\",\"oke\",\"okg\",\"okh\",\"oki\",\"okj\",\"okk\",\"okl\",\"okm\",\"okn\",\"oko\",\"okr\",\"oks\",\"oku\",\"okv\",\"okx\",\"ola\",\"old\",\"ole\",\"olk\",\"olm\",\"olo\",\"olr\",\"olt\",\"olu\",\"oma\",\"omb\",\"omc\",\"ome\",\"omg\",\"omi\",\"omk\",\"oml\",\"omn\",\"omo\",\"omp\",\"omq\",\"omr\",\"omt\",\"omu\",\"omv\",\"omw\",\"omx\",\"ona\",\"onb\",\"one\",\"ong\",\"oni\",\"onj\",\"onk\",\"onn\",\"ono\",\"onp\",\"onr\",\"ons\",\"ont\",\"onu\",\"onw\",\"onx\",\"ood\",\"oog\",\"oon\",\"oor\",\"oos\",\"opa\",\"opk\",\"opm\",\"opo\",\"opt\",\"opy\",\"ora\",\"orc\",\"ore\",\"org\",\"orh\",\"orn\",\"oro\",\"orr\",\"ors\",\"ort\",\"oru\",\"orv\",\"orw\",\"orx\",\"ory\",\"orz\",\"osa\",\"osc\",\"osi\",\"oso\",\"osp\",\"ost\",\"osu\",\"osx\",\"ota\",\"otb\",\"otd\",\"ote\",\"oti\",\"otk\",\"otl\",\"otm\",\"otn\",\"oto\",\"otq\",\"otr\",\"ots\",\"ott\",\"otu\",\"otw\",\"otx\",\"oty\",\"otz\",\"oua\",\"oub\",\"oue\",\"oui\",\"oum\",\"oun\",\"ovd\",\"owi\",\"owl\",\"oyb\",\"oyd\",\"oym\",\"oyy\",\"ozm\",\"paa\",\"pab\",\"pac\",\"pad\",\"pae\",\"paf\",\"pag\",\"pah\",\"pai\",\"pak\",\"pal\",\"pam\",\"pao\",\"pap\",\"paq\",\"par\",\"pas\",\"pat\",\"pau\",\"pav\",\"paw\",\"pax\",\"pay\",\"paz\",\"pbb\",\"pbc\",\"pbe\",\"pbf\",\"pbg\",\"pbh\",\"pbi\",\"pbl\",\"pbn\",\"pbo\",\"pbp\",\"pbr\",\"pbs\",\"pbt\",\"pbu\",\"pbv\",\"pby\",\"pbz\",\"pca\",\"pcb\",\"pcc\",\"pcd\",\"pce\",\"pcf\",\"pcg\",\"pch\",\"pci\",\"pcj\",\"pck\",\"pcl\",\"pcm\",\"pcn\",\"pcp\",\"pcr\",\"pcw\",\"pda\",\"pdc\",\"pdi\",\"pdn\",\"pdo\",\"pdt\",\"pdu\",\"pea\",\"peb\",\"ped\",\"pee\",\"pef\",\"peg\",\"peh\",\"pei\",\"pej\",\"pek\",\"pel\",\"pem\",\"peo\",\"pep\",\"peq\",\"pes\",\"pev\",\"pex\",\"pey\",\"pez\",\"pfa\",\"pfe\",\"pfl\",\"pga\",\"pgd\",\"pgg\",\"pgi\",\"pgk\",\"pgl\",\"pgn\",\"pgs\",\"pgu\",\"pgy\",\"pgz\",\"pha\",\"phd\",\"phg\",\"phh\",\"phi\",\"phk\",\"phl\",\"phm\",\"phn\",\"pho\",\"phq\",\"phr\",\"pht\",\"phu\",\"phv\",\"phw\",\"pia\",\"pib\",\"pic\",\"pid\",\"pie\",\"pif\",\"pig\",\"pih\",\"pii\",\"pij\",\"pil\",\"pim\",\"pin\",\"pio\",\"pip\",\"pir\",\"pis\",\"pit\",\"piu\",\"piv\",\"piw\",\"pix\",\"piy\",\"piz\",\"pjt\",\"pka\",\"pkb\",\"pkc\",\"pkg\",\"pkh\",\"pkn\",\"pko\",\"pkp\",\"pkr\",\"pks\",\"pkt\",\"pku\",\"pla\",\"plb\",\"plc\",\"pld\",\"ple\",\"plf\",\"plg\",\"plh\",\"plj\",\"plk\",\"pll\",\"pln\",\"plo\",\"plp\",\"plq\",\"plr\",\"pls\",\"plt\",\"plu\",\"plv\",\"plw\",\"ply\",\"plz\",\"pma\",\"pmb\",\"pmc\",\"pmd\",\"pme\",\"pmf\",\"pmh\",\"pmi\",\"pmj\",\"pmk\",\"pml\",\"pmm\",\"pmn\",\"pmo\",\"pmq\",\"pmr\",\"pms\",\"pmt\",\"pmu\",\"pmw\",\"pmx\",\"pmy\",\"pmz\",\"pna\",\"pnb\",\"pnc\",\"pne\",\"png\",\"pnh\",\"pni\",\"pnj\",\"pnk\",\"pnl\",\"pnm\",\"pnn\",\"pno\",\"pnp\",\"pnq\",\"pnr\",\"pns\",\"pnt\",\"pnu\",\"pnv\",\"pnw\",\"pnx\",\"pny\",\"pnz\",\"poc\",\"pod\",\"poe\",\"pof\",\"pog\",\"poh\",\"poi\",\"pok\",\"pom\",\"pon\",\"poo\",\"pop\",\"poq\",\"pos\",\"pot\",\"pov\",\"pow\",\"pox\",\"poy\",\"poz\",\"ppa\",\"ppe\",\"ppi\",\"ppk\",\"ppl\",\"ppm\",\"ppn\",\"ppo\",\"ppp\",\"ppq\",\"ppr\",\"pps\",\"ppt\",\"ppu\",\"pqa\",\"pqe\",\"pqm\",\"pqw\",\"pra\",\"prb\",\"prc\",\"prd\",\"pre\",\"prf\",\"prg\",\"prh\",\"pri\",\"prk\",\"prl\",\"prm\",\"prn\",\"pro\",\"prp\",\"prq\",\"prr\",\"prs\",\"prt\",\"pru\",\"prw\",\"prx\",\"pry\",\"prz\",\"psa\",\"psc\",\"psd\",\"pse\",\"psg\",\"psh\",\"psi\",\"psl\",\"psm\",\"psn\",\"pso\",\"psp\",\"psq\",\"psr\",\"pss\",\"pst\",\"psu\",\"psw\",\"psy\",\"pta\",\"pth\",\"pti\",\"ptn\",\"pto\",\"ptp\",\"ptq\",\"ptr\",\"ptt\",\"ptu\",\"ptv\",\"ptw\",\"pty\",\"pua\",\"pub\",\"puc\",\"pud\",\"pue\",\"puf\",\"pug\",\"pui\",\"puj\",\"puk\",\"pum\",\"puo\",\"pup\",\"puq\",\"pur\",\"put\",\"puu\",\"puw\",\"pux\",\"puy\",\"puz\",\"pwa\",\"pwb\",\"pwg\",\"pwi\",\"pwm\",\"pwn\",\"pwo\",\"pwr\",\"pww\",\"pxm\",\"pye\",\"pym\",\"pyn\",\"pys\",\"pyu\",\"pyx\",\"pyy\",\"pzn\",\"qaa..qtz\",\"qua\",\"qub\",\"quc\",\"qud\",\"quf\",\"qug\",\"quh\",\"qui\",\"quk\",\"qul\",\"qum\",\"qun\",\"qup\",\"quq\",\"qur\",\"qus\",\"quv\",\"quw\",\"qux\",\"quy\",\"quz\",\"qva\",\"qvc\",\"qve\",\"qvh\",\"qvi\",\"qvj\",\"qvl\",\"qvm\",\"qvn\",\"qvo\",\"qvp\",\"qvs\",\"qvw\",\"qvy\",\"qvz\",\"qwa\",\"qwc\",\"qwe\",\"qwh\",\"qwm\",\"qws\",\"qwt\",\"qxa\",\"qxc\",\"qxh\",\"qxl\",\"qxn\",\"qxo\",\"qxp\",\"qxq\",\"qxr\",\"qxs\",\"qxt\",\"qxu\",\"qxw\",\"qya\",\"qyp\",\"raa\",\"rab\",\"rac\",\"rad\",\"raf\",\"rag\",\"rah\",\"rai\",\"raj\",\"rak\",\"ral\",\"ram\",\"ran\",\"rao\",\"rap\",\"raq\",\"rar\",\"ras\",\"rat\",\"rau\",\"rav\",\"raw\",\"rax\",\"ray\",\"raz\",\"rbb\",\"rbk\",\"rbl\",\"rbp\",\"rcf\",\"rdb\",\"rea\",\"reb\",\"ree\",\"reg\",\"rei\",\"rej\",\"rel\",\"rem\",\"ren\",\"rer\",\"res\",\"ret\",\"rey\",\"rga\",\"rge\",\"rgk\",\"rgn\",\"rgr\",\"rgs\",\"rgu\",\"rhg\",\"rhp\",\"ria\",\"rie\",\"rif\",\"ril\",\"rim\",\"rin\",\"rir\",\"rit\",\"riu\",\"rjg\",\"rji\",\"rjs\",\"rka\",\"rkb\",\"rkh\",\"rki\",\"rkm\",\"rkt\",\"rkw\",\"rma\",\"rmb\",\"rmc\",\"rmd\",\"rme\",\"rmf\",\"rmg\",\"rmh\",\"rmi\",\"rmk\",\"rml\",\"rmm\",\"rmn\",\"rmo\",\"rmp\",\"rmq\",\"rmr\",\"rms\",\"rmt\",\"rmu\",\"rmv\",\"rmw\",\"rmx\",\"rmy\",\"rmz\",\"rna\",\"rnd\",\"rng\",\"rnl\",\"rnn\",\"rnp\",\"rnr\",\"rnw\",\"roa\",\"rob\",\"roc\",\"rod\",\"roe\",\"rof\",\"rog\",\"rol\",\"rom\",\"roo\",\"rop\",\"ror\",\"rou\",\"row\",\"rpn\",\"rpt\",\"rri\",\"rro\",\"rrt\",\"rsb\",\"rsi\",\"rsl\",\"rsm\",\"rtc\",\"rth\",\"rtm\",\"rts\",\"rtw\",\"rub\",\"ruc\",\"rue\",\"ruf\",\"rug\",\"ruh\",\"rui\",\"ruk\",\"ruo\",\"rup\",\"ruq\",\"rut\",\"ruu\",\"ruy\",\"ruz\",\"rwa\",\"rwk\",\"rwm\",\"rwo\",\"rwr\",\"rxd\",\"rxw\",\"ryn\",\"rys\",\"ryu\",\"rzh\",\"saa\",\"sab\",\"sac\",\"sad\",\"sae\",\"saf\",\"sah\",\"sai\",\"saj\",\"sak\",\"sal\",\"sam\",\"sao\",\"sap\",\"saq\",\"sar\",\"sas\",\"sat\",\"sau\",\"sav\",\"saw\",\"sax\",\"say\",\"saz\",\"sba\",\"sbb\",\"sbc\",\"sbd\",\"sbe\",\"sbf\",\"sbg\",\"sbh\",\"sbi\",\"sbj\",\"sbk\",\"sbl\",\"sbm\",\"sbn\",\"sbo\",\"sbp\",\"sbq\",\"sbr\",\"sbs\",\"sbt\",\"sbu\",\"sbv\",\"sbw\",\"sbx\",\"sby\",\"sbz\",\"sca\",\"scb\",\"sce\",\"scf\",\"scg\",\"sch\",\"sci\",\"sck\",\"scl\",\"scn\",\"sco\",\"scp\",\"scq\",\"scs\",\"sct\",\"scu\",\"scv\",\"scw\",\"scx\",\"sda\",\"sdb\",\"sdc\",\"sde\",\"sdf\",\"sdg\",\"sdh\",\"sdj\",\"sdk\",\"sdl\",\"sdm\",\"sdn\",\"sdo\",\"sdp\",\"sdr\",\"sds\",\"sdt\",\"sdu\",\"sdv\",\"sdx\",\"sdz\",\"sea\",\"seb\",\"sec\",\"sed\",\"see\",\"sef\",\"seg\",\"seh\",\"sei\",\"sej\",\"sek\",\"sel\",\"sem\",\"sen\",\"seo\",\"sep\",\"seq\",\"ser\",\"ses\",\"set\",\"seu\",\"sev\",\"sew\",\"sey\",\"sez\",\"sfb\",\"sfe\",\"sfm\",\"sfs\",\"sfw\",\"sga\",\"sgb\",\"sgc\",\"sgd\",\"sge\",\"sgg\",\"sgh\",\"sgi\",\"sgj\",\"sgk\",\"sgl\",\"sgm\",\"sgn\",\"sgo\",\"sgp\",\"sgr\",\"sgs\",\"sgt\",\"sgu\",\"sgw\",\"sgx\",\"sgy\",\"sgz\",\"sha\",\"shb\",\"shc\",\"shd\",\"she\",\"shg\",\"shh\",\"shi\",\"shj\",\"shk\",\"shl\",\"shm\",\"shn\",\"sho\",\"shp\",\"shq\",\"shr\",\"shs\",\"sht\",\"shu\",\"shv\",\"shw\",\"shx\",\"shy\",\"shz\",\"sia\",\"sib\",\"sid\",\"sie\",\"sif\",\"sig\",\"sih\",\"sii\",\"sij\",\"sik\",\"sil\",\"sim\",\"sio\",\"sip\",\"siq\",\"sir\",\"sis\",\"sit\",\"siu\",\"siv\",\"siw\",\"six\",\"siy\",\"siz\",\"sja\",\"sjb\",\"sjd\",\"sje\",\"sjg\",\"sjk\",\"sjl\",\"sjm\",\"sjn\",\"sjo\",\"sjp\",\"sjr\",\"sjs\",\"sjt\",\"sju\",\"sjw\",\"ska\",\"skb\",\"skc\",\"skd\",\"ske\",\"skf\",\"skg\",\"skh\",\"ski\",\"skj\",\"skk\",\"skm\",\"skn\",\"sko\",\"skp\",\"skq\",\"skr\",\"sks\",\"skt\",\"sku\",\"skv\",\"skw\",\"skx\",\"sky\",\"skz\",\"sla\",\"slc\",\"sld\",\"sle\",\"slf\",\"slg\",\"slh\",\"sli\",\"slj\",\"sll\",\"slm\",\"sln\",\"slp\",\"slq\",\"slr\",\"sls\",\"slt\",\"slu\",\"slw\",\"slx\",\"sly\",\"slz\",\"sma\",\"smb\",\"smc\",\"smd\",\"smf\",\"smg\",\"smh\",\"smi\",\"smj\",\"smk\",\"sml\",\"smm\",\"smn\",\"smp\",\"smq\",\"smr\",\"sms\",\"smt\",\"smu\",\"smv\",\"smw\",\"smx\",\"smy\",\"smz\",\"snb\",\"snc\",\"sne\",\"snf\",\"sng\",\"snh\",\"sni\",\"snj\",\"snk\",\"snl\",\"snm\",\"snn\",\"sno\",\"snp\",\"snq\",\"snr\",\"sns\",\"snu\",\"snv\",\"snw\",\"snx\",\"sny\",\"snz\",\"soa\",\"sob\",\"soc\",\"sod\",\"soe\",\"sog\",\"soh\",\"soi\",\"soj\",\"sok\",\"sol\",\"son\",\"soo\",\"sop\",\"soq\",\"sor\",\"sos\",\"sou\",\"sov\",\"sow\",\"sox\",\"soy\",\"soz\",\"spb\",\"spc\",\"spd\",\"spe\",\"spg\",\"spi\",\"spk\",\"spl\",\"spm\",\"spn\",\"spo\",\"spp\",\"spq\",\"spr\",\"sps\",\"spt\",\"spu\",\"spv\",\"spx\",\"spy\",\"sqa\",\"sqh\",\"sqj\",\"sqk\",\"sqm\",\"sqn\",\"sqo\",\"sqq\",\"sqr\",\"sqs\",\"sqt\",\"squ\",\"sra\",\"srb\",\"src\",\"sre\",\"srf\",\"srg\",\"srh\",\"sri\",\"srk\",\"srl\",\"srm\",\"srn\",\"sro\",\"srq\",\"srr\",\"srs\",\"srt\",\"sru\",\"srv\",\"srw\",\"srx\",\"sry\",\"srz\",\"ssa\",\"ssb\",\"ssc\",\"ssd\",\"sse\",\"ssf\",\"ssg\",\"ssh\",\"ssi\",\"ssj\",\"ssk\",\"ssl\",\"ssm\",\"ssn\",\"sso\",\"ssp\",\"ssq\",\"ssr\",\"sss\",\"sst\",\"ssu\",\"ssv\",\"ssx\",\"ssy\",\"ssz\",\"sta\",\"stb\",\"std\",\"ste\",\"stf\",\"stg\",\"sth\",\"sti\",\"stj\",\"stk\",\"stl\",\"stm\",\"stn\",\"sto\",\"stp\",\"stq\",\"str\",\"sts\",\"stt\",\"stu\",\"stv\",\"stw\",\"sty\",\"sua\",\"sub\",\"suc\",\"sue\",\"sug\",\"sui\",\"suj\",\"suk\",\"sul\",\"sum\",\"suq\",\"sur\",\"sus\",\"sut\",\"suv\",\"suw\",\"sux\",\"suy\",\"suz\",\"sva\",\"svb\",\"svc\",\"sve\",\"svk\",\"svm\",\"svr\",\"svs\",\"svx\",\"swb\",\"swc\",\"swf\",\"swg\",\"swh\",\"swi\",\"swj\",\"swk\",\"swl\",\"swm\",\"swn\",\"swo\",\"swp\",\"swq\",\"swr\",\"sws\",\"swt\",\"swu\",\"swv\",\"sww\",\"swx\",\"swy\",\"sxb\",\"sxc\",\"sxe\",\"sxg\",\"sxk\",\"sxl\",\"sxm\",\"sxn\",\"sxo\",\"sxr\",\"sxs\",\"sxu\",\"sxw\",\"sya\",\"syb\",\"syc\",\"syd\",\"syi\",\"syk\",\"syl\",\"sym\",\"syn\",\"syo\",\"syr\",\"sys\",\"syw\",\"syx\",\"syy\",\"sza\",\"szb\",\"szc\",\"szd\",\"sze\",\"szg\",\"szl\",\"szn\",\"szp\",\"szs\",\"szv\",\"szw\",\"taa\",\"tab\",\"tac\",\"tad\",\"tae\",\"taf\",\"tag\",\"tai\",\"taj\",\"tak\",\"tal\",\"tan\",\"tao\",\"tap\",\"taq\",\"tar\",\"tas\",\"tau\",\"tav\",\"taw\",\"tax\",\"tay\",\"taz\",\"tba\",\"tbb\",\"tbc\",\"tbd\",\"tbe\",\"tbf\",\"tbg\",\"tbh\",\"tbi\",\"tbj\",\"tbk\",\"tbl\",\"tbm\",\"tbn\",\"tbo\",\"tbp\",\"tbq\",\"tbr\",\"tbs\",\"tbt\",\"tbu\",\"tbv\",\"tbw\",\"tbx\",\"tby\",\"tbz\",\"tca\",\"tcb\",\"tcc\",\"tcd\",\"tce\",\"tcf\",\"tcg\",\"tch\",\"tci\",\"tck\",\"tcl\",\"tcm\",\"tcn\",\"tco\",\"tcp\",\"tcq\",\"tcs\",\"tct\",\"tcu\",\"tcw\",\"tcx\",\"tcy\",\"tcz\",\"tda\",\"tdb\",\"tdc\",\"tdd\",\"tde\",\"tdf\",\"tdg\",\"tdh\",\"tdi\",\"tdj\",\"tdk\",\"tdl\",\"tdm\",\"tdn\",\"tdo\",\"tdq\",\"tdr\",\"tds\",\"tdt\",\"tdu\",\"tdv\",\"tdx\",\"tdy\",\"tea\",\"teb\",\"tec\",\"ted\",\"tee\",\"tef\",\"teg\",\"teh\",\"tei\",\"tek\",\"tem\",\"ten\",\"teo\",\"tep\",\"teq\",\"ter\",\"tes\",\"tet\",\"teu\",\"tev\",\"tew\",\"tex\",\"tey\",\"tfi\",\"tfn\",\"tfo\",\"tfr\",\"tft\",\"tga\",\"tgb\",\"tgc\",\"tgd\",\"tge\",\"tgf\",\"tgg\",\"tgh\",\"tgi\",\"tgj\",\"tgn\",\"tgo\",\"tgp\",\"tgq\",\"tgr\",\"tgs\",\"tgt\",\"tgu\",\"tgv\",\"tgw\",\"tgx\",\"tgy\",\"tgz\",\"thc\",\"thd\",\"the\",\"thf\",\"thh\",\"thi\",\"thk\",\"thl\",\"thm\",\"thn\",\"thp\",\"thq\",\"thr\",\"ths\",\"tht\",\"thu\",\"thv\",\"thw\",\"thx\",\"thy\",\"thz\",\"tia\",\"tic\",\"tid\",\"tie\",\"tif\",\"tig\",\"tih\",\"tii\",\"tij\",\"tik\",\"til\",\"tim\",\"tin\",\"tio\",\"tip\",\"tiq\",\"tis\",\"tit\",\"tiu\",\"tiv\",\"tiw\",\"tix\",\"tiy\",\"tiz\",\"tja\",\"tjg\",\"tji\",\"tjl\",\"tjm\",\"tjn\",\"tjo\",\"tjs\",\"tju\",\"tjw\",\"tka\",\"tkb\",\"tkd\",\"tke\",\"tkf\",\"tkg\",\"tkk\",\"tkl\",\"tkm\",\"tkn\",\"tkp\",\"tkq\",\"tkr\",\"tks\",\"tkt\",\"tku\",\"tkv\",\"tkw\",\"tkx\",\"tkz\",\"tla\",\"tlb\",\"tlc\",\"tld\",\"tlf\",\"tlg\",\"tlh\",\"tli\",\"tlj\",\"tlk\",\"tll\",\"tlm\",\"tln\",\"tlo\",\"tlp\",\"tlq\",\"tlr\",\"tls\",\"tlt\",\"tlu\",\"tlv\",\"tlw\",\"tlx\",\"tly\",\"tma\",\"tmb\",\"tmc\",\"tmd\",\"tme\",\"tmf\",\"tmg\",\"tmh\",\"tmi\",\"tmj\",\"tmk\",\"tml\",\"tmm\",\"tmn\",\"tmo\",\"tmp\",\"tmq\",\"tmr\",\"tms\",\"tmt\",\"tmu\",\"tmv\",\"tmw\",\"tmy\",\"tmz\",\"tna\",\"tnb\",\"tnc\",\"tnd\",\"tne\",\"tnf\",\"tng\",\"tnh\",\"tni\",\"tnk\",\"tnl\",\"tnm\",\"tnn\",\"tno\",\"tnp\",\"tnq\",\"tnr\",\"tns\",\"tnt\",\"tnu\",\"tnv\",\"tnw\",\"tnx\",\"tny\",\"tnz\",\"tob\",\"toc\",\"tod\",\"toe\",\"tof\",\"tog\",\"toh\",\"toi\",\"toj\",\"tol\",\"tom\",\"too\",\"top\",\"toq\",\"tor\",\"tos\",\"tou\",\"tov\",\"tow\",\"tox\",\"toy\",\"toz\",\"tpa\",\"tpc\",\"tpe\",\"tpf\",\"tpg\",\"tpi\",\"tpj\",\"tpk\",\"tpl\",\"tpm\",\"tpn\",\"tpo\",\"tpp\",\"tpq\",\"tpr\",\"tpt\",\"tpu\",\"tpv\",\"tpw\",\"tpx\",\"tpy\",\"tpz\",\"tqb\",\"tql\",\"tqm\",\"tqn\",\"tqo\",\"tqp\",\"tqq\",\"tqr\",\"tqt\",\"tqu\",\"tqw\",\"tra\",\"trb\",\"trc\",\"trd\",\"tre\",\"trf\",\"trg\",\"trh\",\"tri\",\"trj\",\"trk\",\"trl\",\"trm\",\"trn\",\"tro\",\"trp\",\"trq\",\"trr\",\"trs\",\"trt\",\"tru\",\"trv\",\"trw\",\"trx\",\"try\",\"trz\",\"tsa\",\"tsb\",\"tsc\",\"tsd\",\"tse\",\"tsf\",\"tsg\",\"tsh\",\"tsi\",\"tsj\",\"tsk\",\"tsl\",\"tsm\",\"tsp\",\"tsq\",\"tsr\",\"tss\",\"tst\",\"tsu\",\"tsv\",\"tsw\",\"tsx\",\"tsy\",\"tsz\",\"tta\",\"ttb\",\"ttc\",\"ttd\",\"tte\",\"ttf\",\"ttg\",\"tth\",\"tti\",\"ttj\",\"ttk\",\"ttl\",\"ttm\",\"ttn\",\"tto\",\"ttp\",\"ttq\",\"ttr\",\"tts\",\"ttt\",\"ttu\",\"ttv\",\"ttw\",\"tty\",\"ttz\",\"tua\",\"tub\",\"tuc\",\"tud\",\"tue\",\"tuf\",\"tug\",\"tuh\",\"tui\",\"tuj\",\"tul\",\"tum\",\"tun\",\"tuo\",\"tup\",\"tuq\",\"tus\",\"tut\",\"tuu\",\"tuv\",\"tuw\",\"tux\",\"tuy\",\"tuz\",\"tva\",\"tvd\",\"tve\",\"tvk\",\"tvl\",\"tvm\",\"tvn\",\"tvo\",\"tvs\",\"tvt\",\"tvu\",\"tvw\",\"tvy\",\"twa\",\"twb\",\"twc\",\"twd\",\"twe\",\"twf\",\"twg\",\"twh\",\"twl\",\"twm\",\"twn\",\"two\",\"twp\",\"twq\",\"twr\",\"twt\",\"twu\",\"tww\",\"twx\",\"twy\",\"txa\",\"txb\",\"txc\",\"txe\",\"txg\",\"txh\",\"txi\",\"txj\",\"txm\",\"txn\",\"txo\",\"txq\",\"txr\",\"txs\",\"txt\",\"txu\",\"txx\",\"txy\",\"tya\",\"tye\",\"tyh\",\"tyi\",\"tyj\",\"tyl\",\"tyn\",\"typ\",\"tyr\",\"tys\",\"tyt\",\"tyu\",\"tyv\",\"tyx\",\"tyz\",\"tza\",\"tzh\",\"tzj\",\"tzl\",\"tzm\",\"tzn\",\"tzo\",\"tzx\",\"uam\",\"uan\",\"uar\",\"uba\",\"ubi\",\"ubl\",\"ubr\",\"ubu\",\"uby\",\"uda\",\"ude\",\"udg\",\"udi\",\"udj\",\"udl\",\"udm\",\"udu\",\"ues\",\"ufi\",\"uga\",\"ugb\",\"uge\",\"ugn\",\"ugo\",\"ugy\",\"uha\",\"uhn\",\"uis\",\"uiv\",\"uji\",\"uka\",\"ukg\",\"ukh\",\"ukk\",\"ukl\",\"ukp\",\"ukq\",\"uks\",\"uku\",\"ukw\",\"uky\",\"ula\",\"ulb\",\"ulc\",\"ule\",\"ulf\",\"uli\",\"ulk\",\"ull\",\"ulm\",\"uln\",\"ulu\",\"ulw\",\"uma\",\"umb\",\"umc\",\"umd\",\"umg\",\"umi\",\"umm\",\"umn\",\"umo\",\"ump\",\"umr\",\"ums\",\"umu\",\"una\",\"und\",\"une\",\"ung\",\"unk\",\"unm\",\"unn\",\"unp\",\"unr\",\"unu\",\"unx\",\"unz\",\"uok\",\"upi\",\"upv\",\"ura\",\"urb\",\"urc\",\"ure\",\"urf\",\"urg\",\"urh\",\"uri\",\"urj\",\"urk\",\"url\",\"urm\",\"urn\",\"uro\",\"urp\",\"urr\",\"urt\",\"uru\",\"urv\",\"urw\",\"urx\",\"ury\",\"urz\",\"usa\",\"ush\",\"usi\",\"usk\",\"usp\",\"usu\",\"uta\",\"ute\",\"utp\",\"utr\",\"utu\",\"uum\",\"uun\",\"uur\",\"uuu\",\"uve\",\"uvh\",\"uvl\",\"uwa\",\"uya\",\"uzn\",\"uzs\",\"vaa\",\"vae\",\"vaf\",\"vag\",\"vah\",\"vai\",\"vaj\",\"val\",\"vam\",\"van\",\"vao\",\"vap\",\"var\",\"vas\",\"vau\",\"vav\",\"vay\",\"vbb\",\"vbk\",\"vec\",\"ved\",\"vel\",\"vem\",\"veo\",\"vep\",\"ver\",\"vgr\",\"vgt\",\"vic\",\"vid\",\"vif\",\"vig\",\"vil\",\"vin\",\"vis\",\"vit\",\"viv\",\"vka\",\"vki\",\"vkj\",\"vkk\",\"vkl\",\"vkm\",\"vko\",\"vkp\",\"vkt\",\"vku\",\"vlp\",\"vls\",\"vma\",\"vmb\",\"vmc\",\"vmd\",\"vme\",\"vmf\",\"vmg\",\"vmh\",\"vmi\",\"vmj\",\"vmk\",\"vml\",\"vmm\",\"vmp\",\"vmq\",\"vmr\",\"vms\",\"vmu\",\"vmv\",\"vmw\",\"vmx\",\"vmy\",\"vmz\",\"vnk\",\"vnm\",\"vnp\",\"vor\",\"vot\",\"vra\",\"vro\",\"vrs\",\"vrt\",\"vsi\",\"vsl\",\"vsv\",\"vto\",\"vum\",\"vun\",\"vut\",\"vwa\",\"waa\",\"wab\",\"wac\",\"wad\",\"wae\",\"waf\",\"wag\",\"wah\",\"wai\",\"waj\",\"wak\",\"wal\",\"wam\",\"wan\",\"wao\",\"wap\",\"waq\",\"war\",\"was\",\"wat\",\"wau\",\"wav\",\"waw\",\"wax\",\"way\",\"waz\",\"wba\",\"wbb\",\"wbe\",\"wbf\",\"wbh\",\"wbi\",\"wbj\",\"wbk\",\"wbl\",\"wbm\",\"wbp\",\"wbq\",\"wbr\",\"wbs\",\"wbt\",\"wbv\",\"wbw\",\"wca\",\"wci\",\"wdd\",\"wdg\",\"wdj\",\"wdk\",\"wdu\",\"wdy\",\"wea\",\"wec\",\"wed\",\"weg\",\"weh\",\"wei\",\"wem\",\"wen\",\"weo\",\"wep\",\"wer\",\"wes\",\"wet\",\"weu\",\"wew\",\"wfg\",\"wga\",\"wgb\",\"wgg\",\"wgi\",\"wgo\",\"wgu\",\"wgw\",\"wgy\",\"wha\",\"whg\",\"whk\",\"whu\",\"wib\",\"wic\",\"wie\",\"wif\",\"wig\",\"wih\",\"wii\",\"wij\",\"wik\",\"wil\",\"wim\",\"win\",\"wir\",\"wit\",\"wiu\",\"wiv\",\"wiw\",\"wiy\",\"wja\",\"wji\",\"wka\",\"wkb\",\"wkd\",\"wkl\",\"wku\",\"wkw\",\"wky\",\"wla\",\"wlc\",\"wle\",\"wlg\",\"wli\",\"wlk\",\"wll\",\"wlm\",\"wlo\",\"wlr\",\"wls\",\"wlu\",\"wlv\",\"wlw\",\"wlx\",\"wly\",\"wma\",\"wmb\",\"wmc\",\"wmd\",\"wme\",\"wmh\",\"wmi\",\"wmm\",\"wmn\",\"wmo\",\"wms\",\"wmt\",\"wmw\",\"wmx\",\"wnb\",\"wnc\",\"wnd\",\"wne\",\"wng\",\"wni\",\"wnk\",\"wnm\",\"wnn\",\"wno\",\"wnp\",\"wnu\",\"wnw\",\"wny\",\"woa\",\"wob\",\"woc\",\"wod\",\"woe\",\"wof\",\"wog\",\"woi\",\"wok\",\"wom\",\"won\",\"woo\",\"wor\",\"wos\",\"wow\",\"woy\",\"wpc\",\"wra\",\"wrb\",\"wrd\",\"wrg\",\"wrh\",\"wri\",\"wrk\",\"wrl\",\"wrm\",\"wrn\",\"wro\",\"wrp\",\"wrr\",\"wrs\",\"wru\",\"wrv\",\"wrw\",\"wrx\",\"wry\",\"wrz\",\"wsa\",\"wsg\",\"wsi\",\"wsk\",\"wsr\",\"wss\",\"wsu\",\"wsv\",\"wtf\",\"wth\",\"wti\",\"wtk\",\"wtm\",\"wtw\",\"wua\",\"wub\",\"wud\",\"wuh\",\"wul\",\"wum\",\"wun\",\"wur\",\"wut\",\"wuu\",\"wuv\",\"wux\",\"wuy\",\"wwa\",\"wwb\",\"wwo\",\"wwr\",\"www\",\"wxa\",\"wxw\",\"wya\",\"wyb\",\"wyi\",\"wym\",\"wyr\",\"wyy\",\"xaa\",\"xab\",\"xac\",\"xad\",\"xae\",\"xag\",\"xai\",\"xaj\",\"xak\",\"xal\",\"xam\",\"xan\",\"xao\",\"xap\",\"xaq\",\"xar\",\"xas\",\"xat\",\"xau\",\"xav\",\"xaw\",\"xay\",\"xba\",\"xbb\",\"xbc\",\"xbd\",\"xbe\",\"xbg\",\"xbi\",\"xbj\",\"xbm\",\"xbn\",\"xbo\",\"xbp\",\"xbr\",\"xbw\",\"xbx\",\"xby\",\"xcb\",\"xcc\",\"xce\",\"xcg\",\"xch\",\"xcl\",\"xcm\",\"xcn\",\"xco\",\"xcr\",\"xct\",\"xcu\",\"xcv\",\"xcw\",\"xcy\",\"xda\",\"xdc\",\"xdk\",\"xdm\",\"xdo\",\"xdy\",\"xeb\",\"xed\",\"xeg\",\"xel\",\"xem\",\"xep\",\"xer\",\"xes\",\"xet\",\"xeu\",\"xfa\",\"xga\",\"xgb\",\"xgd\",\"xgf\",\"xgg\",\"xgi\",\"xgl\",\"xgm\",\"xgn\",\"xgr\",\"xgu\",\"xgw\",\"xha\",\"xhc\",\"xhd\",\"xhe\",\"xhr\",\"xht\",\"xhu\",\"xhv\",\"xia\",\"xib\",\"xii\",\"xil\",\"xin\",\"xip\",\"xir\",\"xis\",\"xiv\",\"xiy\",\"xjb\",\"xjt\",\"xka\",\"xkb\",\"xkc\",\"xkd\",\"xke\",\"xkf\",\"xkg\",\"xkh\",\"xki\",\"xkj\",\"xkk\",\"xkl\",\"xkn\",\"xko\",\"xkp\",\"xkq\",\"xkr\",\"xks\",\"xkt\",\"xku\",\"xkv\",\"xkw\",\"xkx\",\"xky\",\"xkz\",\"xla\",\"xlb\",\"xlc\",\"xld\",\"xle\",\"xlg\",\"xli\",\"xln\",\"xlo\",\"xlp\",\"xls\",\"xlu\",\"xly\",\"xma\",\"xmb\",\"xmc\",\"xmd\",\"xme\",\"xmf\",\"xmg\",\"xmh\",\"xmj\",\"xmk\",\"xml\",\"xmm\",\"xmn\",\"xmo\",\"xmp\",\"xmq\",\"xmr\",\"xms\",\"xmt\",\"xmu\",\"xmv\",\"xmw\",\"xmx\",\"xmy\",\"xmz\",\"xna\",\"xnb\",\"xnd\",\"xng\",\"xnh\",\"xni\",\"xnk\",\"xnn\",\"xno\",\"xnr\",\"xns\",\"xnt\",\"xnu\",\"xny\",\"xnz\",\"xoc\",\"xod\",\"xog\",\"xoi\",\"xok\",\"xom\",\"xon\",\"xoo\",\"xop\",\"xor\",\"xow\",\"xpa\",\"xpc\",\"xpe\",\"xpg\",\"xpi\",\"xpj\",\"xpk\",\"xpm\",\"xpn\",\"xpo\",\"xpp\",\"xpq\",\"xpr\",\"xps\",\"xpt\",\"xpu\",\"xpy\",\"xqa\",\"xqt\",\"xra\",\"xrb\",\"xrd\",\"xre\",\"xrg\",\"xri\",\"xrm\",\"xrn\",\"xrq\",\"xrr\",\"xrt\",\"xru\",\"xrw\",\"xsa\",\"xsb\",\"xsc\",\"xsd\",\"xse\",\"xsh\",\"xsi\",\"xsj\",\"xsl\",\"xsm\",\"xsn\",\"xso\",\"xsp\",\"xsq\",\"xsr\",\"xss\",\"xsu\",\"xsv\",\"xsy\",\"xta\",\"xtb\",\"xtc\",\"xtd\",\"xte\",\"xtg\",\"xth\",\"xti\",\"xtj\",\"xtl\",\"xtm\",\"xtn\",\"xto\",\"xtp\",\"xtq\",\"xtr\",\"xts\",\"xtt\",\"xtu\",\"xtv\",\"xtw\",\"xty\",\"xtz\",\"xua\",\"xub\",\"xud\",\"xug\",\"xuj\",\"xul\",\"xum\",\"xun\",\"xuo\",\"xup\",\"xur\",\"xut\",\"xuu\",\"xve\",\"xvi\",\"xvn\",\"xvo\",\"xvs\",\"xwa\",\"xwc\",\"xwd\",\"xwe\",\"xwg\",\"xwj\",\"xwk\",\"xwl\",\"xwo\",\"xwr\",\"xwt\",\"xww\",\"xxb\",\"xxk\",\"xxm\",\"xxr\",\"xxt\",\"xya\",\"xyb\",\"xyj\",\"xyk\",\"xyl\",\"xyt\",\"xyy\",\"xzh\",\"xzm\",\"xzp\",\"yaa\",\"yab\",\"yac\",\"yad\",\"yae\",\"yaf\",\"yag\",\"yah\",\"yai\",\"yaj\",\"yak\",\"yal\",\"yam\",\"yan\",\"yao\",\"yap\",\"yaq\",\"yar\",\"yas\",\"yat\",\"yau\",\"yav\",\"yaw\",\"yax\",\"yay\",\"yaz\",\"yba\",\"ybb\",\"ybd\",\"ybe\",\"ybh\",\"ybi\",\"ybj\",\"ybk\",\"ybl\",\"ybm\",\"ybn\",\"ybo\",\"ybx\",\"yby\",\"ych\",\"ycl\",\"ycn\",\"ycp\",\"yda\",\"ydd\",\"yde\",\"ydg\",\"ydk\",\"yds\",\"yea\",\"yec\",\"yee\",\"yei\",\"yej\",\"yel\",\"yen\",\"yer\",\"yes\",\"yet\",\"yeu\",\"yev\",\"yey\",\"yga\",\"ygi\",\"ygl\",\"ygm\",\"ygp\",\"ygr\",\"ygs\",\"ygu\",\"ygw\",\"yha\",\"yhd\",\"yhl\",\"yhs\",\"yia\",\"yif\",\"yig\",\"yih\",\"yii\",\"yij\",\"yik\",\"yil\",\"yim\",\"yin\",\"yip\",\"yiq\",\"yir\",\"yis\",\"yit\",\"yiu\",\"yiv\",\"yix\",\"yiy\",\"yiz\",\"yka\",\"ykg\",\"yki\",\"ykk\",\"ykl\",\"ykm\",\"ykn\",\"yko\",\"ykr\",\"ykt\",\"yku\",\"yky\",\"yla\",\"ylb\",\"yle\",\"ylg\",\"yli\",\"yll\",\"ylm\",\"yln\",\"ylo\",\"ylr\",\"ylu\",\"yly\",\"yma\",\"ymb\",\"ymc\",\"ymd\",\"yme\",\"ymg\",\"ymh\",\"ymi\",\"ymk\",\"yml\",\"ymm\",\"ymn\",\"ymo\",\"ymp\",\"ymq\",\"ymr\",\"yms\",\"ymt\",\"ymx\",\"ymz\",\"yna\",\"ynd\",\"yne\",\"yng\",\"ynh\",\"ynk\",\"ynl\",\"ynn\",\"yno\",\"ynq\",\"yns\",\"ynu\",\"yob\",\"yog\",\"yoi\",\"yok\",\"yol\",\"yom\",\"yon\",\"yos\",\"yot\",\"yox\",\"yoy\",\"ypa\",\"ypb\",\"ypg\",\"yph\",\"ypk\",\"ypm\",\"ypn\",\"ypo\",\"ypp\",\"ypz\",\"yra\",\"yrb\",\"yre\",\"yri\",\"yrk\",\"yrl\",\"yrm\",\"yrn\",\"yro\",\"yrs\",\"yrw\",\"yry\",\"ysc\",\"ysd\",\"ysg\",\"ysl\",\"ysn\",\"yso\",\"ysp\",\"ysr\",\"yss\",\"ysy\",\"yta\",\"ytl\",\"ytp\",\"ytw\",\"yty\",\"yua\",\"yub\",\"yuc\",\"yud\",\"yue\",\"yuf\",\"yug\",\"yui\",\"yuj\",\"yuk\",\"yul\",\"yum\",\"yun\",\"yup\",\"yuq\",\"yur\",\"yut\",\"yuu\",\"yuw\",\"yux\",\"yuy\",\"yuz\",\"yva\",\"yvt\",\"ywa\",\"ywg\",\"ywl\",\"ywn\",\"ywq\",\"ywr\",\"ywt\",\"ywu\",\"yww\",\"yxa\",\"yxg\",\"yxl\",\"yxm\",\"yxu\",\"yxy\",\"yyr\",\"yyu\",\"yyz\",\"yzg\",\"yzk\",\"zaa\",\"zab\",\"zac\",\"zad\",\"zae\",\"zaf\",\"zag\",\"zah\",\"zai\",\"zaj\",\"zak\",\"zal\",\"zam\",\"zao\",\"zap\",\"zaq\",\"zar\",\"zas\",\"zat\",\"zau\",\"zav\",\"zaw\",\"zax\",\"zay\",\"zaz\",\"zbc\",\"zbe\",\"zbl\",\"zbt\",\"zbw\",\"zca\",\"zch\",\"zdj\",\"zea\",\"zeg\",\"zeh\",\"zen\",\"zga\",\"zgb\",\"zgh\",\"zgm\",\"zgn\",\"zgr\",\"zhb\",\"zhd\",\"zhi\",\"zhn\",\"zhw\",\"zhx\",\"zia\",\"zib\",\"zik\",\"zil\",\"zim\",\"zin\",\"zir\",\"ziw\",\"ziz\",\"zka\",\"zkb\",\"zkd\",\"zkg\",\"zkh\",\"zkk\",\"zkn\",\"zko\",\"zkp\",\"zkr\",\"zkt\",\"zku\",\"zkv\",\"zkz\",\"zle\",\"zlj\",\"zlm\",\"zln\",\"zlq\",\"zls\",\"zlw\",\"zma\",\"zmb\",\"zmc\",\"zmd\",\"zme\",\"zmf\",\"zmg\",\"zmh\",\"zmi\",\"zmj\",\"zmk\",\"zml\",\"zmm\",\"zmn\",\"zmo\",\"zmp\",\"zmq\",\"zmr\",\"zms\",\"zmt\",\"zmu\",\"zmv\",\"zmw\",\"zmx\",\"zmy\",\"zmz\",\"zna\",\"znd\",\"zne\",\"zng\",\"znk\",\"zns\",\"zoc\",\"zoh\",\"zom\",\"zoo\",\"zoq\",\"zor\",\"zos\",\"zpa\",\"zpb\",\"zpc\",\"zpd\",\"zpe\",\"zpf\",\"zpg\",\"zph\",\"zpi\",\"zpj\",\"zpk\",\"zpl\",\"zpm\",\"zpn\",\"zpo\",\"zpp\",\"zpq\",\"zpr\",\"zps\",\"zpt\",\"zpu\",\"zpv\",\"zpw\",\"zpx\",\"zpy\",\"zpz\",\"zqe\",\"zra\",\"zrg\",\"zrn\",\"zro\",\"zrp\",\"zrs\",\"zsa\",\"zsk\",\"zsl\",\"zsm\",\"zsr\",\"zsu\",\"zte\",\"ztg\",\"ztl\",\"ztm\",\"ztn\",\"ztp\",\"ztq\",\"zts\",\"ztt\",\"ztu\",\"ztx\",\"zty\",\"zua\",\"zuh\",\"zum\",\"zun\",\"zuy\",\"zwa\",\"zxx\",\"zyb\",\"zyg\",\"zyj\",\"zyn\",\"zyp\",\"zza\",\"zzj\"]\n;return axe.utils.validLangs=function(){\"use strict\";return N},commons}()})}(\"object\"==typeof window?window:this);";function runA11yChecks(){return window.axe.run(document,{elementRef:true,runOnly:{type:'tag',values:['wcag2a','wcag2aa']},resultTypes:['violations','inapplicable'],rules:{'tabindex':{enabled:true},'table-fake-caption':{enabled:true},'td-has-header':{enabled:true},'area-alt':{enabled:false},'blink':{enabled:false},'server-side-image-map':{enabled:false}}}).then(axeResult=>{axeResult.violations.forEach(v=>v.nodes.forEach(node=>{node.path=getNodePath(node.element);node.snippet=getOuterHTMLSnippet(node.element);node.element=node.any=node.all=node.none=undefined;}));axeResult={violations:axeResult.violations,notApplicable:axeResult.inapplicable};return axeResult;});function getNodePath(node){function getNodeIndex(node){let index=0;let prevNode;while(prevNode=node.previousSibling){node=prevNode;if(node.nodeType===Node.TEXT_NODE&&node.textContent&&node.textContent.trim().length===0)continue;index++;}
return index;}
const path=[];while(node&&node.parentNode){const index=getNodeIndex(node);path.push([index,node.nodeName]);node=node.parentNode;}
path.reverse();return path.join(',');}
function getOuterHTMLSnippet(el){const reOpeningTag=/^.*?>/;const match=el.outerHTML.match(reOpeningTag);return match&&match[0]||'';}}
class Accessibility extends Gatherer{afterPass(passContext){const driver=passContext.driver;const expression=`(function () {
      ${axeLibSource};
      return (${runA11yChecks.toString()}());
    })()`;return driver.evaluateAsync(expression,{useIsolation:true}).then(returnedValue=>{if(!returnedValue){throw new Error('No axe-core results returned');}
if(!Array.isArray(returnedValue.violations)){throw new Error('Unable to parse axe results'+returnedValue);}
return returnedValue;});}}
module.exports=Accessibility;},{"./gatherer":19}],"../gather/gatherers/cache-contents":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');function getCacheContents(){return caches.keys().then(cacheNames=>Promise.all(cacheNames.map(cacheName=>caches.open(cacheName)))).then(caches=>{const requests=[];return Promise.all(caches.map(cache=>{return cache.keys().then(reqs=>{requests.push(...reqs.map(r=>r.url));});})).then(_=>{return requests;});});}
class CacheContents extends Gatherer{async afterPass(passContext){const driver=passContext.driver;const cacheUrls=await driver.evaluateAsync(`(${getCacheContents.toString()}())`);if(!cacheUrls||!Array.isArray(cacheUrls)){throw new Error('Unable to retrieve cache contents');}
return cacheUrls;}}
module.exports=CacheContents;},{"./gatherer":19}],"../gather/gatherers/chrome-console-messages":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class ChromeConsoleMessages extends Gatherer{constructor(){super();this._logEntries=[];this._onConsoleEntryAdded=this.onConsoleEntry.bind(this);}
onConsoleEntry(entry){this._logEntries.push(entry);}
async beforePass(passContext){const driver=passContext.driver;driver.on('Log.entryAdded',this._onConsoleEntryAdded);await driver.sendCommand('Log.enable');await driver.sendCommand('Log.startViolationsReport',{config:[{name:'discouragedAPIUse',threshold:-1}]});}
async afterPass(passContext){await passContext.driver.sendCommand('Log.stopViolationsReport');await passContext.driver.off('Log.entryAdded',this._onConsoleEntryAdded);await passContext.driver.sendCommand('Log.disable');return this._logEntries;}}
module.exports=ChromeConsoleMessages;},{"./gatherer":19}],"../gather/gatherers/css-usage":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class CSSUsage extends Gatherer{async afterPass(passContext){const driver=passContext.driver;const stylesheets=[];const onStylesheetAdded=sheet=>stylesheets.push(sheet);driver.on('CSS.styleSheetAdded',onStylesheetAdded);await driver.sendCommand('DOM.enable');await driver.sendCommand('CSS.enable');await driver.sendCommand('CSS.startRuleUsageTracking');await driver.evaluateAsync('getComputedStyle(document.body)');driver.off('CSS.styleSheetAdded',onStylesheetAdded);const promises=stylesheets.map(sheet=>{const styleSheetId=sheet.header.styleSheetId;return driver.sendCommand('CSS.getStyleSheetText',{styleSheetId}).then(content=>{return{header:sheet.header,content:content.text};});});const styleSheetInfo=await Promise.all(promises);const ruleUsageResponse=await driver.sendCommand('CSS.stopRuleUsageTracking');await driver.sendCommand('CSS.disable');await driver.sendCommand('DOM.disable');const dedupedStylesheets=new Map(styleSheetInfo.map(sheet=>{return[sheet.content,sheet];}));return{rules:ruleUsageResponse.ruleUsage,stylesheets:Array.from(dedupedStylesheets.values())};}}
module.exports=CSSUsage;},{"./gatherer":19}],"../gather/gatherers/dobetterweb/all-event-listeners":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const Driver=require('../../driver.js');const Element=require('../../../lib/element.js');class EventListeners extends Gatherer{async listenForScriptParsedEvents(driver){const parsedScripts=new Map();const scriptListener=script=>{parsedScripts.set(script.scriptId,script);};driver.on('Debugger.scriptParsed',scriptListener);await driver.sendCommand('Debugger.enable');await driver.sendCommand('Debugger.disable');driver.off('Debugger.scriptParsed',scriptListener);return parsedScripts;}
_listEventListeners(driver,nodeIdOrObject){let promise;if(typeof nodeIdOrObject==='string'){promise=driver.sendCommand('Runtime.evaluate',{expression:nodeIdOrObject,objectGroup:'event-listeners-gatherer'}).then(result=>result.result);}else{promise=driver.sendCommand('DOM.resolveNode',{nodeId:nodeIdOrObject,objectGroup:'event-listeners-gatherer'}).then(result=>result.object);}
return promise.then(obj=>{const objectId=obj.objectId;const description=obj.description;if(!objectId||!description){return{listeners:[],tagName:''};}
return driver.sendCommand('DOMDebugger.getEventListeners',{objectId}).then(results=>{return{listeners:results.listeners,tagName:description};});});}
getEventListeners(driver,parsedScripts,nodeId){const matchedListeners=[];return this._listEventListeners(driver,nodeId).then(results=>{results.listeners.forEach(listener=>{const script=parsedScripts.get(listener.scriptId);if(script){matchedListeners.push({url:script.url,type:listener.type,handler:listener.handler,objectName:results.tagName,line:listener.lineNumber+1,col:listener.columnNumber+1});}});return matchedListeners;});}
collectListeners(driver,parsedScripts,nodeIds){return Promise.all(nodeIds.map(node=>this.getEventListeners(driver,parsedScripts,node))).then(nestedListeners=>nestedListeners.reduce((prev,curr)=>prev.concat(curr)));}
async afterPass(passContext){const driver=passContext.driver;await passContext.driver.sendCommand('DOM.enable');const parsedScripts=await this.listenForScriptParsedEvents(driver);const elements=await passContext.driver.getElementsInDocument();const elementIds=[...elements.map(el=>el.getNodeId()),'document','window'];const listeners=await this.collectListeners(driver,parsedScripts,elementIds);await passContext.driver.sendCommand('DOM.disable');return listeners;}}
module.exports=EventListeners;},{"../../../lib/element.js":31,"../../driver.js":17,"../gatherer":19}],"../gather/gatherers/dobetterweb/anchors-with-no-rel-noopener":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const DOMHelpers=require('../../../lib/dom-helpers.js');class AnchorsWithNoRelNoopener extends Gatherer{afterPass(passContext){const expression=`(function() {
      ${DOMHelpers.getElementsInDocumentFnString}; // define function on page
      const selector = 'a[target="_blank"]:not([rel~="noopener"]):not([rel~="noreferrer"])';
      const elements = getElementsInDocument(selector);
      return elements.map(node => ({
        href: node.href,
        rel: node.getAttribute('rel'),
        target: node.getAttribute('target')
      }));
    })()`;return passContext.driver.evaluateAsync(expression);}}
module.exports=AnchorsWithNoRelNoopener;},{"../../../lib/dom-helpers.js":30,"../gatherer":19}],"../gather/gatherers/dobetterweb/appcache":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');class AppCacheManifest extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.querySelector('html').then(node=>node&&node.getAttribute('manifest'));}}
module.exports=AppCacheManifest;},{"../gatherer":19}],"../gather/gatherers/dobetterweb/domstats":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');function getOuterHTMLSnippet(element){const reOpeningTag=/^.*?>/;const match=element.outerHTML.match(reOpeningTag);return match&&match[0];}
function createSelectorsLabel(element){let name=element.localName||'';const idAttr=element.getAttribute&&element.getAttribute('id');if(idAttr){name+=`#${idAttr}`;}
if(element.classList){const className=element.classList.toString();if(className){name+=`.${className.trim().replace(/\s+/g,'.')}`;}}else if(ShadowRoot.prototype.isPrototypeOf(element)){name+='#shadow-root';}
return name;}
function elementPathInDOM(element){const visited=new Set();const path=[createSelectorsLabel(element)];let node=element;while(node){visited.add(node);if(ShadowRoot.prototype.isPrototypeOf(node)){const isShadowHost=node.host&&node.localName!=='a';node=isShadowHost?node.host:node.parentElement;}else{const isShadowHost=node.parentNode&&node.parentNode.host&&node.parentNode.localName!=='a';node=isShadowHost?node.parentNode.host:node.parentElement;}
if(visited.has(node)){node=null;}
if(node){path.unshift(createSelectorsLabel(node));}}
return path;}
function getDOMStats(element,deep=true){let deepestNode=null;let maxDepth=0;let maxWidth=0;let parentWithMostChildren=null;const _calcDOMWidthAndHeight=function(element,depth=1){if(depth>maxDepth){deepestNode=element;maxDepth=depth;}
if(element.children.length>maxWidth){parentWithMostChildren=element;maxWidth=element.children.length;}
let child=element.firstElementChild;while(child){_calcDOMWidthAndHeight(child,depth+1);if(deep&&child.shadowRoot){_calcDOMWidthAndHeight(child.shadowRoot,depth+1);}
child=child.nextElementSibling;}
return{maxDepth,maxWidth};};const result=_calcDOMWidthAndHeight(element);return{depth:{max:result.maxDepth,pathToElement:elementPathInDOM(deepestNode),snippet:getOuterHTMLSnippet(deepestNode)},width:{max:result.maxWidth,pathToElement:elementPathInDOM(parentWithMostChildren),snippet:getOuterHTMLSnippet(parentWithMostChildren)}};}
class DOMStats extends Gatherer{afterPass(passContext){const expression=`(function() {
      ${getOuterHTMLSnippet.toString()};
      ${createSelectorsLabel.toString()};
      ${elementPathInDOM.toString()};
      return (${getDOMStats.toString()}(document.documentElement));
    })()`;return passContext.driver.sendCommand('DOM.enable').then(()=>passContext.driver.evaluateAsync(expression,{useIsolation:true})).then(results=>passContext.driver.getElementsInDocument().then(allNodes=>{results.totalDOMNodes=allNodes.length;return passContext.driver.sendCommand('DOM.disable').then(()=>results);}));}}
module.exports=DOMStats;},{"../gatherer":19}],"../gather/gatherers/dobetterweb/js-libraries":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const libDetectorSource="var UNKNOWN_VERSION = null;\nvar d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests = {\n\n    'GWT': {\n        icon: 'gwt',\n        url: 'http://www.gwtproject.org/',\n        test: function(win) {\n            // pretty complicated, many possible tell tales\n            var doc = win.document,\n                hasHistFrame = doc.getElementById('__gwt_historyFrame'),\n                hasGwtUid = doc.gwt_uid,\n                hasBodyListener = doc.body.__listener,\n                hasBodyEventBits = doc.body.__eventBits,\n                hasModules = win.__gwt_activeModules,\n                hasJsonP = win.__gwt_jsonp__,\n                hasRootWinApp = win.__gwt_scriptsLoaded || win.__gwt_stylesLoaded || win.__gwt_activeModules;\n\n            // use the many possible indicators\n            if(hasHistFrame || hasGwtUid || hasBodyListener || hasBodyEventBits || hasModules || hasJsonP || hasRootWinApp) {\n\n                // carefully look at frames, but only if certain is GWT frame\n                var frames = doc.getElementsByTagName('iframe'),\n                    gwtVersion = UNKNOWN_VERSION;\n                for(var n=0; n<frames.length; n++) {\n                    // catch security access errors\n                    try {\n                        var hasNegativeTabIndex = frames[n].tabIndex < 0; // on for GWT\n                        if(hasNegativeTabIndex && frames[n].contentWindow && frames[n].contentWindow.$gwt_version) {\n                            gwtVersion = frames[n].contentWindow.$gwt_version;\n                            break;\n                        }\n                    }\n                    catch(e) {}\n                }\n\n                if(gwtVersion=='0.0.999') {\n                  gwtVersion = 'Google Internal';\n                }\n\n                return { version: gwtVersion };\n            }\n            return false;\n        }\n    },\n\n    'Ink': {\n        icon: 'ink',\n        url: 'http://ink.sapo.pt/',\n        test: function(win) {\n            if (win.Ink && win.Ink.createModule) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Vaadin': {\n        icon: 'vaadin',\n        url: 'http://vaadin.com/home',\n        test: function(win) {\n            if (win.vaadin && win.vaadin.registerWidgetset) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Bootstrap': {\n        icon: 'bootstrap',\n        url: 'http://getbootstrap.com/',\n        npm: 'bootstrap',\n        // look for a function Boostrap has added to jQuery - regex for BS 2 & 3\n        test: function(win) {\n            var jQueryAvailable = win.$ && win.$.fn,\n                RE_PREFIX_V2 = '\\\\$this\\\\.data\\\\((?:\\'|\")',\n                RE_PREFIX_V3 = '\\\\$this\\\\.data\\\\((?:\\'|\")(?:bs\\\\.){1}',\n                bootstrapComponents = [\n                    'affix', 'alert', 'button', 'carousel', 'collapse', 'dropdown',\n                    'modal', 'popover', 'scrollspy', 'tab', 'tooltip'\n                ];\n\n            if(jQueryAvailable) {\n                var bootstrapVersion;\n\n                bootstrapComponents.some(function(component) {\n                    if(win.$.fn[component]) {\n                        // Bootstrap >= 3.2.0 detection\n                        if(win.$.fn[component].Constructor && win.$.fn[component].Constructor.VERSION) {\n                            bootstrapVersion = win.$.fn[component].Constructor.VERSION;\n                            return true;\n                        // Bootstrap >= 2.0.0 and <= 3.1.0 detection\n                        } else if(new RegExp(RE_PREFIX_V3 + component).test(win.$.fn[component].toString())) {\n                            bootstrapVersion = '>= 3.0.0 & <= 3.1.1';\n                            return true;\n                        // Bootstrap < 3.1.0 detection\n                        } else if(new RegExp(RE_PREFIX_V2 + component).test(win.$.fn[component].toString())) {\n                            bootstrapVersion = '>= 2.0.0 & <= 2.3.2';\n                            return true;\n                        }\n                    }\n\n                    return false;\n                });\n\n                if (bootstrapVersion) {\n                    return { version: bootstrapVersion };\n                }\n            }\n\n            return false;\n        }\n    },\n\n    'Zurb': {\n        icon: 'zurb',\n        url: 'http://foundation.zurb.com/',\n        npm: 'foundation-sites',\n        test: function(win) {\n            if(win.Foundation && win.Foundation.Toggler) {\n                return { version: win.Foundation.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Polymer': {\n        icon: 'polymer',\n        url: 'http://www.polymer-project.org/',\n        npm: '@polymer/polymer',\n        test: function(win) {\n            if(win.Polymer && win.Polymer.dom) {\n                return { version: win.Polymer.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Highcharts': {\n        icon: 'highcharts',\n        url: 'http://www.highcharts.com',\n        npm: 'highcharts',\n        test: function(win) {\n            if(win.Highcharts && win.Highcharts.Point) {\n                return { version: win.Highcharts.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'InfoVis': {\n        icon: 'jit',\n        url: 'http://philogb.github.com/jit/',\n        test: function test(win) {\n            if(win.$jit && win.$jit.PieChart) {\n                return { version: win.$jit.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'FlotCharts': {\n        icon: 'icon_48',\n        url: 'http://www.flotcharts.org/',\n        npm: 'flot',\n        test: function(win) {\n            if(win.$ && win.$.plot) {\n                return { version: win.$.plot.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Blackbird': {\n        icon: 'blackbird',\n        url: 'http://www.gscottolson.com/blackbirdjs/',\n        test: function(win) {\n            if(win.log && win.log.warn) {\n                return { version: UNKNOWN_VERSION}; // no version info\n            }\n            return false;\n        }\n    },\n\n    'CreateJS': {\n        icon: 'createjs',\n        url: 'http://createjs.com/#!/CreateJS',\n        npm: 'createjs',\n        test: function(win) {\n            if(win.createjs && win.createjs.promote) {\n                return { version: UNKNOWN_VERSION}; // no version info available\n            }\n            return false;\n        }\n    },\n\n    'Google Maps': {\n        icon: 'gmaps',\n        url: 'https://developers.google.com/maps/',\n        test: function(win) {\n            if (win.google && win.google.maps) {\n                return { version: win.google.maps.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'jQuery': {\n        icon: 'jquery',\n        url: 'http://jquery.com',\n        npm: 'jquery',\n        test: function(win) {\n            var jq = win.jQuery || win.$;\n            if (jq && jq.fn) {\n                return { version: jq.fn.jquery.replace(/[^\\d+\\.+]/g, '') || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'jQuery UI': {\n        icon: 'jquery_ui',\n        url: 'http://jqueryui.com',\n        npm: 'jquery-ui',\n        test: function(win) {\n            var jq = win.jQuery || win.$ || win.$jq || win.$j;\n            if(jq && jq.fn && jq.fn.jquery && jq.ui) {\n                var plugins = 'accordion,datepicker,dialog,draggable,droppable,progressbar,resizable,selectable,slider,menu,grid,tabs'.split(','), concat = [];\n                for (var i=0; i < plugins.length; i++) { if(jq.ui[plugins[i]]) concat.push(plugins[i].substr(0,1).toUpperCase() + plugins[i].substr(1)); }\n                return { version: jq.ui.version || UNKNOWN_VERSION, details: concat.length ? 'Plugins used: '+concat.join(',') : '' };\n            }\n            return false;\n        }\n    },\n\n    'Dojo': {\n        icon: 'dojo',\n        url: 'http://dojotoolkit.org',\n        npm: 'dojo',\n        test: function(win) {\n            if(win.dojo && win.dojo.delegate) {\n                var version = win.dojo.version ? win.dojo.version.toString() : UNKNOWN_VERSION;\n                return { version: version, details: 'Details: '+(win.dijit ? 'Uses Dijit' : 'none') };\n            }\n            return false;\n        }\n    },\n\n    'Prototype': {\n        icon: 'prototype',\n        url: 'http://prototypejs.org',\n        test: function(win) {\n            if(win.Prototype && win.Prototype.BrowserFeatures) {\n                return { version: win.Prototype.Version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Scriptaculous': {\n        icon: 'scriptaculous',\n        url: 'http://script.aculo.us',\n        test: function(win) {\n            if(win.Scriptaculous && win.Scriptaculous.load) {\n                return { version: win.Scriptaculous.Version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'MooTools': {\n        icon: 'mootools',\n        url: 'http://mootools.net',\n        test: function(win) {\n            if(win.MooTools && win.MooTools.build) {\n                return { version: win.MooTools.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Spry': {\n        icon: 'spry',\n        url: 'http://labs.adobe.com/technologies/spry',\n        test: function(win) {\n            if (win.Spry && win.Spry.Data) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'YUI 2': {\n        icon: 'yui',\n        url: 'http://developer.yahoo.com/yui/2/',\n        test: function(win) {\n            if (win.YAHOO && win.YAHOO.util) {\n                return { version: win.YAHOO.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'YUI 3': {\n        icon: 'yui3',\n        url: 'http://yuilibrary.com/',\n        npm: 'yui',\n        test: function(win) {\n            if (win.YUI && win.YUI.Env) {\n                return { version: win.YUI.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Qooxdoo': {\n        icon: 'qooxdoo',\n        url: 'http://qooxdoo.org',\n        npm: 'qooxdoo',\n        test: function(win) {\n            if(win.qx && win.qx.Bootstrap) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Ext JS': {\n        icon: 'extjs',\n        url: 'http://www.sencha.com/products/extjs',\n        test: function(win) {\n            if (win.Ext && win.Ext.versions) {\n                return { version: win.Ext.versions.core.version };\n            }\n            else if(win.Ext) {\n                return { version: win.Ext.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'base2': {\n        icon: 'base2',\n        url: 'http://code.google.com/p/base2',\n        test: function(win) {\n            if(win.base2 && win.base2.dom) {\n                return { version: win.base2.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Closure Library': {\n        icon: 'closure',\n        url: 'https://developers.google.com/closure/library',\n        npm: 'google-closure-library',\n        test: function(win) {\n            if(win.goog && win.goog.provide) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Rapha&euml;l': {\n        icon: 'raphael',\n        url: 'http://dmitrybaranovskiy.github.io/raphael',\n        test: function(win) {\n            if (win.Raphael && win.Raphael.circle) {\n                return { version: win.Raphael.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'React': {\n        icon: 'react',\n        url: 'https://facebook.github.io/react/',\n        npm: 'react',\n        test: function(win) {\n            var reactRoot = document.getElementById('react-root');\n            var altHasReact = document.querySelector('*[data-reactroot]');\n            if (reactRoot && reactRoot.innerText.length > 0 || altHasReact || win.React && win.React.Component) {\n                return { version: win.React && win.React.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Modernizr': {\n        icon: 'modernizr',\n        url: 'http://www.modernizr.com',\n        npm: 'modernizr',\n        test: function(win) {\n            if (win.Modernizr && win.Modernizr.addTest) {\n                return { version: win.Modernizr._version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Processing.js': {\n        icon: 'processingjs',\n        url: 'http://processingjs.org',\n        npm: 'processing-js',\n        test: function(win) {\n            if(win.Processing && win.Processing.box) {\n                return { version: Processing.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Backbone': {\n        icon: 'backbone',\n        url: 'http://backbonejs.org/',\n        npm: 'backbone',\n        test: function(win) {\n            if (win.Backbone && win.Backbone.Model.extend) {\n                return {version: win.Backbone.VERSION || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Leaflet': {\n        icon: 'leaflet',\n        url: 'http://leafletjs.com',\n        npm: 'leaflet',\n        test: function(win) {\n            // Leaflet 3.1 uses L.Marker and L.VERSION; later versions use L.marker and L.version\n            if (win.L && win.L.GeoJSON && (win.L.marker || win.L.Marker)) {\n                return { version: win.L.version || win.L.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Mapbox': {\n        icon: 'mapbox',\n        url: 'http://mapbox.com',\n        npm: 'mapbox-gl',\n        test: function(win) {\n            if (win.L && win.L.mapbox && win.L.mapbox.geocoder) {\n                return { version: win.L.mapbox.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Lo-Dash': {\n        icon: 'lodash',\n        url: 'http://lodash.com/',\n        npm: 'lodash',\n        test: function(win) {\n            var _ = typeof (_ = win._) == 'function' && _,\n                chain = typeof (chain = _ && _.chain) == 'function' && chain,\n                wrapper = (chain || _ || function() { return {}; })(1);\n\n            if (_ && wrapper.__wrapped__) {\n                return { version: _.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Underscore': {\n        icon: 'underscore',\n        url: 'http://underscorejs.org/',\n        npm: 'underscore',\n        test: function(win) {\n            if (win._ && typeof win._.tap === 'function' &&\n                !d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests['Lo-Dash'].test(win)) {\n                return {version: win._.VERSION || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Sammy': {\n        icon: 'sammy',\n        url: 'http://sammyjs.org',\n        test: function(win) {\n            if (win.Sammy && win.Sammy.Application.curry) {\n                return {version: win.Sammy.VERSION || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Rico': {\n        icon: 'rico',\n        url: 'http://openrico.sourceforge.net/examples/index.html',\n        test:  function(win) {\n            if (win.Rico && window.Rico.checkIfComplete) {\n                return {version: win.Rico.Version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'MochiKit': {\n        icon: 'mochikit',\n        url: 'https://mochi.github.io/mochikit/',\n        test: function(win) {\n            if (win.MochiKit && win.MochiKit.Base.module) {\n                return {version: MochiKit.VERSION || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'gRapha&euml;l': {\n        icon: 'graphael',\n        url: 'http://g.raphaeljs.com',\n        test: function(win) {\n            if (win.Raphael && win.Raphael.fn.g) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Glow': {\n        icon: 'glow',\n        url: 'http://www.bbc.co.uk/glow',\n        test: function(win) {\n            if (win.gloader && win.gloader.getRequests) {\n                return {version: UNKNOWN_VERSION};\n            }\n            else if (win.glow && win.glow.dom) {\n                return {version: win.glow.VERSION || UNKNOWN_VERSION};\n            }\n            else if (win.Glow) {\n                return {version: win.Glow.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Socket.IO': {\n        icon: 'socketio', // currently has no icon\n        url: 'http://socket.io',\n        npm: 'socket.io',\n        test: function(win) {\n            // version 0.6.2 uses only io.Socket; more recent versions also have io.sockets\n            if (win.io && (win.io.sockets || win.io.Socket)) {\n                return {version: win.io.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Mustache': {\n        icon: 'mustache',\n        url: 'http://mustache.github.com',\n        npm: 'mustache',\n        test: function(win) {\n            if (win.Mustache && win.Mustache.to_html) {\n                return {version: win.Mustache.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Fabric.js': {\n        icon: 'icon_48', // currently has no icon\n        url: 'http://fabricjs.com/',\n        npm: 'fabric',\n        test: function(win) {\n            if (win.fabric && win.fabric.util) {\n                return {version: win.fabric.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'FuseJS': {\n        icon: 'fusejs',\n        url: 'http://fusejs.io/',\n        npm: 'fuse.js',\n        test: function(win) {\n            if (win.Fuse) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Tween.js': {\n        icon: 'icon_48', // currently has no icon\n        url: 'https://github.com/sole/tween.js',\n        npm: 'tween.js',\n        test: function(win) {\n            if (win.TWEEN && win.TWEEN.Easing) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'SproutCore': {\n       icon: 'sproutcore',\n       url: 'http://www.sproutcore.com',\n       test: function(win) {\n           if (win.SC && win.SC.Application) {\n               return {version: UNKNOWN_VERSION};\n           }\n           return false;\n       }\n    },\n\n    'Zepto.js': {\n       icon: 'zepto',\n       url: 'http://zeptojs.com',\n       npm: 'zepto',\n       test: function(win) {\n           if (win.Zepto && win.Zepto.fn) {\n               return {version: UNKNOWN_VERSION};\n           }\n           return false;\n       }\n    },\n\n    'three.js': {\n       icon: 'icon_48', // currently has no icon\n       url: 'http://threejs.org/',\n       npm: 'three',\n       test: function(win) {\n           if (win.THREE && win.THREE.REVISION) {\n               return {version: 'r' + win.THREE.REVISION};\n           }\n           else if (win.THREE) {\n               return {version: UNKNOWN_VERSION};\n           }\n           return false;\n       }\n    },\n\n    'PhiloGL': {\n       icon: 'philogl',\n       url: 'http://www.senchalabs.org/philogl/',\n       npm: 'philogl',\n       test: function(win) {\n           if (win.PhiloGL && win.PhiloGL.Camera) {\n               return {version: win.PhiloGL.version || UNKNOWN_VERSION};\n           }\n           return false;\n       }\n    },\n\n    'CamanJS': {\n        icon: 'camanjs',\n        url: 'http://camanjs.com/',\n        npm: 'caman',\n        test: function(win) {\n            if (win.Caman && win.Caman.version) {\n                return {version: win.Caman.version.release};\n            }\n            else if (win.Caman) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'yepnope': {\n        icon: 'yepnope',\n        url: 'http://yepnopejs.com/',\n        test: function(win) {\n            if (win.yepnope && win.yepnope.injectJs) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'LABjs': {\n        icon: 'icon_48',\n        url: 'http://labjs.com/',\n        test: function(win) {\n            if (win.$LAB && win.$LAB.setOptions) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'Head JS': {\n        icon: 'headjs',\n        url: 'http://headjs.com/',\n        npm: 'headjs',\n        test: function(win) {\n            if (win.head && win.head.js) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'ControlJS': {\n        icon: 'icon_48',\n        url: 'http://stevesouders.com/controljs/',\n        test: function(win) {\n            if (win.CJS && win.CJS.start) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'RequireJS': {\n        icon: 'requirejs',\n        url: 'http://requirejs.org/',\n        npm: 'requirejs',\n        test: function(win) {\n            var req = win.require || win.requirejs;\n            if (req && (req.load || (req.s && req.s.contexts && req.s.contexts._ && (req.s.contexts._.loaded || req.s.contexts._.load)))) {\n                return { version: req.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'RightJS': {\n        icon: 'rightjs',\n        url: 'http://rightjs.org/',\n        test: function(win) {\n            if (win.RightJS && win.RightJS.isNode) {\n                return { version: win.RightJS.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'jQuery Tools': {\n       icon: 'jquerytools',\n       url: 'http://jquerytools.github.io/',\n       test: function(win) {\n            var jq = win.jQuery || win.$;\n            if(jq && jq.tools) {\n               return { version: jq.tools.version || UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'Pusher': {\n       icon: 'pusher',\n       url: 'http://pusher.com/docs/pusher_js/',\n       npm: 'pusher-js',\n       test: function(win) {\n            if(win.Pusher && win.Pusher.Channel) {\n               return { version: win.Pusher.VERSION || UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'Paper.js': {\n       icon: 'paperjs',\n       url: 'http://paperjs.org/',\n       npm: 'paper',\n       test: function(win) {\n            if(win.paper && win.paper.Point) {\n               return { version: win.paper.version || UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'Swiffy': {\n       icon: 'icon_48',\n       url: 'http://www.google.com/doubleclick/studio/swiffy/',\n       test: function(win) {\n            if(win.swiffy && win.swiffy.Stage) {\n               return { version: UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'Move': {\n       icon: 'move',\n       url: 'https://github.com/rsms/move',\n       npm: 'move',\n       test: function(win) {\n            if(win.move && win.move.compile) {\n               return { version: win.move.version() || UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'AmplifyJS': {\n       icon: 'amplifyjs',\n       url: 'http://amplifyjs.com/',\n       npm: 'amplifyjs',\n       test: function(win) {\n            if(win.amplify && win.amplify.publish) {\n               return { version: UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'Popcorn.js': {\n       icon: 'popcornjs',\n       url: 'http://popcornjs.org/',\n       test: function(win) {\n            if (win.Popcorn && win.Popcorn.Events) {\n               return { version: win.Popcorn.version || UNKNOWN_VERSION };\n           }\n           return false;\n       }\n    },\n\n    'D3': {\n        icon: 'd3',\n        url: 'http://d3js.org',\n        npm: 'd3',\n        test: function(win) {\n            if (win.d3 && win.d3.select) {\n                return { version: win.d3.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Handlebars': {\n        icon: 'handlebars',\n        url: 'http://handlebarsjs.com/',\n        npm: 'handlebars',\n        test: function(win) {\n            if(win.Handlebars && win.Handlebars.compile) {\n                return { version: win.Handlebars.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Knockout': {\n        icon: 'knockout',\n        url: 'http://knockoutjs.com/',\n        npm: 'knockout',\n        test: function(win) {\n            if (win.ko && win.ko.applyBindings) {\n                return { version: win.ko.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Spine': {\n        icon: 'icon_48',\n        url: 'http://spinejs.com/',\n        test: function(win) {\n            if (win.Spine && win.Spine.Controller) {\n                return {version: win.Spine.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n\n    'jQuery Mobile': {\n        icon: 'jquery_mobile',\n        url: 'http://jquerymobile.com/',\n        npm: 'jquery-mobile',\n        test: function(win) {\n            var jq = win.jQuery || win.$ || win.$jq || win.$j;\n            if(jq && jq.fn && jq.fn.jquery && jq.mobile) {\n                return { version: jq.mobile.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'WebFont Loader': {\n        icon: 'icon_48',\n        url: 'https://github.com/typekit/webfontloader',\n        npm: 'webfontloader',\n        test: function(win) {\n            if(win.WebFont && win.WebFont.load) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Angular': {\n        icon: 'angular',\n        url: 'https://angular.io/',\n        npm: '@angular/core',\n        test: function(win) {\n            var ng = win.document.querySelector('[ng-version]');\n            if (ng) {\n                return { version: ng.getAttribute('ng-version') || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'AngularJS': {\n        icon: 'angularjs',\n        url: 'http://angularjs.org',\n        npm: 'angular',\n        test: function(win) {\n            var ng = win.angular;\n            if(ng && ng.version && ng.version.full) {\n                return { version: ng.version.full };\n            }\n            else if (ng) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Ember.js': {\n        icon: 'emberjs',\n        url: 'http://emberjs.com/',\n        npm: 'ember-source',\n        test: function(win) {\n            var ember = win.Ember || win.Em;\n            if (ember && ember.propertyDidChange) {\n                return { version: ember.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Hammer.js': {\n        icon: 'hammerjs',\n        url: 'http://eightmedia.github.io/hammer.js/',\n        npm: 'hammerjs',\n        test: function(win) {\n            if(win.Hammer && win.Hammer.Pinch) {\n                // Hammer.VERSION available in 1.0.10+\n                return { version: win.Hammer.VERSION || \"&lt; 1.0.10\" };\n            }\n            return false;\n        }\n    },\n\n    'Visibility.js': {\n        icon: 'icon_48',\n        url: 'https://github.com/ai/visibilityjs',\n        npm: 'visibilityjs',\n        test: function(win) {\n            if(win.Visibility && win.Visibility.every) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'Velocity.js': {\n        icon: 'icon_48',\n        url: 'http://velocityjs.org/',\n        npm: 'velocity-animate',\n        test: function(win) {\n            var jq = win.jQuery || win.$,\n                velocity = jq ? jq.Velocity : win.Velocity;\n\n            if(velocity && velocity.RegisterEffect && velocity.version) {\n                return {\n                    version:\n                        velocity.version.major + \".\" +\n                        velocity.version.minor + \".\" +\n                        velocity.version.patch\n                };\n            }\n            else if (velocity && velocity.RegisterEffect) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n\n    'IfVisible.js': {\n        icon: 'icon_48',\n        url: 'http://serkanyersen.github.io/ifvisible.js/',\n        npm: 'ifvisible.js',\n        test: function(win) {\n            var iv = win.ifvisible;\n            if(iv && iv.__ceGUID === \"ifvisible.object.event.identifier\") {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Pixi.js': {\n        icon: 'pixi',\n        url: 'https://github.com/GoodBoyDigital/pixi.js',\n        npm: 'pixi.js',\n        test: function(win) {\n            var px = win.PIXI;\n            if(px && px.WebGLRenderer && px.VERSION) {\n                // version 4.4.3 returns simply \"4.4.3\"; version 1.5.2 returns \"v1.5.2\"\n                return { version: px.VERSION.replace('v', '') || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'DC.js': {\n        icon: 'icon_48',\n        url: 'http://dc-js.github.io/dc.js/',\n        npm: 'dc',\n        test: function(win) {\n            var dc = win.dc;\n            if(dc && dc.registerChart) {\n                return { version: dc.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'GreenSock JS': {\n        icon: 'greensock',\n        url: 'https://github.com/greensock/GreenSock-JS',\n        npm: 'gsap',\n        test: function(win) {\n            if (win.TweenMax && win.TweenMax.pauseAll) {\n                return { version: win.TweenMax.version || UNKNOWN_VERSION }\n            }\n            return false;\n        }\n    },\n    'FastClick': {\n        icon: 'fastclick',\n        url: 'https://github.com/ftlabs/fastclick',\n        npm: 'fastclick',\n        test: function(win) {\n            if(win.FastClick && win.FastClick.notNeeded) {\n                return { version: UNKNOWN_VERSION }\n            }\n            return false;\n        }\n    },\n    'Isotope': {\n        icon: 'isotope',\n        url: 'http://isotope.metafizzy.co/',\n        npm: 'isotope-layout',\n        test: function(win) {\n            if(win.Isotope || (win.$ != null && win.$.Isotope)) {\n                return { version: UNKNOWN_VERSION }\n            }\n            return false;\n        }\n    },\n    'Marionette': {\n        icon: 'marionette',\n        url: 'http://marionettejs.com/',\n        npm: 'backbone.marionette',\n        test: function(win) {\n            if(win.Marionette && win.Marionette.Application) {\n                return { version: win.Marionette.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Can': {\n        icon: 'icon_48',\n        url: 'http://canjs.com/',\n        npm: 'can',\n        test: function (win) {\n            if (win.can && win.can.Construct) {\n                return { version: win.can.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Vue': {\n        icon: 'vue',\n        url: 'http://vuejs.org/',\n        npm: 'vue',\n        test: function(win) {\n            if (win.Vue && win.Vue.nextTick) {\n                return { version: win.Vue.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Two': {\n        icon: 'two',\n        url: 'https://jonobr1.github.io/two.js',\n        npm: 'two.js',\n        test: function(win) {\n            if (win.Two && win.Two.Utils) {\n                return { version: win.Two.Version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Brewser': {\n        icon: 'brewser',\n        url: 'http://handcraftedldn.github.io/brewser/',\n        npm: 'brewser',\n        test: function(win) {\n            if(win.BREWSER && win.BREWSER.ua) {\n                return { version: BREWSER.VERSION || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Material Design Lite': {\n    \ticon: 'mdl',\n    \turl: 'http://www.getmdl.io/',\n        npm: 'material-design-lite',\n    \ttest: function(win) {\n    \t\tif(win.componentHandler && win.componentHandler.upgradeElement) {\n    \t\t\treturn { version: UNKNOWN_VERSION};\n    \t\t}\n    \t\treturn false;\n    \t}\n    },\n    'Kendo UI': {\n        icon: 'kendoui',\n        url: 'https://github.com/telerik/kendo-ui-core',\n        npm: 'kendo-ui-core',\n        test: function(win) {\n            if (win.kendo && win.kendo.View && win.kendo.View.extend) {\n                return {version: win.kendo.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n    'Matter.js': {\n        icon: 'matter-js',\n        url: 'http://brm.io/matter-js/',\n        npm: 'matter-js',\n        test: function(win) {\n            if (win.Matter && win.Matter.Engine) {\n                return {version: UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n    'Riot': {\n        icon: 'riot',\n        url: 'http://riotjs.com/',\n        npm: 'riot',\n        test: function(win) {\n            if (win.riot && win.riot.mixin) {\n                return { version: win.riot.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Sea.js': {\n        icon: 'icon_48',\n        url: 'http://seajs.org/',\n        npm: 'seajs',\n        test: function(win) {\n            if(win.seajs && win.seajs.use) {\n                return { version: win.seajs.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Moment.js': {\n        icon: 'momentjs',\n        url: 'http://momentjs.com/',\n        npm: 'moment',\n        test: function(win) {\n            if(win.moment && (win.moment.isMoment || win.moment.lang)) {\n                // version 1.0.0 has neither \"isMoment\" nor \"version\"\n                return { version: win.moment.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Moment Timezone': {\n        icon: 'momentjs',\n        url: 'http://momentjs.com/timezone/',\n        npm: 'moment-timezone',\n        test: function(win) {\n            if (win.moment && win.moment.tz) {\n                return { version: win.moment.tz.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'ScrollMagic': {\n        icon: 'scrollmagic',\n        url: 'http://scrollmagic.io/',\n        npm: 'scrollmagic',\n        test: function(win) {\n            if (win.ScrollMagic && win.ScrollMagic.Controller) {\n                return {version: ScrollMagic.version || UNKNOWN_VERSION};\n            }\n            return false;\n        }\n    },\n    'SWFObject': {\n        icon: 'icon_48', // currently has no icon\n        url: 'https://github.com/swfobject/swfobject',\n        test: function(win) {\n            if (win.swfobject && win.swfobject.embedSWF) {\n                // 2.x - exact version only for 2.3\n                return { version: win.swfobject.version || UNKNOWN_VERSION };\n            } else if(win.deconcept && win.deconcept.SWFObject) {\n                // 1.x\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'FlexSlider': {\n        icon: 'icon_48', // currently has no icon\n        url: 'https://woocommerce.com/flexslider/',\n        npm: 'flexslider',\n        test: function(win) {\n            var jq = win.jQuery || win.$ || win.$jq || win.$j;\n            if (jq && jq.fn && jq.fn.jquery && jq.flexslider){\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'SPF': {\n        icon: 'icon_48', // currently has no icon\n        url: 'https://youtube.github.io/spfjs/',\n        npm: 'spf',\n        test: function(win) {\n            if (win.spf && win.spf.init) {\n                return { version: UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Numeral.js': {\n        icon: 'icon_48', // currently has no icon\n        url: 'http://numeraljs.com/',\n        npm: 'numeraljs',\n        test: function(win) {\n            if (win.numeral && win.isNumeral) {\n                return { version: win.numeral.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'boomerang.js': {\n        icon: 'icon_48', // currently has no icon\n        url: 'https://soasta.github.io/boomerang/doc/',\n        npm: 'boomerangjs',\n        test: function(win) {\n            if (win.BOOMR && win.BOOMR.utils && win.BOOMR.init) {\n                return { version: win.BOOMR.version || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    },\n    'Framer': {\n        icon: 'framer',\n        url: 'https://framer.com/',\n        npm: 'framerjs',\n        test: function(win) {\n            if (win.Framer && win.Framer.Layer) {\n                return { version: win.Framer.Version.build || UNKNOWN_VERSION };\n            }\n            return false;\n        }\n    }\n};\n";function detectLibraries(){const libraries=[];Object.entries(d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests).forEach(([name,lib])=>{try{const result=lib.test(window);if(result){libraries.push({name:name,version:result.version,npmPkgName:lib.npm});}}catch(e){}});return libraries;}
class JSLibraries extends Gatherer{afterPass(passContext){const expression=`(function () {
      ${libDetectorSource};
      return (${detectLibraries.toString()}());
    })()`;return passContext.driver.evaluateAsync(expression);}}
module.exports=JSLibraries;},{"../gatherer":19}],"../gather/gatherers/dobetterweb/optimized-images":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const URL=require('../../../lib/url-shim');const Sentry=require('../../../lib/sentry');const Driver=require('../../driver.js');const JPEG_QUALITY=0.92;const WEBP_QUALITY=0.85;const MINIMUM_IMAGE_SIZE=4096;function getOptimizedNumBytes(url){return new Promise(function(resolve,reject){const img=new Image();const canvas=document.createElement('canvas');const context=canvas.getContext('2d');if(!context){return reject(new Error('unable to create canvas context'));}
function getTypeStats(type,quality){const dataURI=canvas.toDataURL(type,quality);const base64=dataURI.slice(dataURI.indexOf(',')+1);return{base64:base64.length,binary:atob(base64).length};}
img.addEventListener('error',reject);img.addEventListener('load',()=>{try{canvas.height=img.height;canvas.width=img.width;context.drawImage(img,0,0);const jpeg=getTypeStats('image/jpeg',0.92);const webp=getTypeStats('image/webp',0.85);resolve({jpeg,webp});}catch(err){reject(err);}},false);img.src=url;});}
class OptimizedImages extends Gatherer{static filterImageRequests(pageUrl,networkRecords){const seenUrls=new Set();return networkRecords.reduce((prev,record)=>{if(seenUrls.has(record._url)||!record.finished){return prev;}
seenUrls.add(record._url);const isOptimizableImage=record._resourceType&&record._resourceType._name==='image'&&/image\/(png|bmp|jpeg)/.test(record._mimeType);const isSameOrigin=URL.originsMatch(pageUrl,record._url);const isBase64DataUri=/^data:.{2,40}base64\s*,/.test(record._url);const actualResourceSize=Math.min(record._resourceSize||0,record._transferSize||0);if(isOptimizableImage&&actualResourceSize>MINIMUM_IMAGE_SIZE){prev.push({isSameOrigin,isBase64DataUri,requestId:record._requestId,url:record._url,mimeType:record._mimeType,resourceSize:actualResourceSize});}
return prev;},[]);}
_getEncodedResponse(driver,requestId,encoding){const quality=encoding==='jpeg'?JPEG_QUALITY:WEBP_QUALITY;const params={requestId,encoding,quality,sizeOnly:true};return driver.sendCommand('Audits.getEncodedResponse',params);}
calculateImageStats(driver,networkRecord){return Promise.resolve(networkRecord.requestId).then(requestId=>{if(this._getEncodedResponseUnsupported)return;return this._getEncodedResponse(driver,requestId,'jpeg').then(jpegData=>{return this._getEncodedResponse(driver,requestId,'webp').then(webpData=>{return{fromProtocol:true,originalSize:networkRecord.resourceSize,jpegSize:jpegData.encodedSize,webpSize:webpData.encodedSize};});}).catch(err=>{if(/wasn't found/.test(err.message)){this._getEncodedResponseUnsupported=true;}else{throw err;}});}).then(result=>{if(result)return result;if(!networkRecord.isSameOrigin&&!networkRecord.isBase64DataUri)return null;const script=`(${getOptimizedNumBytes.toString()})(${JSON.stringify(networkRecord.url)})`;return driver.evaluateAsync(script).then(stats=>{if(!stats)return null;const isBase64DataUri=networkRecord.isBase64DataUri;const base64Length=networkRecord.url.length-networkRecord.url.indexOf(',')-1;return{fromProtocol:false,originalSize:isBase64DataUri?base64Length:networkRecord.resourceSize,jpegSize:isBase64DataUri?stats.jpeg.base64:stats.jpeg.binary,webpSize:isBase64DataUri?stats.webp.base64:stats.webp.binary};});});}
async computeOptimizedImages(driver,imageRecords){const results=[];for(const record of imageRecords){try{const stats=await this.calculateImageStats(driver,record);if(stats===null){continue;}
const image=Object.assign({failed:false},stats,record);results.push(image);}catch(err){Sentry.captureException(err,{tags:{gatherer:'OptimizedImages'},extra:{imageUrl:URL.elideDataURI(record.url)},level:'warning'});const imageError=Object.assign({failed:true,errMsg:err.message},record);results.push(imageError);}}
return results;}
afterPass(passContext,loadData){const networkRecords=loadData.networkRecords;const imageRecords=OptimizedImages.filterImageRequests(passContext.url,networkRecords);return Promise.resolve().then(_=>this.computeOptimizedImages(passContext.driver,imageRecords)).then(results=>{const successfulResults=results.filter(result=>!result.failed);if(results.length&&!successfulResults.length){throw new Error('All image optimizations failed');}
return results;});}}
module.exports=OptimizedImages;},{"../../../lib/sentry":39,"../../../lib/url-shim":"url","../../driver.js":17,"../gatherer":19}],"../gather/gatherers/dobetterweb/password-inputs-with-prevented-paste":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');function findPasswordInputsWithPreventedPaste(){function getOuterHTMLSnippet(element){const reOpeningTag=/^.*?>/;const match=element.outerHTML.match(reOpeningTag);return match&&match[0];}
return Array.from(document.querySelectorAll('input[type="password"]')).filter(passwordInput=>!passwordInput.dispatchEvent(new ClipboardEvent('paste',{cancelable:true}))).map(passwordInput=>({snippet:getOuterHTMLSnippet(passwordInput)}));}
class PasswordInputsWithPreventedPaste extends Gatherer{afterPass(passContext){return passContext.driver.evaluateAsync(`(${findPasswordInputsWithPreventedPaste.toString()}())`);}}
module.exports=PasswordInputsWithPreventedPaste;},{"../gatherer":19}],"../gather/gatherers/dobetterweb/response-compression":[function(require,module,exports){(function(Buffer){'use strict';const Gatherer=require('../gatherer');const gzip=require('zlib').gzip;const compressionHeaders=['content-encoding','x-original-content-encoding'];const compressionTypes=['gzip','br','deflate'];const binaryMimeTypes=['image','audio','video'];const CHROME_EXTENSION_PROTOCOL='chrome-extension:';class ResponseCompression extends Gatherer{static filterUnoptimizedResponses(networkRecords){const unoptimizedResponses=[];networkRecords.forEach(record=>{const mimeType=record._mimeType;const resourceType=record._resourceType;const resourceSize=record._resourceSize;const isBinaryResource=mimeType&&binaryMimeTypes.some(type=>mimeType.startsWith(type));const isTextBasedResource=!isBinaryResource&&resourceType&&resourceType.isTextType();const isChromeExtensionResource=record.url.startsWith(CHROME_EXTENSION_PROTOCOL);if(!isTextBasedResource||!resourceSize||!record.finished||isChromeExtensionResource||!record.transferSize||record.statusCode===304){return;}
const isContentEncoded=(record._responseHeaders||[]).find(header=>compressionHeaders.includes(header.name.toLowerCase())&&compressionTypes.includes(header.value));if(!isContentEncoded){unoptimizedResponses.push({requestId:record.requestId,url:record.url,mimeType:mimeType,transferSize:record.transferSize,resourceSize:resourceSize,gzipSize:0});}});return unoptimizedResponses;}
afterPass(passContext,loadData){const networkRecords=loadData.networkRecords;const textRecords=ResponseCompression.filterUnoptimizedResponses(networkRecords);const driver=passContext.driver;return Promise.all(textRecords.map(record=>{return driver.getRequestContent(record.requestId).then(content=>{if(!content){return record;}
return new Promise((resolve,reject)=>{return gzip(content,(err,res)=>{if(err){return reject(err);}
record.gzipSize=Buffer.byteLength(res,'utf8');resolve(record);});});});}));}}
module.exports=ResponseCompression;}).call(this,require("buffer").Buffer);},{"../gatherer":19,"buffer":60,"zlib":57}],"../gather/gatherers/dobetterweb/tags-blocking-first-paint":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const Driver=require('../../driver.js');function installMediaListener(){window.___linkMediaChanges=[];Object.defineProperty(HTMLLinkElement.prototype,'media',{set:function(val){window.___linkMediaChanges.push({href:this.href,media:val,msSinceHTMLEnd:Date.now()-window.performance.timing.responseEnd,matches:window.matchMedia(val).matches});return this.setAttribute('media',val);}});}
function collectTagsThatBlockFirstPaint(){return new Promise((resolve,reject)=>{try{const tagList=[...document.querySelectorAll('link, head script[src]')].filter(tag=>{if(tag.tagName==='SCRIPT'){const scriptTag=tag;return(!scriptTag.hasAttribute('async')&&!scriptTag.hasAttribute('defer')&&!/^data:/.test(scriptTag.src)&&scriptTag.getAttribute('type')!=='module');}else if(tag.tagName==='LINK'){const linkTag=tag;const blockingStylesheet=linkTag.rel==='stylesheet'&&window.matchMedia(linkTag.media).matches&&!linkTag.disabled;const blockingImport=linkTag.rel==='import'&&!linkTag.hasAttribute('async');return blockingStylesheet||blockingImport;}
return false;}).map(tag=>{return{tagName:tag.tagName,url:tag.tagName==='LINK'?tag.href:tag.src,src:tag.src,href:tag.href,rel:tag.rel,media:tag.media,disabled:tag.disabled,mediaChanges:window.___linkMediaChanges.filter(item=>item.href===tag.href)};});resolve(tagList);}catch(e){const friendly='Unable to gather Scripts/Stylesheets/HTML Imports on the page';reject(new Error(`${friendly}: ${e.message}`));}});}
class TagsBlockingFirstPaint extends Gatherer{static _filteredAndIndexedByUrl(networkRecords){const result={};return networkRecords.reduce((prev,record)=>{if(!record.finished){return prev;}
const isParserGenerated=record._initiator.type==='parser';const isParserScriptOrStyle=/(css|script)/.test(record._mimeType)&&isParserGenerated;const isFailedRequest=record._failed;const isHtml=record._mimeType&&record._mimeType.includes('html');if(isHtml||isParserScriptOrStyle||isFailedRequest&&isParserGenerated){prev[record._url]={isLinkPreload:record.isLinkPreload,transferSize:record._transferSize,startTime:record._startTime,endTime:record._endTime};}
return prev;},result);}
static findBlockingTags(driver,networkRecords){const scriptSrc=`(${collectTagsThatBlockFirstPaint.toString()}())`;const firstRequestEndTime=networkRecords.reduce((min,record)=>Math.min(min,record._endTime),Infinity);return driver.evaluateAsync(scriptSrc).then(tags=>{const requests=TagsBlockingFirstPaint._filteredAndIndexedByUrl(networkRecords);return tags.reduce((prev,tag)=>{const request=requests[tag.url];if(request&&!request.isLinkPreload){const timesResourceBecameNonBlocking=(tag.mediaChanges||[]).filter(change=>!change.matches).map(change=>change.msSinceHTMLEnd);const earliestNonBlockingTime=Math.min(...timesResourceBecameNonBlocking);const lastTimeResourceWasBlocking=Math.max(request.startTime,firstRequestEndTime+earliestNonBlockingTime/1000);prev.push({tag,transferSize:request.transferSize||0,startTime:request.startTime,endTime:Math.min(request.endTime,lastTimeResourceWasBlocking)});requests[tag.url]=null;}
return prev;},[]);});}
beforePass(passContext){return passContext.driver.evaluteScriptOnNewDocument(`(${installMediaListener.toString()})()`);}
afterPass(passContext,loadData){return TagsBlockingFirstPaint.findBlockingTags(passContext.driver,loadData.networkRecords);}}
module.exports=TagsBlockingFirstPaint;},{"../../driver.js":17,"../gatherer":19}],"../gather/gatherers/dobetterweb/websql":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const Driver=require('../../driver.js');const MAX_WAIT_TIMEOUT=500;class WebSQL extends Gatherer{listenForDatabaseEvents(driver){let timeout;return new Promise((resolve,reject)=>{driver.once('Database.addDatabase',db=>{clearTimeout(timeout);driver.sendCommand('Database.disable').then(_=>resolve(db),reject);});driver.sendCommand('Database.enable').catch(reject);timeout=setTimeout(function(){resolve(null);},MAX_WAIT_TIMEOUT);});}
afterPass(passContext){return this.listenForDatabaseEvents(passContext.driver).then(result=>{return result&&result.database;});}}
module.exports=WebSQL;},{"../../driver.js":17,"../gatherer":19}],"../gather/gatherers/fonts":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const Sentry=require('../../lib/sentry');const fontFaceDescriptors=['display','family','featureSettings','stretch','style','unicodeRange','variant','weight'];function getAllLoadedFonts(descriptors){const getFont=fontFace=>{const fontRule={src:[]};descriptors.forEach(descriptor=>{fontRule[descriptor]=fontFace[descriptor];});return fontRule;};return document.fonts.ready.then(()=>{return Array.from(document.fonts).filter(fontFace=>fontFace.status==='loaded').map(getFont);});}
function getFontFaceFromStylesheets(){function getSheetsFontFaces(stylesheet){const fontUrlRegex='url\\((?:")([^"]+)(?:"|\')\\)';const fontFaceRules=[];if(stylesheet.cssRules){for(const rule of Array.from(stylesheet.cssRules)){if(rule instanceof CSSFontFaceRule){const fontsObject={display:rule.style.fontDisplay||'auto',family:rule.style.fontFamily?rule.style.fontFamily.replace(/"|'/g,''):'',stretch:rule.style.fontStretch||'normal',style:rule.style.fontStyle||'normal',weight:rule.style.fontWeight||'normal',variant:rule.style.fontVariant||'normal',unicodeRange:rule.style.unicodeRange||'U+0-10FFFF',featureSettings:rule.style.featureSettings||'normal',src:[]};const src=rule.style.src;if(src){const matches=src.match(new RegExp(fontUrlRegex,'g'));if(matches){matches.forEach(match=>{const res=new RegExp(fontUrlRegex).exec(match);if(res){fontsObject.src.push(new URL(res[1],location.href).href);}});}}
fontFaceRules.push(fontsObject);}}}
return fontFaceRules;}
function loadStylesheetWithCORS(oldNode){const newNode=oldNode.cloneNode(true);return new Promise(resolve=>{newNode.addEventListener('load',function onload(){newNode.removeEventListener('load',onload);resolve(getFontFaceFromStylesheets());});newNode.crossOrigin='anonymous';oldNode.parentNode&&oldNode.parentNode.insertBefore(newNode,oldNode);oldNode.remove();});}
const data=[];const corsDataPromises=[];for(const stylesheet of Array.from(document.styleSheets)){try{const cssStylesheet=stylesheet;if(cssStylesheet.cssRules===null&&cssStylesheet.href&&cssStylesheet.ownerNode&&!cssStylesheet.ownerNode.crossOrigin){const ownerLinkEl=cssStylesheet.ownerNode;corsDataPromises.push(loadStylesheetWithCORS(ownerLinkEl));}else{data.push(...getSheetsFontFaces(cssStylesheet));}}catch(err){data.push({err:{message:err.message,stack:err.stack}});}}
return Promise.all(corsDataPromises).then(corsFontFaces=>data.concat(...corsFontFaces));}
class Fonts extends Gatherer{_findSameFontFamily(fontFace,fontFacesList){return fontFacesList.find(fontItem=>{return!fontFaceDescriptors.find(descriptor=>{return fontFace[descriptor]!==fontItem[descriptor];});});}
afterPass(passContext){const driver=passContext.driver;const args=JSON.stringify(fontFaceDescriptors);const fontData=Promise.all([driver.evaluateAsync(`(${getAllLoadedFonts.toString()})(${args})`),driver.evaluateAsync(`(${getFontFaceFromStylesheets.toString()})()`)]);return fontData.then(([loadedFonts,fontsAndErrors])=>{const fontFaces=fontsAndErrors.filter(fontOrError=>{const dataError=fontOrError;if(dataError.err){const err=new Error(dataError.err.message);err.stack=dataError.err.stack;Sentry.captureException(err,{tags:{gatherer:'Fonts'},level:'warning'});return false;}
return true;});return loadedFonts.map(loadedFont=>{const fontFaceItem=this._findSameFontFamily(loadedFont,fontFaces);loadedFont.src=fontFaceItem&&fontFaceItem.src||[];return loadedFont;});});}}
module.exports=Fonts;},{"../../lib/sentry":39,"./gatherer":19}],"../gather/gatherers/html-without-javascript":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');function getBodyText(){const body=document.querySelector('body');return Promise.resolve(body?body.innerText:'');}
class HTMLWithoutJavaScript extends Gatherer{beforePass(passContext){passContext.disableJavaScript=true;}
async afterPass(passContext){passContext.disableJavaScript=false;const bodyText=await passContext.driver.evaluateAsync(`(${getBodyText.toString()}())`);if(typeof bodyText!=='string'){throw new Error('document body innerText returned by protocol was not a string');}
return{value:bodyText};}}
module.exports=HTMLWithoutJavaScript;},{"./gatherer":19}],"../gather/gatherers/http-redirect":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class HTTPRedirect extends Gatherer{constructor(){super();this._preRedirectURL='';}
beforePass(passContext){this._preRedirectURL=passContext.url;passContext.url=this._preRedirectURL.replace(/^https/,'http');}
async afterPass(passContext){passContext.url=this._preRedirectURL;const expression=`new URL(window.location).protocol === 'https:'`;const isHttps=await passContext.driver.evaluateAsync(expression,{useIsolation:true});return{value:isHttps};}}
module.exports=HTTPRedirect;},{"./gatherer":19}],"../gather/gatherers/image-usage":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const DOMHelpers=require('../../lib/dom-helpers.js');const Driver=require('../driver.js');function collectImageElementInfo(){function getClientRect(element){const clientRect=element.getBoundingClientRect();return{top:clientRect.top,bottom:clientRect.bottom,left:clientRect.left,right:clientRect.right};}
const allElements=getElementsInDocument();const allImageElements=allElements.filter(element=>{return element.localName==='img';});const htmlImages=allImageElements.map(element=>{const computedStyle=window.getComputedStyle(element);return{src:element.currentSrc,width:element.width,height:element.height,clientWidth:element.clientWidth,clientHeight:element.clientHeight,clientRect:getClientRect(element),naturalWidth:element.naturalWidth,naturalHeight:element.naturalHeight,isCss:false,isPicture:!!element.parentElement&&element.parentElement.tagName==='PICTURE',usesObjectFit:computedStyle.getPropertyValue('object-fit')==='cover'||computedStyle.getPropertyValue('object-fit')==='contain'};});const CSS_URL_REGEX=/^url\("([^"]+)"\)$/;const CSS_SIZE_REGEX=/(auto|contain|cover)/;const cssImages=allElements.reduce((images,element)=>{const style=window.getComputedStyle(element);if(!style.backgroundImage||!CSS_URL_REGEX.test(style.backgroundImage)||!style.backgroundSize||!CSS_SIZE_REGEX.test(style.backgroundSize)){return images;}
const imageMatch=style.backgroundImage.match(CSS_URL_REGEX);const url=imageMatch[1];const differentImages=images.filter(image=>image.src!==url);if(images.length-differentImages.length>2){return differentImages;}
images.push({src:url,clientWidth:element.clientWidth,clientHeight:element.clientHeight,clientRect:getClientRect(element),naturalWidth:Number.MAX_VALUE,naturalHeight:Number.MAX_VALUE,isCss:true,isPicture:false,usesObjectFit:false});return images;},[]);return htmlImages.concat(cssImages);}
function determineNaturalSize(url){return new Promise((resolve,reject)=>{const img=new Image();img.addEventListener('error',_=>reject(new Error('determineNaturalSize failed img load')));img.addEventListener('load',()=>{resolve({naturalWidth:img.naturalWidth,naturalHeight:img.naturalHeight});});img.src=url;});}
class ImageUsage extends Gatherer{async fetchElementWithSizeInformation(driver,element){const url=JSON.stringify(element.src);try{const size=await driver.evaluateAsync(`(${determineNaturalSize.toString()})(${url})`);return Object.assign(element,size);}catch(_){return Object.assign(element,{naturalWidth:0,naturalHeight:0});}}
async afterPass(passContext,loadData){const driver=passContext.driver;const indexedNetworkRecords=loadData.networkRecords.reduce((map,record)=>{if(/^image/.test(record._mimeType)&&record.finished){map[record._url]={url:record.url,resourceSize:Math.min(record._resourceSize||0,record.transferSize),startTime:record.startTime,endTime:record.endTime,responseReceivedTime:record._responseReceivedTime,mimeType:record._mimeType};}
return map;},{});const expression=`(function() {
      ${DOMHelpers.getElementsInDocumentFnString}; // define function on page
      return (${collectImageElementInfo.toString()})();
    })()`;const elements=await driver.evaluateAsync(expression);const imageUsage=[];for(let element of elements){element.networkRecord=indexedNetworkRecords[element.src];if((element.isPicture||element.isCss)&&element.networkRecord){element=await this.fetchElementWithSizeInformation(driver,element);}
imageUsage.push(element);}
return imageUsage;}}
module.exports=ImageUsage;},{"../../lib/dom-helpers.js":30,"../driver.js":17,"./gatherer":19}],"../gather/gatherers/js-usage":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class JsUsage extends Gatherer{async beforePass(passContext){await passContext.driver.sendCommand('Profiler.enable');await passContext.driver.sendCommand('Profiler.startPreciseCoverage');}
async afterPass(passContext){const driver=passContext.driver;const coverageResponse=await driver.sendCommand('Profiler.takePreciseCoverage');await driver.sendCommand('Profiler.stopPreciseCoverage');await driver.sendCommand('Profiler.disable');return coverageResponse.result;}}
module.exports=JsUsage;},{"./gatherer":19}],"../gather/gatherers/manifest":[function(require,module,exports){(function(Buffer){'use strict';const Gatherer=require('./gatherer');const manifestParser=require('../../lib/manifest-parser');const BOM_LENGTH=3;const BOM_FIRSTCHAR=65279;class Manifest extends Gatherer{async afterPass(passContext){const manifestPromise=passContext.driver.getAppManifest();const timeoutPromise=new Promise(resolve=>setTimeout(resolve,3000));const response=await Promise.race([manifestPromise,timeoutPromise]);if(!response){return null;}
const isBomEncoded=response.data.charCodeAt(0)===BOM_FIRSTCHAR;if(isBomEncoded){response.data=Buffer.from(response.data).slice(BOM_LENGTH).toString();}
return manifestParser(response.data,response.url,passContext.url);}}
module.exports=Manifest;}).call(this,require("buffer").Buffer);},{"../../lib/manifest-parser":36,"./gatherer":19,"buffer":60}],"../gather/gatherers/mixed-content":[function(require,module,exports){(function(Buffer){'use strict';const Gatherer=require('./gatherer');const URL=require('../../lib/url-shim');const Driver=require('../driver.js');class MixedContent extends Gatherer{constructor(){super();this.ids=new Set();this.url=undefined;this._onRequestIntercepted=undefined;}
upgradeURL(url){const parsedURL=new URL(url);parsedURL.protocol='https:';return parsedURL.href;}
downgradeURL(url){const parsedURL=new URL(url);parsedURL.protocol='http:';return parsedURL.href;}
_getRequestInterceptor(pageUrl,driver){const onRequestIntercepted=event=>{if(new URL(event.request.url).protocol==='http:'&&!URL.equalWithExcludedFragments(event.request.url,pageUrl)&&!this.ids.has(event.interceptionId)){this.ids.add(event.interceptionId);event.request.url=this.upgradeURL(event.request.url);driver.sendCommand('Network.continueInterceptedRequest',{interceptionId:event.interceptionId,rawResponse:Buffer.from(`HTTP/1.1 302 Found\r\nLocation: ${event.request.url}\r\n\r\n`,'utf8').toString('base64')});}else{driver.sendCommand('Network.continueInterceptedRequest',{interceptionId:event.interceptionId});}};return onRequestIntercepted;}
async beforePass(passContext){const driver=passContext.driver;passContext.url=this.downgradeURL(passContext.url);this.url=passContext.url;this._onRequestIntercepted=this._getRequestInterceptor(this.url,driver);await driver.sendCommand('Network.enable');driver.on('Network.requestIntercepted',this._onRequestIntercepted);await driver.sendCommand('Network.setCacheDisabled',{cacheDisabled:true});await driver.sendCommand('Network.setRequestInterception',{patterns:[{urlPattern:'*'}]});}
async afterPass(passContext){const driver=passContext.driver;await driver.sendCommand('Network.setRequestInterception',{patterns:[]});if(this._onRequestIntercepted){driver.off('Network.requestIntercepted',this._onRequestIntercepted);}
await driver.sendCommand('Network.setCacheDisabled',{cacheDisabled:false});return{url:passContext.url};}}
module.exports=MixedContent;}).call(this,require("buffer").Buffer);},{"../../lib/url-shim":"url","../driver.js":17,"./gatherer":19,"buffer":60}],"../gather/gatherers/offline":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const URL=require('../../lib/url-shim');class Offline extends Gatherer{beforePass(passContext){return passContext.driver.goOffline();}
afterPass(passContext,loadData){const navigationRecord=loadData.networkRecords.filter(record=>{return URL.equalWithExcludedFragments(record._url,passContext.url)&&record._fetchedViaServiceWorker;}).pop();return passContext.driver.goOnline(passContext).then(_=>navigationRecord?navigationRecord.statusCode:-1);}}
module.exports=Offline;},{"../../lib/url-shim":"url","./gatherer":19}],"../gather/gatherers/runtime-exceptions":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class RuntimeExceptions extends Gatherer{constructor(){super();this._exceptions=[];this._onRuntimeExceptionThrown=this.onRuntimeExceptionThrown.bind(this);}
onRuntimeExceptionThrown(entry){this._exceptions.push(entry);}
beforePass(passContext){const driver=passContext.driver;driver.on('Runtime.exceptionThrown',this._onRuntimeExceptionThrown);}
async afterPass(passContext){await passContext.driver.off('Runtime.exceptionThrown',this._onRuntimeExceptionThrown);return this._exceptions;}}
module.exports=RuntimeExceptions;},{"./gatherer":19}],"../gather/gatherers/scripts":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const WebInspector=require('../../lib/web-inspector');class Scripts extends Gatherer{async afterPass(passContext,loadData){const driver=passContext.driver;const scriptContentMap={};const scriptRecords=loadData.networkRecords.filter(record=>record._resourceType===WebInspector.resourceTypes.Script);for(const record of scriptRecords){try{const content=await driver.getRequestContent(record.requestId);if(content){scriptContentMap[record.requestId]=content;}}catch(e){}}
return scriptContentMap;}}
module.exports=Scripts;},{"../../lib/web-inspector":47,"./gatherer":19}],"../gather/gatherers/seo/canonical":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');class Canonical extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.querySelectorAll('head link[rel="canonical" i]').then(nodes=>Promise.all(nodes.map(node=>node.getAttribute('href'))));}}
module.exports=Canonical;},{"../gatherer":19}],"../gather/gatherers/seo/crawlable-links":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const DOMHelpers=require('../../../lib/dom-helpers.js');class CrawlableLinks extends Gatherer{afterPass(passContext){const expression=`(function() {
      ${DOMHelpers.getElementsInDocumentFnString}; // define function on page
      const selector = 'a[href]:not([rel~="nofollow"])';
      const elements = getElementsInDocument(selector);
      return elements
        .map(node => ({
          href: node.href,
          text: node.innerText
        }));
    })()`;return passContext.driver.evaluateAsync(expression);}}
module.exports=CrawlableLinks;},{"../../../lib/dom-helpers.js":30,"../gatherer":19}],"../gather/gatherers/seo/embedded-content":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');const DOMHelpers=require('../../../lib/dom-helpers.js');class EmbeddedContent extends Gatherer{afterPass(passContext){const expression=`(function() {
      ${DOMHelpers.getElementsInDocumentFnString}; // define function on page
      const selector = 'object, embed, applet';
      const elements = getElementsInDocument(selector);
      return elements
        .map(node => ({
          tagName: node.tagName,
          type: node.getAttribute('type'),
          src: node.getAttribute('src'),
          data: node.getAttribute('data'),
          code: node.getAttribute('code'),
          params: Array.from(node.children)
            .filter(el => el.tagName === 'PARAM')
            .map(el => ({
              name: el.getAttribute('name') || '',
              value: el.getAttribute('value') || '',
            })),
        }));
    })()`;return passContext.driver.evaluateAsync(expression);}}
module.exports=EmbeddedContent;},{"../../../lib/dom-helpers.js":30,"../gatherer":19}],"../gather/gatherers/seo/font-size":[function(require,module,exports){(function(global){'use strict';const CSSMatchedStyles=require('../../../lib/web-inspector').CSSMatchedStyles;const Gatherer=require('../gatherer');const FONT_SIZE_PROPERTY_NAME='font-size';const TEXT_NODE_BLOCK_LIST=new Set(['SCRIPT','STYLE','NOSCRIPT']);const MINIMAL_LEGIBLE_FONT_SIZE_PX=12;const MAX_NODES_VISITED=500;const MAX_NODES_ANALYZED=50;const Driver=require('../../driver.js');function nodeInBody(node){if(!node){return false;}
if(node.nodeName==='BODY'){return true;}
return nodeInBody(node.parentNode);}
function getAllNodesFromBody(driver){return driver.getNodesInDocument().then(nodes=>{const nodeMap=new Map();nodes.forEach(node=>nodeMap.set(node.nodeId,node));nodes.forEach(node=>node.parentNode=nodeMap.get(node.parentId));return nodes.filter(nodeInBody);});}
function getEffectiveRule(property,node,{inlineStyle,attributesStyle,matchedCSSRules,inherited})
{const cssModel={styleSheetHeaderForId:id=>({id})};const nodeType=node.nodeType;node.nodeType=()=>nodeType;const matchedStyles=new CSSMatchedStyles(cssModel,node,inlineStyle,attributesStyle,matchedCSSRules,null,inherited,null);const nodeStyles=matchedStyles.nodeStyles();const matchingRule=nodeStyles.find(style=>style.allProperties.some(item=>item.name===property&&matchedStyles.propertyState(item)!==CSSMatchedStyles.PropertyState.Overloaded));return matchingRule;}
function getNodeTextLength(node){return!node.nodeValue?0:node.nodeValue.trim().length;}
function getFontSizeSourceRule(driver,node){return driver.sendCommand('CSS.getMatchedStylesForNode',{nodeId:node.nodeId}).then(matchedRules=>getEffectiveRule(FONT_SIZE_PROPERTY_NAME,node,matchedRules));}
function getFontSizeInformation(driver,node){return driver.sendCommand('CSS.getComputedStyleForNode',{nodeId:node.parentId}).then(result=>{const{computedStyle}=result;const fontSizeProperty=computedStyle.find(({name})=>name===FONT_SIZE_PROPERTY_NAME);return{fontSize:parseInt(fontSizeProperty.value,10),textLength:getNodeTextLength(node),node:node.parentNode};}).catch(err=>{require('../../../lib/sentry.js').captureException(err);return null;});}
function isNonEmptyTextNode(node){return node.nodeType===global.Node.TEXT_NODE&&!TEXT_NODE_BLOCK_LIST.has(node.parentNode.nodeName)&&getNodeTextLength(node)>0;}
class FontSize extends Gatherer{afterPass(passContext){const stylesheets=new Map();const onStylesheetAdd=sheet=>stylesheets.set(sheet.header.styleSheetId,sheet.header);passContext.driver.on('CSS.styleSheetAdded',onStylesheetAdd);const enableDOM=passContext.driver.sendCommand('DOM.enable');const enableCSS=passContext.driver.sendCommand('CSS.enable');let failingTextLength=0;let visitedTextLength=0;let totalTextLength=0;return Promise.all([enableDOM,enableCSS]).then(()=>getAllNodesFromBody(passContext.driver)).then(nodes=>{const textNodes=nodes.filter(isNonEmptyTextNode);totalTextLength=textNodes.reduce((sum,node)=>sum+=getNodeTextLength(node),0);const nodesToVisit=textNodes.sort((a,b)=>getNodeTextLength(b)-getNodeTextLength(a)).slice(0,MAX_NODES_VISITED);return nodesToVisit;}).then(textNodes=>Promise.all(textNodes.map(node=>getFontSizeInformation(passContext.driver,node)))).then(fontSizeInfo=>{const visitedNodes=fontSizeInfo.filter(Boolean);visitedTextLength=visitedNodes.reduce((sum,{textLength})=>sum+=textLength,0);const failingNodes=visitedNodes.filter(({fontSize})=>fontSize<MINIMAL_LEGIBLE_FONT_SIZE_PX);failingTextLength=failingNodes.reduce((sum,{textLength})=>sum+=textLength,0);return Promise.all(failingNodes.sort((a,b)=>b.textLength-a.textLength).slice(0,MAX_NODES_ANALYZED).map(info=>getFontSizeSourceRule(passContext.driver,info.node).then(sourceRule=>{if(sourceRule){info.cssRule={type:sourceRule.type,range:sourceRule.range,styleSheetId:sourceRule.styleSheetId};if(sourceRule.parentRule){info.cssRule.parentRule={origin:sourceRule.parentRule.origin,selectors:sourceRule.parentRule.selectors};}}
return info;})));}).then(analyzedFailingNodesData=>{passContext.driver.off('CSS.styleSheetAdded',onStylesheetAdd);const analyzedFailingTextLength=analyzedFailingNodesData.reduce((sum,{textLength})=>sum+=textLength,0);analyzedFailingNodesData.filter(data=>data.cssRule&&data.cssRule.styleSheetId).forEach(data=>data.cssRule.stylesheet=stylesheets.get(data.cssRule.styleSheetId));return Promise.all([passContext.driver.sendCommand('DOM.disable'),passContext.driver.sendCommand('CSS.disable')]).then(_=>({analyzedFailingNodesData,analyzedFailingTextLength,failingTextLength,visitedTextLength,totalTextLength}));});}}
module.exports=FontSize;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"../../../lib/sentry.js":39,"../../../lib/web-inspector":47,"../../driver.js":17,"../gatherer":19}],"../gather/gatherers/seo/hreflang":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');class Hreflang extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.querySelectorAll('head link[rel="alternate" i][hreflang]').then(nodes=>Promise.all(nodes.map(node=>Promise.all([node.getAttribute('href'),node.getAttribute('hreflang')])))).then(attributeValues=>attributeValues&&attributeValues.map(values=>{const[href,hreflang]=values;return{href:href||'',hreflang:hreflang||''};}));}}
module.exports=Hreflang;},{"../gatherer":19}],"../gather/gatherers/seo/meta-description":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');class MetaDescription extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.querySelector('head meta[name="description" i]').then(node=>node&&node.getAttribute('content'));}}
module.exports=MetaDescription;},{"../gatherer":19}],"../gather/gatherers/seo/meta-robots":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');class MetaRobots extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.querySelector('head meta[name="robots" i]').then(node=>node&&node.getAttribute('content'));}}
module.exports=MetaRobots;},{"../gatherer":19}],"../gather/gatherers/seo/robots-txt":[function(require,module,exports){'use strict';const Gatherer=require('../gatherer');async function getRobotsTxtContent(){try{const response=await fetch(new URL('/robots.txt',location.href).href);if(!response.ok){return{status:response.status,content:null};}
const content=await response.text();return{status:response.status,content};}catch(_){return{status:null,content:null};}}
class RobotsTxt extends Gatherer{afterPass(passContext){return passContext.driver.evaluateAsync(`(${getRobotsTxtContent.toString()}())`);}}
module.exports=RobotsTxt;},{"../gatherer":19}],"../gather/gatherers/service-worker":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class ServiceWorker extends Gatherer{async beforePass(passContext){const{versions}=await passContext.driver.getServiceWorkerVersions();return{versions};}}
module.exports=ServiceWorker;},{"./gatherer":19}],"../gather/gatherers/start-url":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');const manifestParser=require('../../lib/manifest-parser');const Driver=require('../driver.js');class StartUrl extends Gatherer{afterPass(passContext){const driver=passContext.driver;return driver.goOnline(passContext).then(()=>driver.getAppManifest()).then(response=>driver.goOffline().then(()=>response)).then(response=>response&&manifestParser(response.data,response.url,passContext.url)).then(manifest=>{const startUrlInfo=this._readManifestStartUrl(manifest);if(startUrlInfo.isReadFailure){return{statusCode:-1,debugString:startUrlInfo.reason};}
return this._attemptManifestFetch(passContext.driver,startUrlInfo.startUrl);}).catch(()=>{return{statusCode:-1,debugString:'Unable to fetch start URL via service worker'};});}
_readManifestStartUrl(manifest){if(!manifest||!manifest.value){const detailedMsg=manifest&&manifest.debugString;if(detailedMsg){return{isReadFailure:true,reason:`Error fetching web app manifest: ${detailedMsg}`};}else{return{isReadFailure:true,reason:`No usable web app manifest found on page`};}}
if(manifest.value.start_url.debugString){return{isReadFailure:true,reason:manifest.value.start_url.debugString};}
return{isReadFailure:false,startUrl:manifest.value.start_url.value};}
_attemptManifestFetch(driver,startUrl){const timeoutPromise=new Promise(resolve=>setTimeout(()=>resolve({statusCode:-1,debugString:'Timed out waiting for fetched start_url'}),3000));const fetchPromise=new Promise(resolve=>{driver.on('Network.responseReceived',onResponseReceived);function onResponseReceived(responseEvent){const{response}=responseEvent;if(response.url!==startUrl)return;driver.off('Network.responseReceived',onResponseReceived);if(!response.fromServiceWorker){return resolve({statusCode:-1,debugString:'Unable to fetch start URL via service worker'});}
return resolve({statusCode:response.status});}});return driver.evaluateAsync(`window.location = '${startUrl}'`).then(()=>Promise.race([fetchPromise,timeoutPromise]));}}
module.exports=StartUrl;},{"../../lib/manifest-parser":36,"../driver.js":17,"./gatherer":19}],"../gather/gatherers/theme-color":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class ThemeColor extends Gatherer{async afterPass(passContext){const driver=passContext.driver;const metaEl=await driver.querySelector('head meta[name="theme-color" i]');return metaEl&&metaEl.getAttribute('content');}}
module.exports=ThemeColor;},{"./gatherer":19}],"../gather/gatherers/viewport-dimensions":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');function getViewportDimensions(){return Promise.resolve({innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio});}
class ViewportDimensions extends Gatherer{async afterPass(passContext){const driver=passContext.driver;const dimensions=await driver.evaluateAsync(`(${getViewportDimensions.toString()}())`,{useIsolation:true});const allNumeric=Object.values(dimensions).every(Number.isFinite);if(!allNumeric){const results=JSON.stringify(dimensions);throw new Error(`ViewportDimensions results were not numeric: ${results}`);}
return dimensions;}}
module.exports=ViewportDimensions;},{"./gatherer":19}],"../gather/gatherers/viewport":[function(require,module,exports){'use strict';const Gatherer=require('./gatherer');class Viewport extends Gatherer{async afterPass(passContext){const driver=passContext.driver;const metaEl=await driver.querySelector('head meta[name="viewport" i]');return metaEl&&metaEl.getAttribute('content');}}
module.exports=Viewport;},{"./gatherer":19}],"./gather/computed/critical-request-chains":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const WebInspector=require('../../lib/web-inspector');const assert=require('assert');class CriticalRequestChains extends ComputedArtifact{get name(){return'CriticalRequestChains';}
static isCritical(request,mainResource){assert.ok(mainResource,'mainResource not provided');if(request._isLinkPreload){return false;}
const resourceTypeCategory=request._resourceType&&request._resourceType._category;const isIframe=request._resourceType===WebInspector.resourceTypes.Document&&request._frameId!==mainResource._frameId;const nonCriticalResourceTypes=[WebInspector.resourceTypes.Image._category,WebInspector.resourceTypes.XHR._category];if(nonCriticalResourceTypes.includes(resourceTypeCategory)||isIframe||request._mimeType&&request._mimeType.startsWith('image/')){return false;}
return['VeryHigh','High','Medium'].includes(request.priority());}
static extractChain(networkRecords,mainResource){networkRecords=networkRecords.filter(req=>req.finished);const requestIdToRequests=new Map();for(const request of networkRecords){requestIdToRequests.set(request.requestId,request);}
const criticalRequests=networkRecords.filter(request=>CriticalRequestChains.isCritical(request,mainResource));const criticalRequestChains={};for(const request of criticalRequests){const ancestors=[];let ancestorRequest=request.initiatorRequest();let node=criticalRequestChains;while(ancestorRequest){const ancestorIsCritical=CriticalRequestChains.isCritical(ancestorRequest,mainResource);if(!ancestorIsCritical||ancestors.includes(ancestorRequest.requestId)){ancestors.length=0;node=undefined;break;}
ancestors.push(ancestorRequest.requestId);ancestorRequest=ancestorRequest.initiatorRequest();}
let ancestor=ancestors.pop();while(ancestor&&node){const parentRequest=requestIdToRequests.get(ancestor);if(!parentRequest){throw new Error(`request with id ${ancestor} not found.`);}
const parentRequestId=parentRequest.requestId;if(!node[parentRequestId]){node[parentRequestId]={request:parentRequest,children:{}};}
ancestor=ancestors.pop();node=node[parentRequestId].children;}
if(!node){continue;}
if(node[request.requestId]){continue;}
node[request.requestId]={request,children:{}};}
return criticalRequestChains;}
async compute_(data,artifacts){const[networkRecords,mainResource]=await Promise.all([artifacts.requestNetworkRecords(data.devtoolsLog),artifacts.requestMainResource(data)]);return CriticalRequestChains.extractChain(networkRecords,mainResource);}}
module.exports=CriticalRequestChains;},{"../../lib/web-inspector":47,"./computed-artifact":11,"assert":53}],"./gather/computed/dtm-model":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const DTM=require('../../lib/traces/devtools-timeline-model');class DevtoolsTimelineModel extends ComputedArtifact{get name(){return'DevtoolsTimelineModel';}
async compute_(trace){return new DTM(trace);}}
module.exports=DevtoolsTimelineModel;},{"../../lib/traces/devtools-timeline-model":43,"./computed-artifact":11}],"./gather/computed/load-simulator":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const constants=require('../../config/constants');const Simulator=require('../../lib/dependency-graph/simulator/simulator');class LoadSimulatorArtifact extends ComputedArtifact{get name(){return'LoadSimulator';}
async compute_(data,artifacts){const{throttlingMethod,throttling}=data.settings;const networkAnalysis=await artifacts.requestNetworkAnalysis(data.devtoolsLog);const options={additionalRttByOrigin:networkAnalysis.additionalRttByOrigin,serverResponseTimeByOrigin:networkAnalysis.serverResponseTimeByOrigin};switch(throttlingMethod){case'provided':options.rtt=networkAnalysis.rtt;options.throughput=networkAnalysis.throughput;options.cpuSlowdownMultiplier=1;options.layoutTaskMultiplier=1;break;case'devtools':if(throttling){options.rtt=throttling.requestLatencyMs/constants.throttling.DEVTOOLS_RTT_ADJUSTMENT_FACTOR;options.throughput=throttling.downloadThroughputKbps*1024/constants.throttling.DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR;}
options.cpuSlowdownMultiplier=1;options.layoutTaskMultiplier=1;break;case'simulate':if(throttling){options.rtt=throttling.rttMs;options.throughput=throttling.throughputKbps*1024;options.cpuSlowdownMultiplier=throttling.cpuSlowdownMultiplier;}
break;default:break;}
return new Simulator(options);}}
module.exports=LoadSimulatorArtifact;},{"../../config/constants":8,"../../lib/dependency-graph/simulator/simulator":28,"./computed-artifact":11}],"./gather/computed/main-resource":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');class MainResource extends ComputedArtifact{get name(){return'MainResource';}
compute_(data,artifacts){const{URL,devtoolsLog}=data;return artifacts.requestNetworkRecords(devtoolsLog).then(requests=>{const mainResource=requests.find(request=>request.url===URL.finalUrl);if(!mainResource){throw new Error('Unable to identify the main resource');}
return mainResource;});}}
module.exports=MainResource;},{"./computed-artifact":11}],"./gather/computed/manifest-values":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const icons=require('../../lib/icons');const PWA_DISPLAY_VALUES=['minimal-ui','fullscreen','standalone'];const SUGGESTED_SHORTNAME_LENGTH=12;class ManifestValues extends ComputedArtifact{get name(){return'ManifestValues';}
static get validityIds(){return['hasManifest','hasParseableManifest'];}
static get manifestChecks(){return[{id:'hasStartUrl',failureText:'Manifest does not contain a `start_url`',validate:manifestValue=>!!manifestValue.start_url.value},{id:'hasIconsAtLeast192px',failureText:'Manifest does not have icons at least 192px',validate:manifestValue=>icons.doExist(manifestValue)&&icons.sizeAtLeast(192,manifestValue).length>0},{id:'hasIconsAtLeast512px',failureText:'Manifest does not have icons at least 512px',validate:manifestValue=>icons.doExist(manifestValue)&&icons.sizeAtLeast(512,manifestValue).length>0},{id:'hasPWADisplayValue',failureText:'Manifest\'s `display` value is not one of: '+PWA_DISPLAY_VALUES.join(' | '),validate:manifestValue=>PWA_DISPLAY_VALUES.includes(manifestValue.display.value)},{id:'hasBackgroundColor',failureText:'Manifest does not have `background_color`',validate:manifestValue=>!!manifestValue.background_color.value},{id:'hasThemeColor',failureText:'Manifest does not have `theme_color`',validate:manifestValue=>!!manifestValue.theme_color.value},{id:'hasShortName',failureText:'Manifest does not have `short_name`',validate:manifestValue=>!!manifestValue.short_name.value},{id:'shortNameLength',failureText:'Manifest `short_name` will be truncated when displayed on the homescreen',validate:manifestValue=>!!manifestValue.short_name.value&&manifestValue.short_name.value.length<=SUGGESTED_SHORTNAME_LENGTH},{id:'hasName',failureText:'Manifest does not have `name`',validate:manifestValue=>!!manifestValue.name.value}];}
async compute_(manifest){let parseFailureReason;if(manifest===null){return{isParseFailure:true,parseFailureReason:'No manifest was fetched',allChecks:[]};}
const manifestValue=manifest.value;if(manifestValue===undefined){return{isParseFailure:true,parseFailureReason:'Manifest failed to parse as valid JSON',allChecks:[]};}
const remainingChecks=ManifestValues.manifestChecks.map(item=>{return{id:item.id,failureText:item.failureText,passing:item.validate(manifestValue)};});return{isParseFailure:false,parseFailureReason,allChecks:remainingChecks};}}
module.exports=ManifestValues;},{"../../lib/icons":35,"./computed-artifact":11}],"./gather/computed/metrics/estimated-input-latency":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');const LHError=require('../../../lib/errors');const TracingProcessor=require('../../../lib/traces/tracing-processor');const ROLLING_WINDOW_SIZE=5000;class EstimatedInputLatency extends MetricArtifact{get name(){return'EstimatedInputLatency';}
static calculateRollingWindowEIL(events){const candidateStartEvts=events.filter(evt=>evt.duration>=10);let worst90thPercentileLatency=16;for(const startEvt of candidateStartEvts){const latencyPercentiles=TracingProcessor.getRiskToResponsiveness(events,startEvt.start,startEvt.start+ROLLING_WINDOW_SIZE,[0.9]);worst90thPercentileLatency=Math.max(latencyPercentiles[0].time,worst90thPercentileLatency);}
return worst90thPercentileLatency;}
computeObservedMetric(data){const{firstMeaningfulPaint}=data.traceOfTab.timings;if(!firstMeaningfulPaint){throw new LHError(LHError.errors.NO_FMP);}
const events=TracingProcessor.getMainThreadTopLevelEvents(data.traceOfTab,firstMeaningfulPaint).filter(evt=>evt.duration>=1);return Promise.resolve({timing:EstimatedInputLatency.calculateRollingWindowEIL(events)});}}
module.exports=EstimatedInputLatency;},{"../../../lib/errors":33,"../../../lib/traces/tracing-processor":46,"./metric":13}],"./gather/computed/metrics/first-contentful-paint":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');const LHError=require('../../../lib/errors');class FirstContentfulPaint extends MetricArtifact{get name(){return'FirstContentfulPaint';}
computeObservedMetric(data){const{traceOfTab}=data;if(!traceOfTab.timestamps.firstContentfulPaint){throw new LHError(LHError.errors.NO_FCP);}
return Promise.resolve({timing:traceOfTab.timings.firstContentfulPaint,timestamp:traceOfTab.timestamps.firstContentfulPaint});}}
module.exports=FirstContentfulPaint;},{"../../../lib/errors":33,"./metric":13}],"./gather/computed/metrics/first-cpu-idle":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');const TracingProcessor=require('../../../lib/traces/tracing-processor');const LHError=require('../../../lib/errors');const LONG_TASK_THRESHOLD=50;const MAX_TASK_CLUSTER_DURATION=250;const MIN_TASK_CLUSTER_PADDING=1000;const MIN_TASK_CLUSTER_FMP_DISTANCE=5000;const MAX_QUIET_WINDOW_SIZE=5000;const EXPONENTIATION_COEFFICIENT=-Math.log(3-1)/15;class FirstCPUIdle extends MetricArtifact{get name(){return'FirstCPUIdle';}
static getRequiredWindowSizeInMs(t){const tInSeconds=t/1000;const exponentiationComponent=Math.exp(EXPONENTIATION_COEFFICIENT*tInSeconds);return(4*exponentiationComponent+1)*1000;}
static getTaskClustersInWindow(tasks,startIndex,windowEnd){const clusters=[];let previousTaskEndTime=-Infinity;let currentCluster=[];const clusteringWindowEnd=windowEnd+MIN_TASK_CLUSTER_PADDING;const isInClusteringWindow=task=>task.start<clusteringWindowEnd;for(let i=startIndex;i<tasks.length;i++){if(!isInClusteringWindow(tasks[i])){break;}
const task=tasks[i];if(task.start-previousTaskEndTime>MIN_TASK_CLUSTER_PADDING){currentCluster=[];clusters.push(currentCluster);}
currentCluster.push(task);previousTaskEndTime=task.end;}
return clusters.map(tasks=>{const start=tasks[0].start;const end=tasks[tasks.length-1].end;const duration=end-start;return{start,end,duration};}).filter(cluster=>cluster.start<windowEnd);}
static findQuietWindow(FMP,traceEnd,longTasks){if(longTasks.length===0||longTasks[0].start>FMP+FirstCPUIdle.getRequiredWindowSizeInMs(0)){return FMP;}
const isTooCloseToFMP=cluster=>cluster.start<FMP+MIN_TASK_CLUSTER_FMP_DISTANCE;const isTooLong=cluster=>cluster.duration>MAX_TASK_CLUSTER_DURATION;const isBadCluster=cluster=>isTooCloseToFMP(cluster)||isTooLong(cluster);for(let i=0;i<longTasks.length;i++){const windowStart=longTasks[i].end;const windowSize=FirstCPUIdle.getRequiredWindowSizeInMs(windowStart-FMP);const windowEnd=windowStart+windowSize;if(windowEnd>traceEnd){throw new LHError(LHError.errors.NO_FCPUI_IDLE_PERIOD);}
if(i+1<longTasks.length&&longTasks[i+1].start-windowStart<=MIN_TASK_CLUSTER_PADDING){continue;}
const taskClusters=FirstCPUIdle.getTaskClustersInWindow(longTasks,i+1,windowEnd);const hasBadTaskClusters=taskClusters.some(isBadCluster);if(!hasBadTaskClusters){return windowStart;}}
throw new LHError(LHError.errors.NO_FCPUI_IDLE_PERIOD);}
computeObservedMetric(data){const{traceOfTab}=data;const navStart=traceOfTab.timestamps.navigationStart;const FMP=traceOfTab.timings.firstMeaningfulPaint;const DCL=traceOfTab.timings.domContentLoaded;const traceEnd=traceOfTab.timings.traceEnd;if(traceEnd-FMP<MAX_QUIET_WINDOW_SIZE){throw new LHError(LHError.errors.FMP_TOO_LATE_FOR_FCPUI);}
if(!FMP||!DCL){throw new LHError(FMP?LHError.errors.NO_DCL:LHError.errors.NO_FMP);}
const longTasksAfterFMP=TracingProcessor.getMainThreadTopLevelEvents(traceOfTab,FMP).filter(evt=>evt.duration>=LONG_TASK_THRESHOLD);const firstInteractive=FirstCPUIdle.findQuietWindow(FMP,traceEnd,longTasksAfterFMP);const valueInMs=Math.max(firstInteractive,DCL);return Promise.resolve({timing:valueInMs,timestamp:valueInMs*1000+navStart});}}
module.exports=FirstCPUIdle;},{"../../../lib/errors":33,"../../../lib/traces/tracing-processor":46,"./metric":13}],"./gather/computed/metrics/first-meaningful-paint":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');const LHError=require('../../../lib/errors');class FirstMeaningfulPaint extends MetricArtifact{get name(){return'FirstMeaningfulPaint';}
computeObservedMetric(data){const{traceOfTab}=data;if(!traceOfTab.timestamps.firstMeaningfulPaint){throw new LHError(LHError.errors.NO_FMP);}
return Promise.resolve({timing:traceOfTab.timings.firstMeaningfulPaint,timestamp:traceOfTab.timestamps.firstMeaningfulPaint});}}
module.exports=FirstMeaningfulPaint;},{"../../../lib/errors":33,"./metric":13}],"./gather/computed/metrics/interactive":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');const NetworkRecorder=require('../../../lib/network-recorder');const TracingProcessor=require('../../../lib/traces/tracing-processor');const LHError=require('../../../lib/errors');const REQUIRED_QUIET_WINDOW=5000;const ALLOWED_CONCURRENT_REQUESTS=2;class Interactive extends MetricArtifact{get name(){return'Interactive';}
static _findNetworkQuietPeriods(networkRecords,traceOfTab){const traceEndTsInMs=traceOfTab.timestamps.traceEnd/1000;const filteredNetworkRecords=networkRecords.filter(record=>{return record.finished&&record.requestMethod==='GET'&&!record.failed&&record.statusCode<400;});return NetworkRecorder.findNetworkQuietPeriods(filteredNetworkRecords,ALLOWED_CONCURRENT_REQUESTS,traceEndTsInMs);}
static _findCPUQuietPeriods(longTasks,traceOfTab){const navStartTsInMs=traceOfTab.timestamps.navigationStart/1000;const traceEndTsInMs=traceOfTab.timestamps.traceEnd/1000;if(longTasks.length===0){return[{start:0,end:traceEndTsInMs}];}
const quietPeriods=[];longTasks.forEach((task,index)=>{if(index===0){quietPeriods.push({start:0,end:task.start+navStartTsInMs});}
if(index===longTasks.length-1){quietPeriods.push({start:task.end+navStartTsInMs,end:traceEndTsInMs});}else{quietPeriods.push({start:task.end+navStartTsInMs,end:longTasks[index+1].start+navStartTsInMs});}});return quietPeriods;}
static findOverlappingQuietPeriods(longTasks,networkRecords,traceOfTab){const FcpTsInMs=traceOfTab.timestamps.firstContentfulPaint/1000;const isLongEnoughQuietPeriod=period=>period.end>FcpTsInMs+REQUIRED_QUIET_WINDOW&&period.end-period.start>=REQUIRED_QUIET_WINDOW;const networkQuietPeriods=this._findNetworkQuietPeriods(networkRecords,traceOfTab).filter(isLongEnoughQuietPeriod);const cpuQuietPeriods=this._findCPUQuietPeriods(longTasks,traceOfTab).filter(isLongEnoughQuietPeriod);const cpuQueue=cpuQuietPeriods.slice();const networkQueue=networkQuietPeriods.slice();let cpuCandidate=cpuQueue.shift();let networkCandidate=networkQueue.shift();while(cpuCandidate&&networkCandidate){if(cpuCandidate.start>=networkCandidate.start){if(networkCandidate.end>=cpuCandidate.start+REQUIRED_QUIET_WINDOW){return{cpuQuietPeriod:cpuCandidate,networkQuietPeriod:networkCandidate,cpuQuietPeriods,networkQuietPeriods};}else{networkCandidate=networkQueue.shift();}}else{if(cpuCandidate.end>=networkCandidate.start+REQUIRED_QUIET_WINDOW){return{cpuQuietPeriod:cpuCandidate,networkQuietPeriod:networkCandidate,cpuQuietPeriods,networkQuietPeriods};}else{cpuCandidate=cpuQueue.shift();}}}
throw new LHError(cpuCandidate?LHError.errors.NO_TTI_NETWORK_IDLE_PERIOD:LHError.errors.NO_TTI_CPU_IDLE_PERIOD);}
computeObservedMetric(data){const{traceOfTab,networkRecords}=data;if(!traceOfTab.timestamps.firstContentfulPaint){throw new LHError(LHError.errors.NO_FCP);}
if(!traceOfTab.timestamps.domContentLoaded){throw new LHError(LHError.errors.NO_DCL);}
const longTasks=TracingProcessor.getMainThreadTopLevelEvents(traceOfTab).filter(event=>event.duration>=50);const quietPeriodInfo=Interactive.findOverlappingQuietPeriods(longTasks,networkRecords,traceOfTab);const cpuQuietPeriod=quietPeriodInfo.cpuQuietPeriod;const timestamp=Math.max(cpuQuietPeriod.start,traceOfTab.timestamps.firstContentfulPaint/1000,traceOfTab.timestamps.domContentLoaded/1000)*1000;const timing=(timestamp-traceOfTab.timestamps.navigationStart)/1000;return Promise.resolve({timing,timestamp});}}
module.exports=Interactive;},{"../../../lib/errors":33,"../../../lib/network-recorder":37,"../../../lib/traces/tracing-processor":46,"./metric":13}],"./gather/computed/metrics/lantern-estimated-input-latency":[function(require,module,exports){'use strict';const LanternMetricArtifact=require('./lantern-metric');const Node=require('../../../lib/dependency-graph/node');const EstimatedInputLatency=require('./estimated-input-latency');class LanternEstimatedInputLatency extends LanternMetricArtifact{get name(){return'LanternEstimatedInputLatency';}
get COEFFICIENTS(){return{intercept:0,optimistic:0.4,pessimistic:0.4};}
getOptimisticGraph(dependencyGraph){return dependencyGraph;}
getPessimisticGraph(dependencyGraph){return dependencyGraph;}
getEstimateFromSimulation(simulation,extras){const fmpTimeInMs=extras.optimistic?extras.fmpResult.pessimisticEstimate.timeInMs:extras.fmpResult.optimisticEstimate.timeInMs;const events=LanternEstimatedInputLatency.getEventsAfterFMP(simulation.nodeTimings,fmpTimeInMs);return{timeInMs:EstimatedInputLatency.calculateRollingWindowEIL(events),nodeTimings:simulation.nodeTimings};}
async compute_(data,artifacts){const fmpResult=await artifacts.requestLanternFirstMeaningfulPaint(data);return this.computeMetricWithGraphs(data,artifacts,{fmpResult});}
static getEventsAfterFMP(nodeTimings,fmpTimeInMs){const events=[];for(const[node,timing]of nodeTimings.entries()){if(node.type!==Node.TYPES.CPU)continue;if(!timing.endTime||!timing.startTime)continue;if(timing.endTime<fmpTimeInMs)continue;events.push({start:timing.startTime,end:timing.endTime,duration:timing.endTime-timing.startTime});}
return events;}}
module.exports=LanternEstimatedInputLatency;},{"../../../lib/dependency-graph/node":25,"./estimated-input-latency":"./gather/computed/metrics/estimated-input-latency","./lantern-metric":12}],"./gather/computed/metrics/lantern-first-contentful-paint":[function(require,module,exports){'use strict';const MetricArtifact=require('./lantern-metric');const Node=require('../../../lib/dependency-graph/node');const CPUNode=require('../../../lib/dependency-graph/cpu-node');const NetworkNode=require('../../../lib/dependency-graph/network-node');class FirstContentfulPaint extends MetricArtifact{get name(){return'LanternFirstContentfulPaint';}
get COEFFICIENTS(){return{intercept:600,optimistic:0.6,pessimistic:0.5};}
getOptimisticGraph(dependencyGraph,traceOfTab){const fcp=traceOfTab.timestamps.firstContentfulPaint;const blockingScriptUrls=MetricArtifact.getScriptUrls(dependencyGraph,node=>{return(node.endTime<=fcp&&node.hasRenderBlockingPriority()&&node.initiatorType!=='script');});return dependencyGraph.cloneWithRelationships(node=>{if(node.endTime>fcp&&!node.isMainDocument())return false;if(node.type===Node.TYPES.CPU){return node.isEvaluateScriptFor(blockingScriptUrls);}
const asNetworkNode=node;return asNetworkNode.hasRenderBlockingPriority()&&asNetworkNode.initiatorType!=='script';});}
getPessimisticGraph(dependencyGraph,traceOfTab){const fcp=traceOfTab.timestamps.firstContentfulPaint;const blockingScriptUrls=MetricArtifact.getScriptUrls(dependencyGraph,node=>{return node.endTime<=fcp&&node.hasRenderBlockingPriority();});return dependencyGraph.cloneWithRelationships(node=>{if(node.endTime>fcp&&!node.isMainDocument())return false;if(node.type===Node.TYPES.CPU){return node.isEvaluateScriptFor(blockingScriptUrls);}
return node.hasRenderBlockingPriority();});}}
module.exports=FirstContentfulPaint;},{"../../../lib/dependency-graph/cpu-node":23,"../../../lib/dependency-graph/network-node":24,"../../../lib/dependency-graph/node":25,"./lantern-metric":12}],"./gather/computed/metrics/lantern-first-cpu-idle":[function(require,module,exports){'use strict';const Node=require('../../../lib/dependency-graph/node');const CPUNode=require('../../../lib/dependency-graph/cpu-node');const NetworkNode=require('../../../lib/dependency-graph/network-node');const FirstCPUIdle=require('./first-cpu-idle');const LanternInteractive=require('./lantern-interactive');class LanternFirstCPUIdle extends LanternInteractive{get name(){return'LanternFirstCPUIdle';}
getEstimateFromSimulation(simulation,extras){const fmpTimeInMs=extras.optimistic?extras.fmpResult.optimisticEstimate.timeInMs:extras.fmpResult.pessimisticEstimate.timeInMs;return{timeInMs:LanternFirstCPUIdle.getFirstCPUIdleWindowStart(simulation.nodeTimings,fmpTimeInMs),nodeTimings:simulation.nodeTimings};}
static getFirstCPUIdleWindowStart(nodeTimings,fmpTimeInMs,longTaskLength=50){const longTasks=[];for(const[node,timing]of nodeTimings.entries()){if(node.type!==Node.TYPES.CPU)continue;if(!timing.endTime||!timing.startTime)continue;if(timing.endTime-timing.startTime<longTaskLength)continue;longTasks.push({start:timing.startTime,end:timing.endTime});}
return FirstCPUIdle.findQuietWindow(fmpTimeInMs,Infinity,longTasks);}}
module.exports=LanternFirstCPUIdle;},{"../../../lib/dependency-graph/cpu-node":23,"../../../lib/dependency-graph/network-node":24,"../../../lib/dependency-graph/node":25,"./first-cpu-idle":"./gather/computed/metrics/first-cpu-idle","./lantern-interactive":"./gather/computed/metrics/lantern-interactive"}],"./gather/computed/metrics/lantern-first-meaningful-paint":[function(require,module,exports){'use strict';const MetricArtifact=require('./lantern-metric');const Node=require('../../../lib/dependency-graph/node');const CPUNode=require('../../../lib/dependency-graph/cpu-node');const NetworkNode=require('../../../lib/dependency-graph/network-node');class FirstMeaningfulPaint extends MetricArtifact{get name(){return'LanternFirstMeaningfulPaint';}
get COEFFICIENTS(){return{intercept:900,optimistic:0.45,pessimistic:0.6};}
getOptimisticGraph(dependencyGraph,traceOfTab){const fmp=traceOfTab.timestamps.firstMeaningfulPaint;const blockingScriptUrls=MetricArtifact.getScriptUrls(dependencyGraph,node=>{return(node.endTime<=fmp&&node.hasRenderBlockingPriority()&&node.initiatorType!=='script');});return dependencyGraph.cloneWithRelationships(node=>{if(node.endTime>fmp&&!node.isMainDocument())return false;if(node.type===Node.TYPES.CPU){return node.isEvaluateScriptFor(blockingScriptUrls);}
const asNetworkNode=node;return asNetworkNode.hasRenderBlockingPriority()&&asNetworkNode.initiatorType!=='script';});}
getPessimisticGraph(dependencyGraph,traceOfTab){const fmp=traceOfTab.timestamps.firstMeaningfulPaint;const requiredScriptUrls=MetricArtifact.getScriptUrls(dependencyGraph,node=>{return node.endTime<=fmp&&node.hasRenderBlockingPriority();});return dependencyGraph.cloneWithRelationships(node=>{if(node.endTime>fmp&&!node.isMainDocument())return false;if(node.type===Node.TYPES.CPU){const asCpuNode=node;return asCpuNode.didPerformLayout()||asCpuNode.isEvaluateScriptFor(requiredScriptUrls);}
return node.hasRenderBlockingPriority();});}
async compute_(data,artifacts){const fcpResult=await artifacts.requestLanternFirstContentfulPaint(data);const metricResult=await this.computeMetricWithGraphs(data,artifacts);metricResult.timing=Math.max(metricResult.timing,fcpResult.timing);return metricResult;}}
module.exports=FirstMeaningfulPaint;},{"../../../lib/dependency-graph/cpu-node":23,"../../../lib/dependency-graph/network-node":24,"../../../lib/dependency-graph/node":25,"./lantern-metric":12}],"./gather/computed/metrics/lantern-interactive":[function(require,module,exports){'use strict';const MetricArtifact=require('./lantern-metric');const Node=require('../../../lib/dependency-graph/node');const CPUNode=require('../../../lib/dependency-graph/cpu-node');const NetworkNode=require('../../../lib/dependency-graph/network-node');const WebInspector=require('../../../lib/web-inspector');const CRITICAL_LONG_TASK_THRESHOLD=20;class Interactive extends MetricArtifact{get name(){return'LanternInteractive';}
get COEFFICIENTS(){return{intercept:1600,optimistic:0.6,pessimistic:0.45};}
getOptimisticGraph(dependencyGraph){const minimumCpuTaskDuration=CRITICAL_LONG_TASK_THRESHOLD*1000;return dependencyGraph.cloneWithRelationships(node=>{if(node.type===Node.TYPES.CPU){return node.event.dur>minimumCpuTaskDuration;}
const asNetworkNode=node;const isImage=asNetworkNode.record._resourceType===WebInspector.resourceTypes.Image;const isScript=asNetworkNode.record._resourceType===WebInspector.resourceTypes.Script;return(!isImage&&(isScript||asNetworkNode.record.priority()==='High'||asNetworkNode.record.priority()==='VeryHigh'));});}
getPessimisticGraph(dependencyGraph){return dependencyGraph;}
getEstimateFromSimulation(simulationResult,extras){const lastTaskAt=Interactive.getLastLongTaskEndTime(simulationResult.nodeTimings);const minimumTime=extras.optimistic?extras.fmpResult.optimisticEstimate.timeInMs:extras.fmpResult.pessimisticEstimate.timeInMs;return{timeInMs:Math.max(minimumTime,lastTaskAt),nodeTimings:simulationResult.nodeTimings};}
async compute_(data,artifacts){const fmpResult=await artifacts.requestLanternFirstMeaningfulPaint(data);const metricResult=await this.computeMetricWithGraphs(data,artifacts,{fmpResult});metricResult.timing=Math.max(metricResult.timing,fmpResult.timing);return metricResult;}
static getLastLongTaskEndTime(nodeTimings,duration=50){return Array.from(nodeTimings.entries()).filter(([node,timing])=>{if(node.type!==Node.TYPES.CPU)return false;if(!timing.endTime||!timing.startTime)return false;return timing.endTime-timing.startTime>duration;}).map(([_,timing])=>timing.endTime).reduce((max,x)=>Math.max(max||0,x||0),0);}}
module.exports=Interactive;},{"../../../lib/dependency-graph/cpu-node":23,"../../../lib/dependency-graph/network-node":24,"../../../lib/dependency-graph/node":25,"../../../lib/web-inspector":47,"./lantern-metric":12}],"./gather/computed/metrics/lantern-speed-index":[function(require,module,exports){'use strict';const MetricArtifact=require('./lantern-metric');const Node=require('../../../lib/dependency-graph/node');const CPUNode=require('../../../lib/dependency-graph/cpu-node');class SpeedIndex extends MetricArtifact{get name(){return'LanternSpeedIndex';}
get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:0.65};}
getOptimisticGraph(dependencyGraph){return dependencyGraph;}
getPessimisticGraph(dependencyGraph){return dependencyGraph;}
getEstimateFromSimulation(simulationResult,extras){const fcpTimeInMs=extras.fcpResult.pessimisticEstimate.timeInMs;const estimate=extras.optimistic?extras.speedline.speedIndex:SpeedIndex.computeLayoutBasedSpeedIndex(simulationResult.nodeTimings,fcpTimeInMs);return{timeInMs:estimate,nodeTimings:simulationResult.nodeTimings};}
async compute_(data,artifacts){const speedline=await artifacts.requestSpeedline(data.trace);const fcpResult=await artifacts.requestLanternFirstContentfulPaint(data);const metricResult=await this.computeMetricWithGraphs(data,artifacts,{speedline,fcpResult});metricResult.timing=Math.max(metricResult.timing,fcpResult.timing);return metricResult;}
static computeLayoutBasedSpeedIndex(nodeTimings,fcpTimeInMs){const layoutWeights=[];for(const[node,timing]of nodeTimings.entries()){if(node.type!==Node.TYPES.CPU)continue;if(!timing.startTime||!timing.endTime)continue;const cpuNode=node;if(cpuNode.childEvents.some(x=>x.name==='Layout')){const timingWeight=Math.max(Math.log2(timing.endTime-timing.startTime),0);layoutWeights.push({time:timing.endTime,weight:timingWeight});}}
if(!layoutWeights.length){return fcpTimeInMs;}
const totalWeightedTime=layoutWeights.map(evt=>evt.weight*Math.max(evt.time,fcpTimeInMs)).reduce((a,b)=>a+b,0);const totalWeight=layoutWeights.map(evt=>evt.weight).reduce((a,b)=>a+b,0);return totalWeightedTime/totalWeight;}}
module.exports=SpeedIndex;},{"../../../lib/dependency-graph/cpu-node":23,"../../../lib/dependency-graph/node":25,"./lantern-metric":12}],"./gather/computed/metrics/speed-index":[function(require,module,exports){'use strict';const MetricArtifact=require('./metric');class SpeedIndex extends MetricArtifact{get name(){return'SpeedIndex';}
async computeObservedMetric(data,artifacts){const speedline=await artifacts.requestSpeedline(data.trace);const timing=Math.round(speedline.speedIndex);const timestamp=(timing+speedline.beginning)*1000;return Promise.resolve({timing,timestamp});}}
module.exports=SpeedIndex;},{"./metric":13}],"./gather/computed/network-analysis":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const NetworkAnalyzer=require('../../lib/dependency-graph/simulator/network-analyzer');class NetworkAnalysis extends ComputedArtifact{get name(){return'NetworkAnalysis';}
static computeRTTAndServerResponseTime(records){const rttByOrigin=new Map();for(const[origin,summary]of NetworkAnalyzer.estimateRTTByOrigin(records).entries()){rttByOrigin.set(origin,summary.min);}
const minimumRtt=Math.min(...Array.from(rttByOrigin.values()));const responseTimeSummaries=NetworkAnalyzer.estimateServerResponseTimeByOrigin(records,{rttByOrigin});const additionalRttByOrigin=new Map();const serverResponseTimeByOrigin=new Map();for(const[origin,summary]of responseTimeSummaries.entries()){const rttForOrigin=rttByOrigin.get(origin);additionalRttByOrigin.set(origin,rttForOrigin-minimumRtt);serverResponseTimeByOrigin.set(origin,summary.median);}
return{rtt:minimumRtt,additionalRttByOrigin,serverResponseTimeByOrigin,throughput:0};}
async compute_(devtoolsLog,computedArtifacts){const records=await computedArtifacts.requestNetworkRecords(devtoolsLog);const throughput=await computedArtifacts.requestNetworkThroughput(devtoolsLog);const rttAndServerResponseTime=NetworkAnalysis.computeRTTAndServerResponseTime(records);rttAndServerResponseTime.throughput=throughput*8;return rttAndServerResponseTime;}}
module.exports=NetworkAnalysis;},{"../../lib/dependency-graph/simulator/network-analyzer":27,"./computed-artifact":11}],"./gather/computed/network-records":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const NetworkRecorder=require('../../lib/network-recorder');class NetworkRecords extends ComputedArtifact{get name(){return'NetworkRecords';}
async compute_(devtoolsLog){return NetworkRecorder.recordsFromLogs(devtoolsLog);}}
module.exports=NetworkRecords;},{"../../lib/network-recorder":37,"./computed-artifact":11}],"./gather/computed/network-throughput":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');class NetworkThroughput extends ComputedArtifact{get name(){return'NetworkThroughput';}
static getThroughput(networkRecords){let totalBytes=0;const timeBoundaries=networkRecords.reduce((boundaries,record)=>{const scheme=record.parsedURL&&record.parsedURL.scheme;if(scheme==='data'||record.failed||!record.finished||record.statusCode>300||!record.transferSize){return boundaries;}
totalBytes+=record.transferSize;boundaries.push({time:record._responseReceivedTime,isStart:true});boundaries.push({time:record.endTime,isStart:false});return boundaries;},[]).sort((a,b)=>a.time-b.time);if(!timeBoundaries.length){return Infinity;}
let inflight=0;let currentStart=0;let totalDuration=0;timeBoundaries.forEach(boundary=>{if(boundary.isStart){if(inflight===0){currentStart=boundary.time;}
inflight++;}else{inflight--;if(inflight===0){totalDuration+=boundary.time-currentStart;}}});return totalBytes/totalDuration;}
compute_(devtoolsLog,computedArtifacts){return computedArtifacts.requestNetworkRecords(devtoolsLog).then(NetworkThroughput.getThroughput);}}
module.exports=NetworkThroughput;},{"./computed-artifact":11}],"./gather/computed/page-dependency-graph":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const NetworkNode=require('../../lib/dependency-graph/network-node');const CPUNode=require('../../lib/dependency-graph/cpu-node');const NetworkAnalyzer=require('../../lib/dependency-graph/simulator/network-analyzer');const TracingProcessor=require('../../lib/traces/tracing-processor');const WebInspector=require('../../lib/web-inspector');const Node=require('../../lib/dependency-graph/node.js');const MINIMUM_TASK_DURATION_OF_INTEREST=10;const IGNORED_MIME_TYPES_REGEX=/^video/;class PageDependencyGraphArtifact extends ComputedArtifact{get name(){return'PageDependencyGraph';}
static getNetworkInitiators(record){if(!record._initiator)return[];if(record._initiator.url)return[record._initiator.url];if(record._initiator.type==='script'&&record._initiator.stack){const frames=record._initiator.stack.callFrames;return Array.from(new Set(frames.map(frame=>frame.url))).filter(Boolean);}
return[];}
static getNetworkNodeOutput(networkRecords){const nodes=[];const idToNodeMap=new Map();const urlToNodeMap=new Map();networkRecords.forEach(record=>{if(IGNORED_MIME_TYPES_REGEX.test(record._mimeType))return;while(idToNodeMap.has(record.requestId)){record._requestId+=':duplicate';}
const node=new NetworkNode(record);nodes.push(node);const list=urlToNodeMap.get(record.url)||[];list.push(node);idToNodeMap.set(record.requestId,node);urlToNodeMap.set(record.url,list);});return{nodes,idToNodeMap,urlToNodeMap};}
static getCPUNodes(traceOfTab){const nodes=[];let i=0;const minimumEvtDur=MINIMUM_TASK_DURATION_OF_INTEREST*1000;while(i<traceOfTab.mainThreadEvents.length){const evt=traceOfTab.mainThreadEvents[i];if(!TracingProcessor.isScheduleableTask(evt)||!evt.dur||evt.dur<minimumEvtDur)
{i++;continue;}
const children=[];i++;for(const endTime=evt.ts+evt.dur;i<traceOfTab.mainThreadEvents.length&&traceOfTab.mainThreadEvents[i].ts<endTime;i++)
{children.push(traceOfTab.mainThreadEvents[i]);}
nodes.push(new CPUNode(evt,children));}
return nodes;}
static linkNetworkNodes(rootNode,networkNodeOutput){networkNodeOutput.nodes.forEach(node=>{const initiators=PageDependencyGraphArtifact.getNetworkInitiators(node.record);if(initiators.length){initiators.forEach(initiator=>{const parentCandidates=networkNodeOutput.urlToNodeMap.get(initiator)||[rootNode];const parent=parentCandidates.length===1?parentCandidates[0]:rootNode;node.addDependency(parent);});}else if(node!==rootNode){rootNode.addDependent(node);}
const redirects=Array.from(node.record.redirects||[]);redirects.push(node.record);for(let i=1;i<redirects.length;i++){const redirectNode=networkNodeOutput.idToNodeMap.get(redirects[i-1].requestId);const actualNode=networkNodeOutput.idToNodeMap.get(redirects[i].requestId);if(actualNode&&redirectNode){actualNode.addDependency(redirectNode);}}});}
static linkCPUNodes(rootNode,networkNodeOutput,cpuNodes){function addDependentNetworkRequest(cpuNode,reqId){const networkNode=networkNodeOutput.idToNodeMap.get(reqId);if(!networkNode||networkNode.record._resourceType!==WebInspector.resourceTypes.XHR||networkNode.startTime<=cpuNode.startTime)return;cpuNode.addDependent(networkNode);}
function addDependencyOnUrl(cpuNode,url){if(!url)return;const minimumAllowableTimeSinceNetworkNodeEnd=-100*1000;const candidates=networkNodeOutput.urlToNodeMap.get(url)||[];let minCandidate=null;let minDistance=Infinity;for(const candidate of candidates){if(cpuNode.startTime<=candidate.startTime)return;const distance=cpuNode.startTime-candidate.endTime;if(distance>=minimumAllowableTimeSinceNetworkNodeEnd&&distance<minDistance){minCandidate=candidate;minDistance=distance;}}
if(!minCandidate)return;cpuNode.addDependency(minCandidate);}
const timers=new Map();for(const node of cpuNodes){for(const evt of node.childEvents){if(!evt.args.data)continue;const argsUrl=evt.args.data.url;const stackTraceUrls=(evt.args.data.stackTrace||[]).map(l=>l.url).filter(Boolean);switch(evt.name){case'TimerInstall':timers.set(evt.args.data.timerId,node);stackTraceUrls.forEach(url=>addDependencyOnUrl(node,url));break;case'TimerFire':{const installer=timers.get(evt.args.data.timerId);if(!installer)break;installer.addDependent(node);break;}
case'InvalidateLayout':case'ScheduleStyleRecalculation':stackTraceUrls.forEach(url=>addDependencyOnUrl(node,url));break;case'EvaluateScript':addDependencyOnUrl(node,argsUrl);stackTraceUrls.forEach(url=>addDependencyOnUrl(node,url));break;case'XHRReadyStateChange':if(evt.args.data.readyState!==4)break;addDependencyOnUrl(node,argsUrl);stackTraceUrls.forEach(url=>addDependencyOnUrl(node,url));break;case'FunctionCall':case'v8.compile':addDependencyOnUrl(node,argsUrl);break;case'ParseAuthorStyleSheet':addDependencyOnUrl(node,evt.args.data.styleSheetUrl);break;case'ResourceSendRequest':addDependentNetworkRequest(node,evt.args.data.requestId);stackTraceUrls.forEach(url=>addDependencyOnUrl(node,url));break;}}
if(node.getNumberOfDependencies()===0){node.addDependency(rootNode);}}}
static createGraph(traceOfTab,networkRecords){const networkNodeOutput=PageDependencyGraphArtifact.getNetworkNodeOutput(networkRecords);const cpuNodes=PageDependencyGraphArtifact.getCPUNodes(traceOfTab);const rootRequest=networkRecords.reduce((min,r)=>min.startTime<r.startTime?min:r);const rootNode=networkNodeOutput.idToNodeMap.get(rootRequest.requestId);const mainDocumentRequest=NetworkAnalyzer.findMainDocument(networkRecords);const mainDocumentNode=networkNodeOutput.idToNodeMap.get(mainDocumentRequest.requestId);if(!rootNode||!mainDocumentNode){throw new Error(`${rootNode?'mainDocument':'root'}Node not found.`);}
PageDependencyGraphArtifact.linkNetworkNodes(rootNode,networkNodeOutput);PageDependencyGraphArtifact.linkCPUNodes(rootNode,networkNodeOutput,cpuNodes);mainDocumentNode.setIsMainDocument(true);if(NetworkNode.hasCycle(rootNode)){throw new Error('Invalid dependency graph created, cycle detected');}
return rootNode;}
static printGraph(rootNode,widthInCharacters=100){function padRight(str,target,padChar=' '){return str+padChar.repeat(Math.max(target-str.length,0));}
const nodes=[];rootNode.traverse(node=>nodes.push(node));nodes.sort((a,b)=>a.startTime-b.startTime);const min=nodes[0].startTime;const max=nodes.reduce((max,node)=>Math.max(max,node.endTime),0);const totalTime=max-min;const timePerCharacter=totalTime/widthInCharacters;nodes.forEach(node=>{const offset=Math.round((node.startTime-min)/timePerCharacter);const length=Math.ceil((node.endTime-node.startTime)/timePerCharacter);const bar=padRight('',offset)+padRight('',length,'=');const displayName=node.record?node.record._url:node.type;console.log(padRight(bar,widthInCharacters),`| ${displayName.slice(0,30)}`);});}
async compute_(data,artifacts){const trace=data.trace;const devtoolsLog=data.devtoolsLog;const[traceOfTab,networkRecords]=await Promise.all([artifacts.requestTraceOfTab(trace),artifacts.requestNetworkRecords(devtoolsLog)]);return PageDependencyGraphArtifact.createGraph(traceOfTab,networkRecords);}}
module.exports=PageDependencyGraphArtifact;},{"../../lib/dependency-graph/cpu-node":23,"../../lib/dependency-graph/network-node":24,"../../lib/dependency-graph/node.js":25,"../../lib/dependency-graph/simulator/network-analyzer":27,"../../lib/traces/tracing-processor":46,"../../lib/web-inspector":47,"./computed-artifact":11}],"./gather/computed/pushed-requests":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');class PushedRequests extends ComputedArtifact{get name(){return'PushedRequests';}
compute_(devtoolsLog,artifacts){return artifacts.requestNetworkRecords(devtoolsLog).then(records=>{const pushedRecords=records.filter(r=>r._timing&&!!r._timing.pushStart);return pushedRecords;});}}
module.exports=PushedRequests;},{"./computed-artifact":11}],"./gather/computed/screenshots":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');class ScreenshotFilmstrip extends ComputedArtifact{get name(){return'Screenshots';}
fetchScreenshot(frame){return frame.imageDataPromise().then(data=>'data:image/jpg;base64,'+data);}
compute_(trace,computedArtifacts){return computedArtifacts.requestDevtoolsTimelineModel(trace).then(model=>{const filmStripFrames=model.filmStripModel().frames();const frameFetches=filmStripFrames.map(frame=>this.fetchScreenshot(frame));return Promise.all(frameFetches).then(images=>{const result=filmStripFrames.map((frame,i)=>({timestamp:frame.timestamp,datauri:images[i]}));return result;});});}}
module.exports=ScreenshotFilmstrip;},{"./computed-artifact":11}],"./gather/computed/speedline":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const speedline=require('speedline');const LHError=require('../../lib/errors');class Speedline extends ComputedArtifact{get name(){return'Speedline';}
compute_(trace,computedArtifacts){return computedArtifacts.requestTraceOfTab(trace).then(traceOfTab=>{const traceEvents=trace.traceEvents.slice();const navStart=traceOfTab.timestamps.navigationStart;return speedline(traceEvents,{timeOrigin:navStart,fastMode:true,include:'speedIndex'});}).catch(err=>{if(/No screenshots found in trace/.test(err.message)){throw new LHError(LHError.errors.NO_SCREENSHOTS);}
throw err;}).then(speedline=>{if(speedline.frames.length===0){throw new LHError(LHError.errors.NO_SPEEDLINE_FRAMES);}
if(speedline.speedIndex===0){throw new LHError(LHError.errors.SPEEDINDEX_OF_ZERO);}
return speedline;});}}
module.exports=Speedline;},{"../../lib/errors":33,"./computed-artifact":11,"speedline":152}],"./gather/computed/trace-of-tab":[function(require,module,exports){'use strict';const ComputedArtifact=require('./computed-artifact');const log=require('lighthouse-logger');const LHError=require('../../lib/errors');const Sentry=require('../../lib/sentry');const WebInspector=require('../../lib/web-inspector');class TraceOfTab extends ComputedArtifact{get name(){return'TraceOfTab';}
async compute_(trace){const keyEvents=trace.traceEvents.filter(e=>{return e.cat.includes('blink.user_timing')||e.cat.includes('loading')||e.cat.includes('devtools.timeline')||e.name==='TracingStartedInPage';}).stableSort((event0,event1)=>event0.ts-event1.ts);const startedInPageEvt=keyEvents.find(e=>e.name==='TracingStartedInPage');if(!startedInPageEvt)throw new LHError(LHError.errors.NO_TRACING_STARTED);const frameId=startedInPageEvt.args.data.page;const frameEvents=keyEvents.filter(e=>e.args.frame===frameId);const navigationStart=frameEvents.filter(e=>e.name==='navigationStart').pop();if(!navigationStart)throw new LHError(LHError.errors.NO_NAVSTART);const firstPaint=frameEvents.find(e=>e.name==='firstPaint'&&e.ts>navigationStart.ts);const firstContentfulPaint=frameEvents.find(e=>e.name==='firstContentfulPaint'&&e.ts>navigationStart.ts);let firstMeaningfulPaint=frameEvents.find(e=>e.name==='firstMeaningfulPaint'&&e.ts>navigationStart.ts);let fmpFellBack=false;if(!firstMeaningfulPaint){Sentry.captureMessage('No firstMeaningfulPaint found, using fallback',{level:'warning'});const fmpCand='firstMeaningfulPaintCandidate';fmpFellBack=true;log.verbose('trace-of-tab',`No firstMeaningfulPaint found, falling back to last ${fmpCand}`);const lastCandidate=frameEvents.filter(e=>e.name===fmpCand).pop();if(!lastCandidate){log.verbose('trace-of-tab','No `firstMeaningfulPaintCandidate` events found in trace');}
firstMeaningfulPaint=lastCandidate;}
const load=frameEvents.find(e=>e.name==='loadEventEnd'&&e.ts>navigationStart.ts);const domContentLoaded=frameEvents.find(e=>e.name==='domContentLoadedEventEnd'&&e.ts>navigationStart.ts);const processEvents=trace.traceEvents.filter(e=>e.pid===startedInPageEvt.pid).stableSort((event0,event1)=>event0.ts-event1.ts);const mainThreadEvents=processEvents.filter(e=>e.tid===startedInPageEvt.tid);const traceEnd=trace.traceEvents.reduce((max,evt)=>{return max.ts>evt.ts?max:evt;});const metrics={navigationStart,firstPaint,firstContentfulPaint,firstMeaningfulPaint,traceEnd:{ts:traceEnd.ts+(traceEnd.dur||0)},load,domContentLoaded};const timings={};const timestamps={};Object.keys(metrics).forEach(metric=>{timestamps[metric]=metrics[metric]&&metrics[metric].ts;timings[metric]=(timestamps[metric]-navigationStart.ts)/1000;});return{timings:timings,timestamps:timestamps,processEvents,mainThreadEvents,startedInPageEvt,navigationStartEvt:navigationStart,firstPaintEvt:firstPaint,firstContentfulPaintEvt:firstContentfulPaint,firstMeaningfulPaintEvt:firstMeaningfulPaint,loadEvt:load,domContentLoadedEvt:domContentLoaded,fmpFellBack};}}
module.exports=TraceOfTab;},{"../../lib/errors":33,"../../lib/sentry":39,"../../lib/web-inspector":47,"./computed-artifact":11,"lighthouse-logger":143}],1:[function(require,module,exports){'use strict';const Audit=require('../audit');class AxeAudit extends Audit{static audit(artifacts){const notApplicables=artifacts.Accessibility.notApplicable||[];const isNotApplicable=notApplicables.find(result=>result.id===this.meta.name);if(isNotApplicable){return{rawValue:true,notApplicable:true};}
const violations=artifacts.Accessibility.violations||[];const rule=violations.find(result=>result.id===this.meta.name);let items=[];if(rule&&rule.nodes){items=rule.nodes.map(node=>({node:{type:'node',selector:Array.isArray(node.target)?node.target.join(' '):'',path:node.path,snippet:node.snippet}}));}
const headings=[{key:'node',itemType:'node',text:'Failing Elements'}];return{rawValue:typeof rule==='undefined',extendedInfo:{value:rule},details:Audit.makeTableDetails(headings,items)};}}
module.exports=AxeAudit;},{"../audit":2}],2:[function(require,module,exports){'use strict';const statistics=require('../lib/statistics');const Util=require('../report/html/renderer/util');const DEFAULT_PASS='defaultPass';const clampTo2Decimals=val=>Math.round(val*100)/100;class Audit{static get DEFAULT_PASS(){return DEFAULT_PASS;}
static get SCORING_MODES(){return{NUMERIC:'numeric',BINARY:'binary',MANUAL:'manual',INFORMATIVE:'informative',NOT_APPLICABLE:'not-applicable',ERROR:'error'};}
static get meta(){throw new Error('Audit meta information must be overridden.');}
static get defaultOptions(){return{};}
static audit(artifacts,context){throw new Error('audit() method must be overriden');}
static computeLogNormalScore(measuredValue,diminishingReturnsValue,medianValue){const distribution=statistics.getLogNormalDistribution(medianValue,diminishingReturnsValue);let score=distribution.computeComplementaryPercentile(measuredValue);score=Math.min(1,score);score=Math.max(0,score);return clampTo2Decimals(score);}
static generateErrorAuditResult(audit,errorMessage){return Audit.generateAuditResult(audit,{rawValue:null,errorMessage});}
static makeTableDetails(headings,results,summary){if(results.length===0){return{type:'table',headings:[],items:[],summary};}
return{type:'table',headings:headings,items:results,summary};}
static _normalizeAuditScore(audit,result){let score=result.score===undefined?Number(result.rawValue):result.score;if(!Number.isFinite(score))throw new Error(`Invalid score: ${score}`);if(score>1)throw new Error(`Audit score for ${audit.meta.name} is > 1`);if(score<0)throw new Error(`Audit score for ${audit.meta.name} is < 0`);score=clampTo2Decimals(score);const scoreDisplayMode=audit.meta.scoreDisplayMode||Audit.SCORING_MODES.BINARY;return{score,scoreDisplayMode};}
static generateAuditResult(audit,result){if(typeof result.rawValue==='undefined'){throw new Error('generateAuditResult requires a rawValue');}
let{score,scoreDisplayMode}=Audit._normalizeAuditScore(audit,result);if(result.notApplicable){scoreDisplayMode=Audit.SCORING_MODES.NOT_APPLICABLE;result.rawValue=true;}
if(result.errorMessage){scoreDisplayMode=Audit.SCORING_MODES.ERROR;}
let auditDescription=audit.meta.description;if(audit.meta.failureDescription){if(Number(score)<Util.PASS_THRESHOLD){auditDescription=audit.meta.failureDescription;}}
if(scoreDisplayMode!==Audit.SCORING_MODES.BINARY&&scoreDisplayMode!==Audit.SCORING_MODES.NUMERIC){score=null;}
return{id:audit.meta.name,title:auditDescription,description:audit.meta.helpText,score,scoreDisplayMode,rawValue:result.rawValue,displayValue:result.displayValue,explanation:result.explanation,errorMessage:result.errorMessage,warnings:result.warnings,details:result.details};}}
module.exports=Audit;},{"../lib/statistics":40,"../report/html/renderer/util":48}],3:[function(require,module,exports){'use strict';const Audit=require('../audit');const Interactive=require('../../gather/computed/metrics/lantern-interactive');const Simulator=require('../../lib/dependency-graph/simulator/simulator');const Node=require('../../lib/dependency-graph/node.js');const NetworkNode=require('../../lib/dependency-graph/network-node.js');const KB_IN_BYTES=1024;const WASTED_MS_FOR_AVERAGE=300;const WASTED_MS_FOR_POOR=750;class UnusedBytes extends Audit{static scoreForWastedMs(wastedMs){if(wastedMs===0)return 1;else
if(wastedMs<WASTED_MS_FOR_AVERAGE)return 0.9;else
if(wastedMs<WASTED_MS_FOR_POOR)return 0.65;else
return 0;}
static bytesToMs(bytes,networkThroughput){const milliseconds=bytes/networkThroughput*1000;return milliseconds;}
static estimateTransferSize(networkRecord,totalBytes,resourceType,compressionRatio=0.5){if(!networkRecord){return Math.round(totalBytes*compressionRatio);}else if(networkRecord._resourceType&&networkRecord._resourceType._name===resourceType){return networkRecord._transferSize||0;}else{const transferSize=networkRecord._transferSize||0;const resourceSize=networkRecord._resourceSize;const compressionRatio=resourceSize!==undefined?transferSize/resourceSize:1;return Math.round(totalBytes*compressionRatio);}}
static audit(artifacts,context){const trace=artifacts.traces[Audit.DEFAULT_PASS];const devtoolsLog=artifacts.devtoolsLogs[Audit.DEFAULT_PASS];const settings=context&&context.settings||{};const simulatorOptions={devtoolsLog,settings};return artifacts.requestNetworkRecords(devtoolsLog).then(networkRecords=>Promise.all([this.audit_(artifacts,networkRecords,context),artifacts.requestPageDependencyGraph({trace,devtoolsLog}),artifacts.requestLoadSimulator(simulatorOptions)])).then(([result,graph,simulator])=>this.createAuditProduct(result,graph,simulator));}
static computeWasteWithTTIGraph(results,graph,simulator,options){options=Object.assign({includeLoad:true},options);const simulationBeforeChanges=simulator.simulate(graph);const resultsByUrl=new Map();for(const result of results){resultsByUrl.set(result.url,result);}
const originalTransferSizes=new Map();graph.traverse(node=>{if(node.type!=='network')return;const networkNode=node;const result=resultsByUrl.get(networkNode.record.url);if(!result)return;const original=networkNode.record.transferSize;originalTransferSizes.set(networkNode.record.requestId,original);const wastedBytes=result.wastedBytes;networkNode.record._transferSize=Math.max(original-wastedBytes,0);});const simulationAfterChanges=simulator.simulate(graph);graph.traverse(node=>{if(node.type!=='network')return;const networkNode=node;const originalTransferSize=originalTransferSizes.get(networkNode.record.requestId);if(originalTransferSize===undefined)return;networkNode.record._transferSize=originalTransferSize;});const savingsOnOverallLoad=simulationBeforeChanges.timeInMs-simulationAfterChanges.timeInMs;const savingsOnTTI=Interactive.getLastLongTaskEndTime(simulationBeforeChanges.nodeTimings)-
Interactive.getLastLongTaskEndTime(simulationAfterChanges.nodeTimings);let savings=savingsOnTTI;if(options.includeLoad)savings=Math.max(savings,savingsOnOverallLoad);return Math.round(Math.max(savings,0)/10)*10;}
static createAuditProduct(result,graph,simulator){const results=result.results.sort((itemA,itemB)=>itemB.wastedBytes-itemA.wastedBytes);const wastedBytes=results.reduce((sum,item)=>sum+item.wastedBytes,0);const wastedKb=Math.round(wastedBytes/KB_IN_BYTES);const wastedMs=this.computeWasteWithTTIGraph(results,graph,simulator);let displayValue=result.displayValue||'';if(typeof result.displayValue==='undefined'&&wastedKb){displayValue=['Potential savings of %d\xa0KB',wastedKb];}
const summary={wastedMs,wastedBytes};const details=Audit.makeTableDetails(result.headings,results,summary);return{explanation:result.explanation,warnings:result.warnings,displayValue,rawValue:wastedMs,score:UnusedBytes.scoreForWastedMs(wastedMs),extendedInfo:{value:{wastedMs,wastedKb,results}},details};}
static audit_(artifacts,networkRecords,context){throw new Error('audit_ unimplemented');}}
module.exports=UnusedBytes;},{"../../gather/computed/metrics/lantern-interactive":"./gather/computed/metrics/lantern-interactive","../../lib/dependency-graph/network-node.js":24,"../../lib/dependency-graph/node.js":25,"../../lib/dependency-graph/simulator/simulator":28,"../audit":2}],4:[function(require,module,exports){'use strict';const Audit=require('../audit');class ManualAudit extends Audit{static get partialMeta(){return{scoreDisplayMode:Audit.SCORING_MODES.MANUAL,requiredArtifacts:[]};}
static audit(){return{rawValue:false};}}
module.exports=ManualAudit;},{"../audit":2}],5:[function(require,module,exports){'use strict';const Audit=require('./audit');class MultiCheckAudit extends Audit{static audit(artifacts){return Promise.resolve(this.audit_(artifacts)).then(result=>this.createAuditProduct(result));}
static createAuditProduct(result){const extendedInfo={value:result};if(result.failures.length>0){return{rawValue:false,explanation:`Failures: ${result.failures.join(',\n')}.`,extendedInfo};}
return{rawValue:true,extendedInfo,warnings:result.warnings};}
static audit_(artifacts){throw new Error('audit_ unimplemented');}}
module.exports=MultiCheckAudit;},{"./audit":2}],6:[function(require,module,exports){'use strict';const Audit=require('./audit');class ViolationAudit extends Audit{static getViolationResults(artifacts,pattern){const seen=new Set();return artifacts.ChromeConsoleMessages.map(message=>message.entry).filter(entry=>entry.url&&entry.source==='violation'&&pattern.test(entry.text)).map(entry=>({label:`line: ${entry.lineNumber}`,url:entry.url})).filter(entry=>{const key=`${entry.url}!${entry.label}`;if(seen.has(key))return false;seen.add(key);return true;});}}
module.exports=ViolationAudit;},{"./audit":2}],7:[function(require,module,exports){(function(__dirname){'use strict';const defaultConfigPath='./default-config.js';const defaultConfig=require('./default-config.js');const fullConfig=require('./full-config.js');const constants=require('./constants');const isDeepEqual=require('lodash.isequal');const log=require('lighthouse-logger');const path=require('path');const Audit=require('../audits/audit');const Runner=require('../runner');function validatePasses(passes,audits){if(!Array.isArray(passes)){return;}
const requiredGatherers=Config.getGatherersNeededByAudits(audits);passes.forEach(pass=>{pass.gatherers.forEach(gathererDefn=>{const gatherer=gathererDefn.instance||gathererDefn.implementation;const isGatherRequiredByAudits=requiredGatherers.has(gatherer.name);if(isGatherRequiredByAudits===false){const msg=`${gatherer.name} gatherer requested, however no audit requires it.`;log.warn('config',msg);}});});const usedNames=new Set();passes.forEach(pass=>{const passName=pass.passName;if(usedNames.has(passName)){throw new Error(`Passes must have unique names (repeated passName: ${passName}.`);}
usedNames.add(passName);});}
function validateCategories(categories,audits,groups){if(!categories){return;}
Object.keys(categories).forEach(categoryId=>{categories[categoryId].auditRefs.forEach((auditRef,index)=>{if(!auditRef.id){throw new Error(`missing an audit id at ${categoryId}[${index}]`);}
const audit=audits.find(a=>a.implementation.meta.name===auditRef.id);if(!audit){throw new Error(`could not find ${auditRef.id} audit for category ${categoryId}`);}
const auditImpl=audit.implementation;const isManual=auditImpl.meta.scoreDisplayMode==='manual';if(categoryId==='accessibility'&&!auditRef.group&&!isManual){throw new Error(`${auditRef.id} accessibility audit does not have a group`);}
if(auditRef.weight>0&&isManual){throw new Error(`${auditRef.id} is manual but has a positive weight`);}
if(auditRef.group&&!groups[auditRef.group]){throw new Error(`${auditRef.id} references unknown group ${auditRef.group}`);}});});}
function assertValidAudit(auditDefinition,auditPath){const auditName=auditPath||auditDefinition&&auditDefinition.meta&&auditDefinition.meta.name;if(typeof auditDefinition.audit!=='function'||auditDefinition.audit===Audit.audit){throw new Error(`${auditName} has no audit() method.`);}
if(typeof auditDefinition.meta.name!=='string'){throw new Error(`${auditName} has no meta.name property, or the property is not a string.`);}
if(typeof auditDefinition.meta.description!=='string'){throw new Error(`${auditName} has no meta.description property, or the property is not a string.`);}
if(typeof auditDefinition.meta.failureDescription!=='string'&&auditDefinition.meta.scoreDisplayMode===Audit.SCORING_MODES.BINARY){throw new Error(`${auditName} has no failureDescription and should.`);}
if(typeof auditDefinition.meta.helpText!=='string'){throw new Error(`${auditName} has no meta.helpText property, or the property is not a string.`);}else if(auditDefinition.meta.helpText===''){throw new Error(`${auditName} has an empty meta.helpText string. Please add a description for the UI.`);}
if(!Array.isArray(auditDefinition.meta.requiredArtifacts)){throw new Error(`${auditName} has no meta.requiredArtifacts property, or the property is not an array.`);}}
function assertValidGatherer(gathererInstance,gathererName){gathererName=gathererName||gathererInstance.name||'gatherer';if(typeof gathererInstance.beforePass!=='function'){throw new Error(`${gathererName} has no beforePass() method.`);}
if(typeof gathererInstance.pass!=='function'){throw new Error(`${gathererName} has no pass() method.`);}
if(typeof gathererInstance.afterPass!=='function'){throw new Error(`${gathererName} has no afterPass() method.`);}}
function cleanFlagsForSettings(flags={}){const settings={};for(const key of Object.keys(flags)){if(typeof constants.defaultSettings[key]!=='undefined'){settings[key]=flags[key];}}
return settings;}
function merge(base,extension,overwriteArrays=false){if(typeof base==='undefined'||base===null){return extension;}else if(typeof extension==='undefined'){return base;}else if(Array.isArray(extension)){if(overwriteArrays)return extension;if(!Array.isArray(base))throw new TypeError(`Expected array but got ${typeof base}`);const merged=base.slice();extension.forEach(item=>{if(!merged.some(candidate=>isDeepEqual(candidate,item)))merged.push(item);});return merged;}else if(typeof extension==='object'){if(typeof base!=='object')throw new TypeError(`Expected object but got ${typeof base}`);Object.keys(extension).forEach(key=>{const localOverwriteArrays=overwriteArrays||key==='settings'&&typeof base[key]==='object';base[key]=merge(base[key],extension[key],localOverwriteArrays);});return base;}
return extension;}
function cloneArrayWithPluginSafety(array){return array.map(item=>{return typeof item==='object'?Object.assign({},item):item;});}
function deepClone(json){const cloned=JSON.parse(JSON.stringify(json));if(Array.isArray(json.passes)){cloned.passes.forEach((pass,i)=>{pass.gatherers=cloneArrayWithPluginSafety(json.passes[i].gatherers||[]);});}
if(Array.isArray(json.audits)){cloned.audits=cloneArrayWithPluginSafety(json.audits);}
return cloned;}
class Config{constructor(configJSON,flags){let configPath=flags&&flags.configPath;if(!configJSON){configJSON=defaultConfig;configPath=path.resolve(__dirname,defaultConfigPath);}
if(configPath&&!path.isAbsolute(configPath)){throw new Error('configPath must be an absolute path.');}
configJSON=deepClone(configJSON);if(configJSON.extends==='lighthouse:full'){const explodedFullConfig=Config.extendConfigJSON(deepClone(defaultConfig),deepClone(fullConfig));configJSON=Config.extendConfigJSON(explodedFullConfig,configJSON);}else if(configJSON.extends){configJSON=Config.extendConfigJSON(deepClone(defaultConfig),configJSON);}
configJSON=Config.augmentWithDefaults(configJSON);configJSON.audits=Config.expandAuditShorthandAndMergeOptions(configJSON.audits);configJSON.passes=Config.expandGathererShorthandAndMergeOptions(configJSON.passes);configJSON.settings=merge(configJSON.settings||{},cleanFlagsForSettings(flags),true);if(Array.isArray(configJSON.settings.onlyCategories)||Array.isArray(configJSON.settings.onlyAudits)||Array.isArray(configJSON.settings.skipAudits)){const categoryIds=configJSON.settings.onlyCategories;const auditIds=configJSON.settings.onlyAudits;const skipAuditIds=configJSON.settings.skipAudits;configJSON=Config.generateNewFilteredConfig(configJSON,categoryIds,auditIds,skipAuditIds);}
Config.adjustDefaultPassForThrottling(configJSON);this._configDir=configPath?path.dirname(configPath):undefined;this._passes=Config.requireGatherers(configJSON.passes,this._configDir);this._audits=Config.requireAudits(configJSON.audits,this._configDir);this._categories=configJSON.categories;this._groups=configJSON.groups;this._settings=configJSON.settings||{};validatePasses(configJSON.passes,this._audits);validateCategories(configJSON.categories,this._audits,this._groups);}
static extendConfigJSON(baseJSON,extendJSON){if(extendJSON.passes){extendJSON.passes.forEach(pass=>{const passName=pass.passName||constants.defaultPassConfig.passName;const basePass=baseJSON.passes.find(candidate=>candidate.passName===passName);if(!basePass){baseJSON.passes.push(pass);}else{merge(basePass,pass);}});delete extendJSON.passes;}
return merge(baseJSON,extendJSON);}
static augmentWithDefaults(config){const{defaultSettings,defaultPassConfig}=constants;config.settings=merge(deepClone(defaultSettings),config.settings,true);if(config.passes){config.passes=config.passes.map(pass=>merge(deepClone(defaultPassConfig),pass));}
return config;}
static expandAuditShorthandAndMergeOptions(audits){if(!audits){return audits;}
const newAudits=audits.map(audit=>{if(typeof audit==='string'){return{path:audit,options:{}};}else if(audit&&typeof audit.audit==='function'){return{implementation:audit,options:{}};}else{return audit;}});return Config._mergeOptionsOfItems(newAudits);}
static expandGathererShorthandAndMergeOptions(passes){if(!passes){return passes;}
passes.forEach(pass=>{pass.gatherers=pass.gatherers.map(gatherer=>{if(typeof gatherer==='string'){return{path:gatherer,options:{}};}else if(typeof gatherer==='function'){return{implementation:gatherer,options:{}};}else if(gatherer&&typeof gatherer.beforePass==='function'){return{instance:gatherer,options:{}};}else{return gatherer;}});pass.gatherers=Config._mergeOptionsOfItems(pass.gatherers);});return passes;}
static _mergeOptionsOfItems(items){const mergedItems=[];for(const item of items){const existingItem=item.path&&mergedItems.find(candidate=>candidate.path===item.path);if(!existingItem){mergedItems.push(item);continue;}
existingItem.options=Object.assign({},existingItem.options,item.options);}
return mergedItems;}
static adjustDefaultPassForThrottling(config){if(config.settings.throttlingMethod!=='devtools'&&config.settings.throttlingMethod!=='provided'){return;}
const defaultPass=config.passes.find(pass=>pass.passName==='defaultPass');if(!defaultPass)return;const overrides=constants.nonSimulatedPassConfigOverrides;defaultPass.pauseAfterLoadMs=Math.max(overrides.pauseAfterLoadMs,defaultPass.pauseAfterLoadMs);defaultPass.cpuQuietThresholdMs=Math.max(overrides.cpuQuietThresholdMs,defaultPass.cpuQuietThresholdMs);defaultPass.networkQuietThresholdMs=Math.max(overrides.networkQuietThresholdMs,defaultPass.networkQuietThresholdMs);}
static generateNewFilteredConfig(oldConfig,categoryIds,auditIds,skipAuditIds){const config=deepClone(oldConfig);config.audits=Config.expandAuditShorthandAndMergeOptions(config.audits);config.passes=Config.expandGathererShorthandAndMergeOptions(config.passes);config.passes=Config.requireGatherers(config.passes);const{categories,audits:requestedAuditNames}=Config.filterCategoriesAndAudits(config.categories,categoryIds,auditIds,skipAuditIds);config.categories=categories;const auditPathToNameMap=Config.getMapOfAuditPathToName(config);const getAuditName=auditDefn=>auditDefn.implementation?auditDefn.implementation.meta.name:auditPathToNameMap.get(auditDefn.path);config.audits=config.audits.filter(auditDefn=>requestedAuditNames.has(getAuditName(auditDefn)));const auditObjectsSelected=Config.requireAudits(config.audits);const requiredGatherers=Config.getGatherersNeededByAudits(auditObjectsSelected);config.passes=Config.generatePassesNeededByGatherers(config.passes,requiredGatherers);return config;}
static filterCategoriesAndAudits(oldCategories,categoryIds,auditIds,skipAuditIds){if(auditIds&&skipAuditIds){throw new Error('Cannot set both skipAudits and onlyAudits');}
const categories={};const filterByIncludedCategory=!!categoryIds;const filterByIncludedAudit=!!auditIds;categoryIds=categoryIds||[];auditIds=auditIds||[];skipAuditIds=skipAuditIds||[];categoryIds.forEach(categoryId=>{if(!oldCategories[categoryId]){log.warn('config',`unrecognized category in 'onlyCategories': ${categoryId}`);}});const auditsToValidate=new Set(auditIds.concat(skipAuditIds));for(const auditId of auditsToValidate){const foundCategory=Object.keys(oldCategories).find(categoryId=>{const auditRefs=oldCategories[categoryId].auditRefs;return auditRefs.find(candidate=>candidate.id===auditId);});if(!foundCategory){const parentKeyName=skipAuditIds.includes(auditId)?'skipAudits':'onlyAudits';log.warn('config',`unrecognized audit in '${parentKeyName}': ${auditId}`);}
if(auditIds.includes(auditId)&&categoryIds.includes(foundCategory)){log.warn('config',`${auditId} in 'onlyAudits' is already included by `+`${foundCategory} in 'onlyCategories'`);}}
const includedAudits=new Set(auditIds);skipAuditIds.forEach(id=>includedAudits.delete(id));Object.keys(oldCategories).forEach(categoryId=>{const category=deepClone(oldCategories[categoryId]);if(filterByIncludedCategory&&filterByIncludedAudit){if(!categoryIds.includes(categoryId)){category.auditRefs=category.auditRefs.filter(audit=>auditIds.includes(audit.id));}}else if(filterByIncludedCategory){if(!categoryIds.includes(categoryId)){return;}}else if(filterByIncludedAudit){category.auditRefs=category.auditRefs.filter(audit=>auditIds.includes(audit.id));}
category.auditRefs=category.auditRefs.filter(audit=>!skipAuditIds.includes(audit.id));if(category.auditRefs.length){categories[categoryId]=category;category.auditRefs.forEach(audit=>includedAudits.add(audit.id));}});return{categories,audits:includedAudits};}
static getCategories(config){return Object.keys(config.categories).map(id=>{const title=config.categories[id].title;return{id,title};});}
static getMapOfAuditPathToName(config){const auditObjectsAll=Config.requireAudits(config.audits);const auditPathToName=new Map(auditObjectsAll.map((auditDefn,index)=>{const AuditClass=auditDefn.implementation;const auditPath=config.audits[index];const auditName=AuditClass.meta.name;return[auditPath,auditName];}));return auditPathToName;}
static getGatherersNeededByAudits(audits){if(!audits){return new Set();}
return audits.reduce((list,auditDefn)=>{auditDefn.implementation.meta.requiredArtifacts.forEach(artifact=>list.add(artifact));return list;},new Set());}
static generatePassesNeededByGatherers(passes,requiredGatherers){const auditsNeedTrace=requiredGatherers.has('traces');const filteredPasses=passes.map(pass=>{pass.gatherers=pass.gatherers.filter(gathererDefn=>{const gatherer=gathererDefn.instance||gathererDefn.implementation;return requiredGatherers.has(gatherer.name);});if(pass.recordTrace&&!auditsNeedTrace){const passName=pass.passName||'unknown pass';log.warn('config',`Trace not requested by an audit, dropping trace in ${passName}`);pass.recordTrace=false;}
return pass;}).filter(pass=>{if(pass.recordTrace)return true;if(pass.passName==='defaultPass')return true;return pass.gatherers.length>0;});return filteredPasses;}
static requireAudits(audits,configPath){if(!audits){return null;}
const coreList=Runner.getAuditList();return audits.map(auditDefn=>{if(!auditDefn.implementation){const path=auditDefn.path;const coreAudit=coreList.find(a=>a===`${path}.js`);let requirePath=`../audits/${path}`;if(!coreAudit){requirePath=Runner.resolvePlugin(path,configPath,'audit');}
auditDefn.implementation=require(requirePath);}
assertValidAudit(auditDefn.implementation,auditDefn.path);return auditDefn;});}
static requireGatherers(passes,configPath){if(!passes){return null;}
const coreList=Runner.getGathererList();passes.forEach(pass=>{pass.gatherers.forEach(gathererDefn=>{if(!gathererDefn.instance){let GathererClass=gathererDefn.implementation;if(!GathererClass){const name=gathererDefn.path;const coreGatherer=coreList.find(a=>a===`${name}.js`);let requirePath=`../gather/gatherers/${name}`;if(!coreGatherer){requirePath=Runner.resolvePlugin(name,configPath,'gatherer');}
GathererClass=require(requirePath);}
gathererDefn.implementation=GathererClass;gathererDefn.instance=new GathererClass();}
assertValidGatherer(gathererDefn.instance,gathererDefn.path);});});return passes;}
get configDir(){return this._configDir;}
get passes(){return this._passes;}
get audits(){return this._audits;}
get categories(){return this._categories;}
get groups(){return this._groups;}
get settings(){return this._settings;}}
module.exports=Config;}).call(this,"/../lighthouse-core/config");},{"../audits/audit":2,"../runner":50,"./constants":8,"./default-config.js":9,"./full-config.js":10,"lighthouse-logger":143,"lodash.isequal":144,"path":75}],8:[function(require,module,exports){'use strict';const DEVTOOLS_RTT_ADJUSTMENT_FACTOR=3.75;const DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR=0.9;const throttling={DEVTOOLS_RTT_ADJUSTMENT_FACTOR,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR,mobile3G:{rttMs:150,throughputKbps:1.6*1024,requestLatencyMs:150*DEVTOOLS_RTT_ADJUSTMENT_FACTOR,downloadThroughputKbps:1.6*1024*DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR,uploadThroughputKbps:750*DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR,cpuSlowdownMultiplier:4}};const defaultSettings={output:'json',maxWaitForLoad:45*1000,throttlingMethod:'simulate',throttling:throttling.mobile3G,auditMode:false,gatherMode:false,disableStorageReset:false,disableDeviceEmulation:false,blockedUrlPatterns:null,additionalTraceCategories:null,extraHeaders:null,onlyAudits:null,onlyCategories:null,skipAudits:null};const defaultPassConfig={passName:'defaultPass',recordTrace:false,useThrottling:false,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:'about:blank',blankDuration:300,gatherers:[]};const nonSimulatedPassConfigOverrides={pauseAfterLoadMs:5250,networkQuietThresholdMs:5250,cpuQuietThresholdMs:5250};module.exports={throttling,defaultSettings,defaultPassConfig,nonSimulatedPassConfigOverrides};},{}],9:[function(require,module,exports){'use strict';const constants=require('./constants');module.exports={settings:constants.defaultSettings,passes:[{passName:'defaultPass',recordTrace:true,useThrottling:true,pauseAfterLoadMs:1000,networkQuietThresholdMs:1000,cpuQuietThresholdMs:1000,gatherers:['scripts','css-usage','viewport','viewport-dimensions','theme-color','manifest','runtime-exceptions','chrome-console-messages','image-usage','accessibility','dobetterweb/all-event-listeners','dobetterweb/anchors-with-no-rel-noopener','dobetterweb/appcache','dobetterweb/domstats','dobetterweb/js-libraries','dobetterweb/optimized-images','dobetterweb/password-inputs-with-prevented-paste','dobetterweb/response-compression','dobetterweb/tags-blocking-first-paint','dobetterweb/websql','seo/meta-description','seo/font-size','seo/crawlable-links','seo/meta-robots','seo/hreflang','seo/embedded-content','seo/canonical','seo/robots-txt','fonts']},{passName:'offlinePass',gatherers:['service-worker','offline','start-url']},{passName:'redirectPass',blockedUrlPatterns:['*.css','*.jpg','*.jpeg','*.png','*.gif','*.svg','*.ttf','*.woff','*.woff2'],gatherers:['http-redirect','html-without-javascript']}],audits:['is-on-https','redirects-http','service-worker','works-offline','viewport','without-javascript','first-contentful-paint','first-meaningful-paint','load-fast-enough-for-pwa','speed-index','screenshot-thumbnails','estimated-input-latency','errors-in-console','time-to-first-byte','first-cpu-idle','interactive','user-timings','critical-request-chains','redirects','webapp-install-banner','splash-screen','themed-omnibox','manifest-short-name-length','content-width','image-aspect-ratio','deprecations','mainthread-work-breakdown','bootup-time','uses-rel-preload','uses-rel-preconnect','font-display','network-requests','metrics','manual/pwa-cross-browser','manual/pwa-page-transitions','manual/pwa-each-page-has-url','accessibility/accesskeys','accessibility/aria-allowed-attr','accessibility/aria-required-attr','accessibility/aria-required-children','accessibility/aria-required-parent','accessibility/aria-roles','accessibility/aria-valid-attr-value','accessibility/aria-valid-attr','accessibility/audio-caption','accessibility/button-name','accessibility/bypass','accessibility/color-contrast','accessibility/definition-list','accessibility/dlitem','accessibility/document-title','accessibility/duplicate-id','accessibility/frame-title','accessibility/html-has-lang','accessibility/html-lang-valid','accessibility/image-alt','accessibility/input-image-alt','accessibility/label','accessibility/layout-table','accessibility/link-name','accessibility/list','accessibility/listitem','accessibility/meta-refresh','accessibility/meta-viewport','accessibility/object-alt','accessibility/tabindex','accessibility/td-headers-attr','accessibility/th-has-data-cells','accessibility/valid-lang','accessibility/video-caption','accessibility/video-description','accessibility/manual/custom-controls-labels','accessibility/manual/custom-controls-roles','accessibility/manual/focus-traps','accessibility/manual/focusable-controls','accessibility/manual/heading-levels','accessibility/manual/logical-tab-order','accessibility/manual/managed-focus','accessibility/manual/offscreen-content-hidden','accessibility/manual/use-landmarks','accessibility/manual/visual-order-follows-dom','byte-efficiency/uses-long-cache-ttl','byte-efficiency/total-byte-weight','byte-efficiency/offscreen-images','byte-efficiency/render-blocking-resources','byte-efficiency/unminified-css','byte-efficiency/unminified-javascript','byte-efficiency/unused-css-rules','byte-efficiency/uses-webp-images','byte-efficiency/uses-optimized-images','byte-efficiency/uses-text-compression','byte-efficiency/uses-responsive-images','byte-efficiency/efficient-animated-content','dobetterweb/appcache-manifest','dobetterweb/dom-size','dobetterweb/external-anchors-use-rel-noopener','dobetterweb/geolocation-on-start','dobetterweb/no-document-write','dobetterweb/no-mutation-events','dobetterweb/no-vulnerable-libraries','dobetterweb/no-websql','dobetterweb/notification-on-start','dobetterweb/password-inputs-can-be-pasted-into','dobetterweb/uses-http2','dobetterweb/uses-passive-event-listeners','seo/meta-description','seo/http-status-code','seo/font-size','seo/link-text','seo/is-crawlable','seo/robots-txt','seo/hreflang','seo/plugins','seo/canonical','seo/manual/mobile-friendly','seo/manual/structured-data'],groups:{'metrics':{title:'Metrics'},'load-opportunities':{title:'Opportunities',description:'These are opportunities to speed up your application by optimizing the following resources.'},'diagnostics':{title:'Diagnostics',description:'More information about the performance of your application.'},'a11y-color-contrast':{title:'Color Contrast Is Satisfactory',description:'These are opportunities to improve the legibility of your content.'},'a11y-describe-contents':{title:'Elements Describe Contents Well',description:'These are opportunities to make your content easier to understand for a user of assistive technology, like a screen reader.'},'a11y-well-structured':{title:'Elements Are Well Structured',description:'These are opportunities to make sure your HTML is appropriately structured.'},'a11y-aria':{title:'ARIA Attributes Follow Best Practices',description:'These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.'},'a11y-correct-attributes':{title:'Elements Use Attributes Correctly',description:'These are opportunities to improve the configuration of your HTML elements.'},'a11y-element-names':{title:'Elements Have Discernible Names',description:'These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.'},'a11y-language':{title:'Page Specifies Valid Language',description:'These are opportunities to improve the interpretation of your content by users in different locales.'},'a11y-meta':{title:'Meta Tags Used Properly',description:'These are opportunities to improve the user experience of your site.'},'seo-mobile':{title:'Mobile Friendly',description:'Make sure your pages are mobile friendly so users don’t have to pinch or zoom '+'in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/).'},'seo-content':{title:'Content Best Practices',description:'Format your HTML in a way that enables crawlers to better understand your app’s content.'},'seo-crawl':{title:'Crawling and Indexing',description:'To appear in search results, crawlers need access to your app.'}},categories:{'performance':{title:'Performance',auditRefs:[{id:'first-contentful-paint',weight:3,group:'metrics'},{id:'first-meaningful-paint',weight:1,group:'metrics'},{id:'speed-index',weight:4,group:'metrics'},{id:'interactive',weight:5,group:'metrics'},{id:'first-cpu-idle',weight:2,group:'metrics'},{id:'estimated-input-latency',weight:0,group:'metrics'},{id:'render-blocking-resources',weight:0,group:'load-opportunities'},{id:'uses-responsive-images',weight:0,group:'load-opportunities'},{id:'offscreen-images',weight:0,group:'load-opportunities'},{id:'unminified-css',weight:0,group:'load-opportunities'},{id:'unminified-javascript',weight:0,group:'load-opportunities'},{id:'unused-css-rules',weight:0,group:'load-opportunities'},{id:'uses-optimized-images',weight:0,group:'load-opportunities'},{id:'uses-webp-images',weight:0,group:'load-opportunities'},{id:'uses-text-compression',weight:0,group:'load-opportunities'},{id:'uses-rel-preconnect',weight:0,group:'load-opportunities'},{id:'time-to-first-byte',weight:0,group:'load-opportunities'},{id:'redirects',weight:0,group:'load-opportunities'},{id:'uses-rel-preload',weight:0,group:'load-opportunities'},{id:'efficient-animated-content',weight:0,group:'load-opportunities'},{id:'total-byte-weight',weight:0,group:'diagnostics'},{id:'uses-long-cache-ttl',weight:0,group:'diagnostics'},{id:'dom-size',weight:0,group:'diagnostics'},{id:'critical-request-chains',weight:0,group:'diagnostics'},{id:'network-requests',weight:0},{id:'metrics',weight:0},{id:'user-timings',weight:0,group:'diagnostics'},{id:'bootup-time',weight:0,group:'diagnostics'},{id:'screenshot-thumbnails',weight:0},{id:'mainthread-work-breakdown',weight:0,group:'diagnostics'},{id:'font-display',weight:0,group:'diagnostics'}]},'pwa':{title:'Progressive Web App',description:'These checks validate the aspects of a Progressive Web App, as specified by the baseline [PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist).',manualDescription:'These checks are required by the baseline '+'[PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist) but are '+'not automatically checked by Lighthouse. They do not affect your score but it\'s important that you verify them manually.',auditRefs:[{id:'service-worker',weight:1},{id:'works-offline',weight:1},{id:'without-javascript',weight:1},{id:'is-on-https',weight:1},{id:'redirects-http',weight:1},{id:'load-fast-enough-for-pwa',weight:1},{id:'webapp-install-banner',weight:1},{id:'splash-screen',weight:1},{id:'themed-omnibox',weight:1},{id:'viewport',weight:1},{id:'content-width',weight:1},{id:'pwa-cross-browser',weight:0},{id:'pwa-page-transitions',weight:0},{id:'pwa-each-page-has-url',weight:0}]},'accessibility':{title:'Accessibility',description:'These checks highlight opportunities to [improve the accessibility of your web app](https://developers.google.com/web/fundamentals/accessibility). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.',manualDescription:'These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://developers.google.com/web/fundamentals/accessibility/how-to-review).',auditRefs:[{id:'accesskeys',weight:1,group:'a11y-correct-attributes'},{id:'aria-allowed-attr',weight:3,group:'a11y-aria'},{id:'aria-required-attr',weight:2,group:'a11y-aria'},{id:'aria-required-children',weight:5,group:'a11y-aria'},{id:'aria-required-parent',weight:2,group:'a11y-aria'},{id:'aria-roles',weight:3,group:'a11y-aria'},{id:'aria-valid-attr-value',weight:2,group:'a11y-aria'},{id:'aria-valid-attr',weight:5,group:'a11y-aria'},{id:'audio-caption',weight:4,group:'a11y-correct-attributes'},{id:'button-name',weight:10,group:'a11y-element-names'},{id:'bypass',weight:10,group:'a11y-describe-contents'},{id:'color-contrast',weight:6,group:'a11y-color-contrast'},{id:'definition-list',weight:1,group:'a11y-well-structured'},{id:'dlitem',weight:1,group:'a11y-well-structured'},{id:'document-title',weight:2,group:'a11y-describe-contents'},{id:'duplicate-id',weight:5,group:'a11y-well-structured'},{id:'frame-title',weight:5,group:'a11y-describe-contents'},{id:'html-has-lang',weight:4,group:'a11y-language'},{id:'html-lang-valid',weight:1,group:'a11y-language'},{id:'image-alt',weight:8,group:'a11y-correct-attributes'},{id:'input-image-alt',weight:1,group:'a11y-correct-attributes'},{id:'label',weight:10,group:'a11y-describe-contents'},{id:'layout-table',weight:1,group:'a11y-describe-contents'},{id:'link-name',weight:9,group:'a11y-element-names'},{id:'list',weight:5,group:'a11y-well-structured'},{id:'listitem',weight:4,group:'a11y-well-structured'},{id:'meta-refresh',weight:1,group:'a11y-meta'},{id:'meta-viewport',weight:3,group:'a11y-meta'},{id:'object-alt',weight:4,group:'a11y-describe-contents'},{id:'tabindex',weight:4,group:'a11y-correct-attributes'},{id:'td-headers-attr',weight:1,group:'a11y-correct-attributes'},{id:'th-has-data-cells',weight:1,group:'a11y-correct-attributes'},{id:'valid-lang',weight:1,group:'a11y-language'},{id:'video-caption',weight:4,group:'a11y-describe-contents'},{id:'video-description',weight:3,group:'a11y-describe-contents'},{id:'logical-tab-order',weight:0},{id:'focusable-controls',weight:0},{id:'managed-focus',weight:0},{id:'focus-traps',weight:0},{id:'custom-controls-labels',weight:0},{id:'custom-controls-roles',weight:0},{id:'visual-order-follows-dom',weight:0},{id:'offscreen-content-hidden',weight:0},{id:'heading-levels',weight:0},{id:'use-landmarks',weight:0}]},'best-practices':{title:'Best Practices',auditRefs:[{id:'appcache-manifest',weight:1},{id:'no-websql',weight:1},{id:'is-on-https',weight:1},{id:'uses-http2',weight:1},{id:'uses-passive-event-listeners',weight:1},{id:'no-mutation-events',weight:1},{id:'no-document-write',weight:1},{id:'external-anchors-use-rel-noopener',weight:1},{id:'geolocation-on-start',weight:1},{id:'no-vulnerable-libraries',weight:1},{id:'notification-on-start',weight:1},{id:'deprecations',weight:1},{id:'manifest-short-name-length',weight:1},{id:'password-inputs-can-be-pasted-into',weight:1},{id:'errors-in-console',weight:1},{id:'image-aspect-ratio',weight:1}]},'seo':{title:'SEO',description:'These checks ensure that your page is optimized for search engine results ranking. '+'There are additional factors Lighthouse does not check that may affect your search ranking. '+'[Learn more](https://support.google.com/webmasters/answer/35769).',manualDescription:'Run these additional validators on your site to check additional SEO best practices.',auditRefs:[{id:'viewport',weight:1,group:'seo-mobile'},{id:'document-title',weight:1,group:'seo-content'},{id:'meta-description',weight:1,group:'seo-content'},{id:'http-status-code',weight:1,group:'seo-crawl'},{id:'link-text',weight:1,group:'seo-content'},{id:'is-crawlable',weight:1,group:'seo-crawl'},{id:'robots-txt',weight:1,group:'seo-crawl'},{id:'hreflang',weight:1,group:'seo-content'},{id:'canonical',weight:1,group:'seo-content'},{id:'font-size',weight:1,group:'seo-mobile'},{id:'plugins',weight:1,group:'seo-content'},{id:'mobile-friendly',weight:0},{id:'structured-data',weight:0}]}}};},{"./constants":8}],10:[function(require,module,exports){'use strict';module.exports={extends:'lighthouse:default',settings:{},passes:[{passName:'extraPass',gatherers:['js-usage']}],audits:['byte-efficiency/unused-javascript'],categories:{'performance':{auditRefs:[{id:'unused-javascript',weight:0,group:'load-opportunities'}]}}};},{}],11:[function(require,module,exports){'use strict';const ArbitraryEqualityMap=require('../../lib/arbitrary-equality-map');class ComputedArtifact{constructor(allComputedArtifacts){const cache=new ArbitraryEqualityMap();cache.setEqualityFn(ArbitraryEqualityMap.deepEquals);this._cache=cache;this._allComputedArtifacts=allComputedArtifacts;}
get name(){throw new Error('name getter not implemented for computed artifact '+this.constructor.name);}
async compute_(artifact,allComputedArtifacts){throw new Error('compute_() not implemented for computed artifact '+this.name);}
async request(requiredArtifacts){const computed=this._cache.get(requiredArtifacts);if(computed){return computed;}
const artifactPromise=this.compute_(requiredArtifacts,this._allComputedArtifacts);this._cache.set(requiredArtifacts,artifactPromise);return artifactPromise;}}
module.exports=ComputedArtifact;},{"../../lib/arbitrary-equality-map":20}],12:[function(require,module,exports){'use strict';const ComputedArtifact=require('../computed-artifact');const Node=require('../../../lib/dependency-graph/node');const NetworkNode=require('../../../lib/dependency-graph/network-node');const Simulator=require('../../../lib/dependency-graph/simulator/simulator');const WebInspector=require('../../../lib/web-inspector');class LanternMetricArtifact extends ComputedArtifact{static getScriptUrls(dependencyGraph,condition){const scriptUrls=new Set();dependencyGraph.traverse(node=>{if(node.type===Node.TYPES.CPU)return;const asNetworkNode=node;if(asNetworkNode.record._resourceType!==WebInspector.resourceTypes.Script)return;if(condition&&!condition(asNetworkNode))return;scriptUrls.add(asNetworkNode.record.url);});return scriptUrls;}
get COEFFICIENTS(){throw new Error('COEFFICIENTS unimplemented!');}
getOptimisticGraph(dependencyGraph,traceOfTab){throw new Error('Optimistic graph unimplemented!');}
getPessimisticGraph(dependencyGraph,traceOfTab){throw new Error('Pessmistic graph unimplemented!');}
getEstimateFromSimulation(simulationResult,extras){return simulationResult;}
async computeMetricWithGraphs(data,artifacts,extras){const{trace,devtoolsLog,settings}=data;const graph=await artifacts.requestPageDependencyGraph({trace,devtoolsLog});const traceOfTab=await artifacts.requestTraceOfTab(trace);const simulator=data.simulator||(await artifacts.requestLoadSimulator({devtoolsLog,settings}));const optimisticGraph=this.getOptimisticGraph(graph,traceOfTab);const pessimisticGraph=this.getPessimisticGraph(graph,traceOfTab);const optimisticSimulation=simulator.simulate(optimisticGraph);const optimisticFlexSimulation=simulator.simulate(optimisticGraph,{flexibleOrdering:true});const pessimisticSimulation=simulator.simulate(pessimisticGraph);const optimisticEstimate=this.getEstimateFromSimulation(optimisticSimulation.timeInMs<optimisticFlexSimulation.timeInMs?optimisticSimulation:optimisticFlexSimulation,Object.assign({},extras,{optimistic:true}));const pessimisticEstimate=this.getEstimateFromSimulation(pessimisticSimulation,Object.assign({},extras,{optimistic:false}));const interceptMultiplier=this.COEFFICIENTS.intercept>0?Math.min(1,optimisticEstimate.timeInMs/1000):1;const timing=this.COEFFICIENTS.intercept*interceptMultiplier+
this.COEFFICIENTS.optimistic*optimisticEstimate.timeInMs+
this.COEFFICIENTS.pessimistic*pessimisticEstimate.timeInMs;return{timing,optimisticEstimate,pessimisticEstimate,optimisticGraph,pessimisticGraph};}
compute_(data,computedArtifacts){return this.computeMetricWithGraphs(data,computedArtifacts);}}
module.exports=LanternMetricArtifact;},{"../../../lib/dependency-graph/network-node":24,"../../../lib/dependency-graph/node":25,"../../../lib/dependency-graph/simulator/simulator":28,"../../../lib/web-inspector":47,"../computed-artifact":11}],13:[function(require,module,exports){'use strict';const ComputedArtifact=require('../computed-artifact');class ComputedMetric extends ComputedArtifact{get name(){throw new Error('Unimplemented');}
computeSimulatedMetric(data,artifacts){return artifacts[`requestLantern${this.name}`](data);}
computeObservedMetric(data,artifacts){throw new Error('Unimplemented');}
async compute_(data,computedArtifacts){const{trace,devtoolsLog,settings}=data;if(!trace||!devtoolsLog||!settings){throw new Error('Did not provide necessary metric computation data');}
const augmentedData=Object.assign({networkRecords:await computedArtifacts.requestNetworkRecords(devtoolsLog),traceOfTab:await computedArtifacts.requestTraceOfTab(trace)},data);switch(settings.throttlingMethod){case'simulate':return this.computeSimulatedMetric(augmentedData,computedArtifacts);case'provided':case'devtools':return this.computeObservedMetric(augmentedData,computedArtifacts);default:throw new TypeError(`Unrecognized throttling method: ${settings.throttlingMethod}`);}}}
module.exports=ComputedMetric;},{"../computed-artifact":11}],14:[function(require,module,exports){'use strict';const EventEmitter=require('events').EventEmitter;const log=require('lighthouse-logger');const LHError=require('../../lib/errors');class Connection{constructor(){this._lastCommandId=0;this._callbacks=new Map();this._eventEmitter=new EventEmitter();}
connect(){return Promise.reject(new Error('Not implemented'));}
disconnect(){return Promise.reject(new Error('Not implemented'));}
wsEndpoint(){return Promise.reject(new Error('Not implemented'));}
sendRawMessage(message){throw new Error('Not implemented');}
handleRawMessage(message){const object=JSON.parse(message);if(!('id'in object)){const eventMessage=object;log.formatProtocol('<= event',{method:eventMessage.method,params:eventMessage.params},'verbose');this.emitProtocolEvent(eventMessage);return;}
const callback=this._callbacks.get(object.id);if(callback){this._callbacks.delete(object.id);return callback.resolve(Promise.resolve().then(_=>{if(object.error){const logLevel=callback.options.silent?'verbose':'error';log.formatProtocol('method <= browser ERR',{method:callback.method},logLevel);throw LHError.fromProtocolMessage(callback.method,object.error);}
log.formatProtocol('method <= browser OK',{method:callback.method,params:object.result},'verbose');return object.result;}));}else{const error=object.error&&object.error.message;log.formatProtocol(`disowned method <= browser ${error?'ERR':'OK'}`,{method:'UNKNOWN',params:error||object.result},'verbose');}}
emitProtocolEvent(eventMessage){if(!this._eventEmitter){throw new Error('Attempted to emit event after connection disposed.');}
this._eventEmitter.emit('protocolevent',eventMessage);}
dispose(){if(this._eventEmitter){this._eventEmitter.removeAllListeners();this._eventEmitter=null;}}}
Connection.prototype.on=function on(eventName,cb){if(eventName!=='protocolevent'){throw new Error('Only supports "protocolevent" events');}
if(!this._eventEmitter){throw new Error('Attempted to add event listener after connection disposed.');}
this._eventEmitter.on(eventName,cb);};function _sendCommand(method,params={},cmdOpts={}){log.formatProtocol('method => browser',{method,params},'verbose');const id=++this._lastCommandId;const message=JSON.stringify({id,method,params});this.sendRawMessage(message);return new Promise(resolve=>{this._callbacks.set(id,{resolve,method,options:cmdOpts});});}
Connection.prototype.sendCommand=_sendCommand;module.exports=Connection;},{"../../lib/errors":33,"events":62,"lighthouse-logger":143}],15:[function(require,module,exports){'use strict';const Connection=require('./connection.js');class Port{on(eventName,cb){}
send(message){}
close(){}}
class RawConnection extends Connection{constructor(port){super();this._port=port;this._port.on('message',this.handleRawMessage.bind(this));this._port.on('close',this.dispose.bind(this));}
connect(){return Promise.resolve();}
disconnect(){this._port.close();return Promise.resolve();}
sendRawMessage(message){this._port.send(message);}}
module.exports=RawConnection;},{"./connection.js":14}],16:[function(require,module,exports){'use strict';class DevtoolsLog{constructor(regexFilter){this._filter=regexFilter;this._messages=[];this._isRecording=false;}
get messages(){return this._messages;}
reset(){this._messages=[];}
beginRecording(){this._isRecording=true;}
endRecording(){this._isRecording=false;}
record(message){if(this._isRecording&&(!this._filter||this._filter.test(message.method))){this._messages.push(message);}}}
module.exports=DevtoolsLog;},{}],17:[function(require,module,exports){'use strict';const NetworkRecorder=require('../lib/network-recorder');const emulation=require('../lib/emulation');const Element=require('../lib/element');const LHError=require('../lib/errors');const EventEmitter=require('events').EventEmitter;const URL=require('../lib/url-shim');const TraceParser=require('../lib/traces/trace-parser');const constants=require('../config/constants');const log=require('lighthouse-logger');const DevtoolsLog=require('./devtools-log');const pageFunctions=require('../lib/page-functions.js');const Connection=require('./connections/connection.js');const DEFAULT_PAUSE_AFTER_LOAD=0;const DEFAULT_NETWORK_QUIET_THRESHOLD=5000;const DEFAULT_CPU_QUIET_THRESHOLD=0;class Driver{constructor(connection){this._traceCategories=Driver.traceCategories;this._eventEmitter=new EventEmitter();this._connection=connection;this._devtoolsLog=new DevtoolsLog(/^(Page|Network)\./);this.online=true;this._domainEnabledCounts=new Map();this._isolatedExecutionContextId=undefined;this._networkStatusMonitor=null;this._monitoredUrl=null;connection.on('protocolevent',event=>{this._devtoolsLog.record(event);if(this._networkStatusMonitor){this._networkStatusMonitor.dispatch(event);}
this._eventEmitter.emit(event.method,event.params);});}
static get traceCategories(){return['-*','toplevel','v8.execute','blink.console','blink.user_timing','benchmark','loading','latencyInfo','devtools.timeline','disabled-by-default-devtools.timeline','disabled-by-default-devtools.timeline.frame','disabled-by-default-devtools.timeline.stack','disabled-by-default-devtools.screenshot'];}
getUserAgent(){return this.evaluateAsync('navigator.userAgent');}
connect(){return this._connection.connect();}
disconnect(){return this._connection.disconnect();}
wsEndpoint(){return this._connection.wsEndpoint();}
_shouldToggleDomain(domain,enable){const enabledCount=this._domainEnabledCounts.get(domain)||0;const newCount=enabledCount+(enable?1:-1);this._domainEnabledCounts.set(domain,Math.max(0,newCount));if(enable&&newCount===1||!enable&&newCount===0){log.verbose('Driver',`${domain}.${enable?'enable':'disable'}`);return true;}else{if(newCount<0){log.error('Driver',`Attempted to disable domain '${domain}' when already disabled.`);}
return false;}}
isDomainEnabled(domain){return!!this._domainEnabledCounts.get(domain);}
evaluteScriptOnNewDocument(scriptSource){return this.sendCommand('Page.addScriptToEvaluateOnLoad',{scriptSource});}
evaluateAsync(expression,options={}){const contextIdPromise=options.useIsolation?this._getOrCreateIsolatedContextId():Promise.resolve(undefined);return contextIdPromise.then(contextId=>this._evaluateInContext(expression,contextId));}
_evaluateInContext(expression,contextId){return new Promise((resolve,reject)=>{const asyncTimeout=setTimeout(_=>reject(new Error('The asynchronous expression exceeded the allotted time of 60s')),60000);const evaluationParams={expression:`(function wrapInNativePromise() {
          const __nativePromise = window.__nativePromise || Promise;
          return new __nativePromise(function (resolve) {
            return __nativePromise.resolve()
              .then(_ => ${expression})
              .catch(${pageFunctions.wrapRuntimeEvalErrorInBrowser.toString()})
              .then(resolve);
          });
        }())`,includeCommandLineAPI:true,awaitPromise:true,returnByValue:true,contextId};this.sendCommand('Runtime.evaluate',evaluationParams).then(result=>{clearTimeout(asyncTimeout);const value=result.result.value;if(result.exceptionDetails){reject(new Error('an unexpected driver error occurred'));}if(value&&value.__failedInBrowser){reject(Object.assign(new Error(),value));}else{resolve(value);}}).catch(err=>{clearTimeout(asyncTimeout);reject(err);});});}
getAppManifest(){return this.sendCommand('Page.getAppManifest').then(response=>{if(!response.data){return null;}
return response;});}
getServiceWorkerVersions(){return new Promise((resolve,reject)=>{const versionUpdatedListener=data=>{const activateCandidates=data.versions.filter(sw=>{return sw.status!=='redundant';});const hasActiveServiceWorker=activateCandidates.find(sw=>{return sw.status==='activated';});if(!activateCandidates.length||hasActiveServiceWorker){this.off('ServiceWorker.workerVersionUpdated',versionUpdatedListener);this.sendCommand('ServiceWorker.disable').then(_=>resolve(data),reject);}};this.on('ServiceWorker.workerVersionUpdated',versionUpdatedListener);this.sendCommand('ServiceWorker.enable').catch(reject);});}
getServiceWorkerRegistrations(){return new Promise((resolve,reject)=>{this.once('ServiceWorker.workerRegistrationUpdated',data=>{this.sendCommand('ServiceWorker.disable').then(_=>resolve(data),reject);});this.sendCommand('ServiceWorker.enable').catch(reject);});}
assertNoSameOriginServiceWorkerClients(pageUrl){let registrations;let versions;return this.getServiceWorkerRegistrations().then(data=>{registrations=data.registrations;}).then(_=>this.getServiceWorkerVersions()).then(data=>{versions=data.versions;}).then(_=>{const origin=new URL(pageUrl).origin;registrations.filter(reg=>{const swOrigin=new URL(reg.scopeURL).origin;return origin===swOrigin;}).forEach(reg=>{versions.forEach(ver=>{if(ver.registrationId!==reg.registrationId){return;}
if(ver.controlledClients&&ver.controlledClients.length>0){throw new Error('You probably have multiple tabs open to the same origin.');}});});});}
_waitForNetworkIdle(networkQuietThresholdMs){let idleTimeout;let cancel=()=>{throw new Error('_waitForNetworkIdle.cancel() called before it was defined');};if(!this._networkStatusMonitor){throw new Error('Driver._waitForNetworkIdle called with no networkStatusMonitor');}
const networkStatusMonitor=this._networkStatusMonitor;const promise=new Promise((resolve,reject)=>{const onIdle=()=>{networkStatusMonitor.once('network-2-busy',onBusy);idleTimeout=setTimeout(_=>{cancel();resolve();},networkQuietThresholdMs);};const onBusy=()=>{networkStatusMonitor.once('network-2-idle',onIdle);idleTimeout&&clearTimeout(idleTimeout);};const domContentLoadedListener=()=>{if(networkStatusMonitor.is2Idle()){onIdle();}else{onBusy();}};this.once('Page.domContentEventFired',domContentLoadedListener);cancel=()=>{idleTimeout&&clearTimeout(idleTimeout);this.off('Page.domContentEventFired',domContentLoadedListener);networkStatusMonitor.removeListener('network-2-busy',onBusy);networkStatusMonitor.removeListener('network-2-idle',onIdle);};});return{promise,cancel};}
_waitForCPUIdle(waitForCPUQuiet){if(!waitForCPUQuiet){return{promise:Promise.resolve(),cancel:()=>undefined};}
let lastTimeout;let cancelled=false;const checkForQuietExpression=`(${pageFunctions.checkTimeSinceLastLongTask.toString()})()`;function checkForQuiet(driver,resolve){if(cancelled)return;return driver.evaluateAsync(checkForQuietExpression).then(timeSinceLongTask=>{if(cancelled)return;if(typeof timeSinceLongTask==='number'){if(timeSinceLongTask>=waitForCPUQuiet){log.verbose('Driver',`CPU has been idle for ${timeSinceLongTask} ms`);resolve();}else{log.verbose('Driver',`CPU has been idle for ${timeSinceLongTask} ms`);const timeToWait=waitForCPUQuiet-timeSinceLongTask;lastTimeout=setTimeout(()=>checkForQuiet(driver,resolve),timeToWait);}}});}
let cancel=()=>{throw new Error('_waitForCPUIdle.cancel() called before it was defined');};const promise=new Promise((resolve,reject)=>{checkForQuiet(this,resolve);cancel=()=>{cancelled=true;if(lastTimeout)clearTimeout(lastTimeout);reject(new Error('Wait for CPU idle cancelled'));};});return{promise,cancel};}
_waitForLoadEvent(pauseAfterLoadMs){let cancel=()=>{throw new Error('_waitForLoadEvent.cancel() called before it was defined');};const promise=new Promise((resolve,reject)=>{let loadTimeout;const loadListener=function(){loadTimeout=setTimeout(resolve,pauseAfterLoadMs);};this.once('Page.loadEventFired',loadListener);cancel=()=>{this.off('Page.loadEventFired',loadListener);loadTimeout&&clearTimeout(loadTimeout);};});return{promise,cancel};}
async _waitForFullyLoaded(pauseAfterLoadMs,networkQuietThresholdMs,cpuQuietThresholdMs,maxWaitForLoadedMs){let maxTimeoutHandle;const waitForLoadEvent=this._waitForLoadEvent(pauseAfterLoadMs);const waitForNetworkIdle=this._waitForNetworkIdle(networkQuietThresholdMs);let waitForCPUIdle=null;const loadPromise=Promise.all([waitForLoadEvent.promise,waitForNetworkIdle.promise]).then(()=>{waitForCPUIdle=this._waitForCPUIdle(cpuQuietThresholdMs);return waitForCPUIdle.promise;}).then(()=>{return function(){log.verbose('Driver','loadEventFired and network considered idle');maxTimeoutHandle&&clearTimeout(maxTimeoutHandle);};});const maxTimeoutPromise=new Promise((resolve,reject)=>{maxTimeoutHandle=setTimeout(resolve,maxWaitForLoadedMs);}).then(_=>{return function(){log.warn('Driver','Timed out waiting for page load. Moving on...');waitForLoadEvent.cancel();waitForNetworkIdle.cancel();waitForCPUIdle&&waitForCPUIdle.cancel();};});const cleanupFn=await Promise.race([loadPromise,maxTimeoutPromise]);cleanupFn();}
_beginNetworkStatusMonitoring(startingUrl){this._networkStatusMonitor=new NetworkRecorder([]);this._monitoredUrl=startingUrl;const requestLoadedListener=redirectRequest=>{if(!redirectRequest.redirectSource){return;}
const earlierRequest=redirectRequest.redirectSource;if(earlierRequest.url===this._monitoredUrl){this._monitoredUrl=redirectRequest.url;}};this._networkStatusMonitor.on('requestloaded',requestLoadedListener);return this.sendCommand('Network.enable');}
_endNetworkStatusMonitoring(){this._networkStatusMonitor=null;const finalUrl=this._monitoredUrl;this._monitoredUrl=null;if(!finalUrl){throw new Error('Network Status Monitoring ended with an undefined finalUrl');}
return finalUrl;}
async _getOrCreateIsolatedContextId(){if(typeof this._isolatedExecutionContextId==='number'){return this._isolatedExecutionContextId;}
const resourceTreeResponse=await this.sendCommand('Page.getResourceTree');const mainFrameId=resourceTreeResponse.frameTree.frame.id;const isolatedWorldResponse=await this.sendCommand('Page.createIsolatedWorld',{frameId:mainFrameId,worldName:'lighthouse_isolated_context'});this._isolatedExecutionContextId=isolatedWorldResponse.executionContextId;return isolatedWorldResponse.executionContextId;}
_clearIsolatedContextId(){this._isolatedExecutionContextId=undefined;}
async gotoURL(url,options={}){const waitForLoad=options.waitForLoad||false;const passContext=options.passContext||{};const disableJS=passContext.disableJavaScript||false;await this._beginNetworkStatusMonitoring(url);await this._clearIsolatedContextId();this.sendCommand('Page.enable');this.sendCommand('Emulation.setScriptExecutionDisabled',{value:disableJS});this.sendCommand('Page.navigate',{url});if(waitForLoad){const passConfig=passContext.passConfig||{};let{pauseAfterLoadMs,networkQuietThresholdMs,cpuQuietThresholdMs}=passConfig;let maxWaitMs=passContext.settings&&passContext.settings.maxWaitForLoad;if(typeof pauseAfterLoadMs!=='number')pauseAfterLoadMs=DEFAULT_PAUSE_AFTER_LOAD;if(typeof networkQuietThresholdMs!=='number')networkQuietThresholdMs=DEFAULT_NETWORK_QUIET_THRESHOLD;if(typeof cpuQuietThresholdMs!=='number')cpuQuietThresholdMs=DEFAULT_CPU_QUIET_THRESHOLD;if(typeof maxWaitMs!=='number')maxWaitMs=constants.defaultSettings.maxWaitForLoad;await this._waitForFullyLoaded(pauseAfterLoadMs,networkQuietThresholdMs,cpuQuietThresholdMs,maxWaitMs);}
return this._endNetworkStatusMonitoring();}
async getObjectProperty(objectId,propName){const propertiesResponse=await this.sendCommand('Runtime.getProperties',{objectId,accessorPropertiesOnly:true,generatePreview:false,ownProperties:false});const propertyForName=propertiesResponse.result.find(property=>property.name===propName);if(propertyForName&&propertyForName.value){return propertyForName.value.value;}else{return null;}}
getRequestContent(requestId,timeout=1000){return new Promise((resolve,reject)=>{const err=new LHError(LHError.errors.REQUEST_CONTENT_TIMEOUT);const asyncTimeout=setTimeout(_=>reject(err),timeout);this.sendCommand('Network.getResponseBody',{requestId}).then(result=>{clearTimeout(asyncTimeout);resolve(result.body);}).catch(e=>{clearTimeout(asyncTimeout);reject(e);});});}
queryPermissionState(name){const expressionToEval=`
      navigator.permissions.query({name: '${name}'}).then(result => {
        return result.state;
      })
    `;return this.evaluateAsync(expressionToEval);}
async querySelector(selector){const documentResponse=await this.sendCommand('DOM.getDocument');const rootNodeId=documentResponse.root.nodeId;const targetNode=await this.sendCommand('DOM.querySelector',{nodeId:rootNodeId,selector});if(targetNode.nodeId===0){return null;}
return new Element(targetNode,this);}
async querySelectorAll(selector){const documentResponse=await this.sendCommand('DOM.getDocument');const rootNodeId=documentResponse.root.nodeId;const targetNodeList=await this.sendCommand('DOM.querySelectorAll',{nodeId:rootNodeId,selector});const elementList=[];targetNodeList.nodeIds.forEach(nodeId=>{if(nodeId!==0){elementList.push(new Element({nodeId},this));}});return elementList;}
getElementsInDocument(pierce=true){return this.getNodesInDocument(pierce).then(nodes=>nodes.filter(node=>node.nodeType===1).map(node=>new Element({nodeId:node.nodeId},this)));}
async getNodesInDocument(pierce=true){const flattenedDocument=await this.sendCommand('DOM.getFlattenedDocument',{depth:-1,pierce});return flattenedDocument.nodes?flattenedDocument.nodes:[];}
beginTrace(settings){const additionalCategories=settings&&settings.additionalTraceCategories&&settings.additionalTraceCategories.split(',')||[];const traceCategories=this._traceCategories.concat(additionalCategories);const uniqueCategories=Array.from(new Set(traceCategories));if(this.isDomainEnabled('Debugger')){throw new Error('Debugger domain enabled when starting trace');}
if(this.isDomainEnabled('CSS')){throw new Error('CSS domain enabled when starting trace');}
if(this.isDomainEnabled('DOM')){throw new Error('DOM domain enabled when starting trace');}
return this.sendCommand('Page.enable').then(_=>this.endTraceIfStarted()).then(_=>this.sendCommand('Tracing.start',{categories:uniqueCategories.join(','),transferMode:'ReturnAsStream',options:'sampling-frequency=10000'}));}
endTraceIfStarted(){return new Promise(resolve=>{const traceCallback=()=>resolve();this.once('Tracing.tracingComplete',traceCallback);return this.sendCommand('Tracing.end',undefined,{silent:true}).catch(()=>{this.off('Tracing.tracingComplete',traceCallback);traceCallback();});});}
endTrace(){return new Promise((resolve,reject)=>{this.once('Tracing.tracingComplete',completeEvent=>{this._readTraceFromStream(completeEvent).then(traceContents=>resolve(traceContents),reject);});return this.sendCommand('Tracing.end').catch(reject);});}
_readTraceFromStream(traceCompleteEvent){return new Promise((resolve,reject)=>{let isEOF=false;const parser=new TraceParser();if(!traceCompleteEvent.stream){return reject('No streamHandle returned by traceCompleteEvent');}
const readArguments={handle:traceCompleteEvent.stream};const onChunkRead=response=>{if(isEOF){return;}
parser.parseChunk(response.data);if(response.eof){isEOF=true;return resolve(parser.getTrace());}
return this.sendCommand('IO.read',readArguments).then(onChunkRead);};this.sendCommand('IO.read',readArguments).then(onChunkRead).catch(reject);});}
beginDevtoolsLog(){this._devtoolsLog.reset();this._devtoolsLog.beginRecording();}
endDevtoolsLog(){this._devtoolsLog.endRecording();return this._devtoolsLog.messages;}
enableRuntimeEvents(){return this.sendCommand('Runtime.enable');}
async beginEmulation(settings){if(!settings.disableDeviceEmulation){await emulation.enableNexus5X(this);}
await this.setThrottling(settings,{useThrottling:true});}
async setThrottling(settings,passConfig){if(settings.throttlingMethod!=='devtools'){return emulation.clearAllNetworkEmulation(this);}
const cpuPromise=passConfig.useThrottling?emulation.enableCPUThrottling(this,settings.throttling):emulation.disableCPUThrottling(this);const networkPromise=passConfig.useThrottling?emulation.enableNetworkThrottling(this,settings.throttling):emulation.clearAllNetworkEmulation(this);await Promise.all([cpuPromise,networkPromise]);}
async goOffline(){await this.sendCommand('Network.enable');await emulation.goOffline(this);this.online=false;}
async goOnline(options){await this.setThrottling(options.settings,options.passConfig);this.online=true;}
cleanBrowserCaches(){return this.sendCommand('Network.clearBrowserCache').then(_=>this.sendCommand('Network.setCacheDisabled',{cacheDisabled:true})).then(_=>this.sendCommand('Network.setCacheDisabled',{cacheDisabled:false}));}
async setExtraHTTPHeaders(headers){if(!headers){return;}
return this.sendCommand('Network.setExtraHTTPHeaders',{headers});}
clearDataForOrigin(url){const origin=new URL(url).origin;const typesToClear=['appcache','file_systems','indexeddb','local_storage','shader_cache','websql','service_workers','cache_storage'].join(',');return this.sendCommand('Storage.clearDataForOrigin',{origin:origin,storageTypes:typesToClear});}
async cacheNatives(){await this.evaluteScriptOnNewDocument(`window.__nativePromise = Promise;
        window.__nativeError = Error;`);}
async registerPerformanceObserver(){const scriptStr=`(${pageFunctions.registerPerformanceObserverInPage.toString()})()`;await this.evaluteScriptOnNewDocument(scriptStr);}
captureFunctionCallSites(funcName){const globalVarToPopulate=`window['__${funcName}StackTraces']`;const collectUsage=()=>{return this.evaluateAsync(`Array.from(${globalVarToPopulate}).map(item => JSON.parse(item))`).then(result=>{if(!Array.isArray(result)){throw new Error('Driver failure: Expected evaluateAsync results to be an array '+`but got "${JSON.stringify(result)}" instead.`);}
return result.filter(item=>!item.isExtension);});};const funcBody=pageFunctions.captureJSCallUsage.toString();this.evaluteScriptOnNewDocument(`
        ${globalVarToPopulate} = new Set();
        (${funcName} = ${funcBody}(${funcName}, ${globalVarToPopulate}))`);return collectUsage;}
blockUrlPatterns(urls){return this.sendCommand('Network.setBlockedURLs',{urls}).catch(err=>{if(!/wasn't found/.test(err.message)){throw err;}});}
async dismissJavaScriptDialogs(){await this.sendCommand('Page.enable');this.on('Page.javascriptDialogOpening',data=>{log.warn('Driver',`${data.type} dialog opened by the page automatically suppressed.`);this.sendCommand('Page.handleJavaScriptDialog',{accept:true,promptText:'Lighthouse prompt response'});});}}
Driver.prototype.on=function on(eventName,cb){if(this._eventEmitter===null){throw new Error('connect() must be called before attempting to listen to events.');}
log.formatProtocol('listen for event =>',{method:eventName},'verbose');this._eventEmitter.on(eventName,cb);};Driver.prototype.once=function once(eventName,cb){if(this._eventEmitter===null){throw new Error('connect() must be called before attempting to listen to events.');}
log.formatProtocol('listen once for event =>',{method:eventName},'verbose');this._eventEmitter.once(eventName,cb);};Driver.prototype.off=function off(eventName,cb){if(this._eventEmitter===null){throw new Error('connect() must be called before attempting to remove an event listener.');}
this._eventEmitter.removeListener(eventName,cb);};function _sendCommand(method,params={},cmdOpts={}){const domainCommand=/^(\w+)\.(enable|disable)$/.exec(method);if(domainCommand){const enable=domainCommand[2]==='enable';if(!this._shouldToggleDomain(domainCommand[1],enable)){return Promise.resolve();}}
return this._connection.sendCommand(method,params,cmdOpts);}
Driver.prototype.sendCommand=_sendCommand;module.exports=Driver;},{"../config/constants":8,"../lib/element":31,"../lib/emulation":32,"../lib/errors":33,"../lib/network-recorder":37,"../lib/page-functions.js":38,"../lib/traces/trace-parser":45,"../lib/url-shim":"url","./connections/connection.js":14,"./devtools-log":16,"events":62,"lighthouse-logger":143}],18:[function(require,module,exports){'use strict';const log=require('lighthouse-logger');const LHError=require('../lib/errors');const URL=require('../lib/url-shim');const NetworkRecorder=require('../lib/network-recorder.js');const constants=require('../config/constants');const Driver=require('../gather/driver.js');class GatherRunner{static loadBlank(driver,url=constants.defaultPassConfig.blankPage,duration=constants.defaultPassConfig.blankDuration)
{return driver.gotoURL(url).then(_=>new Promise(resolve=>setTimeout(resolve,duration)));}
static loadPage(driver,passContext){return driver.gotoURL(passContext.url,{waitForLoad:true,passContext}).then(finalUrl=>{passContext.url=finalUrl;});}
static setupDriver(driver,gathererResults,options){log.log('status','Initializing…');const resetStorage=!options.settings.disableStorageReset;return driver.assertNoSameOriginServiceWorkerClients(options.requestedUrl).then(_=>driver.getUserAgent()).then(userAgent=>{gathererResults.UserAgent=[userAgent];GatherRunner.warnOnHeadless(userAgent,gathererResults);}).then(_=>driver.beginEmulation(options.settings)).then(_=>driver.enableRuntimeEvents()).then(_=>driver.cacheNatives()).then(_=>driver.registerPerformanceObserver()).then(_=>driver.dismissJavaScriptDialogs()).then(_=>{if(resetStorage)return driver.clearDataForOrigin(options.requestedUrl);});}
static disposeDriver(driver){log.log('status','Disconnecting from browser...');return driver.disconnect().catch(err=>{if(!/close\/.*status: 500$/.test(err.message)){log.error('GatherRunner disconnect',err.message);}});}
static recoverOrThrow(promise){return promise.catch(err=>{if(err.fatal){throw err;}});}
static getPageLoadError(url,networkRecords){const mainRecord=networkRecords.find(record=>{return URL.equalWithExcludedFragments(record.url,url);});let errorCode;let errorReason;if(!mainRecord){errorCode=LHError.errors.NO_DOCUMENT_REQUEST;}else if(mainRecord.failed){errorCode=LHError.errors.FAILED_DOCUMENT_REQUEST;errorReason=mainRecord.localizedFailDescription;}
if(errorCode){const error=new LHError(errorCode,{reason:errorReason});log.error('GatherRunner',error.message,url);return error;}}
static warnOnHeadless(userAgent,gathererResults){const chromeVersion=userAgent.split(/HeadlessChrome\/(.*) /)[1];const minVersion='63.0.3239.0';if(chromeVersion&&chromeVersion<minVersion){gathererResults.LighthouseRunWarnings.push('Your site\'s mobile performance may be '+'worse than the numbers presented in this report. Lighthouse could not test on a '+'mobile connection because Headless Chrome does not support network throttling '+'prior to version '+minVersion+'. The version used was '+chromeVersion);}}
static beforePass(passContext,gathererResults){const blockedUrls=(passContext.passConfig.blockedUrlPatterns||[]).concat(passContext.settings.blockedUrlPatterns||[]);const blankPage=passContext.passConfig.blankPage;const blankDuration=passContext.passConfig.blankDuration;const pass=GatherRunner.loadBlank(passContext.driver,blankPage,blankDuration).then(()=>passContext.driver.blockUrlPatterns(blockedUrls)).then(()=>passContext.driver.setExtraHTTPHeaders(passContext.settings.extraHeaders));return passContext.passConfig.gatherers.reduce((chain,gathererDefn)=>{return chain.then(_=>{const gatherer=gathererDefn.instance;passContext.options=gathererDefn.options||{};const artifactPromise=Promise.resolve().then(_=>gatherer.beforePass(passContext));gathererResults[gatherer.name]=[artifactPromise];return GatherRunner.recoverOrThrow(artifactPromise);});},pass);}
static pass(passContext,gathererResults){const driver=passContext.driver;const config=passContext.passConfig;const settings=passContext.settings;const gatherers=config.gatherers;const recordTrace=config.recordTrace;const isPerfRun=!settings.disableStorageReset&&recordTrace&&config.useThrottling;const gatherernames=gatherers.map(g=>g.instance.name).join(', ');const status='Loading page & waiting for onload';log.log('status',status,gatherernames);const pass=Promise.resolve().then(_=>{if(isPerfRun)driver.cleanBrowserCaches();}).then(_=>driver.beginDevtoolsLog()).then(_=>{if(recordTrace)driver.beginTrace(settings);}).then(_=>GatherRunner.loadPage(driver,passContext)).then(_=>log.log('statusEnd',status));return gatherers.reduce((chain,gathererDefn)=>{return chain.then(_=>{const gatherer=gathererDefn.instance;passContext.options=gathererDefn.options||{};const artifactPromise=Promise.resolve().then(_=>gatherer.pass(passContext));gathererResults[gatherer.name].push(artifactPromise);return GatherRunner.recoverOrThrow(artifactPromise);});},pass);}
static async afterPass(passContext,gathererResults){const driver=passContext.driver;const config=passContext.passConfig;const gatherers=config.gatherers;let trace;if(config.recordTrace){log.log('status','Retrieving trace');trace=await driver.endTrace();log.verbose('statusEnd','Retrieving trace');}
const status='Retrieving devtoolsLog and network records';log.log('status',status);const devtoolsLog=driver.endDevtoolsLog();const networkRecords=NetworkRecorder.recordsFromLogs(devtoolsLog);log.verbose('statusEnd',status);let pageLoadError=GatherRunner.getPageLoadError(passContext.url,networkRecords);if(!driver.online)pageLoadError=undefined;if(pageLoadError){gathererResults.LighthouseRunWarnings.push('Lighthouse was unable to reliably load the '+'page you requested. Make sure you are testing the correct URL and that the server is '+'properly responding to all requests.');}
const passData={networkRecords,devtoolsLog,trace};await driver.setThrottling(passContext.settings,{useThrottling:false});for(const gathererDefn of gatherers){const gatherer=gathererDefn.instance;const status=`Retrieving: ${gatherer.name}`;log.log('status',status);passContext.options=gathererDefn.options||{};const artifactPromise=pageLoadError?Promise.reject(pageLoadError):Promise.resolve().then(_=>gatherer.afterPass(passContext,passData));gathererResults[gatherer.name].push(artifactPromise);await GatherRunner.recoverOrThrow(artifactPromise);log.verbose('statusEnd',status);}
return passData;}
static async collectArtifacts(gathererResults,tracingData,settings){const artifacts={traces:tracingData.traces,devtoolsLogs:tracingData.devtoolsLogs,settings,LighthouseRunWarnings:Array.from(new Set(gathererResults.LighthouseRunWarnings))};const pageLoadFailures=[];for(const[gathererName,phaseResultsPromises]of Object.entries(gathererResults)){if(artifacts[gathererName]!==undefined)continue;try{const phaseResults=await Promise.all(phaseResultsPromises);const definedResults=phaseResults.filter(element=>element!==undefined);const artifact=definedResults[definedResults.length-1];artifacts[gathererName]=artifact;}catch(err){artifacts[gathererName]=err;if(LHError.isPageLoadError(err))pageLoadFailures.push(err);}
if(artifacts[gathererName]===undefined){throw new Error(`${gathererName} failed to provide an artifact.`);}
if(pageLoadFailures.length>Object.keys(artifacts).length*0.5){throw pageLoadFailures[0];}}
return artifacts;}
static run(passes,options){const driver=options.driver;const tracingData={traces:{},devtoolsLogs:{}};const gathererResults={LighthouseRunWarnings:[],fetchTime:[new Date().toJSON()],URL:[{requestedUrl:options.requestedUrl,finalUrl:''}]};return driver.connect().then(_=>GatherRunner.loadBlank(driver)).then(_=>GatherRunner.setupDriver(driver,gathererResults,options)).then(_=>{return passes.reduce((chain,passConfig,passIndex)=>{const passContext={driver:options.driver,url:options.requestedUrl,settings:options.settings,passConfig};return chain.then(_=>driver.setThrottling(options.settings,passConfig)).then(_=>GatherRunner.beforePass(passContext,gathererResults)).then(_=>GatherRunner.pass(passContext,gathererResults)).then(_=>GatherRunner.afterPass(passContext,gathererResults)).then(passData=>{tracingData.devtoolsLogs[passConfig.passName]=passData.devtoolsLog;if(passData.trace){tracingData.traces[passConfig.passName]=passData.trace;}
if(passIndex===0){gathererResults.URL[0].finalUrl=passContext.url;}});},Promise.resolve());}).then(_=>GatherRunner.disposeDriver(driver)).then(_=>GatherRunner.collectArtifacts(gathererResults,tracingData,options.settings)).catch(err=>{GatherRunner.disposeDriver(driver);throw err;});}}
module.exports=GatherRunner;},{"../config/constants":8,"../gather/driver.js":17,"../lib/errors":33,"../lib/network-recorder.js":37,"../lib/url-shim":"url","lighthouse-logger":143}],19:[function(require,module,exports){'use strict';class Gatherer{get name(){return this.constructor.name;}
beforePass(passContext){}
pass(passContext){}
afterPass(passContext,loadData){}}
module.exports=Gatherer;},{}],20:[function(require,module,exports){'use strict';const isEqual=require('lodash.isequal');module.exports=class ArbitraryEqualityMap{constructor(){this._equalsFn=(a,b)=>a===b;this._entries=[];}
setEqualityFn(equalsFn){this._equalsFn=equalsFn;}
has(key){return this._findIndexOf(key)!==-1;}
get(key){const entry=this._entries[this._findIndexOf(key)];return entry&&entry.value;}
set(key,value){let index=this._findIndexOf(key);if(index===-1)index=this._entries.length;this._entries[index]={key,value};}
_findIndexOf(key){for(let i=0;i<this._entries.length;i++){if(this._equalsFn(key,this._entries[i].key))return i;}
return-1;}
static deepEquals(objA,objB){return isEqual(objA,objB);}};},{"lodash.isequal":144}],21:[function(require,module,exports){'use strict';const path=require('path');const log=require('lighthouse-logger');const stream=require('stream');const Metrics=require('./traces/pwmetrics-events');const TraceParser=require('./traces/trace-parser');const rimraf=require('rimraf');const mkdirp=require('mkdirp');const artifactsFilename='artifacts.json';const traceSuffix='.trace.json';const devtoolsLogSuffix='.devtoolslog.json';function screenshotDump(screenshots){return`
  <!doctype html>
  <meta charset="utf-8">
  <title>screenshots</title>
  <style>
html {
    overflow-x: scroll;
    overflow-y: hidden;
    height: 100%;
    background-image: linear-gradient(to left, #4ca1af , #c4e0e5);
    background-attachment: fixed;
    padding: 10px;
}
body {
    white-space: nowrap;
    background-image: linear-gradient(to left, #4ca1af , #c4e0e5);
    width: 100%;
    margin: 0;
}
img {
    margin: 4px;
}
</style>
  <body>
    <script>
      var shots = ${JSON.stringify(screenshots)};

  shots.forEach(s => {
    var i = document.createElement('img');
    i.src = s.datauri;
    i.title = s.timestamp;
    document.body.appendChild(i);
  });
  </script>
  `;}
async function loadArtifacts(basePath){log.log('Reading artifacts from disk:',basePath);if(!fs.existsSync(basePath)){throw new Error('No saved artifacts found at '+basePath);}
const artifacts=JSON.parse(fs.readFileSync(path.join(basePath,artifactsFilename),'utf8'));const filenames=fs.readdirSync(basePath);artifacts.devtoolsLogs={};filenames.filter(f=>f.endsWith(devtoolsLogSuffix)).map(filename=>{const passName=filename.replace(devtoolsLogSuffix,'');const devtoolsLog=JSON.parse(fs.readFileSync(path.join(basePath,filename),'utf8'));artifacts.devtoolsLogs[passName]=devtoolsLog;});artifacts.traces={};const promises=filenames.filter(f=>f.endsWith(traceSuffix)).map(filename=>{return new Promise(resolve=>{const passName=filename.replace(traceSuffix,'');const readStream=fs.createReadStream(path.join(basePath,filename),{encoding:'utf-8',highWaterMark:4*1024*1024});const parser=new TraceParser();readStream.on('data',chunk=>parser.parseChunk(chunk));readStream.on('end',_=>{artifacts.traces[passName]=parser.getTrace();resolve();});});});await Promise.all(promises);return artifacts;}
async function saveArtifacts(artifacts,basePath){mkdirp.sync(basePath);rimraf.sync(`${basePath}/*${traceSuffix}`);rimraf.sync(`${basePath}/${artifactsFilename}`);const{traces,devtoolsLogs,...restArtifacts}=artifacts;for(const[passName,trace]of Object.entries(traces)){await saveTrace(trace,`${basePath}/${passName}${traceSuffix}`);}
for(const[passName,devtoolsLog]of Object.entries(devtoolsLogs)){const log=JSON.stringify(devtoolsLog);fs.writeFileSync(`${basePath}/${passName}${devtoolsLogSuffix}`,log,'utf8');}
const restArtifactsString=JSON.stringify(restArtifacts,null,2);fs.writeFileSync(`${basePath}/${artifactsFilename}`,restArtifactsString,'utf8');log.log('Artifacts saved to disk in folder:',basePath);}
async function prepareAssets(artifacts,audits){const passNames=Object.keys(artifacts.traces);const assets=[];for(const passName of passNames){const trace=artifacts.traces[passName];const devtoolsLog=artifacts.devtoolsLogs[passName];const Runner=require('../runner.js');const computedArtifacts=Runner.instantiateComputedArtifacts();const screenshots=await computedArtifacts.requestScreenshots(trace);const traceData=Object.assign({},trace);const screenshotsHTML=screenshotDump(screenshots);if(audits){const evts=new Metrics(traceData.traceEvents,audits).generateFakeEvents();traceData.traceEvents=traceData.traceEvents.concat(evts);}
assets.push({passName,traceData,devtoolsLog,screenshotsHTML,screenshots});}
return assets;}
function*traceJsonGenerator(traceData){const keys=Object.keys(traceData);yield'{\n';yield'"traceEvents": [\n';if(traceData.traceEvents.length>0){const eventsIterator=traceData.traceEvents[Symbol.iterator]();const firstEvent=eventsIterator.next().value;yield`  ${JSON.stringify(firstEvent)}`;for(const event of eventsIterator){yield`,\n  ${JSON.stringify(event)}`;}}
yield'\n]';if(keys.length>1){for(const key of keys){if(key==='traceEvents')continue;yield`,\n"${key}": ${JSON.stringify(traceData[key],null,2)}`;}}
yield'}\n';}
function saveTrace(traceData,traceFilename){return new Promise((resolve,reject)=>{const traceIter=traceJsonGenerator(traceData);const traceStream=new stream.Readable({read(){const next=traceIter.next();this.push(next.done?null:next.value);}});const writeStream=fs.createWriteStream(traceFilename);writeStream.on('finish',resolve);writeStream.on('error',reject);traceStream.pipe(writeStream);});}
async function saveAssets(artifacts,audits,pathWithBasename){const allAssets=await prepareAssets(artifacts,audits);const saveAll=allAssets.map(async(passAssets,index)=>{const devtoolsLogFilename=`${pathWithBasename}-${index}${devtoolsLogSuffix}`;fs.writeFileSync(devtoolsLogFilename,JSON.stringify(passAssets.devtoolsLog,null,2));log.log('saveAssets','devtools log saved to disk: '+devtoolsLogFilename);const screenshotsHTMLFilename=`${pathWithBasename}-${index}.screenshots.html`;fs.writeFileSync(screenshotsHTMLFilename,passAssets.screenshotsHTML);log.log('saveAssets','screenshots saved to disk: '+screenshotsHTMLFilename);const screenshotsJSONFilename=`${pathWithBasename}-${index}.screenshots.json`;fs.writeFileSync(screenshotsJSONFilename,JSON.stringify(passAssets.screenshots,null,2));log.log('saveAssets','screenshots saved to disk: '+screenshotsJSONFilename);const streamTraceFilename=`${pathWithBasename}-${index}${traceSuffix}`;log.log('saveAssets','streaming trace file to disk: '+streamTraceFilename);await saveTrace(passAssets.traceData,streamTraceFilename);log.log('saveAssets','trace file streamed to disk: '+streamTraceFilename);});await Promise.all(saveAll);}
async function logAssets(artifacts,audits){const allAssets=await prepareAssets(artifacts,audits);allAssets.map(passAssets=>{log.log(`devtoolslog-${passAssets.passName}.json`,JSON.stringify(passAssets.devtoolsLog));const traceIter=traceJsonGenerator(passAssets.traceData);let traceJson='';for(const trace of traceIter){traceJson+=trace;}
log.log(`trace-${passAssets.passName}.json`,traceJson);});}
module.exports={saveArtifacts,loadArtifacts,saveAssets,prepareAssets,saveTrace,logAssets};},{"../runner.js":50,"./traces/pwmetrics-events":44,"./traces/trace-parser":45,"lighthouse-logger":143,"mkdirp":58,"path":75,"rimraf":58,"stream":92}],22:[function(require,module,exports){'use strict';const log=require('lighthouse-logger');let _logs=[];class ConsoleQuieter{static mute(opts){_logs=_logs||[];console.log=function(...args){_logs.push({type:'log',args,prefix:opts.prefix});};console.warn=function(...args){_logs.push({type:'warn',args,prefix:opts.prefix});};console.error=function(...args){_logs.push({type:'error',args,prefix:opts.prefix});};}
static unmuteAndFlush(){console.log=ConsoleQuieter._consolelog;console.warn=ConsoleQuieter._consolewarn;console.error=ConsoleQuieter._consoleerror;_logs.forEach(entry=>{log.verbose(`${entry.prefix}-${entry.type}`,...entry.args);});_logs=[];}}
ConsoleQuieter._consolelog=console.log.bind(console);ConsoleQuieter._consolewarn=console.warn.bind(console);ConsoleQuieter._consoleerror=console.error.bind(console);module.exports=ConsoleQuieter;},{"lighthouse-logger":143}],23:[function(require,module,exports){'use strict';const Node=require('./node');class CPUNode extends Node{constructor(parentEvent,childEvents=[]){const nodeId=`${parentEvent.tid}.${parentEvent.ts}`;super(nodeId);this._event=parentEvent;this._childEvents=childEvents;}
get type(){return Node.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(){return this._childEvents.some(evt=>evt.name==='Layout');}
isEvaluateScriptFor(urls){return this._childEvents.some(evt=>{return evt.name==='EvaluateScript'&&!!evt.args.data&&!!evt.args.data.url&&urls.has(evt.args.data.url);});}
cloneWithoutRelationships(){return new CPUNode(this._event,this._childEvents);}}
module.exports=CPUNode;},{"./node":25}],24:[function(require,module,exports){'use strict';const Node=require('./node');const WebInspector=require('../web-inspector');class NetworkNode extends Node{constructor(networkRecord){super(networkRecord.requestId);this._record=networkRecord;}
get type(){return Node.TYPES.NETWORK;}
get startTime(){return this._record.startTime*1000*1000;}
get endTime(){return this._record.endTime*1000*1000;}
get record(){return this._record;}
get initiatorType(){return this._record._initiator&&this._record._initiator.type;}
get fromDiskCache(){return!!this._record._fromDiskCache;}
hasRenderBlockingPriority(){const priority=this._record.priority();const isScript=this._record._resourceType===WebInspector.resourceTypes.Script;const isDocument=this._record._resourceType===WebInspector.resourceTypes.Document;const isBlockingScript=priority==='High'&&isScript;const isBlockingHtmlImport=priority==='High'&&isDocument;return priority==='VeryHigh'||isBlockingScript||isBlockingHtmlImport;}
cloneWithoutRelationships(){const node=new NetworkNode(this._record);node.setIsMainDocument(this._isMainDocument);return node;}}
module.exports=NetworkNode;},{"../web-inspector":47,"./node":25}],25:[function(require,module,exports){'use strict';class Node{constructor(id){this._id=id;this._isMainDocument=false;this._dependents=[];this._dependencies=[];}
get id(){return this._id;}
get type(){throw new Error('Unimplemented');}
get startTime(){throw new Error('Unimplemented');}
get endTime(){throw new Error('Unimplemented');}
setIsMainDocument(value){this._isMainDocument=value;}
isMainDocument(){return this._isMainDocument;}
getDependents(){return this._dependents.slice();}
getDependencies(){return this._dependencies.slice();}
getNumberOfDependencies(){return this._dependencies.length;}
getRootNode(){let rootNode=this;while(rootNode._dependencies.length){rootNode=rootNode._dependencies[0];}
return rootNode;}
addDependent(node){node.addDependency(this);}
addDependency(node){if(this._dependencies.includes(node)){return;}
node._dependents.push(this);this._dependencies.push(node);}
removeDependent(node){node.removeDependency(this);}
removeDependency(node){if(!this._dependencies.includes(node)){return;}
node._dependents.splice(node._dependents.indexOf(this),1);this._dependencies.splice(this._dependencies.indexOf(node),1);}
removeAllDependencies(){for(const node of this._dependencies.slice()){this.removeDependency(node);}}
cloneWithoutRelationships(){const node=new Node(this.id);node.setIsMainDocument(this._isMainDocument);return node;}
cloneWithRelationships(predicate){const rootNode=this.getRootNode();let shouldIncludeNode=()=>true;if(predicate){const idsToInclude=new Set();rootNode.traverse(node=>{if(predicate(node)){node.traverse(node=>idsToInclude.add(node.id),node=>node._dependencies.filter(parent=>!idsToInclude.has(parent)));}});shouldIncludeNode=node=>idsToInclude.has(node.id);}
const idToNodeMap=new Map();rootNode.traverse(originalNode=>{if(!shouldIncludeNode(originalNode))return;const clonedNode=originalNode.cloneWithoutRelationships();idToNodeMap.set(clonedNode.id,clonedNode);});rootNode.traverse(originalNode=>{if(!shouldIncludeNode(originalNode))return;const clonedNode=idToNodeMap.get(originalNode.id);for(const dependency of originalNode._dependencies){const clonedDependency=idToNodeMap.get(dependency.id);clonedNode.addDependency(clonedDependency);}});if(!idToNodeMap.has(this.id))throw new Error(`Cloned graph missing node ${this.id}`);return idToNodeMap.get(this.id);}
_traversePaths(iterator,getNext){const stack=[[this]];while(stack.length){const path=stack.shift();const node=path[0];iterator(node,path);const nodesToAdd=getNext(node);for(const nextNode of nodesToAdd){stack.push([nextNode].concat(path));}}}
traverse(iterator,getNext){if(!getNext){getNext=node=>node.getDependents();}
const visited=new Set();const originalGetNext=getNext;getNext=node=>{visited.add(node.id);const allNodesToVisit=originalGetNext(node);const nodesToVisit=allNodesToVisit.filter(nextNode=>!visited.has(nextNode.id));nodesToVisit.forEach(nextNode=>visited.add(nextNode.id));return nodesToVisit;};this._traversePaths(iterator,getNext);}
static hasCycle(node,direction='both'){if(direction==='both'){return Node.hasCycle(node,'dependents')||Node.hasCycle(node,'dependencies');}
const visited=new Set();const currentPath=[];const toVisit=[node];const depthAdded=new Map([[node,0]]);while(toVisit.length){const currentNode=toVisit.pop();if(currentPath.includes(currentNode))return true;if(visited.has(currentNode))continue;while(currentPath.length>depthAdded.get(currentNode))currentPath.pop();visited.add(currentNode);currentPath.push(currentNode);const nodesToExplore=direction==='dependents'?currentNode._dependents:currentNode._dependencies;for(const nextNode of nodesToExplore){if(toVisit.includes(nextNode))continue;toVisit.push(nextNode);depthAdded.set(nextNode,currentPath.length);}}
return false;}}
Node.TYPES={NETWORK:'network',CPU:'cpu'};module.exports=Node;},{}],26:[function(require,module,exports){'use strict';const NetworkAnalyzer=require('./network-analyzer');const TcpConnection=require('./tcp-connection');const DEFAULT_SERVER_RESPONSE_TIME=30;const TLS_SCHEMES=['https','wss'];const CONNECTIONS_PER_ORIGIN=6;module.exports=class ConnectionPool{constructor(records,options){this._options=Object.assign({rtt:undefined,throughput:undefined,additionalRttByOrigin:new Map(),serverResponseTimeByOrigin:new Map()},options);if(!this._options.rtt||!this._options.throughput){throw new Error('Cannot create pool with no rtt or throughput');}
this._records=records;this._connectionsByOrigin=new Map();this._connectionsByRecord=new Map();this._connectionsInUse=new Set();this._connectionReusedByRequestId=NetworkAnalyzer.estimateIfConnectionWasReused(records,{forceCoarseEstimates:true});this._initializeConnections();}
connectionsInUse(){return Array.from(this._connectionsInUse);}
_initializeConnections(){const connectionReused=this._connectionReusedByRequestId;const additionalRttByOrigin=this._options.additionalRttByOrigin;const serverResponseTimeByOrigin=this._options.serverResponseTimeByOrigin;const recordsByOrigin=NetworkAnalyzer.groupByOrigin(this._records);for(const[origin,records]of recordsByOrigin.entries()){const connections=[];const additionalRtt=additionalRttByOrigin.get(origin)||0;const responseTime=serverResponseTimeByOrigin.get(origin)||DEFAULT_SERVER_RESPONSE_TIME;for(const record of records){if(connectionReused.get(record.requestId))continue;const isTLS=TLS_SCHEMES.includes(record.parsedURL.scheme);const isH2=record.protocol==='h2';const connection=new TcpConnection(this._options.rtt+additionalRtt,this._options.throughput,responseTime,isTLS,isH2);connections.push(connection);}
if(!connections.length){throw new Error(`Could not find a connection for origin: ${origin}`);}
while(connections.length<CONNECTIONS_PER_ORIGIN)connections.push(connections[0].clone());this._connectionsByOrigin.set(origin,connections);}}
acquire(record,options={}){if(this._connectionsByRecord.has(record)){return this._connectionsByRecord.get(record);}
const origin=String(record.parsedURL.securityOrigin());const connections=this._connectionsByOrigin.get(origin)||[];const availableConnections=connections.filter(connection=>!this._connectionsInUse.has(connection)).sort((a,b)=>b.congestionWindow-a.congestionWindow);const observedConnectionWasReused=!!this._connectionReusedByRequestId.get(record.requestId);let connectionToUse=availableConnections[0];if(!options.ignoreConnectionReused){connectionToUse=availableConnections.find(connection=>connection.isWarm()===observedConnectionWasReused);}
if(!connectionToUse)return null;this._connectionsInUse.add(connectionToUse);this._connectionsByRecord.set(record,connectionToUse);return connectionToUse;}
release(record){const connection=this._connectionsByRecord.get(record);this._connectionsByRecord.delete(record);this._connectionsInUse.delete(connection);}};},{"./network-analyzer":27,"./tcp-connection":29}],27:[function(require,module,exports){'use strict';const INITIAL_CWD=14*1024;const WebInspector=require('../../web-inspector');class NetworkAnalyzer{static get SUMMARY(){return'__SUMMARY__';}
static groupByOrigin(records){const grouped=new Map();records.forEach(item=>{const key=item.parsedURL.securityOrigin();const group=grouped.get(key)||[];group.push(item);grouped.set(key,group);});return grouped;}
static getSummary(values){values.sort((a,b)=>a-b);return{min:values[0],max:values[values.length-1],avg:values.reduce((a,b)=>a+b,0)/values.length,median:values[Math.floor((values.length-1)/2)]};}
static summarize(values){const summaryByKey=new Map();const allEstimates=[];for(const[key,estimates]of values){summaryByKey.set(key,NetworkAnalyzer.getSummary(estimates));allEstimates.push(...estimates);}
summaryByKey.set(NetworkAnalyzer.SUMMARY,NetworkAnalyzer.getSummary(allEstimates));return summaryByKey;}
static _estimateValueByOrigin(records,iteratee){const connectionWasReused=NetworkAnalyzer.estimateIfConnectionWasReused(records);const groupedByOrigin=NetworkAnalyzer.groupByOrigin(records);const estimates=new Map();for(const[origin,originRecords]of groupedByOrigin.entries()){let originEstimates=[];for(const record of originRecords){const timing=record._timing;if(!timing)continue;const value=iteratee({record,timing,connectionReused:connectionWasReused.get(record.requestId)});if(typeof value!=='undefined'){originEstimates=originEstimates.concat(value);}}
if(!originEstimates.length)continue;estimates.set(origin,originEstimates);}
return estimates;}
static _estimateRTTByOriginViaTCPTiming(records){return NetworkAnalyzer._estimateValueByOrigin(records,({timing,connectionReused})=>{if(connectionReused)return;if(timing.sslStart>0&&timing.sslEnd>0){return[timing.connectEnd-timing.sslStart,timing.sslStart-timing.connectStart];}else if(timing.connectStart>0&&timing.connectEnd>0){return timing.connectEnd-timing.connectStart;}});}
static _estimateRTTByOriginViaDownloadTiming(records){return NetworkAnalyzer._estimateValueByOrigin(records,({record,timing,connectionReused})=>{if(connectionReused)return;if(record.transferSize<=INITIAL_CWD)return;if(!Number.isFinite(timing.receiveHeadersEnd)||timing.receiveHeadersEnd<0)return;const totalTime=(record.endTime-record.startTime)*1000;const downloadTimeAfterFirstByte=totalTime-timing.receiveHeadersEnd;const numberOfRoundTrips=Math.log2(record.transferSize/INITIAL_CWD);if(numberOfRoundTrips>5)return;return downloadTimeAfterFirstByte/numberOfRoundTrips;});}
static _estimateRTTByOriginViaSendStartTiming(records){return NetworkAnalyzer._estimateValueByOrigin(records,({record,timing,connectionReused})=>{if(connectionReused)return;if(!Number.isFinite(timing.sendStart)||timing.sendStart<0)return;let roundTrips=1;if(record.parsedURL.scheme==='https')roundTrips+=1;return timing.sendStart/roundTrips;});}
static _estimateResponseTimeByOrigin(records,rttByOrigin){return NetworkAnalyzer._estimateValueByOrigin(records,({record,timing})=>{if(!Number.isFinite(timing.receiveHeadersEnd)||timing.receiveHeadersEnd<0)return;if(!Number.isFinite(timing.sendEnd)||timing.sendEnd<0)return;const ttfb=timing.receiveHeadersEnd-timing.sendEnd;const origin=record.parsedURL.securityOrigin();const rtt=rttByOrigin.get(origin)||rttByOrigin.get(NetworkAnalyzer.SUMMARY)||0;return Math.max(ttfb-rtt,0);});}
static canTrustConnectionInformation(records){const connectionIdWasStarted=new Map();for(const record of records){const started=connectionIdWasStarted.get(record.connectionId)||!record.connectionReused;connectionIdWasStarted.set(record.connectionId,started);}
if(connectionIdWasStarted.size<=1)return false;return Array.from(connectionIdWasStarted.values()).every(started=>started);}
static estimateIfConnectionWasReused(records,options){options=Object.assign({forceCoarseEstimates:false},options);if(!options.forceCoarseEstimates&&NetworkAnalyzer.canTrustConnectionInformation(records)){return new Map(records.map(record=>[record.requestId,!!record.connectionReused]));}
const connectionWasReused=new Map();const groupedByOrigin=NetworkAnalyzer.groupByOrigin(records);for(const[_,originRecords]of groupedByOrigin.entries()){const earliestReusePossible=originRecords.map(record=>record.endTime).reduce((a,b)=>Math.min(a,b),Infinity);for(const record of originRecords){connectionWasReused.set(record.requestId,record.startTime>=earliestReusePossible||record.protocol==='h2');}
const firstRecord=originRecords.reduce((a,b)=>a.startTime>b.startTime?b:a);connectionWasReused.set(firstRecord.requestId,false);}
return connectionWasReused;}
static estimateRTTByOrigin(records,options){options=Object.assign({forceCoarseEstimates:false,coarseEstimateMultiplier:0.5},options);let estimatesByOrigin=NetworkAnalyzer._estimateRTTByOriginViaTCPTiming(records);if(!estimatesByOrigin.size||options.forceCoarseEstimates){estimatesByOrigin=new Map();const estimatesViaDownload=NetworkAnalyzer._estimateRTTByOriginViaDownloadTiming(records);const estimatesViaSendStart=NetworkAnalyzer._estimateRTTByOriginViaSendStartTiming(records);for(const[origin,estimates]of estimatesViaDownload.entries()){estimatesByOrigin.set(origin,estimates);}
for(const[origin,estimates]of estimatesViaSendStart.entries()){const existing=estimatesByOrigin.get(origin)||[];estimatesByOrigin.set(origin,existing.concat(estimates));}
for(const estimates of estimatesByOrigin.values()){estimates.forEach((x,i)=>estimates[i]=x*options.coarseEstimateMultiplier);}}
if(!estimatesByOrigin.size)throw new Error('No timing information available');return NetworkAnalyzer.summarize(estimatesByOrigin);}
static estimateServerResponseTimeByOrigin(records,options){options=Object.assign({rttByOrigin:null},options);let rttByOrigin=options.rttByOrigin;if(!rttByOrigin){rttByOrigin=NetworkAnalyzer.estimateRTTByOrigin(records,options);for(const[origin,summary]of rttByOrigin.entries()){rttByOrigin.set(origin,summary.min);}}
const estimatesByOrigin=NetworkAnalyzer._estimateResponseTimeByOrigin(records,rttByOrigin);return NetworkAnalyzer.summarize(estimatesByOrigin);}
static findMainDocument(records){const documentRequests=records.filter(record=>record._resourceType===WebInspector.resourceTypes.Document);return documentRequests.sort((a,b)=>a.startTime-b.startTime)[0];}}
module.exports=NetworkAnalyzer;},{"../../web-inspector":47}],28:[function(require,module,exports){'use strict';const Node=require('../node');const NetworkNode=require('../network-node');const CpuNode=require('../cpu-node');const TcpConnection=require('./tcp-connection');const ConnectionPool=require('./connection-pool');const mobile3G=require('../../../config/constants').throttling.mobile3G;const DEFAULT_MAXIMUM_CONCURRENT_REQUESTS=10;const DEFAULT_LAYOUT_TASK_MULTIPLIER=0.5;const DEFAULT_MAXIMUM_CPU_TASK_DURATION=10000;const NodeState={NotReadyToStart:0,ReadyToStart:1,InProgress:2,Complete:3};class Simulator{constructor(options){this._options=Object.assign({rtt:mobile3G.rttMs,throughput:mobile3G.throughputKbps*1024,maximumConcurrentRequests:DEFAULT_MAXIMUM_CONCURRENT_REQUESTS,cpuSlowdownMultiplier:mobile3G.cpuSlowdownMultiplier,layoutTaskMultiplier:DEFAULT_LAYOUT_TASK_MULTIPLIER,additionalRttByOrigin:new Map(),serverResponseTimeByOrigin:new Map()},options);this._rtt=this._options.rtt;this._throughput=this._options.throughput;this._maximumConcurrentRequests=Math.max(Math.min(TcpConnection.maximumSaturatedConnections(this._rtt,this._throughput),this._options.maximumConcurrentRequests),1);this._cpuSlowdownMultiplier=this._options.cpuSlowdownMultiplier;this._layoutTaskMultiplier=this._cpuSlowdownMultiplier*this._options.layoutTaskMultiplier;this._flexibleOrdering=false;this._nodeTimings=new Map();this._numberInProgressByType=new Map();this._nodes={};this._connectionPool=null;}
_initializeConnectionPool(graph){const records=[];graph.getRootNode().traverse(node=>{if(node.type===Node.TYPES.NETWORK){records.push(node.record);}});this._connectionPool=new ConnectionPool(records,this._options);}
_initializeAuxiliaryData(){this._nodeTimings=new Map();this._numberInProgressByType=new Map();this._nodes={};for(const key of Object.keys(NodeState)){this._nodes[NodeState[key]]=new Set();}}
_numberInProgress(type){return this._numberInProgressByType.get(type)||0;}
_setTimingData(node,values){const timingData=this._nodeTimings.get(node)||{};Object.assign(timingData,values);this._nodeTimings.set(node,timingData);}
_markNodeAsReadyToStart(node,queuedTime){this._nodes[NodeState.ReadyToStart].add(node);this._nodes[NodeState.NotReadyToStart].delete(node);this._setTimingData(node,{queuedTime});}
_markNodeAsInProgress(node,startTime){this._nodes[NodeState.InProgress].add(node);this._nodes[NodeState.ReadyToStart].delete(node);this._numberInProgressByType.set(node.type,this._numberInProgress(node.type)+1);this._setTimingData(node,{startTime});}
_markNodeAsComplete(node,endTime){this._nodes[NodeState.Complete].add(node);this._nodes[NodeState.InProgress].delete(node);this._numberInProgressByType.set(node.type,this._numberInProgress(node.type)-1);this._setTimingData(node,{endTime});for(const dependent of node.getDependents()){const dependencies=dependent.getDependencies();if(dependencies.some(dep=>!this._nodes[NodeState.Complete].has(dep)))continue;this._markNodeAsReadyToStart(dependent,endTime);}}
_acquireConnection(record){return this._connectionPool.acquire(record,{ignoreConnectionReused:this._flexibleOrdering});}
_startNodeIfPossible(node,totalElapsedTime){if(node.type===Node.TYPES.CPU){if(this._numberInProgress(node.type)===0){this._markNodeAsInProgress(node,totalElapsedTime);this._setTimingData(node,{timeElapsed:0});}
return;}
if(node.type!==Node.TYPES.NETWORK)throw new Error('Unsupported');const networkNode=node;if(!networkNode.fromDiskCache){const numberOfActiveRequests=this._numberInProgress(node.type);if(numberOfActiveRequests>=this._maximumConcurrentRequests)return;const connection=this._acquireConnection(networkNode.record);if(!connection)return;}
this._markNodeAsInProgress(node,totalElapsedTime);this._setTimingData(node,{timeElapsed:0,timeElapsedOvershoot:0,bytesDownloaded:0});}
_updateNetworkCapacity(){for(const connection of this._connectionPool.connectionsInUse()){connection.setThroughput(this._throughput/this._nodes[NodeState.InProgress].size);}}
_estimateTimeRemaining(node){if(node.type===Node.TYPES.CPU){return this._estimateCPUTimeRemaining(node);}else if(node.type===Node.TYPES.NETWORK){return this._estimateNetworkTimeRemaining(node);}else{throw new Error('Unsupported');}}
_estimateCPUTimeRemaining(cpuNode){const timingData=this._nodeTimings.get(cpuNode);const multiplier=cpuNode.didPerformLayout()?this._layoutTaskMultiplier:this._cpuSlowdownMultiplier;const totalDuration=Math.min(Math.round(cpuNode.event.dur/1000*multiplier),DEFAULT_MAXIMUM_CPU_TASK_DURATION);const estimatedTimeElapsed=totalDuration-timingData.timeElapsed;this._setTimingData(cpuNode,{estimatedTimeElapsed});return estimatedTimeElapsed;}
_estimateNetworkTimeRemaining(networkNode){const timingData=this._nodeTimings.get(networkNode);let timeElapsed=0;if(networkNode.fromDiskCache){const sizeInMb=(networkNode.record._resourceSize||0)/1024/1024;timeElapsed=8+20*sizeInMb-timingData.timeElapsed;}else{const connection=this._acquireConnection(networkNode.record);const calculation=connection.simulateDownloadUntil(networkNode.record.transferSize-timingData.bytesDownloaded,{timeAlreadyElapsed:timingData.timeElapsed,maximumTimeToElapse:Infinity});timeElapsed=calculation.timeElapsed;}
const estimatedTimeElapsed=timeElapsed+timingData.timeElapsedOvershoot;this._setTimingData(networkNode,{estimatedTimeElapsed});return estimatedTimeElapsed;}
_findNextNodeCompletionTime(){let minimumTime=Infinity;for(const node of this._nodes[NodeState.InProgress]){minimumTime=Math.min(minimumTime,this._estimateTimeRemaining(node));}
return minimumTime;}
_updateProgressMadeInTimePeriod(node,timePeriodLength,totalElapsedTime){const timingData=this._nodeTimings.get(node);const isFinished=timingData.estimatedTimeElapsed===timePeriodLength;const networkNode=node;if(node.type===Node.TYPES.CPU||networkNode.fromDiskCache){return isFinished?this._markNodeAsComplete(node,totalElapsedTime):timingData.timeElapsed+=timePeriodLength;}
if(node.type!==Node.TYPES.NETWORK)throw new Error('Unsupported');const record=networkNode.record;const connection=this._acquireConnection(record);const calculation=connection.simulateDownloadUntil(record.transferSize-timingData.bytesDownloaded,{timeAlreadyElapsed:timingData.timeElapsed,maximumTimeToElapse:timePeriodLength-timingData.timeElapsedOvershoot});connection.setCongestionWindow(calculation.congestionWindow);connection.setH2OverflowBytesDownloaded(calculation.extraBytesDownloaded);if(isFinished){connection.setWarmed(true);this._connectionPool.release(record);this._markNodeAsComplete(node,totalElapsedTime);}else{timingData.timeElapsed+=calculation.timeElapsed;timingData.timeElapsedOvershoot+=calculation.timeElapsed-timePeriodLength;timingData.bytesDownloaded+=calculation.bytesDownloaded;}}
getOptions(){return this._options;}
simulate(graph,options){if(Node.hasCycle(graph)){throw new Error('Cannot simulate graph with cycle');}
options=Object.assign({flexibleOrdering:false},options);this._flexibleOrdering=!!options.flexibleOrdering;this._initializeConnectionPool(graph);this._initializeAuxiliaryData();const nodesNotReadyToStart=this._nodes[NodeState.NotReadyToStart];const nodesReadyToStart=this._nodes[NodeState.ReadyToStart];const nodesInProgress=this._nodes[NodeState.InProgress];const rootNode=graph.getRootNode();rootNode.traverse(node=>nodesNotReadyToStart.add(node));let totalElapsedTime=0;let iteration=0;this._markNodeAsReadyToStart(rootNode,totalElapsedTime);while(nodesReadyToStart.size||nodesInProgress.size){for(const node of nodesReadyToStart){this._startNodeIfPossible(node,totalElapsedTime);}
if(!nodesInProgress.size){if(this._flexibleOrdering)throw new Error('Failed to start a node');this._flexibleOrdering=true;continue;}
this._updateNetworkCapacity();const minimumTime=this._findNextNodeCompletionTime();totalElapsedTime+=minimumTime;if(!Number.isFinite(minimumTime)||iteration>100000){throw new Error('Graph creation failed, depth exceeded');}
iteration++;for(const node of nodesInProgress){this._updateProgressMadeInTimePeriod(node,minimumTime,totalElapsedTime);}}
return{timeInMs:totalElapsedTime,nodeTimings:this._nodeTimings};}}
module.exports=Simulator;},{"../../../config/constants":8,"../cpu-node":23,"../network-node":24,"../node":25,"./connection-pool":26,"./tcp-connection":29}],29:[function(require,module,exports){'use strict';const INITIAL_CONGESTION_WINDOW=10;const TCP_SEGMENT_SIZE=1460;class TcpConnection{constructor(rtt,throughput,serverLatency=0,ssl=true,h2=false){this._warmed=false;this._ssl=ssl;this._h2=h2;this._rtt=rtt;this._throughput=throughput;this._serverLatency=serverLatency;this._congestionWindow=INITIAL_CONGESTION_WINDOW;this._h2OverflowBytesDownloaded=0;}
static maximumSaturatedConnections(rtt,availableThroughput){const roundTripsPerSecond=1000/rtt;const bytesPerRoundTrip=TCP_SEGMENT_SIZE;const bytesPerSecond=roundTripsPerSecond*bytesPerRoundTrip;const minimumThroughputRequiredPerRequest=bytesPerSecond*8;return Math.floor(availableThroughput/minimumThroughputRequiredPerRequest);}
_computeMaximumCongestionWindowInSegments(){const bytesPerSecond=this._throughput/8;const secondsPerRoundTrip=this._rtt/1000;const bytesPerRoundTrip=bytesPerSecond*secondsPerRoundTrip;return Math.floor(bytesPerRoundTrip/TCP_SEGMENT_SIZE);}
setThroughput(throughput){this._throughput=throughput;}
setCongestionWindow(congestion){this._congestionWindow=congestion;}
setWarmed(warmed){this._warmed=warmed;}
isWarm(){return this._warmed;}
isH2(){return this._h2;}
get congestionWindow(){return this._congestionWindow;}
setH2OverflowBytesDownloaded(bytes){if(!this._h2)return;this._h2OverflowBytesDownloaded=bytes;}
clone(){return Object.assign(new TcpConnection(this._rtt,this._throughput),this);}
simulateDownloadUntil(bytesToDownload,options){const{timeAlreadyElapsed=0,maximumTimeToElapse=Infinity}=options||{};if(this._warmed&&this._h2){bytesToDownload-=this._h2OverflowBytesDownloaded;}
const twoWayLatency=this._rtt;const oneWayLatency=twoWayLatency/2;const maximumCongestionWindow=this._computeMaximumCongestionWindowInSegments();let handshakeAndRequest=oneWayLatency;if(!this._warmed){handshakeAndRequest=oneWayLatency+
oneWayLatency+
oneWayLatency+(this._ssl?twoWayLatency:0);}
let roundTrips=Math.ceil(handshakeAndRequest/twoWayLatency);let timeToFirstByte=handshakeAndRequest+this._serverLatency+oneWayLatency;if(this._warmed&&this._h2)timeToFirstByte=0;const timeElapsedForTTFB=Math.max(timeToFirstByte-timeAlreadyElapsed,0);const maximumDownloadTimeToElapse=maximumTimeToElapse-timeElapsedForTTFB;let congestionWindow=Math.min(this._congestionWindow,maximumCongestionWindow);let totalBytesDownloaded=0;if(timeElapsedForTTFB>0){totalBytesDownloaded=congestionWindow*TCP_SEGMENT_SIZE;}else{roundTrips=0;}
let downloadTimeElapsed=0;let bytesRemaining=bytesToDownload-totalBytesDownloaded;while(bytesRemaining>0&&downloadTimeElapsed<=maximumDownloadTimeToElapse){roundTrips++;downloadTimeElapsed+=twoWayLatency;congestionWindow=Math.max(Math.min(maximumCongestionWindow,congestionWindow*2),1);const bytesDownloadedInWindow=congestionWindow*TCP_SEGMENT_SIZE;totalBytesDownloaded+=bytesDownloadedInWindow;bytesRemaining-=bytesDownloadedInWindow;}
const timeElapsed=timeElapsedForTTFB+downloadTimeElapsed;const extraBytesDownloaded=this._h2?Math.max(totalBytesDownloaded-bytesToDownload,0):0;const bytesDownloaded=Math.max(Math.min(totalBytesDownloaded,bytesToDownload),0);return{roundTrips,timeElapsed,bytesDownloaded,extraBytesDownloaded,congestionWindow};}}
module.exports=TcpConnection;},{}],30:[function(require,module,exports){'use strict';function getElementsInDocument(selector){const results=[];const _findAllElements=nodes=>{for(let i=0,el;el=nodes[i];++i){if(!selector||el.matches(selector)){results.push(el);}
if(el.shadowRoot){_findAllElements(el.shadowRoot.querySelectorAll('*'));}}};_findAllElements(document.querySelectorAll('*'));return results;}
module.exports={getElementsInDocumentFnString:getElementsInDocument.toString()};},{}],31:[function(require,module,exports){'use strict';const Driver=require('../gather/driver.js');class Element{constructor(element,driver){if(!element||!driver){throw Error('Driver and element required to create Element');}
this.driver=driver;this.element=element;}
getAttribute(name){return this.driver.sendCommand('DOM.getAttributes',{nodeId:this.element.nodeId}).then(resp=>{const attrIndex=resp.attributes.indexOf(name);if(attrIndex===-1){return null;}
return resp.attributes[attrIndex+1];});}
getNodeId(){return this.element.nodeId;}
getProperty(propName){return this.driver.sendCommand('DOM.resolveNode',{nodeId:this.element.nodeId}).then(resp=>{if(!resp.object.objectId){return null;}
return this.driver.getObjectProperty(resp.object.objectId,propName);});}}
module.exports=Element;},{"../gather/driver.js":17}],32:[function(require,module,exports){'use strict';const Driver=require('../gather/driver');const mobile3G=require('../config/constants').throttling.mobile3G;const NEXUS5X_EMULATION_METRICS={mobile:true,screenWidth:412,screenHeight:732,width:412,height:732,positionX:0,positionY:0,scale:1,deviceScaleFactor:2.625,screenOrientation:{angle:0,type:'portraitPrimary'}};const NEXUS5X_USERAGENT={userAgent:'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36'+'(KHTML, like Gecko) Chrome/66.0.3359.30 Mobile Safari/537.36'};const OFFLINE_METRICS={offline:true,latency:0,downloadThroughput:0,uploadThroughput:0};const NO_THROTTLING_METRICS={latency:0,downloadThroughput:0,uploadThroughput:0,offline:false};const NO_CPU_THROTTLE_METRICS={rate:1};const CPU_THROTTLE_METRICS={rate:4};function enableNexus5X(driver){return Promise.all([driver.sendCommand('Emulation.setDeviceMetricsOverride',NEXUS5X_EMULATION_METRICS),driver.sendCommand('Network.enable'),driver.sendCommand('Network.setUserAgentOverride',NEXUS5X_USERAGENT),driver.sendCommand('Emulation.setEmitTouchEventsForMouse',{enabled:true,configuration:'mobile'})]);}
function enableNetworkThrottling(driver,throttlingSettings=mobile3G){const conditions={offline:false,latency:throttlingSettings.requestLatencyMs||0,downloadThroughput:throttlingSettings.downloadThroughputKbps||0,uploadThroughput:throttlingSettings.uploadThroughputKbps||0};conditions.downloadThroughput=Math.floor(conditions.downloadThroughput*1024/8);conditions.uploadThroughput=Math.floor(conditions.uploadThroughput*1024/8);return driver.sendCommand('Network.emulateNetworkConditions',conditions);}
function clearAllNetworkEmulation(driver){return driver.sendCommand('Network.emulateNetworkConditions',NO_THROTTLING_METRICS);}
function goOffline(driver){return driver.sendCommand('Network.emulateNetworkConditions',OFFLINE_METRICS);}
function enableCPUThrottling(driver,throttlingSettings){const rate=throttlingSettings&&throttlingSettings.cpuSlowdownMultiplier!==undefined?throttlingSettings.cpuSlowdownMultiplier:CPU_THROTTLE_METRICS.rate;return driver.sendCommand('Emulation.setCPUThrottlingRate',{rate});}
function disableCPUThrottling(driver){return driver.sendCommand('Emulation.setCPUThrottlingRate',NO_CPU_THROTTLE_METRICS);}
module.exports={enableNexus5X,enableNetworkThrottling,clearAllNetworkEmulation,enableCPUThrottling,disableCPUThrottling,goOffline};},{"../config/constants":8,"../gather/driver":17}],33:[function(require,module,exports){'use strict';const strings=require('./strings');class LighthouseError extends Error{constructor(errorDefinition,properties){super(errorDefinition.code);this.name='LHError';this.code=errorDefinition.code;this.friendlyMessage=errorDefinition.message;if(properties)Object.assign(this,properties);Error.captureStackTrace(this,LighthouseError);}
static isPageLoadError(err){return err.code===ERRORS.NO_DOCUMENT_REQUEST.code||err.code===ERRORS.FAILED_DOCUMENT_REQUEST.code;}
static fromProtocolMessage(method,protocolError){const protocolErrors=Object.keys(ERRORS).filter(k=>ERRORS[k].pattern).map(k=>ERRORS[k]);const matchedErrorDefinition=protocolErrors.find(e=>e.pattern.test(protocolError.message));if(matchedErrorDefinition){return new LighthouseError(matchedErrorDefinition,{protocolMethod:method,protocolError:protocolError.message});}
let errMsg=`(${method}): ${protocolError.message}`;if(protocolError.data)errMsg+=` (${protocolError.data})`;const error=new Error(`Protocol error ${errMsg}`);return Object.assign(error,{protocolMethod:method,protocolError:protocolError.message});}}
const ERRORS={NO_SPEEDLINE_FRAMES:{message:strings.didntCollectScreenshots},SPEEDINDEX_OF_ZERO:{message:strings.didntCollectScreenshots},NO_SCREENSHOTS:{message:strings.didntCollectScreenshots},INVALID_SPEEDLINE:{message:strings.didntCollectScreenshots},NO_TRACING_STARTED:{message:strings.badTraceRecording},NO_NAVSTART:{message:strings.badTraceRecording},NO_FCP:{message:strings.badTraceRecording},NO_FMP:{message:strings.badTraceRecording},NO_DCL:{message:strings.badTraceRecording},FMP_TOO_LATE_FOR_FCPUI:{message:strings.pageLoadTookTooLong},NO_FCPUI_IDLE_PERIOD:{message:strings.pageLoadTookTooLong},NO_TTI_CPU_IDLE_PERIOD:{message:strings.pageLoadTookTooLong},NO_TTI_NETWORK_IDLE_PERIOD:{message:strings.pageLoadTookTooLong},NO_DOCUMENT_REQUEST:{message:strings.pageLoadFailed},FAILED_DOCUMENT_REQUEST:{message:strings.pageLoadFailed},TRACING_ALREADY_STARTED:{message:strings.internalChromeError,pattern:/Tracing.*started/},PARSING_PROBLEM:{message:strings.internalChromeError,pattern:/Parsing problem/},READ_FAILED:{message:strings.internalChromeError,pattern:/Read failed/},REQUEST_CONTENT_TIMEOUT:{message:strings.requestContentTimeout}};Object.keys(ERRORS).forEach(code=>ERRORS[code].code=code);LighthouseError.errors=ERRORS;module.exports=LighthouseError;},{"./strings":41}],34:[function(require,module,exports){'use strict';function addFormattedCodeSnippet(listener){const handler=listener.handler?listener.handler.description:'...';const objectName=listener.objectName.toLowerCase().replace('#document','document');return Object.assign({pre:`${objectName}.addEventListener('${listener.type}', ${handler})`},listener);}
function groupCodeSnippetsByLocation(listeners){const locToListenerMap=new Map();listeners.forEach(loc=>{const accPre=loc.pre.trim()+'\n\n';const simplifiedLoc={line:loc.line,col:loc.col,url:loc.url,type:loc.type,pre:''};const key=JSON.stringify(simplifiedLoc);const accListener=locToListenerMap.get(key)||simplifiedLoc;accListener.pre+=accPre;locToListenerMap.set(key,accListener);});return[...locToListenerMap.values()];}
module.exports={addFormattedCodeSnippet,groupCodeSnippetsByLocation};},{}],35:[function(require,module,exports){'use strict';function doExist(manifest){if(!manifest||!manifest.icons){return false;}
if(manifest.icons.value.length===0){return false;}
return true;}
function sizeAtLeast(sizeRequirement,manifest){const iconValues=manifest.icons.value;const flattenedSizes=[];iconValues.forEach(icon=>{if(icon.value.sizes.value){flattenedSizes.push(...icon.value.sizes.value);}});return flattenedSizes.filter(size=>/\d+x\d+/.test(size)).filter(size=>{const sizeStrs=size.split(/x/i);const sizeNums=[parseFloat(sizeStrs[0]),parseFloat(sizeStrs[1])];const areIconsBigEnough=sizeNums[0]>=sizeRequirement&&sizeNums[1]>=sizeRequirement;const areIconsSquare=sizeNums[0]===sizeNums[1];return areIconsBigEnough&&areIconsSquare;});}
module.exports={doExist,sizeAtLeast};},{}],36:[function(require,module,exports){'use strict';const URL=require('./url-shim');const validateColor=require('./web-inspector').Color.parse;const ALLOWED_DISPLAY_VALUES=['fullscreen','standalone','minimal-ui','browser'];const DEFAULT_DISPLAY_MODE='browser';const ALLOWED_ORIENTATION_VALUES=['any','natural','landscape','portrait','portrait-primary','portrait-secondary','landscape-primary','landscape-secondary'];function parseString(raw,trim){let value;let debugString;if(typeof raw==='string'){value=trim?raw.trim():raw;}else{if(raw!==undefined){debugString='ERROR: expected a string.';}
value=undefined;}
return{raw,value,debugString};}
function parseColor(raw){const color=parseString(raw);if(color.value===undefined){return color;}
const validatedColor=validateColor(color.raw);if(!validatedColor){color.value=undefined;color.debugString='ERROR: color parsing failed.';}
return color;}
function parseName(jsonInput){return parseString(jsonInput.name,true);}
function parseShortName(jsonInput){return parseString(jsonInput.short_name,true);}
function checkSameOrigin(url1,url2){const parsed1=new URL(url1);const parsed2=new URL(url2);return parsed1.origin===parsed2.origin;}
function parseStartUrl(jsonInput,manifestUrl,documentUrl){const raw=jsonInput.start_url;if(raw===''){return{raw,value:documentUrl,debugString:'ERROR: start_url string empty'};}
const parsedAsString=parseString(raw);if(!parsedAsString.value){parsedAsString.value=documentUrl;return parsedAsString;}
let startUrl;try{startUrl=new URL(raw,manifestUrl).href;}catch(e){return{raw,value:documentUrl,debugString:'ERROR: invalid start_url relative to ${manifestUrl}'};}
if(!checkSameOrigin(startUrl,documentUrl)){return{raw,value:documentUrl,debugString:'ERROR: start_url must be same-origin as document'};}
return{raw,value:startUrl};}
function parseDisplay(jsonInput){const parsedString=parseString(jsonInput.display,true);const stringValue=parsedString.value;if(!stringValue){return{raw:jsonInput,value:DEFAULT_DISPLAY_MODE,debugString:parsedString.debugString};}
const displayValue=stringValue.toLowerCase();if(!ALLOWED_DISPLAY_VALUES.includes(displayValue)){return{raw:jsonInput,value:DEFAULT_DISPLAY_MODE,debugString:'ERROR: \'display\' has invalid value '+displayValue+`. will fall back to ${DEFAULT_DISPLAY_MODE}.`};}
return{raw:jsonInput,value:displayValue,debugString:undefined};}
function parseOrientation(jsonInput){const orientation=parseString(jsonInput.orientation,true);if(orientation.value&&!ALLOWED_ORIENTATION_VALUES.includes(orientation.value.toLowerCase())){orientation.value=undefined;orientation.debugString='ERROR: \'orientation\' has an invalid value, will be ignored.';}
return orientation;}
function parseIcon(raw,manifestUrl){const src=parseString(raw.src,true);if(src.value===''){src.value=undefined;}
if(src.value){src.value=new URL(src.value,manifestUrl).href;}
const type=parseString(raw.type,true);const density={raw:raw.density,value:1,debugString:undefined};if(density.raw!==undefined){density.value=parseFloat(density.raw);if(isNaN(density.value)||!isFinite(density.value)||density.value<=0){density.value=1;density.debugString='ERROR: icon density cannot be NaN, +∞, or less than or equal to +0.';}}
let sizes;const parsedSizes=parseString(raw.sizes);if(parsedSizes.value!==undefined){const set=new Set();parsedSizes.value.trim().split(/\s+/).forEach(size=>set.add(size.toLowerCase()));sizes={raw:raw.sizes,value:set.size>0?Array.from(set):undefined,debugString:undefined};}else{sizes={...parsedSizes,value:undefined};}
return{raw,value:{src,type,density,sizes},debugString:undefined};}
function parseIcons(jsonInput,manifestUrl){const raw=jsonInput.icons;if(raw===undefined){return{raw,value:[],debugString:undefined};}
if(!Array.isArray(raw)){return{raw,value:[],debugString:'ERROR: \'icons\' expected to be an array but is not.'};}
const value=raw.filter(icon=>icon.src!==undefined).map(icon=>parseIcon(icon,manifestUrl)).filter(parsedIcon=>parsedIcon.value.src.value!==undefined);return{raw,value,debugString:undefined};}
function parseApplication(raw){const platform=parseString(raw.platform,true);const id=parseString(raw.id,true);const appUrl=parseString(raw.url,true);if(appUrl.value){try{appUrl.value=new URL(appUrl.value).href;}catch(e){appUrl.value=undefined;appUrl.debugString='ERROR: invalid application URL ${raw.url}';}}
return{raw,value:{platform,id,url:appUrl},debugString:undefined};}
function parseRelatedApplications(jsonInput){const raw=jsonInput.related_applications;if(raw===undefined){return{raw,value:undefined,debugString:undefined};}
if(!Array.isArray(raw)){return{raw,value:undefined,debugString:'ERROR: \'related_applications\' expected to be an array but is not.'};}
const value=raw.filter(application=>!!application.platform).map(parseApplication).filter(parsedApp=>!!parsedApp.value.id.value||!!parsedApp.value.url.value);return{raw,value,debugString:undefined};}
function parsePreferRelatedApplications(jsonInput){const raw=jsonInput.prefer_related_applications;let value;let debugString;if(typeof raw==='boolean'){value=raw;}else{if(raw!==undefined){debugString='ERROR: \'prefer_related_applications\' expected to be a boolean.';}
value=undefined;}
return{raw,value,debugString};}
function parseThemeColor(jsonInput){return parseColor(jsonInput.theme_color);}
function parseBackgroundColor(jsonInput){return parseColor(jsonInput.background_color);}
function parse(string,manifestUrl,documentUrl){if(manifestUrl===undefined||documentUrl===undefined){throw new Error('Manifest and document URLs required for manifest parsing.');}
let jsonInput;try{jsonInput=JSON.parse(string);}catch(e){return{raw:string,value:undefined,debugString:'ERROR: file isn\'t valid JSON: '+e};}
const manifest={name:parseName(jsonInput),short_name:parseShortName(jsonInput),start_url:parseStartUrl(jsonInput,manifestUrl,documentUrl),display:parseDisplay(jsonInput),orientation:parseOrientation(jsonInput),icons:parseIcons(jsonInput,manifestUrl),related_applications:parseRelatedApplications(jsonInput),prefer_related_applications:parsePreferRelatedApplications(jsonInput),theme_color:parseThemeColor(jsonInput),background_color:parseBackgroundColor(jsonInput)};return{raw:string,value:manifest,debugString:undefined};}
module.exports=parse;},{"./url-shim":"url","./web-inspector":47}],37:[function(require,module,exports){'use strict';const NetworkManager=require('./web-inspector').NetworkManager;const EventEmitter=require('events').EventEmitter;const log=require('lighthouse-logger');const IGNORED_NETWORK_SCHEMES=['data','ws'];class NetworkRecorder extends EventEmitter{constructor(recordArray){super();this._records=recordArray;this.networkManager=NetworkManager.createWithFakeTarget();this.networkManager.addEventListener(this.EventTypes.RequestStarted,this.onRequestStarted.bind(this));this.networkManager.addEventListener(this.EventTypes.RequestFinished,this.onRequestFinished.bind(this));}
on(event,listener){return super.on(event,listener);}
once(event,listener){return super.once(event,listener);}
get EventTypes(){return NetworkManager.Events;}
isIdle(){return!!this._getActiveIdlePeriod(0);}
is2Idle(){return!!this._getActiveIdlePeriod(2);}
_getActiveIdlePeriod(allowedRequests){const quietPeriods=NetworkRecorder.findNetworkQuietPeriods(this._records,allowedRequests);return quietPeriods.find(period=>!Number.isFinite(period.end));}
_emitNetworkStatus(){const zeroQuiet=this._getActiveIdlePeriod(0);const twoQuiet=this._getActiveIdlePeriod(2);if(twoQuiet&&zeroQuiet){log.verbose('NetworkRecorder','network fully-quiet');this.emit('network-2-idle');this.emit('networkidle');}else if(twoQuiet&&!zeroQuiet){log.verbose('NetworkRecorder','network semi-quiet');this.emit('network-2-idle');this.emit('networkbusy');}else{log.verbose('NetworkRecorder','network busy');this.emit('network-2-busy');this.emit('networkbusy');}}
static _isQUICAndFinished(record){const isQUIC=record._responseHeaders&&record._responseHeaders.some(header=>header.name.toLowerCase()==='alt-svc'&&/quic/.test(header.value));const receivedHeaders=record._timing&&record._timing.receiveHeadersEnd>0;return!!(isQUIC&&receivedHeaders&&record.endTime);}
static findNetworkQuietPeriods(networkRecords,allowedConcurrentRequests,endTime=Infinity){let timeBoundaries=[];networkRecords.forEach(record=>{const scheme=record.parsedURL&&record.parsedURL.scheme;if(IGNORED_NETWORK_SCHEMES.includes(scheme)){return;}
timeBoundaries.push({time:record.startTime*1000,isStart:true});if(record.finished||NetworkRecorder._isQUICAndFinished(record)){timeBoundaries.push({time:record.endTime*1000,isStart:false});}});timeBoundaries=timeBoundaries.filter(boundary=>boundary.time<=endTime).sort((a,b)=>a.time-b.time);let numInflightRequests=0;let quietPeriodStart=0;const quietPeriods=[];timeBoundaries.forEach(boundary=>{if(boundary.isStart){if(numInflightRequests===allowedConcurrentRequests){quietPeriods.push({start:quietPeriodStart,end:boundary.time});}
numInflightRequests++;}else{numInflightRequests--;if(numInflightRequests===allowedConcurrentRequests){quietPeriodStart=boundary.time;}}});if(numInflightRequests<=allowedConcurrentRequests){quietPeriods.push({start:quietPeriodStart,end:endTime});}
return quietPeriods.filter(period=>period.start!==period.end);}
onRequestStarted(request){this._records.push(request.data);this._emitNetworkStatus();}
onRequestFinished(request){this.emit('requestloaded',request.data);this._emitNetworkStatus();}
onRequestWillBeSent(data){this.networkManager._dispatcher.requestWillBeSent(data.requestId,data.frameId,data.loaderId,data.documentURL,data.request,data.timestamp,data.wallTime,data.initiator,data.redirectResponse,data.type);}
onRequestServedFromCache(data){this.networkManager._dispatcher.requestServedFromCache(data.requestId);}
onResponseReceived(data){this.networkManager._dispatcher.responseReceived(data.requestId,data.frameId,data.loaderId,data.timestamp,data.type,data.response);}
onDataReceived(data){this.networkManager._dispatcher.dataReceived(data.requestId,data.timestamp,data.dataLength,data.encodedDataLength);}
onLoadingFinished(data){this.networkManager._dispatcher.loadingFinished(data.requestId,data.timestamp,data.encodedDataLength);}
onLoadingFailed(data){this.networkManager._dispatcher.loadingFailed(data.requestId,data.timestamp,data.type,data.errorText,data.canceled,data.blockedReason);}
onResourceChangedPriority(data){this.networkManager._dispatcher.resourceChangedPriority(data.requestId,data.newPriority,data.timestamp);}
dispatch(event){if(!event.method.startsWith('Network.')){return;}
switch(event.method){case'Network.requestWillBeSent':return this.onRequestWillBeSent(event.params);case'Network.requestServedFromCache':return this.onRequestServedFromCache(event.params);case'Network.responseReceived':return this.onResponseReceived(event.params);case'Network.dataReceived':return this.onDataReceived(event.params);case'Network.loadingFinished':return this.onLoadingFinished(event.params);case'Network.loadingFailed':return this.onLoadingFailed(event.params);case'Network.resourceChangedPriority':return this.onResourceChangedPriority(event.params);default:return;}}
static recordsFromLogs(devtoolsLog){const records=[];const nr=new NetworkRecorder(records);devtoolsLog.forEach(message=>{nr.dispatch(message);});return records;}}
module.exports=NetworkRecorder;},{"./web-inspector":47,"events":62,"lighthouse-logger":143}],38:[function(require,module,exports){'use strict';function captureJSCallUsage(funcRef,set){const __nativeError=window.__nativeError||Error;const originalFunc=funcRef;const originalPrepareStackTrace=__nativeError.prepareStackTrace;return function(...args){__nativeError.prepareStackTrace=function(error,structStackTrace){const callFrame=structStackTrace[1];let url=callFrame.getFileName()||callFrame.getEvalOrigin();const line=callFrame.getLineNumber();const col=callFrame.getColumnNumber();const isEval=callFrame.isEval();let isExtension=false;const stackTrace=structStackTrace.slice(1).map(callsite=>callsite.toString());if(isEval){url=stackTrace[1];}
if(stackTrace[0].startsWith('<anonymous>')){url=stackTrace[0];isExtension=true;}
return{url,args,line,col,isEval,isExtension};};const e=new __nativeError(`__called ${funcRef.name}__`);set.add(JSON.stringify(e.stack));__nativeError.prepareStackTrace=originalPrepareStackTrace;return originalFunc.apply(this,args);};}
function wrapRuntimeEvalErrorInBrowser(err){err=err||new Error();const fallbackMessage=typeof err==='string'?err:'unknown error';return{__failedInBrowser:true,name:err.name||'Error',message:err.message||fallbackMessage,stack:err.stack||new Error().stack};}
function registerPerformanceObserverInPage(){window.____lastLongTask=window.performance.now();const observer=new window.PerformanceObserver(entryList=>{const entries=entryList.getEntries();for(const entry of entries){if(entry.entryType==='longtask'){const taskEnd=entry.startTime+entry.duration;window.____lastLongTask=Math.max(window.____lastLongTask,taskEnd);}}});observer.observe({entryTypes:['longtask']});window.____lhPerformanceObserver=observer;}
function checkTimeSinceLastLongTask(){return new Promise(resolve=>{const timeoutRequested=window.performance.now()+50;setTimeout(()=>{const timeoutFired=window.performance.now();const timeSinceLongTask=timeoutFired-timeoutRequested<50?timeoutFired-window.____lastLongTask:0;resolve(timeSinceLongTask);},50);});}
module.exports={captureJSCallUsage,wrapRuntimeEvalErrorInBrowser,registerPerformanceObserverInPage,checkTimeSinceLastLongTask};},{}],39:[function(require,module,exports){'use strict';const log=require('lighthouse-logger');const SENTRY_URL='https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697';const noop=()=>Promise.resolve();const sentryApi={captureMessage:noop,captureException:noop,captureBreadcrumb:noop,mergeContext:noop,getContext:noop};const SAMPLED_ERRORS=[{pattern:/DOCUMENT_REQUEST$/,rate:0.1},{pattern:/(IDLE_PERIOD|FMP_TOO_LATE)/,rate:0.1},{pattern:/^NO_.*/,rate:0.1},{pattern:/Failed to decode/,rate:0.1},{pattern:/All image optimizations failed/,rate:0.1},{pattern:/No.*resource with given/,rate:0.01},{pattern:/No.*node with given id/,rate:0.01}];const sentryDelegate=Object.assign({},sentryApi);sentryDelegate.init=function init(opts){if(!opts.flags.enableErrorReporting){return;}
const environmentData=opts.environmentData||{};const sentryConfig=Object.assign({},environmentData,{captureUnhandledRejections:true});try{const Sentry=require('raven');Sentry.config(SENTRY_URL,sentryConfig).install();Object.keys(sentryApi).forEach(functionName=>{sentryDelegate[functionName]=(...args)=>Sentry[functionName](...args);});sentryDelegate.captureException=(err,opts)=>{opts=opts||{};const empty=Promise.resolve();if(!err)return empty;if(err.expected)return empty;const sampledErrorMatch=SAMPLED_ERRORS.find(sample=>sample.pattern.test(err.message));if(sampledErrorMatch&&sampledErrorMatch.rate<=Math.random())return empty;if(err.protocolMethod){opts.fingerprint=['{{ default }}',err.protocolMethod,err.protocolError];}
return new Promise(resolve=>{Sentry.captureException(err,opts,()=>resolve());});};}catch(e){log.warn('sentry','Could not load raven library, errors will not be reported.');}
const context=Object.assign({url:opts.url,deviceEmulation:!opts.flags.disableDeviceEmulation,throttlingMethod:opts.flags.throttlingMethod},opts.flags.throttling);sentryDelegate.mergeContext({extra:Object.assign({},environmentData.extra,context)});return context;};module.exports=sentryDelegate;},{"lighthouse-logger":143,"raven":58}],40:[function(require,module,exports){'use strict';function erf(x){const sign=Math.sign(x);x=Math.abs(x);const a1=0.254829592;const a2=-0.284496736;const a3=1.421413741;const a4=-1.453152027;const a5=1.061405429;const p=0.3275911;const t=1/(1+p*x);const y=t*(a1+t*(a2+t*(a3+t*(a4+t*a5))));return sign*(1-y*Math.exp(-x*x));}
function getLogNormalDistribution(median,falloff){const location=Math.log(median);const logRatio=Math.log(falloff/median);const shape=Math.sqrt(1-3*logRatio-Math.sqrt((logRatio-3)*(logRatio-3)-8))/2;return{computeComplementaryPercentile(x){const standardizedX=(Math.log(x)-location)/(Math.SQRT2*shape);return(1-erf(standardizedX))/2;}};}
module.exports={getLogNormalDistribution};},{}],41:[function(require,module,exports){'use strict';module.exports={didntCollectScreenshots:`Chrome didn't collect any screenshots during the page load. Please make sure there is content visible on the page, and then try re-running Lighthouse.`,badTraceRecording:`Something went wrong with recording the trace over your page load. Please run Lighthouse again.`,pageLoadTookTooLong:`Your page took too long to load. Please follow the opportunities in the report to reduce your page load time, and then try re-running Lighthouse.`,pageLoadFailed:`Your page failed to load. Verify that the URL is valid and re-run Lighthouse.`,internalChromeError:`An internal Chrome error occurred. Please restart Chrome and try re-running Lighthouse.`,requestContentTimeout:'Fetching resource content has exceeded the allotted time'};},{}],42:[function(require,module,exports){'use strict';const groupIdToName={loading:'Network request loading',parseHTML:'Parsing HTML & CSS',styleLayout:'Style & Layout',compositing:'Compositing',painting:'Paint',gpu:'GPU',scripting:'Script Evaluation',scriptParseCompile:'Script Parsing & Compile',scriptGC:'Garbage collection',other:'Other',images:'Images'};const taskToGroup={'Animation':groupIdToName.painting,'Async Task':groupIdToName.other,'Frame Start':groupIdToName.painting,'Frame Start (main thread)':groupIdToName.painting,'Cancel Animation Frame':groupIdToName.scripting,'Cancel Idle Callback':groupIdToName.scripting,'Compile Script':groupIdToName.scriptParseCompile,'Composite Layers':groupIdToName.compositing,'Console Time':groupIdToName.scripting,'Image Decode':groupIdToName.images,'Draw Frame':groupIdToName.painting,'Embedder Callback':groupIdToName.scripting,'Evaluate Script':groupIdToName.scripting,'Event':groupIdToName.scripting,'Animation Frame Fired':groupIdToName.scripting,'Fire Idle Callback':groupIdToName.scripting,'Function Call':groupIdToName.scripting,'DOM GC':groupIdToName.scriptGC,'GC Event':groupIdToName.scriptGC,'GPU':groupIdToName.gpu,'Hit Test':groupIdToName.compositing,'Invalidate Layout':groupIdToName.styleLayout,'JS Frame':groupIdToName.scripting,'Input Latency':groupIdToName.scripting,'Layout':groupIdToName.styleLayout,'Major GC':groupIdToName.scriptGC,'DOMContentLoaded event':groupIdToName.scripting,'First paint':groupIdToName.painting,'FMP':groupIdToName.painting,'FMP candidate':groupIdToName.painting,'Load event':groupIdToName.scripting,'Minor GC':groupIdToName.scriptGC,'Paint':groupIdToName.painting,'Paint Image':groupIdToName.images,'Paint Setup':groupIdToName.painting,'Parse Stylesheet':groupIdToName.parseHTML,'Parse HTML':groupIdToName.parseHTML,'Parse Script':groupIdToName.scriptParseCompile,'Other':groupIdToName.other,'Rasterize Paint':groupIdToName.painting,'Recalculate Style':groupIdToName.styleLayout,'Request Animation Frame':groupIdToName.scripting,'Request Idle Callback':groupIdToName.scripting,'Request Main Thread Frame':groupIdToName.painting,'Image Resize':groupIdToName.images,'Finish Loading':groupIdToName.loading,'Receive Data':groupIdToName.loading,'Receive Response':groupIdToName.loading,'Send Request':groupIdToName.loading,'Run Microtasks':groupIdToName.scripting,'Schedule Style Recalculation':groupIdToName.styleLayout,'Scroll':groupIdToName.compositing,'Task':groupIdToName.other,'Timer Fired':groupIdToName.scripting,'Install Timer':groupIdToName.scripting,'Remove Timer':groupIdToName.scripting,'Timestamp':groupIdToName.scripting,'Update Layer':groupIdToName.compositing,'Update Layer Tree':groupIdToName.compositing,'User Timing':groupIdToName.scripting,'Create WebSocket':groupIdToName.scripting,'Destroy WebSocket':groupIdToName.scripting,'Receive WebSocket Handshake':groupIdToName.scripting,'Send WebSocket Handshake':groupIdToName.scripting,'XHR Load':groupIdToName.scripting,'XHR Ready State Change':groupIdToName.scripting};module.exports={groupIdToName,taskToGroup};},{}],43:[function(require,module,exports){'use strict';const WebInspector=require('../web-inspector');const ConsoleQuieter=require('../console-quieter');const TimelineModelTreeView=require('devtools-timeline-model/lib/timeline-model-treeview.js')(WebInspector);class TimelineModel{constructor(events){this.init(events);}
init(trace){this._tracingModel=new WebInspector.TracingModel(new WebInspector.TempFileBackingStorage('tracing'));this._timelineModel=new WebInspector.TimelineModel(WebInspector.TimelineUIUtils.visibleEventsFilter());let events;if(Array.isArray(trace)){events=trace;}
if(typeof trace==='string'){events=JSON.parse(trace);}
if(trace.hasOwnProperty('traceEvents')){events=trace.traceEvents;}
this._tracingModel.reset();try{ConsoleQuieter.mute({prefix:'timelineModel'});this._tracingModel.addEvents(events);this._tracingModel.tracingComplete();this._timelineModel.setEvents(this._tracingModel);}finally{ConsoleQuieter.unmuteAndFlush();}
return this;}
_createAggregator(){return WebInspector.AggregatedTimelineTreeView.prototype._createAggregator();}
timelineModel(){return this._timelineModel;}
tracingModel(){return this._tracingModel;}
topDown(){const filters=[];filters.push(WebInspector.TimelineUIUtils.visibleEventsFilter());filters.push(new WebInspector.ExcludeTopLevelFilter());const nonessentialEvents=[WebInspector.TimelineModel.RecordType.EventDispatch,WebInspector.TimelineModel.RecordType.FunctionCall,WebInspector.TimelineModel.RecordType.TimerFire];filters.push(new WebInspector.ExclusiveNameFilter(nonessentialEvents));const topDown=WebInspector.TimelineProfileTree.buildTopDown(this._timelineModel.mainThreadEvents(),filters,0,Infinity,WebInspector.TimelineAggregator.eventId);return topDown;}
bottomUp(){const topDown=this.topDown();const noGrouping=WebInspector.TimelineAggregator.GroupBy.None;const noGroupAggregator=this._createAggregator().groupFunction(noGrouping);return WebInspector.TimelineProfileTree.buildBottomUp(topDown,noGroupAggregator);}
bottomUpGroupBy(grouping){const topDown=this.topDown();const groupSetting=WebInspector.TimelineAggregator.GroupBy[grouping];const groupingAggregator=this._createAggregator().groupFunction(groupSetting);const bottomUpGrouped=WebInspector.TimelineProfileTree.buildBottomUp(topDown,groupingAggregator);new TimelineModelTreeView(bottomUpGrouped).sortingChanged('self','desc');return bottomUpGrouped;}
frameModel(){const mapper=event=>WebInspector.TimelineUIUtils.eventStyle(event).category.name;const frameModel=new WebInspector.TimelineFrameModel(mapper);frameModel.addTraceEvents({},this._timelineModel.inspectedTargetEvents(),this._timelineModel.sessionId()||'');return frameModel;}
filmStripModel(){return new WebInspector.FilmStripModel(this._tracingModel);}
interactionModel(){const irModel=new WebInspector.TimelineIRModel();irModel.populate(this._timelineModel);return irModel;}}
module.exports=TimelineModel;},{"../console-quieter":22,"../web-inspector":47,"devtools-timeline-model/lib/timeline-model-treeview.js":135}],44:[function(require,module,exports){'use strict';const log=require('lighthouse-logger');function findValueInMetricsAuditFn(metricName){return auditResults=>{const metricsAudit=auditResults.metrics;if(!metricsAudit||!metricsAudit.details||!metricsAudit.details.items)return;const values=metricsAudit.details.items[0];return values&&values[metricName];};}
class Metrics{constructor(traceEvents,auditResults){this._traceEvents=traceEvents;this._auditResults=auditResults;}
static get metricsDefinitions(){return[{name:'Navigation Start',id:'navstart',getTs:findValueInMetricsAuditFn('observedNavigationStartTs'),getTiming:findValueInMetricsAuditFn('observedNavigationStart')},{name:'First Contentful Paint',id:'ttfcp',getTs:findValueInMetricsAuditFn('observedFirstContentfulPaintTs'),getTiming:findValueInMetricsAuditFn('observedFirstContentfulPaint')},{name:'First Meaningful Paint',id:'ttfmp',getTs:findValueInMetricsAuditFn('observedFirstMeaningfulPaintTs'),getTiming:findValueInMetricsAuditFn('observedFirstMeaningfulPaint')},{name:'Speed Index',id:'si',getTs:findValueInMetricsAuditFn('observedSpeedIndexTs'),getTiming:findValueInMetricsAuditFn('observedSpeedIndex')},{name:'First Visual Change',id:'fv',getTs:findValueInMetricsAuditFn('observedFirstVisualChangeTs'),getTiming:findValueInMetricsAuditFn('observedFirstVisualChange')},{name:'Visually Complete 100%',id:'vc100',getTs:findValueInMetricsAuditFn('observedLastVisualChangeTs'),getTiming:findValueInMetricsAuditFn('observedLastVisualChange')},{name:'First CPU Idle',id:'ttfi',getTs:findValueInMetricsAuditFn('firstCPUIdleTs'),getTiming:findValueInMetricsAuditFn('firstCPUIdle')},{name:'Interactive',id:'tti',getTs:findValueInMetricsAuditFn('interactiveTs'),getTiming:findValueInMetricsAuditFn('interactive')},{name:'End of Trace',id:'eot',getTs:findValueInMetricsAuditFn('observedTraceEndTs'),getTiming:findValueInMetricsAuditFn('observedTraceEnd')},{name:'On Load',id:'onload',getTs:findValueInMetricsAuditFn('observedLoadTs'),getTiming:findValueInMetricsAuditFn('observedLoad')},{name:'DOM Content Loaded',id:'dcl',getTs:findValueInMetricsAuditFn('observedDomContentLoadedTs'),getTiming:findValueInMetricsAuditFn('observedDomContentLoaded')}];}
gatherMetrics(){const metricDfns=Metrics.metricsDefinitions;const resolvedMetrics=[];metricDfns.forEach(metric=>{try{resolvedMetrics.push({id:metric.id,name:metric.name,ts:metric.getTs(this._auditResults)});}catch(e){log.error('pwmetrics-events',`${metric.name} timestamp not found: ${e.message}`);}});return resolvedMetrics;}
identifyNavigationStartEvt(metrics){const navStartMetric=metrics.find(e=>e.id==='navstart');if(!navStartMetric)return;this._navigationStartEvt=this._traceEvents.find(e=>e.name==='navigationStart'&&e.ts===navStartMetric.ts);}
synthesizeEventPair(metric){const eventBase={pid:this._navigationStartEvt.pid,tid:this._navigationStartEvt.tid,cat:'blink.user_timing',name:metric.name,args:{},id:`0x${(Math.random()*1000000|0).toString(16)}`};const fakeMeasureStartEvent=Object.assign({},eventBase,{ts:this._navigationStartEvt.ts,ph:'b'});const fakeMeasureEndEvent=Object.assign({},eventBase,{ts:metric.ts,ph:'e'});return[fakeMeasureStartEvent,fakeMeasureEndEvent];}
generateFakeEvents(){const fakeEvents=[];const metrics=this.gatherMetrics();if(metrics.length===0){log.error('metrics-events','Metrics collection had errors, not synthetizing trace events');return[];}
this.identifyNavigationStartEvt(metrics);if(!this._navigationStartEvt){log.error('pwmetrics-events','Reference navigationStart not found');return[];}
metrics.forEach(metric=>{if(metric.id==='navstart'){return;}
if(!metric.ts){log.error('pwmetrics-events',`(${metric.name}) missing timestamp. Skipping…`);return;}
log.verbose('pwmetrics-events',`Sythesizing trace events for ${metric.name}`);fakeEvents.push(...this.synthesizeEventPair(metric));});return fakeEvents;}}
module.exports=Metrics;},{"lighthouse-logger":143}],45:[function(require,module,exports){'use strict';const WebInspector=require('../web-inspector');class TraceParser{constructor(){this.traceEvents=[];this.tracingModel={reset:()=>this._reset(),addEvents:evts=>this._addEvents(evts)};const delegateMock={loadingProgress:()=>{},loadingStarted:()=>{},loadingComplete:success=>{if(!success)throw new Error('Parsing problem');}};this.loader=new WebInspector.TimelineLoader(this.tracingModel,delegateMock);}
_reset(){this.traceEvents=[];}
_addEvents(evts){this.traceEvents.push(...evts);}
parseChunk(data){this.loader.write(data);}
getTrace(){return{traceEvents:this.traceEvents};}}
module.exports=TraceParser;},{"../web-inspector":47}],46:[function(require,module,exports){'use strict';const BASE_RESPONSE_LATENCY=16;const SCHEDULABLE_TASK_TITLE='TaskQueueManager::ProcessTaskFromWorkQueue';const SCHEDULABLE_TASK_TITLE_ALT='ThreadControllerImpl::DoWork';class TraceProcessor{static _riskPercentiles(durations,totalTime,percentiles,clippedLength=0){let busyTime=0;for(let i=0;i<durations.length;i++){busyTime+=durations[i];}
busyTime-=clippedLength;let completedTime=totalTime-busyTime;let duration=0;let cdfTime=completedTime;const results=[];let durationIndex=-1;let remainingCount=durations.length+1;if(clippedLength>0){remainingCount--;}
for(const percentile of percentiles){const percentileTime=percentile*totalTime;while(cdfTime<percentileTime&&durationIndex<durations.length-1){completedTime+=duration;remainingCount-=duration<0?-1:1;if(clippedLength>0&&clippedLength<durations[durationIndex+1]){duration=-clippedLength;clippedLength=0;}else{durationIndex++;duration=durations[durationIndex];}
cdfTime=completedTime+Math.abs(duration)*remainingCount;}
results.push({percentile,time:Math.max(0,(percentileTime-completedTime)/remainingCount)+
BASE_RESPONSE_LATENCY});}
return results;}
static getRiskToResponsiveness(events,startTime,endTime,percentiles=[0.5,0.75,0.9,0.99,1])
{const totalTime=endTime-startTime;percentiles.sort((a,b)=>a-b);const ret=TraceProcessor.getMainThreadTopLevelEventDurations(events,startTime,endTime);return TraceProcessor._riskPercentiles(ret.durations,totalTime,percentiles,ret.clippedLength);}
static getMainThreadTopLevelEventDurations(topLevelEvents,startTime=0,endTime=Infinity){const durations=[];let clippedLength=0;for(const event of topLevelEvents){if(event.end<startTime||event.start>endTime){continue;}
let duration=event.duration;let eventStart=event.start;if(eventStart<startTime){eventStart=startTime;duration=event.end-startTime;}
if(event.end>endTime){clippedLength=duration-(endTime-eventStart);}
durations.push(duration);}
durations.sort((a,b)=>a-b);return{durations,clippedLength};}
static getMainThreadTopLevelEvents(tabTrace,startTime=0,endTime=Infinity){const topLevelEvents=[];for(const event of tabTrace.mainThreadEvents){if(!TraceProcessor.isScheduleableTask(event)||!event.dur)continue;const start=(event.ts-tabTrace.navigationStartEvt.ts)/1000;const end=(event.ts+event.dur-tabTrace.navigationStartEvt.ts)/1000;if(start>endTime||end<startTime)continue;topLevelEvents.push({start,end,duration:event.dur/1000});}
if(!topLevelEvents.length){throw new Error('Could not find any top level events');}
return topLevelEvents;}
static isScheduleableTask(evt){return evt.name===SCHEDULABLE_TASK_TITLE||evt.name===SCHEDULABLE_TASK_TITLE_ALT;}}
module.exports=TraceProcessor;},{}],47:[function(require,module,exports){(function(global){'use strict';module.exports=function(){if(global.WebInspector){return global.WebInspector;}
if(global.self!==global){global.self=global;}
if(typeof global.window==='undefined'){global.window=global;}
global.Node={ELEMENT_NODE:1,TEXT_NODE:3};global.CSSAgent={};global.CSSAgent.StyleSheetOrigin={INJECTED:'injected',USER_AGENT:'user-agent',INSPECTOR:'inspector',REGULAR:'regular'};global.CSS={};global.CSS.supports=()=>true;const _setImmediate=global.setImmediate;global.Runtime=global.Runtime||{};global.Runtime.experiments=global.Runtime.experiments||{};global.Runtime.experiments.isEnabled=_=>false;const _queryParam=global.Runtime.queryParam;global.Runtime.queryParam=function(arg){switch(arg){case'remoteFrontend':return false;case'ws':return false;default:{if(_queryParam){return _queryParam.call(global.Runtime,arg);}
throw new Error('Mock queryParam case not implemented.');}}};global.TreeElement={};global.WorkerRuntime={};global.Protocol={Agents(){}};global.WebInspector={};const WebInspector=global.WebInspector;WebInspector._moduleSettings={cacheDisabled:{addChangeListener(){},get(){return false;}},monitoringXHREnabled:{addChangeListener(){},get(){return false;}},showNativeFunctionsInJSProfile:{addChangeListener(){},get(){return true;}}};WebInspector.moduleSetting=function(settingName){return this._moduleSettings[settingName];};global.NetworkAgent={RequestMixedContentType:{Blockable:'blockable',OptionallyBlockable:'optionally-blockable',None:'none'},BlockedReason:{CSP:'csp',MixedContent:'mixed-content',Origin:'origin',Inspector:'inspector',Other:'other'},InitiatorType:{Other:'other',Parser:'parser',Redirect:'redirect',Script:'script'}};global.SecurityAgent={SecurityState:{Unknown:'unknown',Neutral:'neutral',Insecure:'insecure',Warning:'warning',Secure:'secure',Info:'info'}};global.PageAgent={ResourceType:{Document:'document',Stylesheet:'stylesheet',Image:'image',Media:'media',Font:'font',Script:'script',TextTrack:'texttrack',XHR:'xhr',Fetch:'fetch',EventSource:'eventsource',WebSocket:'websocket',Manifest:'manifest',Other:'other'}};require('chrome-devtools-frontend/front_end/common/Object.js');require('chrome-devtools-frontend/front_end/common/ParsedURL.js');require('chrome-devtools-frontend/front_end/common/ResourceType.js');require('chrome-devtools-frontend/front_end/common/UIString.js');require('chrome-devtools-frontend/front_end/platform/utilities.js');require('chrome-devtools-frontend/front_end/sdk/Target.js');require('chrome-devtools-frontend/front_end/sdk/TargetManager.js');require('chrome-devtools-frontend/front_end/sdk/NetworkManager.js');require('chrome-devtools-frontend/front_end/sdk/NetworkRequest.js');WebInspector.targetManager={observeTargets(){},addEventListener(){}};WebInspector.settings={createSetting(){return{get(){return false;},addChangeListener(){}};}};WebInspector.console={error(){}};WebInspector.VBox=function(){};WebInspector.HBox=function(){};WebInspector.ViewportDataGrid=function(){};WebInspector.ViewportDataGridNode=function(){};global.WorkerRuntime.Worker=function(){};require('chrome-devtools-frontend/front_end/common/SegmentedRange.js');require('chrome-devtools-frontend/front_end/bindings/TempFile.js');require('chrome-devtools-frontend/front_end/sdk/TracingModel.js');require('chrome-devtools-frontend/front_end/sdk/ProfileTreeModel.js');require('chrome-devtools-frontend/front_end/timeline/TimelineUIUtils.js');require('chrome-devtools-frontend/front_end/timeline_model/TimelineJSProfile.js');require('chrome-devtools-frontend/front_end/sdk/CPUProfileDataModel.js');require('chrome-devtools-frontend/front_end/timeline_model/LayerTreeModel.js');require('chrome-devtools-frontend/front_end/timeline_model/TimelineModel.js');require('chrome-devtools-frontend/front_end/ui_lazy/SortableDataGrid.js');require('chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js');require('chrome-devtools-frontend/front_end/common/TextUtils.js');require('chrome-devtools-frontend/front_end/timeline/TimelineLoader.js');require('chrome-devtools-frontend/front_end/timeline_model/TimelineProfileTree.js');require('chrome-devtools-frontend/front_end/components_lazy/FilmStripModel.js');require('chrome-devtools-frontend/front_end/timeline_model/TimelineIRModel.js');require('chrome-devtools-frontend/front_end/timeline_model/TimelineFrameModel.js');WebInspector.DeferredTempFile=function(){};WebInspector.DeferredTempFile.prototype={write:function(){},finishWriting:function(){}};WebInspector.ConsoleMessage=function(){};WebInspector.ConsoleMessage.MessageSource={Network:'network'};WebInspector.ConsoleMessage.MessageLevel={Log:'log'};WebInspector.ConsoleMessage.MessageType={Log:'log'};WebInspector.NetworkLog=function(target){this._requests=new Map();target.networkManager.addEventListener(WebInspector.NetworkManager.Events.RequestStarted,this._onRequestStarted,this);};WebInspector.NetworkLog.prototype={requestForURL:function(url){return this._requests.get(url)||null;},_onRequestStarted:function(event){const request=event.data;if(this._requests.has(request.url)){return;}
this._requests.set(request.url,request);}};require('chrome-devtools-frontend/front_end/common/Color.js');const Dispatcher=WebInspector.NetworkDispatcher;const origUpdateRequest=Dispatcher.prototype._updateNetworkRequestWithRequest;Dispatcher.prototype._updateNetworkRequestWithRequest=function(netRecord,request){origUpdateRequest.apply(this,arguments);netRecord.isLinkPreload=Boolean(request.isLinkPreload);netRecord._isLinkPreload=Boolean(request.isLinkPreload);};WebInspector.NetworkManager.createWithFakeTarget=function(){const fakeNetworkAgent={enable(){},getResponseBody(){throw new Error('Use driver.getRequestContent() for network request content');}};const fakeConsoleModel={addMessage(){},target(){}};const fakeTarget={_modelByConstructor:new Map(),get consoleModel(){return fakeConsoleModel;},networkAgent(){return fakeNetworkAgent;},registerNetworkDispatcher(){},model(){}};fakeTarget.networkManager=new WebInspector.NetworkManager(fakeTarget);fakeTarget.networkLog=new WebInspector.NetworkLog(fakeTarget);WebInspector.NetworkLog.fromTarget=()=>{return fakeTarget.networkLog;};return fakeTarget.networkManager;};require('chrome-devtools-frontend/front_end/common/TextRange.js');require('chrome-devtools-frontend/front_end/sdk/CSSMatchedStyles.js');require('chrome-devtools-frontend/front_end/sdk/CSSMedia.js');require('chrome-devtools-frontend/front_end/sdk/CSSMetadata.js');require('chrome-devtools-frontend/front_end/sdk/CSSProperty.js');require('chrome-devtools-frontend/front_end/sdk/CSSRule.js');require('chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js');WebInspector.CSSMetadata._generatedProperties=[{name:'font-size',inherited:true}];global.setImmediate=_setImmediate;return WebInspector;}();}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"chrome-devtools-frontend/front_end/bindings/TempFile.js":99,"chrome-devtools-frontend/front_end/common/Color.js":100,"chrome-devtools-frontend/front_end/common/Object.js":101,"chrome-devtools-frontend/front_end/common/ParsedURL.js":102,"chrome-devtools-frontend/front_end/common/ResourceType.js":103,"chrome-devtools-frontend/front_end/common/SegmentedRange.js":104,"chrome-devtools-frontend/front_end/common/TextRange.js":105,"chrome-devtools-frontend/front_end/common/TextUtils.js":106,"chrome-devtools-frontend/front_end/common/UIString.js":107,"chrome-devtools-frontend/front_end/components_lazy/FilmStripModel.js":108,"chrome-devtools-frontend/front_end/platform/utilities.js":109,"chrome-devtools-frontend/front_end/sdk/CPUProfileDataModel.js":110,"chrome-devtools-frontend/front_end/sdk/CSSMatchedStyles.js":111,"chrome-devtools-frontend/front_end/sdk/CSSMedia.js":112,"chrome-devtools-frontend/front_end/sdk/CSSMetadata.js":113,"chrome-devtools-frontend/front_end/sdk/CSSProperty.js":114,"chrome-devtools-frontend/front_end/sdk/CSSRule.js":115,"chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js":116,"chrome-devtools-frontend/front_end/sdk/NetworkManager.js":117,"chrome-devtools-frontend/front_end/sdk/NetworkRequest.js":118,"chrome-devtools-frontend/front_end/sdk/ProfileTreeModel.js":119,"chrome-devtools-frontend/front_end/sdk/Target.js":120,"chrome-devtools-frontend/front_end/sdk/TargetManager.js":121,"chrome-devtools-frontend/front_end/sdk/TracingModel.js":122,"chrome-devtools-frontend/front_end/timeline/TimelineLoader.js":123,"chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js":124,"chrome-devtools-frontend/front_end/timeline/TimelineUIUtils.js":125,"chrome-devtools-frontend/front_end/timeline_model/LayerTreeModel.js":126,"chrome-devtools-frontend/front_end/timeline_model/TimelineFrameModel.js":127,"chrome-devtools-frontend/front_end/timeline_model/TimelineIRModel.js":128,"chrome-devtools-frontend/front_end/timeline_model/TimelineJSProfile.js":129,"chrome-devtools-frontend/front_end/timeline_model/TimelineModel.js":130,"chrome-devtools-frontend/front_end/timeline_model/TimelineProfileTree.js":131,"chrome-devtools-frontend/front_end/ui_lazy/SortableDataGrid.js":132}],48:[function(require,module,exports){'use strict';const ELLIPSIS='\u2026';const NBSP='\xa0';const PASS_THRESHOLD=0.75;const RATINGS={PASS:{label:'pass',minScore:PASS_THRESHOLD},AVERAGE:{label:'average',minScore:0.45},FAIL:{label:'fail'},ERROR:{label:'error'}};class Util{static get PASS_THRESHOLD(){return PASS_THRESHOLD;}
static get MS_DISPLAY_VALUE(){return`%10d${NBSP}ms`;}
static formatDisplayValue(displayValue){if(typeof displayValue==='string')return displayValue;if(!displayValue)return'';const replacementRegex=/%([0-9]*(\.[0-9]+)?d|s)/;const template=displayValue[0];if(typeof template!=='string'){return'UNKNOWN';}
let output=template;for(const replacement of displayValue.slice(1)){if(!replacementRegex.test(output)){console.warn('Too many replacements given');break;}
output=output.replace(replacementRegex,match=>{const granularity=Number(match.match(/[0-9.]+/))||1;return match==='%s'?replacement.toLocaleString():(Math.round(Number(replacement)/granularity)*granularity).toLocaleString();});}
if(replacementRegex.test(output)){console.warn('Not enough replacements given');}
return output;}
static showAsPassed(audit){switch(audit.scoreDisplayMode){case'manual':case'not-applicable':return true;case'error':case'informative':return false;case'numeric':case'binary':default:return Number(audit.score)===1;}}
static calculateRating(score,scoreDisplayMode){if(scoreDisplayMode==='manual'||scoreDisplayMode==='not-applicable'){return RATINGS.PASS.label;}else if(scoreDisplayMode==='error'){return RATINGS.ERROR.label;}else if(score===null){return RATINGS.FAIL.label;}
let rating=RATINGS.FAIL.label;if(score>=RATINGS.PASS.minScore){rating=RATINGS.PASS.label;}else if(score>=RATINGS.AVERAGE.minScore){rating=RATINGS.AVERAGE.label;}
return rating;}
static formatNumber(number,granularity=0.1){const coarseValue=Math.round(number/granularity)*granularity;return coarseValue.toLocaleString();}
static formatBytesToKB(size,granularity=0.1){const kbs=(Math.round(size/1024/granularity)*granularity).toLocaleString();return`${kbs}${NBSP}KB`;}
static formatMilliseconds(ms,granularity=10){const coarseTime=Math.round(ms/granularity)*granularity;return`${coarseTime.toLocaleString()}${NBSP}ms`;}
static formatSeconds(ms,granularity=0.1){const coarseTime=Math.round(ms/1000/granularity)*granularity;return`${coarseTime.toLocaleString()}${NBSP}s`;}
static formatDateTime(date){const options={month:'short',day:'numeric',year:'numeric',hour:'numeric',minute:'numeric',timeZoneName:'short'};let formatter=new Intl.DateTimeFormat('en-US',options);const tz=formatter.resolvedOptions().timeZone;if(!tz||tz.toLowerCase()==='etc/unknown'){options.timeZone='UTC';formatter=new Intl.DateTimeFormat('en-US',options);}
return formatter.format(new Date(date));}
static formatDuration(timeInMilliseconds){let timeInSeconds=timeInMilliseconds/1000;if(Math.round(timeInSeconds)===0){return'None';}
const parts=[];const unitLabels={d:60*60*24,h:60*60,m:60,s:1};Object.keys(unitLabels).forEach(label=>{const unit=unitLabels[label];const numberOfUnits=Math.floor(timeInSeconds/unit);if(numberOfUnits>0){timeInSeconds-=numberOfUnits*unit;parts.push(`${numberOfUnits}\xa0${label}`);}});return parts.join(' ');}
static getURLDisplayName(parsedUrl,options){options=options||{numPathParts:undefined,preserveQuery:undefined,preserveHost:undefined};const numPathParts=options.numPathParts!==undefined?options.numPathParts:2;const preserveQuery=options.preserveQuery!==undefined?options.preserveQuery:true;const preserveHost=options.preserveHost||false;let name;if(parsedUrl.protocol==='about:'||parsedUrl.protocol==='data:'){name=parsedUrl.href;}else{name=parsedUrl.pathname;const parts=name.split('/').filter(part=>part.length);if(numPathParts&&parts.length>numPathParts){name=ELLIPSIS+parts.slice(-1*numPathParts).join('/');}
if(preserveHost){name=`${parsedUrl.host}/${name.replace(/^\//,'')}`;}
if(preserveQuery){name=`${name}${parsedUrl.search}`;}}
const MAX_LENGTH=64;name=name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${ELLIPSIS}`);name=name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${ELLIPSIS}`);name=name.replace(/(\d{3})\d{6,}/g,`$1${ELLIPSIS}`);name=name.replace(/\u2026+/g,ELLIPSIS);if(name.length>MAX_LENGTH&&name.includes('?')){name=name.replace(/\?([^=]*)(=)?.*/,`?$1$2${ELLIPSIS}`);if(name.length>MAX_LENGTH){name=name.replace(/\?.*/,`?${ELLIPSIS}`);}}
if(name.length>MAX_LENGTH){const dotIndex=name.lastIndexOf('.');if(dotIndex>=0){name=name.slice(0,MAX_LENGTH-1-(name.length-dotIndex))+`${ELLIPSIS}${name.slice(dotIndex)}`;}else{name=name.slice(0,MAX_LENGTH-1)+ELLIPSIS;}}
return name;}
static parseURL(url){const parsedUrl=new URL(url);return{file:Util.getURLDisplayName(parsedUrl),hostname:parsedUrl.hostname,origin:parsedUrl.origin};}
static chainDuration(startTime,endTime){return Util.formatNumber((endTime-startTime)*1000);}
static getEnvironmentDisplayValues(settings){const emulationDesc=Util.getEmulationDescriptions(settings);return[{name:'Device',description:emulationDesc.deviceEmulation},{name:'Network throttling',description:emulationDesc.networkThrottling},{name:'CPU throttling',description:emulationDesc.cpuThrottling}];}
static getEmulationDescriptions(settings){let cpuThrottling;let networkThrottling;let summary;const throttling=settings.throttling;switch(settings.throttlingMethod){case'provided':cpuThrottling='Provided by environment';networkThrottling='Provided by environment';summary='No throttling applied';break;case'devtools':{const{cpuSlowdownMultiplier,requestLatencyMs}=throttling;cpuThrottling=`${Util.formatNumber(cpuSlowdownMultiplier)}x slowdown (DevTools)`;networkThrottling=`${Util.formatNumber(requestLatencyMs)}${NBSP}ms HTTP RTT, `+`${Util.formatNumber(throttling.downloadThroughputKbps)}${NBSP}Kbps down, `+`${Util.formatNumber(throttling.uploadThroughputKbps)}${NBSP}Kbps up (DevTools)`;summary='Throttled Fast 3G network';break;}
case'simulate':{const{cpuSlowdownMultiplier,rttMs,throughputKbps}=throttling;cpuThrottling=`${Util.formatNumber(cpuSlowdownMultiplier)}x slowdown (Simulated)`;networkThrottling=`${Util.formatNumber(rttMs)}${NBSP}ms TCP RTT, `+`${Util.formatNumber(throughputKbps)}${NBSP}Kbps throughput (Simulated)`;summary='Simulated Fast 3G network';break;}
default:cpuThrottling='Unknown';networkThrottling='Unknown';summary='Unknown';}
const deviceEmulation=settings.disableDeviceEmulation?'No emulation':'Emulated Nexus 5X';return{deviceEmulation,cpuThrottling,networkThrottling,summary:`${deviceEmulation}, ${summary}`};}}
if(typeof module!=='undefined'&&module.exports){module.exports=Util;}else{self.Util=Util;}},{}],49:[function(require,module,exports){'use strict';const htmlReportAssets=require('./html/html-report-assets');class ReportGenerator{static replaceStrings(source,replacements){if(replacements.length===0){return source;}
const firstReplacement=replacements[0];const nextReplacements=replacements.slice(1);return source.split(firstReplacement.search).map(part=>ReportGenerator.replaceStrings(part,nextReplacements)).join(firstReplacement.replacement);}
static generateReportHtml(lhr){const sanitizedJson=JSON.stringify(lhr).replace(/</g,'\\u003c').replace(/\u2028/g,'\\u2028').replace(/\u2029/g,'\\u2029');const sanitizedJavascript=htmlReportAssets.REPORT_JAVASCRIPT.replace(/<\//g,'\\u003c/');return ReportGenerator.replaceStrings(htmlReportAssets.REPORT_TEMPLATE,[{search:'%%LIGHTHOUSE_JSON%%',replacement:sanitizedJson},{search:'%%LIGHTHOUSE_JAVASCRIPT%%',replacement:sanitizedJavascript},{search:'/*%%LIGHTHOUSE_CSS%%*/',replacement:htmlReportAssets.REPORT_CSS},{search:'%%LIGHTHOUSE_TEMPLATES%%',replacement:htmlReportAssets.REPORT_TEMPLATES}]);}
static generateReportCSV(lhr){const CRLF='\r\n';const separator=',';const escape=value=>`"${value.replace(/"/g,'""')}"`;const header=['category','name','title','type','score'];const table=Object.values(lhr.categories).map(category=>{return category.auditRefs.map(auditRef=>{const audit=lhr.audits[auditRef.id];const numericScore=audit.score===null?-1:audit.score;return[category.title,audit.id,audit.title,audit.scoreDisplayMode,numericScore].map(value=>value.toString()).map(escape);});});const flattedTable=[].concat(...table);return[header,...flattedTable].map(row=>row.join(separator)).join(CRLF);}
static generateReport(lhr,outputModes){const outputAsArray=Array.isArray(outputModes);if(typeof outputModes==='string')outputModes=[outputModes];const output=outputModes.map(outputMode=>{if(outputMode==='html'){return ReportGenerator.generateReportHtml(lhr);}
if(outputMode==='csv'){return ReportGenerator.generateReportCSV(lhr);}
if(outputMode==='json'){return JSON.stringify(lhr,null,2);}
throw new Error('Invalid output mode: '+outputMode);});return outputAsArray?output:output[0];}}
module.exports=ReportGenerator;},{"./html/html-report-assets":58}],50:[function(require,module,exports){(function(process,__dirname){'use strict';const isDeepEqual=require('lodash.isequal');const Driver=require('./gather/driver.js');const GatherRunner=require('./gather/gather-runner');const ReportScoring=require('./scoring');const Audit=require('./audits/audit');const log=require('lighthouse-logger');const assetSaver=require('./lib/asset-saver');const path=require('path');const URL=require('./lib/url-shim');const Sentry=require('./lib/sentry');const generateReport=require('./report/report-generator').generateReport;const Connection=require('./gather/connections/connection.js');class Runner{static async run(connection,opts){try{const startTime=Date.now();const settings=opts.config.settings;const lighthouseRunWarnings=[];const rawRequestedUrl=opts.url;if(typeof rawRequestedUrl!=='string'||rawRequestedUrl.length===0){throw new Error(`You must provide a url to the runner. '${rawRequestedUrl}' provided.`);}
let parsedURL;try{parsedURL=new URL(opts.url);}catch(e){throw new Error('The url provided should have a proper protocol and hostname.');}
const sentryContext=Sentry.getContext();Sentry.captureBreadcrumb({message:'Run started',category:'lifecycle',data:sentryContext&&sentryContext.extra});if(parsedURL.protocol!=='https:'&&parsedURL.hostname!=='localhost'){log.warn('Lighthouse','The URL provided should be on HTTPS');log.warn('Lighthouse','Performance stats will be skewed redirecting from HTTP to HTTPS.');}
const requestedUrl=parsedURL.href;let artifacts;if(settings.auditMode&&!settings.gatherMode){const path=Runner._getArtifactsPath(settings);artifacts=await assetSaver.loadArtifacts(path);}else{artifacts=await Runner._gatherArtifactsFromBrowser(requestedUrl,opts,connection);if(settings.gatherMode){const path=Runner._getArtifactsPath(settings);await assetSaver.saveArtifacts(artifacts,path);}}
if(settings.gatherMode&&!settings.auditMode)return;if(!opts.config.audits){throw new Error('No audits to evaluate.');}
const auditResults=await Runner._runAudits(settings,opts.config.audits,artifacts);log.log('status','Generating results...');if(artifacts.LighthouseRunWarnings){lighthouseRunWarnings.push(...artifacts.LighthouseRunWarnings);}
const lighthouseVersion=require('../package.json').version;const resultsById={};for(const audit of auditResults){resultsById[audit.id]=audit;}
let categories={};if(opts.config.categories){categories=ReportScoring.scoreAllCategories(opts.config.categories,resultsById);}
const lhr={userAgent:artifacts.UserAgent,lighthouseVersion,fetchTime:artifacts.fetchTime,requestedUrl:requestedUrl,finalUrl:artifacts.URL.finalUrl,runWarnings:lighthouseRunWarnings,audits:resultsById,configSettings:settings,categories,categoryGroups:opts.config.groups,timing:{total:Date.now()-startTime}};const report=generateReport(lhr,settings.output);return{lhr,artifacts,report};}catch(err){await Sentry.captureException(err,{level:'fatal'});throw err;}}
static async _gatherArtifactsFromBrowser(requestedUrl,runnerOpts,connection){if(!runnerOpts.config.passes){throw new Error('No browser artifacts are either provided or requested.');}
const driver=runnerOpts.driverMock||new Driver(connection);const gatherOpts={driver,requestedUrl,settings:runnerOpts.config.settings};const artifacts=await GatherRunner.run(runnerOpts.config.passes,gatherOpts);return artifacts;}
static async _runAudits(settings,audits,artifacts){log.log('status','Analyzing and running audits...');artifacts=Object.assign({},Runner.instantiateComputedArtifacts(),artifacts);if(artifacts.settings){const overrides={gatherMode:undefined,auditMode:undefined,output:undefined};const normalizedGatherSettings=Object.assign({},artifacts.settings,overrides);const normalizedAuditSettings=Object.assign({},settings,overrides);if(!isDeepEqual(normalizedGatherSettings,normalizedAuditSettings)){throw new Error('Cannot change settings between gathering and auditing');}}
const auditResults=[];for(const auditDefn of audits){const auditResult=await Runner._runAudit(auditDefn,artifacts,settings);auditResults.push(auditResult);}
return auditResults;}
static async _runAudit(auditDefn,artifacts,settings){const audit=auditDefn.implementation;const status=`Evaluating: ${audit.meta.description}`;log.log('status',status);let auditResult;try{for(const artifactName of audit.meta.requiredArtifacts){const noArtifact=artifacts[artifactName]===undefined;const noTrace=artifactName==='traces'&&!artifacts.traces[Audit.DEFAULT_PASS];if(noArtifact||noTrace){log.warn('Runner',`${artifactName} gatherer, required by audit ${audit.meta.name}, did not run.`);throw new Error(`Required ${artifactName} gatherer did not run.`);}
if(artifacts[artifactName]instanceof Error){const artifactError=artifacts[artifactName];Sentry.captureException(artifactError,{tags:{gatherer:artifactName},level:'error'});log.warn('Runner',`${artifactName} gatherer, required by audit ${audit.meta.name},`+` encountered an error: ${artifactError.message}`);const error=new Error(`Required ${artifactName} gatherer encountered an error: ${artifactError.message}`);error.expected=true;throw error;}}
const auditOptions=Object.assign({},audit.defaultOptions,auditDefn.options);const product=await audit.audit(artifacts,{options:auditOptions,settings:settings});auditResult=Audit.generateAuditResult(audit,product);}catch(err){log.warn(audit.meta.name,`Caught exception: ${err.message}`);if(err.fatal){throw err;}
Sentry.captureException(err,{tags:{audit:audit.meta.name},level:'error'});const errorMessage=err.friendlyMessage?`${err.friendlyMessage} (${err.message})`:`Audit error: ${err.message}`;auditResult=Audit.generateErrorAuditResult(audit,errorMessage);}
log.verbose('statusEnd',status);return auditResult;}
static getAuditList(){const ignoredFiles=['audit.js','violation-audit.js','accessibility/axe-audit.js','multi-check-audit.js','byte-efficiency/byte-efficiency-audit.js','manual/manual-audit.js'];const fileList=[...["accessibility","audit.js","bootup-time.js","byte-efficiency","content-width.js","critical-request-chains.js","deprecations.js","dobetterweb","errors-in-console.js","estimated-input-latency.js","first-contentful-paint.js","first-cpu-idle.js","first-meaningful-paint.js","font-display.js","image-aspect-ratio.js","interactive.js","is-on-https.js","load-fast-enough-for-pwa.js","mainthread-work-breakdown.js","manifest-short-name-length.js","manual","metrics.js","mixed-content.js","multi-check-audit.js","network-requests.js","predictive-perf.js","redirects-http.js","redirects.js","screenshot-thumbnails.js","seo","service-worker.js","speed-index.js","splash-screen.js","themed-omnibox.js","time-to-first-byte.js","user-timings.js","uses-rel-preconnect.js","uses-rel-preload.js","viewport.js","violation-audit.js","webapp-install-banner.js","without-javascript.js","works-offline.js"],...["appcache-manifest.js","dom-size.js","external-anchors-use-rel-noopener.js","geolocation-on-start.js","no-document-write.js","no-mutation-events.js","no-vulnerable-libraries.js","no-websql.js","notification-on-start.js","password-inputs-can-be-pasted-into.js","uses-http2.js","uses-passive-event-listeners.js"].map(f=>`dobetterweb/${f}`),...["canonical.js","font-size.js","hreflang.js","http-status-code.js","is-crawlable.js","link-text.js","manual","meta-description.js","plugins.js","robots-txt.js"].map(f=>`seo/${f}`),...["mobile-friendly.js","structured-data.js"].map(f=>`seo/manual/${f}`),...["accesskeys.js","aria-allowed-attr.js","aria-required-attr.js","aria-required-children.js","aria-required-parent.js","aria-roles.js","aria-valid-attr-value.js","aria-valid-attr.js","audio-caption.js","axe-audit.js","button-name.js","bypass.js","color-contrast.js","definition-list.js","dlitem.js","document-title.js","duplicate-id.js","frame-title.js","html-has-lang.js","html-lang-valid.js","image-alt.js","input-image-alt.js","label.js","layout-table.js","link-name.js","list.js","listitem.js","manual","meta-refresh.js","meta-viewport.js","object-alt.js","tabindex.js","td-headers-attr.js","th-has-data-cells.js","valid-lang.js","video-caption.js","video-description.js"].map(f=>`accessibility/${f}`),...["custom-controls-labels.js","custom-controls-roles.js","focus-traps.js","focusable-controls.js","heading-levels.js","logical-tab-order.js","managed-focus.js","offscreen-content-hidden.js","use-landmarks.js","visual-order-follows-dom.js"].map(f=>`accessibility/manual/${f}`),...["byte-efficiency-audit.js","efficient-animated-content.js","offscreen-images.js","render-blocking-resources.js","total-byte-weight.js","unminified-css.js","unminified-javascript.js","unused-css-rules.js","unused-javascript.js","uses-long-cache-ttl.js","uses-optimized-images.js","uses-responsive-images.js","uses-text-compression.js","uses-webp-images.js"].map(f=>`byte-efficiency/${f}`),...["manual-audit.js","pwa-cross-browser.js","pwa-each-page-has-url.js","pwa-page-transitions.js"].map(f=>`manual/${f}`)];return fileList.filter(f=>{return/\.js$/.test(f)&&!ignoredFiles.includes(f);}).sort();}
static getGathererList(){const fileList=[...["accessibility.js","cache-contents.js","chrome-console-messages.js","css-usage.js","dobetterweb","fonts.js","gatherer.js","html-without-javascript.js","http-redirect.js","image-usage.js","js-usage.js","manifest.js","mixed-content.js","offline.js","runtime-exceptions.js","scripts.js","seo","service-worker.js","start-url.js","theme-color.js","viewport-dimensions.js","viewport.js"],...["canonical.js","crawlable-links.js","embedded-content.js","font-size.js","hreflang.js","meta-description.js","meta-robots.js","robots-txt.js"].map(f=>`seo/${f}`),...["all-event-listeners.js","anchors-with-no-rel-noopener.js","appcache.js","domstats.js","js-libraries.js","optimized-images.js","password-inputs-with-prevented-paste.js","response-compression.js","tags-blocking-first-paint.js","websql.js"].map(f=>`dobetterweb/${f}`)];return fileList.filter(f=>/\.js$/.test(f)&&f!=='gatherer.js').sort();}
static getComputedGathererList(){const filenamesToSkip=['computed-artifact.js','metrics','metrics/lantern-metric.js','metrics/metric.js'];const fileList=[...["computed-artifact.js","critical-request-chains.js","dtm-model.js","load-simulator.js","main-resource.js","manifest-values.js","metrics","network-analysis.js","network-records.js","network-throughput.js","page-dependency-graph.js","pushed-requests.js","screenshots.js","speedline.js","trace-of-tab.js"],...["estimated-input-latency.js","first-contentful-paint.js","first-cpu-idle.js","first-meaningful-paint.js","interactive.js","lantern-estimated-input-latency.js","lantern-first-contentful-paint.js","lantern-first-cpu-idle.js","lantern-first-meaningful-paint.js","lantern-interactive.js","lantern-metric.js","lantern-speed-index.js","metric.js","speed-index.js"].map(f=>`metrics/${f}`)];return fileList.filter(f=>/\.js$/.test(f)&&!filenamesToSkip.includes(f)).sort();}
static instantiateComputedArtifacts(){const computedArtifacts={};Runner.getComputedGathererList().forEach(function(filename){filename=filename.replace(/\.js$/,'');const ArtifactClass=require('./gather/computed/'+filename);const artifact=new ArtifactClass(computedArtifacts);computedArtifacts['request'+artifact.name]=artifact.request.bind(artifact);});return computedArtifacts;}
static resolvePlugin(plugin,configDir,category){try{return require.resolve(plugin);}catch(e){}
const cwdPath=path.resolve(process.cwd(),plugin);try{return require.resolve(cwdPath);}catch(e){}
const errorString='Unable to locate '+(category?`${category}: `:'')+`${plugin} (tried to require() from '${__dirname}' and load from '${cwdPath}'`;if(!configDir){throw new Error(errorString+')');}
const relativePath=path.resolve(configDir,plugin);try{return require.resolve(relativePath);}catch(requireError){}
throw new Error(errorString+` and '${relativePath}')`);}
static _getArtifactsPath(settings){const{auditMode,gatherMode}=settings;if(typeof auditMode==='string')return path.resolve(process.cwd(),auditMode);if(typeof gatherMode==='string')return path.resolve(process.cwd(),gatherMode);return path.join(process.cwd(),'latest-run');}}
module.exports=Runner;}).call(this,require('_process'),"/../lighthouse-core");},{"../package.json":154,"./audits/audit":2,"./gather/connections/connection.js":14,"./gather/driver.js":17,"./gather/gather-runner":18,"./lib/asset-saver":21,"./lib/sentry":39,"./lib/url-shim":"url","./report/report-generator":49,"./scoring":51,"_process":77,"lighthouse-logger":143,"lodash.isequal":144,"path":75}],51:[function(require,module,exports){'use strict';const Audit=require('./audits/audit');const clampTo2Decimals=val=>Math.round(val*100)/100;class ReportScoring{static arithmeticMean(items){items=items.filter(item=>item.weight>0);if(items.some(item=>item.score===null))return null;const results=items.reduce((result,item)=>{const score=item.score;const weight=item.weight;return{weight:result.weight+weight,sum:result.sum+score*weight};},{weight:0,sum:0});return clampTo2Decimals(results.sum/results.weight||0);}
static scoreAllCategories(configCategories,resultsByAuditId){const scoredCategories={};for(const[categoryId,configCategory]of Object.entries(configCategories)){const auditRefs=configCategory.auditRefs.map(configMember=>{const member={...configMember};const result=resultsByAuditId[member.id];if(result.scoreDisplayMode===Audit.SCORING_MODES.NOT_APPLICABLE||result.scoreDisplayMode===Audit.SCORING_MODES.INFORMATIVE||result.scoreDisplayMode===Audit.SCORING_MODES.MANUAL){member.weight=0;}
return member;});const scores=auditRefs.map(auditRef=>({score:resultsByAuditId[auditRef.id].score,weight:auditRef.weight}));const score=ReportScoring.arithmeticMean(scores);scoredCategories[categoryId]={...configCategory,auditRefs,id:categoryId,score};}
return scoredCategories;}}
module.exports=ReportScoring;},{"./audits/audit":2}],52:[function(require,module,exports){'use strict';const RawProtocol=require('../../../lighthouse-core/gather/connections/raw');const Runner=require('../../../lighthouse-core/runner');const Config=require('../../../lighthouse-core/config/config');const defaultConfig=require('../../../lighthouse-core/config/default-config.js');const log=require('lighthouse-logger');window.runLighthouseForConnection=function(connection,url,options,categoryIDs,updateBadgeFn=function(){}){const config=new Config({extends:'lighthouse:default',settings:{onlyCategories:categoryIDs}},options.flags);const runOptions=Object.assign({},options,{url,config});updateBadgeFn(url);return Runner.run(connection,runOptions).then(result=>{updateBadgeFn();return result;}).catch(err=>{updateBadgeFn();throw err;});};window.runLighthouseInWorker=function(port,url,options,categoryIDs){log.setLevel('info');const connection=new RawProtocol(port);return window.runLighthouseForConnection(connection,url,options,categoryIDs);};window.getDefaultCategories=function(){return Config.getCategories(defaultConfig);};window.listenForStatus=function(listenCallback){log.events.addListener('status',listenCallback);};},{"../../../lighthouse-core/config/config":7,"../../../lighthouse-core/config/default-config.js":9,"../../../lighthouse-core/gather/connections/raw":15,"../../../lighthouse-core/runner":50,"lighthouse-logger":143}],53:[function(require,module,exports){(function(global){'use strict';function compare(a,b){if(a===b){return 0;}
var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break;}}
if(x<y){return-1;}
if(y<x){return 1;}
return 0;}
function isBuffer(b){if(global.Buffer&&typeof global.Buffer.isBuffer==='function'){return global.Buffer.isBuffer(b);}
return!!(b!=null&&b._isBuffer);}
var util=require('util/');var hasOwn=Object.prototype.hasOwnProperty;var pSlice=Array.prototype.slice;var functionsHaveNames=function(){return function foo(){}.name==='foo';}();function pToString(obj){return Object.prototype.toString.call(obj);}
function isView(arrbuf){if(isBuffer(arrbuf)){return false;}
if(typeof global.ArrayBuffer!=='function'){return false;}
if(typeof ArrayBuffer.isView==='function'){return ArrayBuffer.isView(arrbuf);}
if(!arrbuf){return false;}
if(arrbuf instanceof DataView){return true;}
if(arrbuf.buffer&&arrbuf.buffer instanceof ArrayBuffer){return true;}
return false;}
var assert=module.exports=ok;var regex=/\s*function\s+([^\(\s]*)\s*/;function getName(func){if(!util.isFunction(func)){return;}
if(functionsHaveNames){return func.name;}
var str=func.toString();var match=str.match(regex);return match&&match[1];}
assert.AssertionError=function AssertionError(options){this.name='AssertionError';this.actual=options.actual;this.expected=options.expected;this.operator=options.operator;if(options.message){this.message=options.message;this.generatedMessage=false;}else{this.message=getMessage(this);this.generatedMessage=true;}
var stackStartFunction=options.stackStartFunction||fail;if(Error.captureStackTrace){Error.captureStackTrace(this,stackStartFunction);}else{var err=new Error();if(err.stack){var out=err.stack;var fn_name=getName(stackStartFunction);var idx=out.indexOf('\n'+fn_name);if(idx>=0){var next_line=out.indexOf('\n',idx+1);out=out.substring(next_line+1);}
this.stack=out;}}};util.inherits(assert.AssertionError,Error);function truncate(s,n){if(typeof s==='string'){return s.length<n?s:s.slice(0,n);}else{return s;}}
function inspect(something){if(functionsHaveNames||!util.isFunction(something)){return util.inspect(something);}
var rawname=getName(something);var name=rawname?': '+rawname:'';return'[Function'+name+']';}
function getMessage(self){return truncate(inspect(self.actual),128)+' '+
self.operator+' '+
truncate(inspect(self.expected),128);}
function fail(actual,expected,message,operator,stackStartFunction){throw new assert.AssertionError({message:message,actual:actual,expected:expected,operator:operator,stackStartFunction:stackStartFunction});}
assert.fail=fail;function ok(value,message){if(!value)fail(value,true,message,'==',assert.ok);}
assert.ok=ok;assert.equal=function equal(actual,expected,message){if(actual!=expected)fail(actual,expected,message,'==',assert.equal);};assert.notEqual=function notEqual(actual,expected,message){if(actual==expected){fail(actual,expected,message,'!=',assert.notEqual);}};assert.deepEqual=function deepEqual(actual,expected,message){if(!_deepEqual(actual,expected,false)){fail(actual,expected,message,'deepEqual',assert.deepEqual);}};assert.deepStrictEqual=function deepStrictEqual(actual,expected,message){if(!_deepEqual(actual,expected,true)){fail(actual,expected,message,'deepStrictEqual',assert.deepStrictEqual);}};function _deepEqual(actual,expected,strict,memos){if(actual===expected){return true;}else if(isBuffer(actual)&&isBuffer(expected)){return compare(actual,expected)===0;}else if(util.isDate(actual)&&util.isDate(expected)){return actual.getTime()===expected.getTime();}else if(util.isRegExp(actual)&&util.isRegExp(expected)){return actual.source===expected.source&&actual.global===expected.global&&actual.multiline===expected.multiline&&actual.lastIndex===expected.lastIndex&&actual.ignoreCase===expected.ignoreCase;}else if((actual===null||typeof actual!=='object')&&(expected===null||typeof expected!=='object')){return strict?actual===expected:actual==expected;}else if(isView(actual)&&isView(expected)&&pToString(actual)===pToString(expected)&&!(actual instanceof Float32Array||actual instanceof Float64Array)){return compare(new Uint8Array(actual.buffer),new Uint8Array(expected.buffer))===0;}else if(isBuffer(actual)!==isBuffer(expected)){return false;}else{memos=memos||{actual:[],expected:[]};var actualIndex=memos.actual.indexOf(actual);if(actualIndex!==-1){if(actualIndex===memos.expected.indexOf(expected)){return true;}}
memos.actual.push(actual);memos.expected.push(expected);return objEquiv(actual,expected,strict,memos);}}
function isArguments(object){return Object.prototype.toString.call(object)=='[object Arguments]';}
function objEquiv(a,b,strict,actualVisitedObjects){if(a===null||a===undefined||b===null||b===undefined)
return false;if(util.isPrimitive(a)||util.isPrimitive(b))
return a===b;if(strict&&Object.getPrototypeOf(a)!==Object.getPrototypeOf(b))
return false;var aIsArgs=isArguments(a);var bIsArgs=isArguments(b);if(aIsArgs&&!bIsArgs||!aIsArgs&&bIsArgs)
return false;if(aIsArgs){a=pSlice.call(a);b=pSlice.call(b);return _deepEqual(a,b,strict);}
var ka=objectKeys(a);var kb=objectKeys(b);var key,i;if(ka.length!==kb.length)
return false;ka.sort();kb.sort();for(i=ka.length-1;i>=0;i--){if(ka[i]!==kb[i])
return false;}
for(i=ka.length-1;i>=0;i--){key=ka[i];if(!_deepEqual(a[key],b[key],strict,actualVisitedObjects))
return false;}
return true;}
assert.notDeepEqual=function notDeepEqual(actual,expected,message){if(_deepEqual(actual,expected,false)){fail(actual,expected,message,'notDeepEqual',assert.notDeepEqual);}};assert.notDeepStrictEqual=notDeepStrictEqual;function notDeepStrictEqual(actual,expected,message){if(_deepEqual(actual,expected,true)){fail(actual,expected,message,'notDeepStrictEqual',notDeepStrictEqual);}}
assert.strictEqual=function strictEqual(actual,expected,message){if(actual!==expected){fail(actual,expected,message,'===',assert.strictEqual);}};assert.notStrictEqual=function notStrictEqual(actual,expected,message){if(actual===expected){fail(actual,expected,message,'!==',assert.notStrictEqual);}};function expectedException(actual,expected){if(!actual||!expected){return false;}
if(Object.prototype.toString.call(expected)=='[object RegExp]'){return expected.test(actual);}
try{if(actual instanceof expected){return true;}}catch(e){}
if(Error.isPrototypeOf(expected)){return false;}
return expected.call({},actual)===true;}
function _tryBlock(block){var error;try{block();}catch(e){error=e;}
return error;}
function _throws(shouldThrow,block,expected,message){var actual;if(typeof block!=='function'){throw new TypeError('"block" argument must be a function');}
if(typeof expected==='string'){message=expected;expected=null;}
actual=_tryBlock(block);message=(expected&&expected.name?' ('+expected.name+').':'.')+(message?' '+message:'.');if(shouldThrow&&!actual){fail(actual,expected,'Missing expected exception'+message);}
var userProvidedMessage=typeof message==='string';var isUnwantedException=!shouldThrow&&util.isError(actual);var isUnexpectedException=!shouldThrow&&actual&&!expected;if(isUnwantedException&&userProvidedMessage&&expectedException(actual,expected)||isUnexpectedException){fail(actual,expected,'Got unwanted exception'+message);}
if(shouldThrow&&actual&&expected&&!expectedException(actual,expected)||!shouldThrow&&actual){throw actual;}}
assert.throws=function(block,error,message){_throws(true,block,error,message);};assert.doesNotThrow=function(block,error,message){_throws(false,block,error,message);};assert.ifError=function(err){if(err)throw err;};var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){if(hasOwn.call(obj,key))keys.push(key);}
return keys;};}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"util/":97}],54:[function(require,module,exports){'use strict';exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=='undefined'?Uint8Array:Array;var code='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i;}
revLookup['-'.charCodeAt(0)]=62;revLookup['_'.charCodeAt(0)]=63;function getLens(b64){var len=b64.length;if(len%4>0){throw new Error('Invalid string. Length must be a multiple of 4');}
var validLen=b64.indexOf('=');if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen];}
function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen;}
function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen;}
function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;var len=placeHoldersLen>0?validLen-4:validLen;for(var i=0;i<len;i+=4){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[curByte++]=tmp>>16&0xFF;arr[curByte++]=tmp>>8&0xFF;arr[curByte++]=tmp&0xFF;}
if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&0xFF;}
if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&0xFF;arr[curByte++]=tmp&0xFF;}
return arr;}
function tripletToBase64(num){return lookup[num>>18&0x3F]+
lookup[num>>12&0x3F]+
lookup[num>>6&0x3F]+
lookup[num&0x3F];}
function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16&0xFF0000)+(uint8[i+1]<<8&0xFF00)+(uint8[i+2]&0xFF);output.push(tripletToBase64(tmp));}
return output.join('');}
function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;var parts=[];var maxChunkLength=16383;for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength));}
if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+
lookup[tmp<<4&0x3F]+'==');}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+
lookup[tmp>>4&0x3F]+
lookup[tmp<<2&0x3F]+'=');}
return parts.join('');}},{}],55:[function(require,module,exports){},{}],56:[function(require,module,exports){(function(process,Buffer){'use strict';var assert=require('assert');var Zstream=require('pako/lib/zlib/zstream');var zlib_deflate=require('pako/lib/zlib/deflate.js');var zlib_inflate=require('pako/lib/zlib/inflate.js');var constants=require('pako/lib/zlib/constants');for(var key in constants){exports[key]=constants[key];}
exports.NONE=0;exports.DEFLATE=1;exports.INFLATE=2;exports.GZIP=3;exports.GUNZIP=4;exports.DEFLATERAW=5;exports.INFLATERAW=6;exports.UNZIP=7;var GZIP_HEADER_ID1=0x1f;var GZIP_HEADER_ID2=0x8b;function Zlib(mode){if(typeof mode!=='number'||mode<exports.DEFLATE||mode>exports.UNZIP){throw new TypeError('Bad argument');}
this.dictionary=null;this.err=0;this.flush=0;this.init_done=false;this.level=0;this.memLevel=0;this.mode=mode;this.strategy=0;this.windowBits=0;this.write_in_progress=false;this.pending_close=false;this.gzip_id_bytes_read=0;}
Zlib.prototype.close=function(){if(this.write_in_progress){this.pending_close=true;return;}
this.pending_close=false;assert(this.init_done,'close before init');assert(this.mode<=exports.UNZIP);if(this.mode===exports.DEFLATE||this.mode===exports.GZIP||this.mode===exports.DEFLATERAW){zlib_deflate.deflateEnd(this.strm);}else if(this.mode===exports.INFLATE||this.mode===exports.GUNZIP||this.mode===exports.INFLATERAW||this.mode===exports.UNZIP){zlib_inflate.inflateEnd(this.strm);}
this.mode=exports.NONE;this.dictionary=null;};Zlib.prototype.write=function(flush,input,in_off,in_len,out,out_off,out_len){return this._write(true,flush,input,in_off,in_len,out,out_off,out_len);};Zlib.prototype.writeSync=function(flush,input,in_off,in_len,out,out_off,out_len){return this._write(false,flush,input,in_off,in_len,out,out_off,out_len);};Zlib.prototype._write=function(async,flush,input,in_off,in_len,out,out_off,out_len){assert.equal(arguments.length,8);assert(this.init_done,'write before init');assert(this.mode!==exports.NONE,'already finalized');assert.equal(false,this.write_in_progress,'write already in progress');assert.equal(false,this.pending_close,'close is pending');this.write_in_progress=true;assert.equal(false,flush===undefined,'must provide flush value');this.write_in_progress=true;if(flush!==exports.Z_NO_FLUSH&&flush!==exports.Z_PARTIAL_FLUSH&&flush!==exports.Z_SYNC_FLUSH&&flush!==exports.Z_FULL_FLUSH&&flush!==exports.Z_FINISH&&flush!==exports.Z_BLOCK){throw new Error('Invalid flush value');}
if(input==null){input=Buffer.alloc(0);in_len=0;in_off=0;}
this.strm.avail_in=in_len;this.strm.input=input;this.strm.next_in=in_off;this.strm.avail_out=out_len;this.strm.output=out;this.strm.next_out=out_off;this.flush=flush;if(!async){this._process();if(this._checkError()){return this._afterSync();}
return;}
var self=this;process.nextTick(function(){self._process();self._after();});return this;};Zlib.prototype._afterSync=function(){var avail_out=this.strm.avail_out;var avail_in=this.strm.avail_in;this.write_in_progress=false;return[avail_in,avail_out];};Zlib.prototype._process=function(){var next_expected_header_byte=null;switch(this.mode){case exports.DEFLATE:case exports.GZIP:case exports.DEFLATERAW:this.err=zlib_deflate.deflate(this.strm,this.flush);break;case exports.UNZIP:if(this.strm.avail_in>0){next_expected_header_byte=this.strm.next_in;}
switch(this.gzip_id_bytes_read){case 0:if(next_expected_header_byte===null){break;}
if(this.strm.input[next_expected_header_byte]===GZIP_HEADER_ID1){this.gzip_id_bytes_read=1;next_expected_header_byte++;if(this.strm.avail_in===1){break;}}else{this.mode=exports.INFLATE;break;}
case 1:if(next_expected_header_byte===null){break;}
if(this.strm.input[next_expected_header_byte]===GZIP_HEADER_ID2){this.gzip_id_bytes_read=2;this.mode=exports.GUNZIP;}else{this.mode=exports.INFLATE;}
break;default:throw new Error('invalid number of gzip magic number bytes read');}
case exports.INFLATE:case exports.GUNZIP:case exports.INFLATERAW:this.err=zlib_inflate.inflate(this.strm,this.flush);if(this.err===exports.Z_NEED_DICT&&this.dictionary){this.err=zlib_inflate.inflateSetDictionary(this.strm,this.dictionary);if(this.err===exports.Z_OK){this.err=zlib_inflate.inflate(this.strm,this.flush);}else if(this.err===exports.Z_DATA_ERROR){this.err=exports.Z_NEED_DICT;}}
while(this.strm.avail_in>0&&this.mode===exports.GUNZIP&&this.err===exports.Z_STREAM_END&&this.strm.next_in[0]!==0x00){this.reset();this.err=zlib_inflate.inflate(this.strm,this.flush);}
break;default:throw new Error('Unknown mode '+this.mode);}};Zlib.prototype._checkError=function(){switch(this.err){case exports.Z_OK:case exports.Z_BUF_ERROR:if(this.strm.avail_out!==0&&this.flush===exports.Z_FINISH){this._error('unexpected end of file');return false;}
break;case exports.Z_STREAM_END:break;case exports.Z_NEED_DICT:if(this.dictionary==null){this._error('Missing dictionary');}else{this._error('Bad dictionary');}
return false;default:this._error('Zlib error');return false;}
return true;};Zlib.prototype._after=function(){if(!this._checkError()){return;}
var avail_out=this.strm.avail_out;var avail_in=this.strm.avail_in;this.write_in_progress=false;this.callback(avail_in,avail_out);if(this.pending_close){this.close();}};Zlib.prototype._error=function(message){if(this.strm.msg){message=this.strm.msg;}
this.onerror(message,this.err);this.write_in_progress=false;if(this.pending_close){this.close();}};Zlib.prototype.init=function(windowBits,level,memLevel,strategy,dictionary){assert(arguments.length===4||arguments.length===5,'init(windowBits, level, memLevel, strategy, [dictionary])');assert(windowBits>=8&&windowBits<=15,'invalid windowBits');assert(level>=-1&&level<=9,'invalid compression level');assert(memLevel>=1&&memLevel<=9,'invalid memlevel');assert(strategy===exports.Z_FILTERED||strategy===exports.Z_HUFFMAN_ONLY||strategy===exports.Z_RLE||strategy===exports.Z_FIXED||strategy===exports.Z_DEFAULT_STRATEGY,'invalid strategy');this._init(level,windowBits,memLevel,strategy,dictionary);this._setDictionary();};Zlib.prototype.params=function(){throw new Error('deflateParams Not supported');};Zlib.prototype.reset=function(){this._reset();this._setDictionary();};Zlib.prototype._init=function(level,windowBits,memLevel,strategy,dictionary){this.level=level;this.windowBits=windowBits;this.memLevel=memLevel;this.strategy=strategy;this.flush=exports.Z_NO_FLUSH;this.err=exports.Z_OK;if(this.mode===exports.GZIP||this.mode===exports.GUNZIP){this.windowBits+=16;}
if(this.mode===exports.UNZIP){this.windowBits+=32;}
if(this.mode===exports.DEFLATERAW||this.mode===exports.INFLATERAW){this.windowBits=-1*this.windowBits;}
this.strm=new Zstream();switch(this.mode){case exports.DEFLATE:case exports.GZIP:case exports.DEFLATERAW:this.err=zlib_deflate.deflateInit2(this.strm,this.level,exports.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case exports.INFLATE:case exports.GUNZIP:case exports.INFLATERAW:case exports.UNZIP:this.err=zlib_inflate.inflateInit2(this.strm,this.windowBits);break;default:throw new Error('Unknown mode '+this.mode);}
if(this.err!==exports.Z_OK){this._error('Init error');}
this.dictionary=dictionary;this.write_in_progress=false;this.init_done=true;};Zlib.prototype._setDictionary=function(){if(this.dictionary==null){return;}
this.err=exports.Z_OK;switch(this.mode){case exports.DEFLATE:case exports.DEFLATERAW:this.err=zlib_deflate.deflateSetDictionary(this.strm,this.dictionary);break;default:break;}
if(this.err!==exports.Z_OK){this._error('Failed to set dictionary');}};Zlib.prototype._reset=function(){this.err=exports.Z_OK;switch(this.mode){case exports.DEFLATE:case exports.DEFLATERAW:case exports.GZIP:this.err=zlib_deflate.deflateReset(this.strm);break;case exports.INFLATE:case exports.INFLATERAW:case exports.GUNZIP:this.err=zlib_inflate.inflateReset(this.strm);break;default:break;}
if(this.err!==exports.Z_OK){this._error('Failed to reset stream');}};exports.Zlib=Zlib;}).call(this,require('_process'),require("buffer").Buffer);},{"_process":77,"assert":53,"buffer":60,"pako/lib/zlib/constants":69,"pako/lib/zlib/deflate.js":71,"pako/lib/zlib/inflate.js":58,"pako/lib/zlib/zstream":74}],57:[function(require,module,exports){(function(process){'use strict';var Buffer=require('buffer').Buffer;var Transform=require('stream').Transform;var binding=require('./binding');var util=require('util');var assert=require('assert').ok;var kMaxLength=require('buffer').kMaxLength;var kRangeErrorMessage='Cannot create final Buffer. It would be larger '+'than 0x'+kMaxLength.toString(16)+' bytes';binding.Z_MIN_WINDOWBITS=8;binding.Z_MAX_WINDOWBITS=15;binding.Z_DEFAULT_WINDOWBITS=15;binding.Z_MIN_CHUNK=64;binding.Z_MAX_CHUNK=Infinity;binding.Z_DEFAULT_CHUNK=16*1024;binding.Z_MIN_MEMLEVEL=1;binding.Z_MAX_MEMLEVEL=9;binding.Z_DEFAULT_MEMLEVEL=8;binding.Z_MIN_LEVEL=-1;binding.Z_MAX_LEVEL=9;binding.Z_DEFAULT_LEVEL=binding.Z_DEFAULT_COMPRESSION;var bkeys=Object.keys(binding);for(var bk=0;bk<bkeys.length;bk++){var bkey=bkeys[bk];if(bkey.match(/^Z/)){Object.defineProperty(exports,bkey,{enumerable:true,value:binding[bkey],writable:false});}}
var codes={Z_OK:binding.Z_OK,Z_STREAM_END:binding.Z_STREAM_END,Z_NEED_DICT:binding.Z_NEED_DICT,Z_ERRNO:binding.Z_ERRNO,Z_STREAM_ERROR:binding.Z_STREAM_ERROR,Z_DATA_ERROR:binding.Z_DATA_ERROR,Z_MEM_ERROR:binding.Z_MEM_ERROR,Z_BUF_ERROR:binding.Z_BUF_ERROR,Z_VERSION_ERROR:binding.Z_VERSION_ERROR};var ckeys=Object.keys(codes);for(var ck=0;ck<ckeys.length;ck++){var ckey=ckeys[ck];codes[codes[ckey]]=ckey;}
Object.defineProperty(exports,'codes',{enumerable:true,value:Object.freeze(codes),writable:false});exports.Deflate=Deflate;exports.Inflate=Inflate;exports.Gzip=Gzip;exports.Gunzip=Gunzip;exports.DeflateRaw=DeflateRaw;exports.InflateRaw=InflateRaw;exports.Unzip=Unzip;exports.createDeflate=function(o){return new Deflate(o);};exports.createInflate=function(o){return new Inflate(o);};exports.createDeflateRaw=function(o){return new DeflateRaw(o);};exports.createInflateRaw=function(o){return new InflateRaw(o);};exports.createGzip=function(o){return new Gzip(o);};exports.createGunzip=function(o){return new Gunzip(o);};exports.createUnzip=function(o){return new Unzip(o);};exports.deflate=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new Deflate(opts),buffer,callback);};exports.deflateSync=function(buffer,opts){return zlibBufferSync(new Deflate(opts),buffer);};exports.gzip=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new Gzip(opts),buffer,callback);};exports.gzipSync=function(buffer,opts){return zlibBufferSync(new Gzip(opts),buffer);};exports.deflateRaw=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new DeflateRaw(opts),buffer,callback);};exports.deflateRawSync=function(buffer,opts){return zlibBufferSync(new DeflateRaw(opts),buffer);};exports.unzip=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new Unzip(opts),buffer,callback);};exports.unzipSync=function(buffer,opts){return zlibBufferSync(new Unzip(opts),buffer);};exports.inflate=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new Inflate(opts),buffer,callback);};exports.inflateSync=function(buffer,opts){return zlibBufferSync(new Inflate(opts),buffer);};exports.gunzip=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new Gunzip(opts),buffer,callback);};exports.gunzipSync=function(buffer,opts){return zlibBufferSync(new Gunzip(opts),buffer);};exports.inflateRaw=function(buffer,opts,callback){if(typeof opts==='function'){callback=opts;opts={};}
return zlibBuffer(new InflateRaw(opts),buffer,callback);};exports.inflateRawSync=function(buffer,opts){return zlibBufferSync(new InflateRaw(opts),buffer);};function zlibBuffer(engine,buffer,callback){var buffers=[];var nread=0;engine.on('error',onError);engine.on('end',onEnd);engine.end(buffer);flow();function flow(){var chunk;while(null!==(chunk=engine.read())){buffers.push(chunk);nread+=chunk.length;}
engine.once('readable',flow);}
function onError(err){engine.removeListener('end',onEnd);engine.removeListener('readable',flow);callback(err);}
function onEnd(){var buf;var err=null;if(nread>=kMaxLength){err=new RangeError(kRangeErrorMessage);}else{buf=Buffer.concat(buffers,nread);}
buffers=[];engine.close();callback(err,buf);}}
function zlibBufferSync(engine,buffer){if(typeof buffer==='string')buffer=Buffer.from(buffer);if(!Buffer.isBuffer(buffer))throw new TypeError('Not a string or buffer');var flushFlag=engine._finishFlushFlag;return engine._processChunk(buffer,flushFlag);}
function Deflate(opts){if(!(this instanceof Deflate))return new Deflate(opts);Zlib.call(this,opts,binding.DEFLATE);}
function Inflate(opts){if(!(this instanceof Inflate))return new Inflate(opts);Zlib.call(this,opts,binding.INFLATE);}
function Gzip(opts){if(!(this instanceof Gzip))return new Gzip(opts);Zlib.call(this,opts,binding.GZIP);}
function Gunzip(opts){if(!(this instanceof Gunzip))return new Gunzip(opts);Zlib.call(this,opts,binding.GUNZIP);}
function DeflateRaw(opts){if(!(this instanceof DeflateRaw))return new DeflateRaw(opts);Zlib.call(this,opts,binding.DEFLATERAW);}
function InflateRaw(opts){if(!(this instanceof InflateRaw))return new InflateRaw(opts);Zlib.call(this,opts,binding.INFLATERAW);}
function Unzip(opts){if(!(this instanceof Unzip))return new Unzip(opts);Zlib.call(this,opts,binding.UNZIP);}
function isValidFlushFlag(flag){return flag===binding.Z_NO_FLUSH||flag===binding.Z_PARTIAL_FLUSH||flag===binding.Z_SYNC_FLUSH||flag===binding.Z_FULL_FLUSH||flag===binding.Z_FINISH||flag===binding.Z_BLOCK;}
function Zlib(opts,mode){var _this=this;this._opts=opts=opts||{};this._chunkSize=opts.chunkSize||exports.Z_DEFAULT_CHUNK;Transform.call(this,opts);if(opts.flush&&!isValidFlushFlag(opts.flush)){throw new Error('Invalid flush flag: '+opts.flush);}
if(opts.finishFlush&&!isValidFlushFlag(opts.finishFlush)){throw new Error('Invalid flush flag: '+opts.finishFlush);}
this._flushFlag=opts.flush||binding.Z_NO_FLUSH;this._finishFlushFlag=typeof opts.finishFlush!=='undefined'?opts.finishFlush:binding.Z_FINISH;if(opts.chunkSize){if(opts.chunkSize<exports.Z_MIN_CHUNK||opts.chunkSize>exports.Z_MAX_CHUNK){throw new Error('Invalid chunk size: '+opts.chunkSize);}}
if(opts.windowBits){if(opts.windowBits<exports.Z_MIN_WINDOWBITS||opts.windowBits>exports.Z_MAX_WINDOWBITS){throw new Error('Invalid windowBits: '+opts.windowBits);}}
if(opts.level){if(opts.level<exports.Z_MIN_LEVEL||opts.level>exports.Z_MAX_LEVEL){throw new Error('Invalid compression level: '+opts.level);}}
if(opts.memLevel){if(opts.memLevel<exports.Z_MIN_MEMLEVEL||opts.memLevel>exports.Z_MAX_MEMLEVEL){throw new Error('Invalid memLevel: '+opts.memLevel);}}
if(opts.strategy){if(opts.strategy!=exports.Z_FILTERED&&opts.strategy!=exports.Z_HUFFMAN_ONLY&&opts.strategy!=exports.Z_RLE&&opts.strategy!=exports.Z_FIXED&&opts.strategy!=exports.Z_DEFAULT_STRATEGY){throw new Error('Invalid strategy: '+opts.strategy);}}
if(opts.dictionary){if(!Buffer.isBuffer(opts.dictionary)){throw new Error('Invalid dictionary: it should be a Buffer instance');}}
this._handle=new binding.Zlib(mode);var self=this;this._hadError=false;this._handle.onerror=function(message,errno){_close(self);self._hadError=true;var error=new Error(message);error.errno=errno;error.code=exports.codes[errno];self.emit('error',error);};var level=exports.Z_DEFAULT_COMPRESSION;if(typeof opts.level==='number')level=opts.level;var strategy=exports.Z_DEFAULT_STRATEGY;if(typeof opts.strategy==='number')strategy=opts.strategy;this._handle.init(opts.windowBits||exports.Z_DEFAULT_WINDOWBITS,level,opts.memLevel||exports.Z_DEFAULT_MEMLEVEL,strategy,opts.dictionary);this._buffer=Buffer.allocUnsafe(this._chunkSize);this._offset=0;this._level=level;this._strategy=strategy;this.once('end',this.close);Object.defineProperty(this,'_closed',{get:function(){return!_this._handle;},configurable:true,enumerable:true});}
util.inherits(Zlib,Transform);Zlib.prototype.params=function(level,strategy,callback){if(level<exports.Z_MIN_LEVEL||level>exports.Z_MAX_LEVEL){throw new RangeError('Invalid compression level: '+level);}
if(strategy!=exports.Z_FILTERED&&strategy!=exports.Z_HUFFMAN_ONLY&&strategy!=exports.Z_RLE&&strategy!=exports.Z_FIXED&&strategy!=exports.Z_DEFAULT_STRATEGY){throw new TypeError('Invalid strategy: '+strategy);}
if(this._level!==level||this._strategy!==strategy){var self=this;this.flush(binding.Z_SYNC_FLUSH,function(){assert(self._handle,'zlib binding closed');self._handle.params(level,strategy);if(!self._hadError){self._level=level;self._strategy=strategy;if(callback)callback();}});}else{process.nextTick(callback);}};Zlib.prototype.reset=function(){assert(this._handle,'zlib binding closed');return this._handle.reset();};Zlib.prototype._flush=function(callback){this._transform(Buffer.alloc(0),'',callback);};Zlib.prototype.flush=function(kind,callback){var _this2=this;var ws=this._writableState;if(typeof kind==='function'||kind===undefined&&!callback){callback=kind;kind=binding.Z_FULL_FLUSH;}
if(ws.ended){if(callback)process.nextTick(callback);}else if(ws.ending){if(callback)this.once('end',callback);}else if(ws.needDrain){if(callback){this.once('drain',function(){return _this2.flush(kind,callback);});}}else{this._flushFlag=kind;this.write(Buffer.alloc(0),'',callback);}};Zlib.prototype.close=function(callback){_close(this,callback);process.nextTick(emitCloseNT,this);};function _close(engine,callback){if(callback)process.nextTick(callback);if(!engine._handle)return;engine._handle.close();engine._handle=null;}
function emitCloseNT(self){self.emit('close');}
Zlib.prototype._transform=function(chunk,encoding,cb){var flushFlag;var ws=this._writableState;var ending=ws.ending||ws.ended;var last=ending&&(!chunk||ws.length===chunk.length);if(chunk!==null&&!Buffer.isBuffer(chunk))return cb(new Error('invalid input'));if(!this._handle)return cb(new Error('zlib binding closed'));if(last)flushFlag=this._finishFlushFlag;else{flushFlag=this._flushFlag;if(chunk.length>=ws.length){this._flushFlag=this._opts.flush||binding.Z_NO_FLUSH;}}
this._processChunk(chunk,flushFlag,cb);};Zlib.prototype._processChunk=function(chunk,flushFlag,cb){var availInBefore=chunk&&chunk.length;var availOutBefore=this._chunkSize-this._offset;var inOff=0;var self=this;var async=typeof cb==='function';if(!async){var buffers=[];var nread=0;var error;this.on('error',function(er){error=er;});assert(this._handle,'zlib binding closed');do{var res=this._handle.writeSync(flushFlag,chunk,inOff,availInBefore,this._buffer,this._offset,availOutBefore);}while(!this._hadError&&callback(res[0],res[1]));if(this._hadError){throw error;}
if(nread>=kMaxLength){_close(this);throw new RangeError(kRangeErrorMessage);}
var buf=Buffer.concat(buffers,nread);_close(this);return buf;}
assert(this._handle,'zlib binding closed');var req=this._handle.write(flushFlag,chunk,inOff,availInBefore,this._buffer,this._offset,availOutBefore);req.buffer=chunk;req.callback=callback;function callback(availInAfter,availOutAfter){if(this){this.buffer=null;this.callback=null;}
if(self._hadError)return;var have=availOutBefore-availOutAfter;assert(have>=0,'have should not go down');if(have>0){var out=self._buffer.slice(self._offset,self._offset+have);self._offset+=have;if(async){self.push(out);}else{buffers.push(out);nread+=out.length;}}
if(availOutAfter===0||self._offset>=self._chunkSize){availOutBefore=self._chunkSize;self._offset=0;self._buffer=Buffer.allocUnsafe(self._chunkSize);}
if(availOutAfter===0){inOff+=availInBefore-availInAfter;availInBefore=availInAfter;if(!async)return true;var newReq=self._handle.write(flushFlag,chunk,inOff,availInBefore,self._buffer,self._offset,self._chunkSize);newReq.callback=callback;newReq.buffer=chunk;return;}
if(!async)return false;cb();}};util.inherits(Deflate,Zlib);util.inherits(Inflate,Zlib);util.inherits(Gzip,Zlib);util.inherits(Gunzip,Zlib);util.inherits(DeflateRaw,Zlib);util.inherits(InflateRaw,Zlib);util.inherits(Unzip,Zlib);}).call(this,require('_process'));},{"./binding":56,"_process":77,"assert":53,"buffer":60,"stream":92,"util":97}],58:[function(require,module,exports){arguments[4][55][0].apply(exports,arguments);},{"dup":55}],59:[function(require,module,exports){(function(global){'use strict';var buffer=require('buffer');var Buffer=buffer.Buffer;var SlowBuffer=buffer.SlowBuffer;var MAX_LEN=buffer.kMaxLength||2147483647;exports.alloc=function alloc(size,fill,encoding){if(typeof Buffer.alloc==='function'){return Buffer.alloc(size,fill,encoding);}
if(typeof encoding==='number'){throw new TypeError('encoding must not be number');}
if(typeof size!=='number'){throw new TypeError('size must be a number');}
if(size>MAX_LEN){throw new RangeError('size is too large');}
var enc=encoding;var _fill=fill;if(_fill===undefined){enc=undefined;_fill=0;}
var buf=new Buffer(size);if(typeof _fill==='string'){var fillBuf=new Buffer(_fill,enc);var flen=fillBuf.length;var i=-1;while(++i<size){buf[i]=fillBuf[i%flen];}}else{buf.fill(_fill);}
return buf;};exports.allocUnsafe=function allocUnsafe(size){if(typeof Buffer.allocUnsafe==='function'){return Buffer.allocUnsafe(size);}
if(typeof size!=='number'){throw new TypeError('size must be a number');}
if(size>MAX_LEN){throw new RangeError('size is too large');}
return new Buffer(size);};exports.from=function from(value,encodingOrOffset,length){if(typeof Buffer.from==='function'&&(!global.Uint8Array||Uint8Array.from!==Buffer.from)){return Buffer.from(value,encodingOrOffset,length);}
if(typeof value==='number'){throw new TypeError('"value" argument must not be a number');}
if(typeof value==='string'){return new Buffer(value,encodingOrOffset);}
if(typeof ArrayBuffer!=='undefined'&&value instanceof ArrayBuffer){var offset=encodingOrOffset;if(arguments.length===1){return new Buffer(value);}
if(typeof offset==='undefined'){offset=0;}
var len=length;if(typeof len==='undefined'){len=value.byteLength-offset;}
if(offset>=value.byteLength){throw new RangeError('\'offset\' is out of bounds');}
if(len>value.byteLength-offset){throw new RangeError('\'length\' is out of bounds');}
return new Buffer(value.slice(offset,offset+len));}
if(Buffer.isBuffer(value)){var out=new Buffer(value.length);value.copy(out,0,0,value.length);return out;}
if(value){if(Array.isArray(value)||typeof ArrayBuffer!=='undefined'&&value.buffer instanceof ArrayBuffer||'length'in value){return new Buffer(value);}
if(value.type==='Buffer'&&Array.isArray(value.data)){return new Buffer(value.data);}}
throw new TypeError('First argument must be a string, Buffer, '+'ArrayBuffer, Array, or array-like object.');};exports.allocUnsafeSlow=function allocUnsafeSlow(size){if(typeof Buffer.allocUnsafeSlow==='function'){return Buffer.allocUnsafeSlow(size);}
if(typeof size!=='number'){throw new TypeError('size must be a number');}
if(size>=MAX_LEN){throw new RangeError('size is too large');}
return new SlowBuffer(size);};}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"buffer":60}],60:[function(require,module,exports){'use strict';var base64=require('base64-js');var ieee754=require('ieee754');exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=0x7fffffff;exports.kMaxLength=K_MAX_LENGTH;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!=='undefined'&&typeof console.error==='function'){console.error('This browser lacks typed array (Uint8Array) support which is required by '+'`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');}
function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42;}};return arr.foo()===42;}catch(e){return false;}}
Object.defineProperty(Buffer.prototype,'parent',{get:function(){if(!(this instanceof Buffer)){return undefined;}
return this.buffer;}});Object.defineProperty(Buffer.prototype,'offset',{get:function(){if(!(this instanceof Buffer)){return undefined;}
return this.byteOffset;}});function createBuffer(length){if(length>K_MAX_LENGTH){throw new RangeError('Invalid typed array length');}
var buf=new Uint8Array(length);buf.__proto__=Buffer.prototype;return buf;}
function Buffer(arg,encodingOrOffset,length){if(typeof arg==='number'){if(typeof encodingOrOffset==='string'){throw new Error('If encoding is specified then the first argument must be a string');}
return allocUnsafe(arg);}
return from(arg,encodingOrOffset,length);}
if(typeof Symbol!=='undefined'&&Symbol.species&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false});}
Buffer.poolSize=8192;function from(value,encodingOrOffset,length){if(typeof value==='number'){throw new TypeError('"value" argument must not be a number');}
if(isArrayBuffer(value)||value&&isArrayBuffer(value.buffer)){return fromArrayBuffer(value,encodingOrOffset,length);}
if(typeof value==='string'){return fromString(value,encodingOrOffset);}
return fromObject(value);}
Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length);};Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;function assertSize(size){if(typeof size!=='number'){throw new TypeError('"size" argument must be of type number');}else if(size<0){throw new RangeError('"size" argument must not be negative');}}
function alloc(size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(size);}
if(fill!==undefined){return typeof encoding==='string'?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill);}
return createBuffer(size);}
Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding);};function allocUnsafe(size){assertSize(size);return createBuffer(size<0?0:checked(size)|0);}
Buffer.allocUnsafe=function(size){return allocUnsafe(size);};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size);};function fromString(string,encoding){if(typeof encoding!=='string'||encoding===''){encoding='utf8';}
if(!Buffer.isEncoding(encoding)){throw new TypeError('Unknown encoding: '+encoding);}
var length=byteLength(string,encoding)|0;var buf=createBuffer(length);var actual=buf.write(string,encoding);if(actual!==length){buf=buf.slice(0,actual);}
return buf;}
function fromArrayLike(array){var length=array.length<0?0:checked(array.length)|0;var buf=createBuffer(length);for(var i=0;i<length;i+=1){buf[i]=array[i]&255;}
return buf;}
function fromArrayBuffer(array,byteOffset,length){if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError('"offset" is outside of buffer bounds');}
if(array.byteLength<byteOffset+(length||0)){throw new RangeError('"length" is outside of buffer bounds');}
var buf;if(byteOffset===undefined&&length===undefined){buf=new Uint8Array(array);}else if(length===undefined){buf=new Uint8Array(array,byteOffset);}else{buf=new Uint8Array(array,byteOffset,length);}
buf.__proto__=Buffer.prototype;return buf;}
function fromObject(obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;var buf=createBuffer(len);if(buf.length===0){return buf;}
obj.copy(buf,0,0,len);return buf;}
if(obj){if(ArrayBuffer.isView(obj)||'length'in obj){if(typeof obj.length!=='number'||numberIsNaN(obj.length)){return createBuffer(0);}
return fromArrayLike(obj);}
if(obj.type==='Buffer'&&Array.isArray(obj.data)){return fromArrayLike(obj.data);}}
throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.');}
function checked(length){if(length>=K_MAX_LENGTH){throw new RangeError('Attempt to allocate Buffer larger than maximum '+'size: 0x'+K_MAX_LENGTH.toString(16)+' bytes');}
return length|0;}
function SlowBuffer(length){if(+length!=length){length=0;}
return Buffer.alloc(+length);}
Buffer.isBuffer=function isBuffer(b){return b!=null&&b._isBuffer===true;};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError('Arguments must be Buffers');}
if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break;}}
if(x<y)return-1;if(y<x)return 1;return 0;};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case'hex':case'utf8':case'utf-8':case'ascii':case'latin1':case'binary':case'base64':case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return true;default:return false;}};Buffer.concat=function concat(list,length){if(!Array.isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers');}
if(list.length===0){return Buffer.alloc(0);}
var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length;}}
var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(ArrayBuffer.isView(buf)){buf=Buffer.from(buf);}
if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers');}
buf.copy(buffer,pos);pos+=buf.length;}
return buffer;};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length;}
if(ArrayBuffer.isView(string)||isArrayBuffer(string)){return string.byteLength;}
if(typeof string!=='string'){string=''+string;}
var len=string.length;if(len===0)return 0;var loweredCase=false;for(;;){switch(encoding){case'ascii':case'latin1':case'binary':return len;case'utf8':case'utf-8':case undefined:return utf8ToBytes(string).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return len*2;case'hex':return len>>>1;case'base64':return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(''+encoding).toLowerCase();loweredCase=true;}}}
Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0;}
if(start>this.length){return'';}
if(end===undefined||end>this.length){end=this.length;}
if(end<=0){return'';}
end>>>=0;start>>>=0;if(end<=start){return'';}
if(!encoding)encoding='utf8';while(true){switch(encoding){case'hex':return hexSlice(this,start,end);case'utf8':case'utf-8':return utf8Slice(this,start,end);case'ascii':return asciiSlice(this,start,end);case'latin1':case'binary':return latin1Slice(this,start,end);case'base64':return base64Slice(this,start,end);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError('Unknown encoding: '+encoding);encoding=(encoding+'').toLowerCase();loweredCase=true;}}}
Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i;}
Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError('Buffer size must be a multiple of 16-bits');}
for(var i=0;i<len;i+=2){swap(this,i,i+1);}
return this;};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError('Buffer size must be a multiple of 32-bits');}
for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2);}
return this;};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError('Buffer size must be a multiple of 64-bits');}
for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4);}
return this;};Buffer.prototype.toString=function toString(){var length=this.length;if(length===0)return'';if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments);};Buffer.prototype.toLocaleString=Buffer.prototype.toString;Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError('Argument must be a Buffer');if(this===b)return true;return Buffer.compare(this,b)===0;};Buffer.prototype.inspect=function inspect(){var str='';var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString('hex',0,max).match(/.{2}/g).join(' ');if(this.length>max)str+=' ... ';}
return'<Buffer '+str+'>';};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target)){throw new TypeError('Argument must be a Buffer');}
if(start===undefined){start=0;}
if(end===undefined){end=target?target.length:0;}
if(thisStart===undefined){thisStart=0;}
if(thisEnd===undefined){thisEnd=this.length;}
if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError('out of range index');}
if(thisStart>=thisEnd&&start>=end){return 0;}
if(thisStart>=thisEnd){return-1;}
if(start>=end){return 1;}
start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break;}}
if(x<y)return-1;if(y<x)return 1;return 0;};function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(buffer.length===0)return-1;if(typeof byteOffset==='string'){encoding=byteOffset;byteOffset=0;}else if(byteOffset>0x7fffffff){byteOffset=0x7fffffff;}else if(byteOffset<-0x80000000){byteOffset=-0x80000000;}
byteOffset=+byteOffset;if(numberIsNaN(byteOffset)){byteOffset=dir?0:buffer.length-1;}
if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else
byteOffset=buffer.length-1;}else if(byteOffset<0){if(dir)byteOffset=0;else
return-1;}
if(typeof val==='string'){val=Buffer.from(val,encoding);}
if(Buffer.isBuffer(val)){if(val.length===0){return-1;}
return arrayIndexOf(buffer,val,byteOffset,encoding,dir);}else if(typeof val==='number'){val=val&0xFF;if(typeof Uint8Array.prototype.indexOf==='function'){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset);}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset);}}
return arrayIndexOf(buffer,[val],byteOffset,encoding,dir);}
throw new TypeError('val must be string, number or Buffer');}
function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==='ucs2'||encoding==='ucs-2'||encoding==='utf16le'||encoding==='utf-16le'){if(arr.length<2||val.length<2){return-1;}
indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2;}}
function read(buf,i){if(indexSize===1){return buf[i];}else{return buf.readUInt16BE(i*indexSize);}}
var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize;}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1;}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break;}}
if(found)return i;}}
return-1;}
Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1;};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true);};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false);};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining;}else{length=Number(length);if(length>remaining){length=remaining;}}
var strLen=string.length;if(length>strLen/2){length=strLen/2;}
for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(numberIsNaN(parsed))return i;buf[offset+i]=parsed;}
return i;}
function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length);}
function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length);}
function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length);}
function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length);}
function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length);}
Buffer.prototype.write=function write(string,offset,length,encoding){if(offset===undefined){encoding='utf8';length=this.length;offset=0;}else if(length===undefined&&typeof offset==='string'){encoding=offset;length=this.length;offset=0;}else if(isFinite(offset)){offset=offset>>>0;if(isFinite(length)){length=length>>>0;if(encoding===undefined)encoding='utf8';}else{encoding=length;length=undefined;}}else{throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');}
var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError('Attempt to write outside buffer bounds');}
if(!encoding)encoding='utf8';var loweredCase=false;for(;;){switch(encoding){case'hex':return hexWrite(this,string,offset,length);case'utf8':case'utf-8':return utf8Write(this,string,offset,length);case'ascii':return asciiWrite(this,string,offset,length);case'latin1':case'binary':return latin1Write(this,string,offset,length);case'base64':return base64Write(this,string,offset,length);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError('Unknown encoding: '+encoding);encoding=(''+encoding).toLowerCase();loweredCase=true;}}};Buffer.prototype.toJSON=function toJSON(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)};};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf);}else{return base64.fromByteArray(buf.slice(start,end));}}
function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>0xEF?4:firstByte>0xDF?3:firstByte>0xBF?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<0x80){codePoint=firstByte;}
break;case 2:secondByte=buf[i+1];if((secondByte&0xC0)===0x80){tempCodePoint=(firstByte&0x1F)<<0x6|secondByte&0x3F;if(tempCodePoint>0x7F){codePoint=tempCodePoint;}}
break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&0xC0)===0x80&&(thirdByte&0xC0)===0x80){tempCodePoint=(firstByte&0xF)<<0xC|(secondByte&0x3F)<<0x6|thirdByte&0x3F;if(tempCodePoint>0x7FF&&(tempCodePoint<0xD800||tempCodePoint>0xDFFF)){codePoint=tempCodePoint;}}
break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&0xC0)===0x80&&(thirdByte&0xC0)===0x80&&(fourthByte&0xC0)===0x80){tempCodePoint=(firstByte&0xF)<<0x12|(secondByte&0x3F)<<0xC|(thirdByte&0x3F)<<0x6|fourthByte&0x3F;if(tempCodePoint>0xFFFF&&tempCodePoint<0x110000){codePoint=tempCodePoint;}}}}
if(codePoint===null){codePoint=0xFFFD;bytesPerSequence=1;}else if(codePoint>0xFFFF){codePoint-=0x10000;res.push(codePoint>>>10&0x3FF|0xD800);codePoint=0xDC00|codePoint&0x3FF;}
res.push(codePoint);i+=bytesPerSequence;}
return decodeCodePointsArray(res);}
var MAX_ARGUMENTS_LENGTH=0x1000;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints);}
var res='';var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH));}
return res;}
function asciiSlice(buf,start,end){var ret='';end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&0x7F);}
return ret;}
function latin1Slice(buf,start,end){var ret='';end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]);}
return ret;}
function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out='';for(var i=start;i<end;++i){out+=toHex(buf[i]);}
return out;}
function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res='';for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256);}
return res;}
Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0;}else if(start>len){start=len;}
if(end<0){end+=len;if(end<0)end=0;}else if(end>len){end=len;}
if(end<start)end=start;var newBuf=this.subarray(start,end);newBuf.__proto__=Buffer.prototype;return newBuf;};function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError('offset is not uint');if(offset+ext>length)throw new RangeError('Trying to access beyond buffer length');}
Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=0x100)){val+=this[offset+i]*mul;}
return val;};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length);}
var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=0x100)){val+=this[offset+--byteLength]*mul;}
return val;};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);return this[offset];};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8;};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1];};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+
this[offset+3]*0x1000000;};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*0x1000000+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3]);};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=0x100)){val+=this[offset+i]*mul;}
mul*=0x80;if(val>=mul)val-=Math.pow(2,8*byteLength);return val;};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=0x100)){val+=this[offset+--i]*mul;}
mul*=0x80;if(val>=mul)val-=Math.pow(2,8*byteLength);return val;};Buffer.prototype.readInt8=function readInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&0x80))return this[offset];return(0xff-this[offset]+1)*-1;};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&0x8000?val|0xFFFF0000:val;};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&0x8000?val|0xFFFF0000:val;};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24;};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3];};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4);};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4);};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8);};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8);};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError('Index out of range');}
Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0);}
var mul=1;var i=0;this[offset]=value&0xFF;while(++i<byteLength&&(mul*=0x100)){this[offset+i]=value/mul&0xFF;}
return offset+byteLength;};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0);}
var i=byteLength-1;var mul=1;this[offset+i]=value&0xFF;while(--i>=0&&(mul*=0x100)){this[offset+i]=value/mul&0xFF;}
return offset+byteLength;};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,0xff,0);this[offset]=value&0xff;return offset+1;};Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0xffff,0);this[offset]=value&0xff;this[offset+1]=value>>>8;return offset+2;};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0xffff,0);this[offset]=value>>>8;this[offset+1]=value&0xff;return offset+2;};Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0xffffffff,0);this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&0xff;return offset+4;};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0xffffffff,0);this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&0xff;return offset+4;};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit);}
var i=0;var mul=1;var sub=0;this[offset]=value&0xFF;while(++i<byteLength&&(mul*=0x100)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1;}
this[offset+i]=(value/mul>>0)-sub&0xFF;}
return offset+byteLength;};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit);}
var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&0xFF;while(--i>=0&&(mul*=0x100)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1;}
this[offset+i]=(value/mul>>0)-sub&0xFF;}
return offset+byteLength;};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,0x7f,-0x80);if(value<0)value=0xff+value+1;this[offset]=value&0xff;return offset+1;};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0x7fff,-0x8000);this[offset]=value&0xff;this[offset+1]=value>>>8;return offset+2;};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,0x7fff,-0x8000);this[offset]=value>>>8;this[offset+1]=value&0xff;return offset+2;};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0x7fffffff,-0x80000000);this[offset]=value&0xff;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24;return offset+4;};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,0x7fffffff,-0x80000000);if(value<0)value=0xffffffff+value+1;this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&0xff;return offset+4;};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError('Index out of range');if(offset<0)throw new RangeError('Index out of range');}
function writeFloat(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e+38,-3.4028234663852886e+38);}
ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4;}
Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert);};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert);};function writeDouble(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157E+308,-1.7976931348623157E+308);}
ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8;}
Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert);};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert);};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!Buffer.isBuffer(target))throw new TypeError('argument should be a Buffer');if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;if(end===start)return 0;if(target.length===0||this.length===0)return 0;if(targetStart<0){throw new RangeError('targetStart out of bounds');}
if(start<0||start>=this.length)throw new RangeError('Index out of range');if(end<0)throw new RangeError('sourceEnd out of bounds');if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start;}
var len=end-start;if(this===target&&typeof Uint8Array.prototype.copyWithin==='function'){this.copyWithin(targetStart,start,end);}else if(this===target&&start<targetStart&&targetStart<end){for(var i=len-1;i>=0;--i){target[i+targetStart]=this[i+start];}}else{Uint8Array.prototype.set.call(target,this.subarray(start,end),targetStart);}
return len;};Buffer.prototype.fill=function fill(val,start,end,encoding){if(typeof val==='string'){if(typeof start==='string'){encoding=start;start=0;end=this.length;}else if(typeof end==='string'){encoding=end;end=this.length;}
if(encoding!==undefined&&typeof encoding!=='string'){throw new TypeError('encoding must be a string');}
if(typeof encoding==='string'&&!Buffer.isEncoding(encoding)){throw new TypeError('Unknown encoding: '+encoding);}
if(val.length===1){var code=val.charCodeAt(0);if(encoding==='utf8'&&code<128||encoding==='latin1'){val=code;}}}else if(typeof val==='number'){val=val&255;}
if(start<0||this.length<start||this.length<end){throw new RangeError('Out of range index');}
if(end<=start){return this;}
start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==='number'){for(i=start;i<end;++i){this[i]=val;}}else{var bytes=Buffer.isBuffer(val)?val:new Buffer(val,encoding);var len=bytes.length;if(len===0){throw new TypeError('The value "'+val+'" is invalid for argument "value"');}
for(i=0;i<end-start;++i){this[i+start]=bytes[i%len];}}
return this;};var INVALID_BASE64_RE=/[^+/0-9A-Za-z-_]/g;function base64clean(str){str=str.split('=')[0];str=str.trim().replace(INVALID_BASE64_RE,'');if(str.length<2)return'';while(str.length%4!==0){str=str+'=';}
return str;}
function toHex(n){if(n<16)return'0'+n.toString(16);return n.toString(16);}
function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);if(codePoint>0xD7FF&&codePoint<0xE000){if(!leadSurrogate){if(codePoint>0xDBFF){if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);continue;}else if(i+1===length){if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);continue;}
leadSurrogate=codePoint;continue;}
if(codePoint<0xDC00){if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);leadSurrogate=codePoint;continue;}
codePoint=(leadSurrogate-0xD800<<10|codePoint-0xDC00)+0x10000;}else if(leadSurrogate){if((units-=3)>-1)bytes.push(0xEF,0xBF,0xBD);}
leadSurrogate=null;if(codePoint<0x80){if((units-=1)<0)break;bytes.push(codePoint);}else if(codePoint<0x800){if((units-=2)<0)break;bytes.push(codePoint>>0x6|0xC0,codePoint&0x3F|0x80);}else if(codePoint<0x10000){if((units-=3)<0)break;bytes.push(codePoint>>0xC|0xE0,codePoint>>0x6&0x3F|0x80,codePoint&0x3F|0x80);}else if(codePoint<0x110000){if((units-=4)<0)break;bytes.push(codePoint>>0x12|0xF0,codePoint>>0xC&0x3F|0x80,codePoint>>0x6&0x3F|0x80,codePoint&0x3F|0x80);}else{throw new Error('Invalid code point');}}
return bytes;}
function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){byteArray.push(str.charCodeAt(i)&0xFF);}
return byteArray;}
function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi);}
return byteArray;}
function base64ToBytes(str){return base64.toByteArray(base64clean(str));}
function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i];}
return i;}
function isArrayBuffer(obj){return obj instanceof ArrayBuffer||obj!=null&&obj.constructor!=null&&obj.constructor.name==='ArrayBuffer'&&typeof obj.byteLength==='number';}
function numberIsNaN(obj){return obj!==obj;}},{"base64-js":54,"ieee754":63}],61:[function(require,module,exports){(function(Buffer){function isArray(arg){if(Array.isArray){return Array.isArray(arg);}
return objectToString(arg)==='[object Array]';}
exports.isArray=isArray;function isBoolean(arg){return typeof arg==='boolean';}
exports.isBoolean=isBoolean;function isNull(arg){return arg===null;}
exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null;}
exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==='number';}
exports.isNumber=isNumber;function isString(arg){return typeof arg==='string';}
exports.isString=isString;function isSymbol(arg){return typeof arg==='symbol';}
exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0;}
exports.isUndefined=isUndefined;function isRegExp(re){return objectToString(re)==='[object RegExp]';}
exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==='object'&&arg!==null;}
exports.isObject=isObject;function isDate(d){return objectToString(d)==='[object Date]';}
exports.isDate=isDate;function isError(e){return objectToString(e)==='[object Error]'||e instanceof Error;}
exports.isError=isError;function isFunction(arg){return typeof arg==='function';}
exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==='boolean'||typeof arg==='number'||typeof arg==='string'||typeof arg==='symbol'||typeof arg==='undefined';}
exports.isPrimitive=isPrimitive;exports.isBuffer=Buffer.isBuffer;function objectToString(o){return Object.prototype.toString.call(o);}}).call(this,{"isBuffer":require("../../is-buffer/index.js")});},{"../../is-buffer/index.js":65}],62:[function(require,module,exports){var objectCreate=Object.create||objectCreatePolyfill;var objectKeys=Object.keys||objectKeysPolyfill;var bind=Function.prototype.bind||functionBindPolyfill;function EventEmitter(){if(!this._events||!Object.prototype.hasOwnProperty.call(this,'_events')){this._events=objectCreate(null);this._eventsCount=0;}
this._maxListeners=this._maxListeners||undefined;}
module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;var defaultMaxListeners=10;var hasDefineProperty;try{var o={};if(Object.defineProperty)Object.defineProperty(o,'x',{value:0});hasDefineProperty=o.x===0;}catch(err){hasDefineProperty=false;}
if(hasDefineProperty){Object.defineProperty(EventEmitter,'defaultMaxListeners',{enumerable:true,get:function(){return defaultMaxListeners;},set:function(arg){if(typeof arg!=='number'||arg<0||arg!==arg)
throw new TypeError('"defaultMaxListeners" must be a positive number');defaultMaxListeners=arg;}});}else{EventEmitter.defaultMaxListeners=defaultMaxListeners;}
EventEmitter.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||isNaN(n))
throw new TypeError('"n" argument must be a positive number');this._maxListeners=n;return this;};function $getMaxListeners(that){if(that._maxListeners===undefined)
return EventEmitter.defaultMaxListeners;return that._maxListeners;}
EventEmitter.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this);};function emitNone(handler,isFn,self){if(isFn)
handler.call(self);else
{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)
listeners[i].call(self);}}
function emitOne(handler,isFn,self,arg1){if(isFn)
handler.call(self,arg1);else
{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)
listeners[i].call(self,arg1);}}
function emitTwo(handler,isFn,self,arg1,arg2){if(isFn)
handler.call(self,arg1,arg2);else
{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)
listeners[i].call(self,arg1,arg2);}}
function emitThree(handler,isFn,self,arg1,arg2,arg3){if(isFn)
handler.call(self,arg1,arg2,arg3);else
{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)
listeners[i].call(self,arg1,arg2,arg3);}}
function emitMany(handler,isFn,self,args){if(isFn)
handler.apply(self,args);else
{var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i)
listeners[i].apply(self,args);}}
EventEmitter.prototype.emit=function emit(type){var er,handler,len,args,i,events;var doError=type==='error';events=this._events;if(events)
doError=doError&&events.error==null;else
if(!doError)
return false;if(doError){if(arguments.length>1)
er=arguments[1];if(er instanceof Error){throw er;}else{var err=new Error('Unhandled "error" event. ('+er+')');err.context=er;throw err;}
return false;}
handler=events[type];if(!handler)
return false;var isFn=typeof handler==='function';len=arguments.length;switch(len){case 1:emitNone(handler,isFn,this);break;case 2:emitOne(handler,isFn,this,arguments[1]);break;case 3:emitTwo(handler,isFn,this,arguments[1],arguments[2]);break;case 4:emitThree(handler,isFn,this,arguments[1],arguments[2],arguments[3]);break;default:args=new Array(len-1);for(i=1;i<len;i++)
args[i-1]=arguments[i];emitMany(handler,isFn,this,args);}
return true;};function _addListener(target,type,listener,prepend){var m;var events;var existing;if(typeof listener!=='function')
throw new TypeError('"listener" argument must be a function');events=target._events;if(!events){events=target._events=objectCreate(null);target._eventsCount=0;}else{if(events.newListener){target.emit('newListener',type,listener.listener?listener.listener:listener);events=target._events;}
existing=events[type];}
if(!existing){existing=events[type]=listener;++target._eventsCount;}else{if(typeof existing==='function'){existing=events[type]=prepend?[listener,existing]:[existing,listener];}else{if(prepend){existing.unshift(listener);}else{existing.push(listener);}}
if(!existing.warned){m=$getMaxListeners(target);if(m&&m>0&&existing.length>m){existing.warned=true;var w=new Error('Possible EventEmitter memory leak detected. '+
existing.length+' "'+String(type)+'" listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit.');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;if(typeof console==='object'&&console.warn){console.warn('%s: %s',w.name,w.message);}}}}
return target;}
EventEmitter.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;switch(arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:var args=new Array(arguments.length);for(var i=0;i<args.length;++i)
args[i]=arguments[i];this.listener.apply(this.target,args);}}}
function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=bind.call(onceWrapper,state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}
EventEmitter.prototype.once=function once(type,listener){if(typeof listener!=='function')
throw new TypeError('"listener" argument must be a function');this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter.prototype.prependOnceListener=function prependOnceListener(type,listener){if(typeof listener!=='function')
throw new TypeError('"listener" argument must be a function');this.prependListener(type,_onceWrap(this,type,listener));return this;};EventEmitter.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;if(typeof listener!=='function')
throw new TypeError('"listener" argument must be a function');events=this._events;if(!events)
return this;list=events[type];if(!list)
return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)
this._events=objectCreate(null);else
{delete events[type];if(events.removeListener)
this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}
if(position<0)
return this;if(position===0)
list.shift();else
spliceOne(list,position);if(list.length===1)
events[type]=list[0];if(events.removeListener)
this.emit('removeListener',type,originalListener||listener);}
return this;};EventEmitter.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(!events)
return this;if(!events.removeListener){if(arguments.length===0){this._events=objectCreate(null);this._eventsCount=0;}else if(events[type]){if(--this._eventsCount===0)
this._events=objectCreate(null);else
delete events[type];}
return this;}
if(arguments.length===0){var keys=objectKeys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}
this.removeAllListeners('removeListener');this._events=objectCreate(null);this._eventsCount=0;return this;}
listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners){for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}
return this;};EventEmitter.prototype.listeners=function listeners(type){var evlistener;var ret;var events=this._events;if(!events)
ret=[];else
{evlistener=events[type];if(!evlistener)
ret=[];else
if(typeof evlistener==='function')
ret=[evlistener.listener||evlistener];else
ret=unwrapListeners(evlistener);}
return ret;};EventEmitter.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else{return listenerCount.call(emitter,type);}};EventEmitter.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener){return evlistener.length;}}
return 0;}
EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[];};function spliceOne(list,index){for(var i=index,k=i+1,n=list.length;k<n;i+=1,k+=1)
list[i]=list[k];list.pop();}
function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i<n;++i)
copy[i]=arr[i];return copy;}
function unwrapListeners(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}
return ret;}
function objectCreatePolyfill(proto){var F=function(){};F.prototype=proto;return new F();}
function objectKeysPolyfill(obj){var keys=[];for(var k in obj)if(Object.prototype.hasOwnProperty.call(obj,k)){keys.push(k);}
return k;}
function functionBindPolyfill(context){var fn=this;return function(){return fn.apply(context,arguments);};}},{}],63:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}
m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}
if(e===0){e=1-eBias;}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity;}else{m=m+Math.pow(2,mLen);e=e-eBias;}
return(s?-1:1)*m*Math.pow(2,e-mLen);};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax;}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2;}
if(e+eBias>=1){value+=rt/c;}else{value+=rt*Math.pow(2,1-eBias);}
if(value*c>=2){e++;c/=2;}
if(e+eBias>=eMax){m=0;e=eMax;}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias;}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0;}}
for(;mLen>=8;buffer[offset+i]=m&0xff,i+=d,m/=256,mLen-=8){}
e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&0xff,i+=d,e/=256,eLen-=8){}
buffer[offset+i-d]|=s*128;};},{}],64:[function(require,module,exports){if(typeof Object.create==='function'){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}});};}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor();ctor.prototype.constructor=ctor;};}},{}],65:[function(require,module,exports){module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer);};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==='function'&&obj.constructor.isBuffer(obj);}
function isSlowBuffer(obj){return typeof obj.readFloatLE==='function'&&typeof obj.slice==='function'&&isBuffer(obj.slice(0,0));}},{}],66:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=='[object Array]';};},{}],67:[function(require,module,exports){'use strict';var TYPED_OK=typeof Uint8Array!=='undefined'&&typeof Uint16Array!=='undefined'&&typeof Int32Array!=='undefined';function _has(obj,key){return Object.prototype.hasOwnProperty.call(obj,key);}
exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue;}
if(typeof source!=='object'){throw new TypeError(source+'must be non-object');}
for(var p in source){if(_has(source,p)){obj[p]=source[p];}}}
return obj;};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf;}
if(buf.subarray){return buf.subarray(0,size);}
buf.length=size;return buf;};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return;}
for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i];}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length;}
result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length;}
return result;}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i];}},flattenChunks:function(chunks){return[].concat.apply([],chunks);}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped);}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped);}};exports.setTyped(TYPED_OK);},{}],68:[function(require,module,exports){'use strict';function adler32(adler,buf,len,pos){var s1=adler&0xffff|0,s2=adler>>>16&0xffff|0,n=0;while(len!==0){n=len>2000?2000:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0;}while(--n);s1%=65521;s2%=65521;}
return s1|s2<<16|0;}
module.exports=adler32;},{}],69:[function(require,module,exports){'use strict';module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};},{}],70:[function(require,module,exports){'use strict';function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?0xEDB88320^c>>>1:c>>>1;}
table[n]=c;}
return table;}
var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc^=-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&0xFF];}
return crc^-1;}
module.exports=crc32;},{}],71:[function(require,module,exports){'use strict';var utils=require('../utils/common');var trees=require('./trees');var adler32=require('./adler32');var crc32=require('./crc32');var msg=require('./messages');var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=0x20;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=0x03;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode;}
function rank(f){return(f<<1)-(f>4?9:0);}
function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0;}}
function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out;}
if(len===0){return;}
utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0;}}
function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm);}
function put_byte(s,b){s.pending_buf[s.pending++]=b;}
function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&0xff;s.pending_buf[s.pending++]=b&0xff;}
function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size;}
if(len===0){return 0;}
strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start);}else
if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start);}
strm.next_in+=len;strm.total_in+=len;return len;}
function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2;}
if(nice_match>s.lookahead){nice_match=s.lookahead;}
do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue;}
scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break;}
scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len];}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len;}
return s.lookahead;}
function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0;}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0;}while(--n);more+=_w_size;}
if(s.strm.avail_in===0){break;}
n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break;}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0);}
function deflate_stored(s,flush){var max_block_size=0xffff;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5;}
for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}
if(s.lookahead===0){break;}}
s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}}
s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}
return BS_FINISH_DONE;}
if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
return BS_NEED_MORE;}
function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}
if(s.lookahead===0){break;}}
hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;}
if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);}
if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;}while(--s.match_length!==0);s.strstart++;}else
{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask;}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;}
if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}}
s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}
return BS_FINISH_DONE;}
if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
return BS_BLOCK_DONE;}
function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}
if(s.lookahead===0){break;}}
hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;}
s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1;}}
if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart;}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false);}
s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE;}}else{s.match_available=1;s.strstart++;s.lookahead--;}}
if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0;}
s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}
return BS_FINISH_DONE;}
if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
return BS_BLOCK_DONE;}
function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE;}
if(s.lookahead===0){break;}}
s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead;}}}
if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0;}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;}
if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}}
s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}
return BS_FINISH_DONE;}
if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
return BS_BLOCK_DONE;}
function deflate_huff(s,flush){var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE;}
break;}}
s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}}
s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED;}
return BS_FINISH_DONE;}
if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE;}}
return BS_BLOCK_DONE;}
function Config(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func;}
var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0;}
function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0;}
function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR);}
strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap;}
s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK;}
function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state);}
return ret;}
function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR;}
if(strm.state.wrap!==2){return Z_STREAM_ERROR;}
strm.state.gzhead=head;return Z_OK;}
function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR;}
var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6;}
if(windowBits<0){wrap=0;windowBits=-windowBits;}else
if(windowBits>15){wrap=2;windowBits-=16;}
if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR);}
if(windowBits===8){windowBits=9;}
var s=new DeflateState();strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=1*s.lit_bufsize;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm);}
function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY);}
function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR;}
s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR);}
s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE;}else
{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&0xff);put_byte(s,s.gzhead.time>>8&0xff);put_byte(s,s.gzhead.time>>16&0xff);put_byte(s,s.gzhead.time>>24&0xff);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&0xff);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&0xff);put_byte(s,s.gzhead.extra.length>>8&0xff);}
if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0);}
s.gzindex=0;s.status=EXTRA_STATE;}}else
{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0;}else if(s.level<6){level_flags=1;}else if(s.level===6){level_flags=2;}else{level_flags=3;}
header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT;}
header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&0xffff);}
strm.adler=1;}}
if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&0xffff)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break;}}
put_byte(s,s.gzhead.extra[s.gzindex]&0xff);s.gzindex++;}
if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE;}}else
{s.status=NAME_STATE;}}
if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break;}}
if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&0xff;}else{val=0;}
put_byte(s,val);}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
if(val===0){s.gzindex=0;s.status=COMMENT_STATE;}}else
{s.status=COMMENT_STATE;}}
if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break;}}
if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&0xff;}else{val=0;}
put_byte(s,val);}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg);}
if(val===0){s.status=HCRC_STATE;}}else
{s.status=HCRC_STATE;}}
if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm);}
if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&0xff);put_byte(s,strm.adler>>8&0xff);strm.adler=0;s.status=BUSY_STATE;}}else
{s.status=BUSY_STATE;}}
if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK;}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR);}
if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR);}
if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE;}
if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1;}
return Z_OK;}
if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s);}else
if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0;}}}
flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK;}}}
if(flush!==Z_FINISH){return Z_OK;}
if(s.wrap<=0){return Z_STREAM_END;}
if(s.wrap===2){put_byte(s,strm.adler&0xff);put_byte(s,strm.adler>>8&0xff);put_byte(s,strm.adler>>16&0xff);put_byte(s,strm.adler>>24&0xff);put_byte(s,strm.total_in&0xff);put_byte(s,strm.total_in>>8&0xff);put_byte(s,strm.total_in>>16&0xff);put_byte(s,strm.total_in>>24&0xff);}else
{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&0xffff);}
flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap;}
return s.pending!==0?Z_OK:Z_STREAM_END;}
function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR;}
status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE)
{return err(strm,Z_STREAM_ERROR);}
strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK;}
function deflateSetDictionary(strm,dictionary){var dictLength=dictionary.length;var s;var str,n;var wrap;var avail;var next;var input;var tmpDict;if(!strm||!strm.state){return Z_STREAM_ERROR;}
s=strm.state;wrap=s.wrap;if(wrap===2||wrap===1&&s.status!==INIT_STATE||s.lookahead){return Z_STREAM_ERROR;}
if(wrap===1){strm.adler=adler32(strm.adler,dictionary,dictLength,0);}
s.wrap=0;if(dictLength>=s.w_size){if(wrap===0){zero(s.head);s.strstart=0;s.block_start=0;s.insert=0;}
tmpDict=new utils.Buf8(s.w_size);utils.arraySet(tmpDict,dictionary,dictLength-s.w_size,s.w_size,0);dictionary=tmpDict;dictLength=s.w_size;}
avail=strm.avail_in;next=strm.next_in;input=strm.input;strm.avail_in=dictLength;strm.next_in=0;strm.input=dictionary;fill_window(s);while(s.lookahead>=MIN_MATCH){str=s.strstart;n=s.lookahead-(MIN_MATCH-1);do{s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;}while(--n);s.strstart=str;s.lookahead=MIN_MATCH-1;fill_window(s);}
s.strstart+=s.lookahead;s.block_start=s.strstart;s.insert=s.lookahead;s.lookahead=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;strm.next_in=next;strm.input=input;strm.avail_in=avail;s.wrap=wrap;return Z_OK;}
exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateSetDictionary=deflateSetDictionary;exports.deflateInfo='pako deflate (from Nodeca project)';},{"../utils/common":67,"./adler32":68,"./crc32":70,"./messages":72,"./trees":73}],72:[function(require,module,exports){'use strict';module.exports={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'};},{}],73:[function(require,module,exports){'use strict';var utils=require('../utils/common');var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0;}}
var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);function StaticTreeDesc(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length;}
var static_l_desc;var static_d_desc;var static_bl_desc;function TreeDesc(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc;}
function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)];}
function put_short(s,w){s.pending_buf[s.pending++]=w&0xff;s.pending_buf[s.pending++]=w>>>8&0xff;}
function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&0xffff;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size;}else{s.bi_buf|=value<<s.bi_valid&0xffff;s.bi_valid+=length;}}
function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1]);}
function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1;}while(--len>0);return res>>>1;}
function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0;}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&0xff;s.bi_buf>>=8;s.bi_valid-=8;}}
function gen_bitlen(s,desc)
{var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0;}
tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++;}
tree[n*2+1]=bits;if(n>max_code){continue;}
s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base];}
f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits);}}
if(overflow===0){return;}
do{bits=max_length-1;while(s.bl_count[bits]===0){bits--;}
s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2;}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue;}
if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits;}
n--;}}}
function gen_codes(tree,max_code,bl_count)
{var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1;}
for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue;}
tree[n*2]=bi_reverse(next_code[len]++,len);}}
function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code;}}
_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code;}}
dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code;}}
for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0;}
n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++;}
while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++;}
while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++;}
while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++;}
gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5);}
static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS);}
function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0;}
for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0;}
for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0;}
s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0;}
function bi_windup(s)
{if(s.bi_valid>8){put_short(s,s.bi_buf);}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf;}
s.bi_buf=0;s.bi_valid=0;}
function copy_block(s,buf,len,header)
{bi_windup(s);if(header){put_short(s,len);put_short(s,~len);}
utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len;}
function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m];}
function pqdownheap(s,tree,k)
{var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++;}
if(smaller(tree,v,s.heap[j],s.depth)){break;}
s.heap[k]=s.heap[j];k=j;j<<=1;}
s.heap[k]=v;}
function compress_block(s,ltree,dtree)
{var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree);}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra);}
dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra);}}}while(lx<s.last_lit);}
send_code(s,END_BLOCK,ltree);}
function build_tree(s,desc)
{var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0;}else{tree[n*2+1]=0;}}
while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1];}}
desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n);}
node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1);}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count);}
function scan_tree(s,tree,max_code)
{var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3;}
tree[(max_code+1)*2+1]=0xffff;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue;}else if(count<min_count){s.bl_tree[curlen*2]+=count;}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++;}
s.bl_tree[REP_3_6*2]++;}else if(count<=10){s.bl_tree[REPZ_3_10*2]++;}else{s.bl_tree[REPZ_11_138*2]++;}
count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3;}else if(curlen===nextlen){max_count=6;min_count=3;}else{max_count=7;min_count=4;}}}
function send_tree(s,tree,max_code)
{var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3;}
for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue;}else if(count<min_count){do{send_code(s,curlen,s.bl_tree);}while(--count!==0);}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--;}
send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2);}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3);}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7);}
count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3;}else if(curlen===nextlen){max_count=6;min_count=3;}else{max_count=7;min_count=4;}}}
function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break;}}
s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex;}
function send_all_trees(s,lcodes,dcodes,blcodes)
{var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3);}
send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1);}
function detect_data_type(s){var black_mask=0xf3ffc07f;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY;}}
if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT;}
for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT;}}
return Z_BINARY;}
var static_init_done=false;function _tr_init(s)
{if(!static_init_done){tr_static_init();static_init_done=true;}
s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s);}
function _tr_stored_block(s,buf,stored_len,last)
{send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true);}
function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s);}
function _tr_flush_block(s,buf,stored_len,last)
{var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s);}
build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb;}}else{opt_lenb=static_lenb=stored_len+5;}
if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last);}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree);}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree);}
init_block(s);if(last){bi_windup(s);}}
function _tr_tally(s,dist,lc)
{s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&0xff;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&0xff;s.pending_buf[s.l_buf+s.last_lit]=lc&0xff;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++;}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++;}
return s.last_lit===s.lit_bufsize-1;}
exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align;},{"../utils/common":67}],74:[function(require,module,exports){'use strict';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;}
module.exports=ZStream;},{}],75:[function(require,module,exports){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==='.'){parts.splice(i,1);}else if(last==='..'){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}
if(allowAboveRoot){for(;up--;up){parts.unshift('..');}}
return parts;}
var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1);};exports.resolve=function(){var resolvedPath='',resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=='string'){throw new TypeError('Arguments to path.resolve must be strings');}else if(!path){continue;}
resolvedPath=path+'/'+resolvedPath;resolvedAbsolute=path.charAt(0)==='/';}
resolvedPath=normalizeArray(filter(resolvedPath.split('/'),function(p){return!!p;}),!resolvedAbsolute).join('/');return(resolvedAbsolute?'/':'')+resolvedPath||'.';};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==='/';path=normalizeArray(filter(path.split('/'),function(p){return!!p;}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.';}
if(path&&trailingSlash){path+='/';}
return(isAbsolute?'/':'')+path;};exports.isAbsolute=function(path){return path.charAt(0)==='/';};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=='string'){throw new TypeError('Arguments to path.join must be strings');}
return p;}).join('/'));};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=='')break;}
var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=='')break;}
if(start>end)return[];return arr.slice(start,end-start+1);}
var fromParts=trim(from.split('/'));var toParts=trim(to.split('/'));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}
var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push('..');}
outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join('/');};exports.sep='/';exports.delimiter=':';exports.dirname=function(path){var result=splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return'.';}
if(dir){dir=dir.substr(0,dir.length-1);}
return root+dir;};exports.basename=function(path,ext){var f=splitPath(path)[2];if(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length);}
return f;};exports.extname=function(path){return splitPath(path)[3];};function filter(xs,f){if(xs.filter)return xs.filter(f);var res=[];for(var i=0;i<xs.length;i++){if(f(xs[i],i,xs))res.push(xs[i]);}
return res;}
var substr='ab'.substr(-1)==='b'?function(str,start,len){return str.substr(start,len);}:function(str,start,len){if(start<0)start=str.length+start;return str.substr(start,len);};}).call(this,require('_process'));},{"_process":77}],76:[function(require,module,exports){(function(process){'use strict';if(!process.version||process.version.indexOf('v0.')===0||process.version.indexOf('v1.')===0&&process.version.indexOf('v1.8.')!==0){module.exports=nextTick;}else{module.exports=process.nextTick;}
function nextTick(fn,arg1,arg2,arg3){if(typeof fn!=='function'){throw new TypeError('"callback" argument must be a function');}
var len=arguments.length;var args,i;switch(len){case 0:case 1:return process.nextTick(fn);case 2:return process.nextTick(function afterTickOne(){fn.call(null,arg1);});case 3:return process.nextTick(function afterTickTwo(){fn.call(null,arg1,arg2);});case 4:return process.nextTick(function afterTickThree(){fn.call(null,arg1,arg2,arg3);});default:args=new Array(len-1);i=0;while(i<args.length){args[i++]=arguments[i];}
return process.nextTick(function afterTick(){fn.apply(null,args);});}}}).call(this,require('_process'));},{"_process":77}],77:[function(require,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error('setTimeout has not been defined');}
function defaultClearTimeout(){throw new Error('clearTimeout has not been defined');}
(function(){try{if(typeof setTimeout==='function'){cachedSetTimeout=setTimeout;}else{cachedSetTimeout=defaultSetTimout;}}catch(e){cachedSetTimeout=defaultSetTimout;}
try{if(typeof clearTimeout==='function'){cachedClearTimeout=clearTimeout;}else{cachedClearTimeout=defaultClearTimeout;}}catch(e){cachedClearTimeout=defaultClearTimeout;}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0);}
if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0);}
try{return cachedSetTimeout(fun,0);}catch(e){try{return cachedSetTimeout.call(null,fun,0);}catch(e){return cachedSetTimeout.call(this,fun,0);}}}
function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker);}
if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker);}
try{return cachedClearTimeout(marker);}catch(e){try{return cachedClearTimeout.call(null,marker);}catch(e){return cachedClearTimeout.call(this,marker);}}}
var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return;}
draining=false;if(currentQueue.length){queue=currentQueue.concat(queue);}else{queueIndex=-1;}
if(queue.length){drainQueue();}}
function drainQueue(){if(draining){return;}
var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run();}}
queueIndex=-1;len=queue.length;}
currentQueue=null;draining=false;runClearTimeout(timeout);}
process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i];}}
queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue);}};function Item(fun,array){this.fun=fun;this.array=array;}
Item.prototype.run=function(){this.fun.apply(null,this.array);};process.title='browser';process.browser=true;process.env={};process.argv=[];process.version='';process.versions={};function noop(){}
process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[];};process.binding=function(name){throw new Error('process.binding is not supported');};process.cwd=function(){return'/';};process.chdir=function(dir){throw new Error('process.chdir is not supported');};process.umask=function(){return 0;};},{}],78:[function(require,module,exports){'use strict';function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop);}
module.exports=function(qs,sep,eq,options){sep=sep||'&';eq=eq||'=';var obj={};if(typeof qs!=='string'||qs.length===0){return obj;}
var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1000;if(options&&typeof options.maxKeys==='number'){maxKeys=options.maxKeys;}
var len=qs.length;if(maxKeys>0&&len>maxKeys){len=maxKeys;}
for(var i=0;i<len;++i){var x=qs[i].replace(regexp,'%20'),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1);}else{kstr=x;vstr='';}
k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v;}else if(isArray(obj[k])){obj[k].push(v);}else{obj[k]=[obj[k],v];}}
return obj;};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==='[object Array]';};},{}],79:[function(require,module,exports){'use strict';var stringifyPrimitive=function(v){switch(typeof v){case'string':return v;case'boolean':return v?'true':'false';case'number':return isFinite(v)?v:'';default:return'';}};module.exports=function(obj,sep,eq,name){sep=sep||'&';eq=eq||'=';if(obj===null){obj=undefined;}
if(typeof obj==='object'){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return map(obj[k],function(v){return ks+encodeURIComponent(stringifyPrimitive(v));}).join(sep);}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]));}}).join(sep);}
if(!name)return'';return encodeURIComponent(stringifyPrimitive(name))+eq+
encodeURIComponent(stringifyPrimitive(obj));};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==='[object Array]';};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i<xs.length;i++){res.push(f(xs[i],i));}
return res;}
var objectKeys=Object.keys||function(obj){var res=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))res.push(key);}
return res;};},{}],80:[function(require,module,exports){'use strict';exports.decode=exports.parse=require('./decode');exports.encode=exports.stringify=require('./encode');},{"./decode":78,"./encode":79}],81:[function(require,module,exports){module.exports=require("./lib/_stream_duplex.js");},{"./lib/_stream_duplex.js":82}],82:[function(require,module,exports){'use strict';var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){keys.push(key);}return keys;};module.exports=Duplex;var processNextTick=require('process-nextick-args');var util=require('core-util-is');util.inherits=require('inherits');var Readable=require('./_stream_readable');var Writable=require('./_stream_writable');util.inherits(Duplex,Readable);var keys=objectKeys(Writable.prototype);for(var v=0;v<keys.length;v++){var method=keys[v];if(!Duplex.prototype[method])Duplex.prototype[method]=Writable.prototype[method];}
function Duplex(options){if(!(this instanceof Duplex))return new Duplex(options);Readable.call(this,options);Writable.call(this,options);if(options&&options.readable===false)this.readable=false;if(options&&options.writable===false)this.writable=false;this.allowHalfOpen=true;if(options&&options.allowHalfOpen===false)this.allowHalfOpen=false;this.once('end',onend);}
function onend(){if(this.allowHalfOpen||this._writableState.ended)return;processNextTick(onEndNT,this);}
function onEndNT(self){self.end();}
function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i);}}},{"./_stream_readable":84,"./_stream_writable":86,"core-util-is":61,"inherits":64,"process-nextick-args":76}],83:[function(require,module,exports){'use strict';module.exports=PassThrough;var Transform=require('./_stream_transform');var util=require('core-util-is');util.inherits=require('inherits');util.inherits(PassThrough,Transform);function PassThrough(options){if(!(this instanceof PassThrough))return new PassThrough(options);Transform.call(this,options);}
PassThrough.prototype._transform=function(chunk,encoding,cb){cb(null,chunk);};},{"./_stream_transform":85,"core-util-is":61,"inherits":64}],84:[function(require,module,exports){(function(process){'use strict';module.exports=Readable;var processNextTick=require('process-nextick-args');var isArray=require('isarray');var Duplex;Readable.ReadableState=ReadableState;var EE=require('events').EventEmitter;var EElistenerCount=function(emitter,type){return emitter.listeners(type).length;};var Stream;(function(){try{Stream=require('st'+'ream');}catch(_){}finally{if(!Stream)Stream=require('events').EventEmitter;}})();var Buffer=require('buffer').Buffer;var bufferShim=require('buffer-shims');var util=require('core-util-is');util.inherits=require('inherits');var debugUtil=require('util');var debug=void 0;if(debugUtil&&debugUtil.debuglog){debug=debugUtil.debuglog('stream');}else{debug=function(){};}
var BufferList=require('./internal/streams/BufferList');var StringDecoder;util.inherits(Readable,Stream);function prependListener(emitter,event,fn){if(typeof emitter.prependListener==='function'){return emitter.prependListener(event,fn);}else{if(!emitter._events||!emitter._events[event])emitter.on(event,fn);else if(isArray(emitter._events[event]))emitter._events[event].unshift(fn);else emitter._events[event]=[fn,emitter._events[event]];}}
function ReadableState(options,stream){Duplex=Duplex||require('./_stream_duplex');options=options||{};this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.readableObjectMode;var hwm=options.highWaterMark;var defaultHwm=this.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=~~this.highWaterMark;this.buffer=new BufferList();this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.ended=false;this.endEmitted=false;this.reading=false;this.sync=true;this.needReadable=false;this.emittedReadable=false;this.readableListening=false;this.resumeScheduled=false;this.defaultEncoding=options.defaultEncoding||'utf8';this.ranOut=false;this.awaitDrain=0;this.readingMore=false;this.decoder=null;this.encoding=null;if(options.encoding){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;this.decoder=new StringDecoder(options.encoding);this.encoding=options.encoding;}}
function Readable(options){Duplex=Duplex||require('./_stream_duplex');if(!(this instanceof Readable))return new Readable(options);this._readableState=new ReadableState(options,this);this.readable=true;if(options&&typeof options.read==='function')this._read=options.read;Stream.call(this);}
Readable.prototype.push=function(chunk,encoding){var state=this._readableState;if(!state.objectMode&&typeof chunk==='string'){encoding=encoding||state.defaultEncoding;if(encoding!==state.encoding){chunk=bufferShim.from(chunk,encoding);encoding='';}}
return readableAddChunk(this,state,chunk,encoding,false);};Readable.prototype.unshift=function(chunk){var state=this._readableState;return readableAddChunk(this,state,chunk,'',true);};Readable.prototype.isPaused=function(){return this._readableState.flowing===false;};function readableAddChunk(stream,state,chunk,encoding,addToFront){var er=chunkInvalid(state,chunk);if(er){stream.emit('error',er);}else if(chunk===null){state.reading=false;onEofChunk(stream,state);}else if(state.objectMode||chunk&&chunk.length>0){if(state.ended&&!addToFront){var e=new Error('stream.push() after EOF');stream.emit('error',e);}else if(state.endEmitted&&addToFront){var _e=new Error('stream.unshift() after end event');stream.emit('error',_e);}else{var skipAdd;if(state.decoder&&!addToFront&&!encoding){chunk=state.decoder.write(chunk);skipAdd=!state.objectMode&&chunk.length===0;}
if(!addToFront)state.reading=false;if(!skipAdd){if(state.flowing&&state.length===0&&!state.sync){stream.emit('data',chunk);stream.read(0);}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream);}}
maybeReadMore(stream,state);}}else if(!addToFront){state.reading=false;}
return needMoreData(state);}
function needMoreData(state){return!state.ended&&(state.needReadable||state.length<state.highWaterMark||state.length===0);}
Readable.prototype.setEncoding=function(enc){if(!StringDecoder)StringDecoder=require('string_decoder/').StringDecoder;this._readableState.decoder=new StringDecoder(enc);this._readableState.encoding=enc;return this;};var MAX_HWM=0x800000;function computeNewHighWaterMark(n){if(n>=MAX_HWM){n=MAX_HWM;}else{n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++;}
return n;}
function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length;}
if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;if(!state.ended){state.needReadable=true;return 0;}
return state.length;}
Readable.prototype.read=function(n){debug('read',n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug('read: emitReadable',state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null;}
n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null;}
var doRead=state.needReadable;debug('need readable',doRead);if(state.length===0||state.length-n<state.highWaterMark){doRead=true;debug('length less than watermark',doRead);}
if(state.ended||state.reading){doRead=false;debug('reading or ended',doRead);}else if(doRead){debug('do read');state.reading=true;state.sync=true;if(state.length===0)state.needReadable=true;this._read(state.highWaterMark);state.sync=false;if(!state.reading)n=howMuchToRead(nOrig,state);}
var ret;if(n>0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0;}else{state.length-=n;}
if(state.length===0){if(!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended)endReadable(this);}
if(ret!==null)this.emit('data',ret);return ret;};function chunkInvalid(state,chunk){var er=null;if(!Buffer.isBuffer(chunk)&&typeof chunk!=='string'&&chunk!==null&&chunk!==undefined&&!state.objectMode){er=new TypeError('Invalid non-string/buffer chunk');}
return er;}
function onEofChunk(stream,state){if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length;}}
state.ended=true;emitReadable(stream);}
function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug('emitReadable',state.flowing);state.emittedReadable=true;if(state.sync)processNextTick(emitReadable_,stream);else emitReadable_(stream);}}
function emitReadable_(stream){debug('emit readable');stream.emit('readable');flow(stream);}
function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;processNextTick(maybeReadMore_,stream,state);}}
function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length<state.highWaterMark){debug('maybeReadMore read 0');stream.read(0);if(len===state.length)
break;else len=state.length;}
state.readingMore=false;}
Readable.prototype._read=function(n){this.emit('error',new Error('_read() is not implemented'));};Readable.prototype.pipe=function(dest,pipeOpts){var src=this;var state=this._readableState;switch(state.pipesCount){case 0:state.pipes=dest;break;case 1:state.pipes=[state.pipes,dest];break;default:state.pipes.push(dest);break;}
state.pipesCount+=1;debug('pipe count=%d opts=%j',state.pipesCount,pipeOpts);var doEnd=(!pipeOpts||pipeOpts.end!==false)&&dest!==process.stdout&&dest!==process.stderr;var endFn=doEnd?onend:cleanup;if(state.endEmitted)processNextTick(endFn);else src.once('end',endFn);dest.on('unpipe',onunpipe);function onunpipe(readable){debug('onunpipe');if(readable===src){cleanup();}}
function onend(){debug('onend');dest.end();}
var ondrain=pipeOnDrain(src);dest.on('drain',ondrain);var cleanedUp=false;function cleanup(){debug('cleanup');dest.removeListener('close',onclose);dest.removeListener('finish',onfinish);dest.removeListener('drain',ondrain);dest.removeListener('error',onerror);dest.removeListener('unpipe',onunpipe);src.removeListener('end',onend);src.removeListener('end',cleanup);src.removeListener('data',ondata);cleanedUp=true;if(state.awaitDrain&&(!dest._writableState||dest._writableState.needDrain))ondrain();}
var increasedAwaitDrain=false;src.on('data',ondata);function ondata(chunk){debug('ondata');increasedAwaitDrain=false;var ret=dest.write(chunk);if(false===ret&&!increasedAwaitDrain){if((state.pipesCount===1&&state.pipes===dest||state.pipesCount>1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug('false write response, pause',src._readableState.awaitDrain);src._readableState.awaitDrain++;increasedAwaitDrain=true;}
src.pause();}}
function onerror(er){debug('onerror',er);unpipe();dest.removeListener('error',onerror);if(EElistenerCount(dest,'error')===0)dest.emit('error',er);}
prependListener(dest,'error',onerror);function onclose(){dest.removeListener('finish',onfinish);unpipe();}
dest.once('close',onclose);function onfinish(){debug('onfinish');dest.removeListener('close',onclose);unpipe();}
dest.once('finish',onfinish);function unpipe(){debug('unpipe');src.unpipe(dest);}
dest.emit('pipe',src);if(!state.flowing){debug('pipe resume');src.resume();}
return dest;};function pipeOnDrain(src){return function(){var state=src._readableState;debug('pipeOnDrain',state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,'data')){state.flowing=true;flow(src);}};}
Readable.prototype.unpipe=function(dest){var state=this._readableState;if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit('unpipe',this);return this;}
if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i<len;i++){dests[i].emit('unpipe',this);}return this;}
var index=indexOf(state.pipes,dest);if(index===-1)return this;state.pipes.splice(index,1);state.pipesCount-=1;if(state.pipesCount===1)state.pipes=state.pipes[0];dest.emit('unpipe',this);return this;};Readable.prototype.on=function(ev,fn){var res=Stream.prototype.on.call(this,ev,fn);if(ev==='data'){if(this._readableState.flowing!==false)this.resume();}else if(ev==='readable'){var state=this._readableState;if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.emittedReadable=false;if(!state.reading){processNextTick(nReadingNextTick,this);}else if(state.length){emitReadable(this,state);}}}
return res;};Readable.prototype.addListener=Readable.prototype.on;function nReadingNextTick(self){debug('readable nexttick read 0');self.read(0);}
Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug('resume');state.flowing=true;resume(this,state);}
return this;};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;processNextTick(resume_,stream,state);}}
function resume_(stream,state){if(!state.reading){debug('resume read 0');stream.read(0);}
state.resumeScheduled=false;state.awaitDrain=0;stream.emit('resume');flow(stream);if(state.flowing&&!state.reading)stream.read(0);}
Readable.prototype.pause=function(){debug('call pause flowing=%j',this._readableState.flowing);if(false!==this._readableState.flowing){debug('pause');this._readableState.flowing=false;this.emit('pause');}
return this;};function flow(stream){var state=stream._readableState;debug('flow',state.flowing);while(state.flowing&&stream.read()!==null){}}
Readable.prototype.wrap=function(stream){var state=this._readableState;var paused=false;var self=this;stream.on('end',function(){debug('wrapped end');if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)self.push(chunk);}
self.push(null);});stream.on('data',function(chunk){debug('wrapped data');if(state.decoder)chunk=state.decoder.write(chunk);if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=self.push(chunk);if(!ret){paused=true;stream.pause();}});for(var i in stream){if(this[i]===undefined&&typeof stream[i]==='function'){this[i]=function(method){return function(){return stream[method].apply(stream,arguments);};}(i);}}
var events=['error','close','destroy','pause','resume'];forEach(events,function(ev){stream.on(ev,self.emit.bind(self,ev));});self._read=function(n){debug('wrapped _read',n);if(paused){paused=false;stream.resume();}};return self;};Readable._fromList=fromList;function fromList(n,state){if(state.length===0)return null;var ret;if(state.objectMode)ret=state.buffer.shift();else if(!n||n>=state.length){if(state.decoder)ret=state.buffer.join('');else if(state.buffer.length===1)ret=state.buffer.head.data;else ret=state.buffer.concat(state.length);state.buffer.clear();}else{ret=fromListPartial(n,state.buffer,state.decoder);}
return ret;}
function fromListPartial(n,list,hasStrings){var ret;if(n<list.head.data.length){ret=list.head.data.slice(0,n);list.head.data=list.head.data.slice(n);}else if(n===list.head.data.length){ret=list.shift();}else{ret=hasStrings?copyFromBufferString(n,list):copyFromBuffer(n,list);}
return ret;}
function copyFromBufferString(n,list){var p=list.head;var c=1;var ret=p.data;n-=ret.length;while(p=p.next){var str=p.data;var nb=n>str.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null;}else{list.head=p;p.data=str.slice(nb);}
break;}
++c;}
list.length-=c;return ret;}
function copyFromBuffer(n,list){var ret=bufferShim.allocUnsafe(n);var p=list.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)list.head=p.next;else list.head=list.tail=null;}else{list.head=p;p.data=buf.slice(nb);}
break;}
++c;}
list.length-=c;return ret;}
function endReadable(stream){var state=stream._readableState;if(state.length>0)throw new Error('"endReadable()" called on non-empty stream');if(!state.endEmitted){state.ended=true;processNextTick(endReadableNT,state,stream);}}
function endReadableNT(state,stream){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit('end');}}
function forEach(xs,f){for(var i=0,l=xs.length;i<l;i++){f(xs[i],i);}}
function indexOf(xs,x){for(var i=0,l=xs.length;i<l;i++){if(xs[i]===x)return i;}
return-1;}}).call(this,require('_process'));},{"./_stream_duplex":82,"./internal/streams/BufferList":87,"_process":77,"buffer":60,"buffer-shims":59,"core-util-is":61,"events":62,"inherits":64,"isarray":66,"process-nextick-args":76,"string_decoder/":93,"util":55}],85:[function(require,module,exports){'use strict';module.exports=Transform;var Duplex=require('./_stream_duplex');var util=require('core-util-is');util.inherits=require('inherits');util.inherits(Transform,Duplex);function TransformState(stream){this.afterTransform=function(er,data){return afterTransform(stream,er,data);};this.needTransform=false;this.transforming=false;this.writecb=null;this.writechunk=null;this.writeencoding=null;}
function afterTransform(stream,er,data){var ts=stream._transformState;ts.transforming=false;var cb=ts.writecb;if(!cb)return stream.emit('error',new Error('no writecb in Transform class'));ts.writechunk=null;ts.writecb=null;if(data!==null&&data!==undefined)stream.push(data);cb(er);var rs=stream._readableState;rs.reading=false;if(rs.needReadable||rs.length<rs.highWaterMark){stream._read(rs.highWaterMark);}}
function Transform(options){if(!(this instanceof Transform))return new Transform(options);Duplex.call(this,options);this._transformState=new TransformState(this);var stream=this;this._readableState.needReadable=true;this._readableState.sync=false;if(options){if(typeof options.transform==='function')this._transform=options.transform;if(typeof options.flush==='function')this._flush=options.flush;}
this.once('prefinish',function(){if(typeof this._flush==='function')this._flush(function(er,data){done(stream,er,data);});else done(stream);});}
Transform.prototype.push=function(chunk,encoding){this._transformState.needTransform=false;return Duplex.prototype.push.call(this,chunk,encoding);};Transform.prototype._transform=function(chunk,encoding,cb){throw new Error('_transform() is not implemented');};Transform.prototype._write=function(chunk,encoding,cb){var ts=this._transformState;ts.writecb=cb;ts.writechunk=chunk;ts.writeencoding=encoding;if(!ts.transforming){var rs=this._readableState;if(ts.needTransform||rs.needReadable||rs.length<rs.highWaterMark)this._read(rs.highWaterMark);}};Transform.prototype._read=function(n){var ts=this._transformState;if(ts.writechunk!==null&&ts.writecb&&!ts.transforming){ts.transforming=true;this._transform(ts.writechunk,ts.writeencoding,ts.afterTransform);}else{ts.needTransform=true;}};function done(stream,er,data){if(er)return stream.emit('error',er);if(data!==null&&data!==undefined)stream.push(data);var ws=stream._writableState;var ts=stream._transformState;if(ws.length)throw new Error('Calling transform done when ws.length != 0');if(ts.transforming)throw new Error('Calling transform done when still transforming');return stream.push(null);}},{"./_stream_duplex":82,"core-util-is":61,"inherits":64}],86:[function(require,module,exports){(function(process){'use strict';module.exports=Writable;var processNextTick=require('process-nextick-args');var asyncWrite=!process.browser&&['v0.10','v0.9.'].indexOf(process.version.slice(0,5))>-1?setImmediate:processNextTick;var Duplex;Writable.WritableState=WritableState;var util=require('core-util-is');util.inherits=require('inherits');var internalUtil={deprecate:require('util-deprecate')};var Stream;(function(){try{Stream=require('st'+'ream');}catch(_){}finally{if(!Stream)Stream=require('events').EventEmitter;}})();var Buffer=require('buffer').Buffer;var bufferShim=require('buffer-shims');util.inherits(Writable,Stream);function nop(){}
function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb;this.next=null;}
function WritableState(options,stream){Duplex=Duplex||require('./_stream_duplex');options=options||{};this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.writableObjectMode;var hwm=options.highWaterMark;var defaultHwm=this.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=~~this.highWaterMark;this.needDrain=false;this.ending=false;this.ended=false;this.finished=false;var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;this.defaultEncoding=options.defaultEncoding||'utf8';this.length=0;this.writing=false;this.corked=0;this.sync=true;this.bufferProcessing=false;this.onwrite=function(er){onwrite(stream,er);};this.writecb=null;this.writelen=0;this.bufferedRequest=null;this.lastBufferedRequest=null;this.pendingcb=0;this.prefinished=false;this.errorEmitted=false;this.bufferedRequestCount=0;this.corkedRequestsFree=new CorkedRequest(this);}
WritableState.prototype.getBuffer=function getBuffer(){var current=this.bufferedRequest;var out=[];while(current){out.push(current);current=current.next;}
return out;};(function(){try{Object.defineProperty(WritableState.prototype,'buffer',{get:internalUtil.deprecate(function(){return this.getBuffer();},'_writableState.buffer is deprecated. Use _writableState.getBuffer '+'instead.')});}catch(_){}})();var realHasInstance;if(typeof Symbol==='function'&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==='function'){realHasInstance=Function.prototype[Symbol.hasInstance];Object.defineProperty(Writable,Symbol.hasInstance,{value:function(object){if(realHasInstance.call(this,object))return true;return object&&object._writableState instanceof WritableState;}});}else{realHasInstance=function(object){return object instanceof this;};}
function Writable(options){Duplex=Duplex||require('./_stream_duplex');if(!realHasInstance.call(Writable,this)&&!(this instanceof Duplex)){return new Writable(options);}
this._writableState=new WritableState(options,this);this.writable=true;if(options){if(typeof options.write==='function')this._write=options.write;if(typeof options.writev==='function')this._writev=options.writev;}
Stream.call(this);}
Writable.prototype.pipe=function(){this.emit('error',new Error('Cannot pipe, not readable'));};function writeAfterEnd(stream,cb){var er=new Error('write after end');stream.emit('error',er);processNextTick(cb,er);}
function validChunk(stream,state,chunk,cb){var valid=true;var er=false;if(chunk===null){er=new TypeError('May not write null values to stream');}else if(!Buffer.isBuffer(chunk)&&typeof chunk!=='string'&&chunk!==undefined&&!state.objectMode){er=new TypeError('Invalid non-string/buffer chunk');}
if(er){stream.emit('error',er);processNextTick(cb,er);valid=false;}
return valid;}
Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;if(typeof encoding==='function'){cb=encoding;encoding=null;}
if(Buffer.isBuffer(chunk))encoding='buffer';else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=='function')cb=nop;if(state.ended)writeAfterEnd(this,cb);else if(validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,chunk,encoding,cb);}
return ret;};Writable.prototype.cork=function(){var state=this._writableState;state.corked++;};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state);}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){if(typeof encoding==='string')encoding=encoding.toLowerCase();if(!(['hex','utf8','utf-8','ascii','binary','base64','ucs2','ucs-2','utf16le','utf-16le','raw'].indexOf((encoding+'').toLowerCase())>-1))throw new TypeError('Unknown encoding: '+encoding);this._writableState.defaultEncoding=encoding;return this;};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==='string'){chunk=bufferShim.from(chunk,encoding);}
return chunk;}
function writeOrBuffer(stream,state,chunk,encoding,cb){chunk=decodeChunk(state,chunk,encoding);if(Buffer.isBuffer(chunk))encoding='buffer';var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length<state.highWaterMark;if(!ret)state.needDrain=true;if(state.writing||state.corked){var last=state.lastBufferedRequest;state.lastBufferedRequest=new WriteReq(chunk,encoding,cb);if(last){last.next=state.lastBufferedRequest;}else{state.bufferedRequest=state.lastBufferedRequest;}
state.bufferedRequestCount+=1;}else{doWrite(stream,state,false,len,chunk,encoding,cb);}
return ret;}
function doWrite(stream,state,writev,len,chunk,encoding,cb){state.writelen=len;state.writecb=cb;state.writing=true;state.sync=true;if(writev)stream._writev(chunk,state.onwrite);else stream._write(chunk,encoding,state.onwrite);state.sync=false;}
function onwriteError(stream,state,sync,er,cb){--state.pendingcb;if(sync)processNextTick(cb,er);else cb(er);stream._writableState.errorEmitted=true;stream.emit('error',er);}
function onwriteStateUpdate(state){state.writing=false;state.writecb=null;state.length-=state.writelen;state.writelen=0;}
function onwrite(stream,er){var state=stream._writableState;var sync=state.sync;var cb=state.writecb;onwriteStateUpdate(state);if(er)onwriteError(stream,state,sync,er,cb);else{var finished=needFinish(state);if(!finished&&!state.corked&&!state.bufferProcessing&&state.bufferedRequest){clearBuffer(stream,state);}
if(sync){asyncWrite(afterWrite,stream,state,finished,cb);}else{afterWrite(stream,state,finished,cb);}}}
function afterWrite(stream,state,finished,cb){if(!finished)onwriteDrain(stream,state);state.pendingcb--;cb();finishMaybe(stream,state);}
function onwriteDrain(stream,state){if(state.length===0&&state.needDrain){state.needDrain=false;stream.emit('drain');}}
function clearBuffer(stream,state){state.bufferProcessing=true;var entry=state.bufferedRequest;if(stream._writev&&entry&&entry.next){var l=state.bufferedRequestCount;var buffer=new Array(l);var holder=state.corkedRequestsFree;holder.entry=entry;var count=0;while(entry){buffer[count]=entry;entry=entry.next;count+=1;}
doWrite(stream,state,true,state.length,buffer,'',holder.finish);state.pendingcb++;state.lastBufferedRequest=null;if(holder.next){state.corkedRequestsFree=holder.next;holder.next=null;}else{state.corkedRequestsFree=new CorkedRequest(state);}}else{while(entry){var chunk=entry.chunk;var encoding=entry.encoding;var cb=entry.callback;var len=state.objectMode?1:chunk.length;doWrite(stream,state,false,len,chunk,encoding,cb);entry=entry.next;if(state.writing){break;}}
if(entry===null)state.lastBufferedRequest=null;}
state.bufferedRequestCount=0;state.bufferedRequest=entry;state.bufferProcessing=false;}
Writable.prototype._write=function(chunk,encoding,cb){cb(new Error('_write() is not implemented'));};Writable.prototype._writev=null;Writable.prototype.end=function(chunk,encoding,cb){var state=this._writableState;if(typeof chunk==='function'){cb=chunk;chunk=null;encoding=null;}else if(typeof encoding==='function'){cb=encoding;encoding=null;}
if(chunk!==null&&chunk!==undefined)this.write(chunk,encoding);if(state.corked){state.corked=1;this.uncork();}
if(!state.ending&&!state.finished)endWritable(this,state,cb);};function needFinish(state){return state.ending&&state.length===0&&state.bufferedRequest===null&&!state.finished&&!state.writing;}
function prefinish(stream,state){if(!state.prefinished){state.prefinished=true;stream.emit('prefinish');}}
function finishMaybe(stream,state){var need=needFinish(state);if(need){if(state.pendingcb===0){prefinish(stream,state);state.finished=true;stream.emit('finish');}else{prefinish(stream,state);}}
return need;}
function endWritable(stream,state,cb){state.ending=true;finishMaybe(stream,state);if(cb){if(state.finished)processNextTick(cb);else stream.once('finish',cb);}
state.ended=true;stream.writable=false;}
function CorkedRequest(state){var _this=this;this.next=null;this.entry=null;this.finish=function(err){var entry=_this.entry;_this.entry=null;while(entry){var cb=entry.callback;state.pendingcb--;cb(err);entry=entry.next;}
if(state.corkedRequestsFree){state.corkedRequestsFree.next=_this;}else{state.corkedRequestsFree=_this;}};}}).call(this,require('_process'));},{"./_stream_duplex":82,"_process":77,"buffer":60,"buffer-shims":59,"core-util-is":61,"events":62,"inherits":64,"process-nextick-args":76,"util-deprecate":94}],87:[function(require,module,exports){'use strict';var Buffer=require('buffer').Buffer;var bufferShim=require('buffer-shims');module.exports=BufferList;function BufferList(){this.head=null;this.tail=null;this.length=0;}
BufferList.prototype.push=function(v){var entry={data:v,next:null};if(this.length>0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length;};BufferList.prototype.unshift=function(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length;};BufferList.prototype.shift=function(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret;};BufferList.prototype.clear=function(){this.head=this.tail=null;this.length=0;};BufferList.prototype.join=function(s){if(this.length===0)return'';var p=this.head;var ret=''+p.data;while(p=p.next){ret+=s+p.data;}return ret;};BufferList.prototype.concat=function(n){if(this.length===0)return bufferShim.alloc(0);if(this.length===1)return this.head.data;var ret=bufferShim.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){p.data.copy(ret,i);i+=p.data.length;p=p.next;}
return ret;};},{"buffer":60,"buffer-shims":59}],88:[function(require,module,exports){module.exports=require("./lib/_stream_passthrough.js");},{"./lib/_stream_passthrough.js":83}],89:[function(require,module,exports){(function(process){var Stream=function(){try{return require('st'+'ream');}catch(_){}}();exports=module.exports=require('./lib/_stream_readable.js');exports.Stream=Stream||exports;exports.Readable=exports;exports.Writable=require('./lib/_stream_writable.js');exports.Duplex=require('./lib/_stream_duplex.js');exports.Transform=require('./lib/_stream_transform.js');exports.PassThrough=require('./lib/_stream_passthrough.js');if(!process.browser&&process.env.READABLE_STREAM==='disable'&&Stream){module.exports=Stream;}}).call(this,require('_process'));},{"./lib/_stream_duplex.js":82,"./lib/_stream_passthrough.js":83,"./lib/_stream_readable.js":84,"./lib/_stream_transform.js":85,"./lib/_stream_writable.js":86,"_process":77}],90:[function(require,module,exports){module.exports=require("./lib/_stream_transform.js");},{"./lib/_stream_transform.js":85}],91:[function(require,module,exports){module.exports=require("./lib/_stream_writable.js");},{"./lib/_stream_writable.js":86}],92:[function(require,module,exports){module.exports=Stream;var EE=require('events').EventEmitter;var inherits=require('inherits');inherits(Stream,EE);Stream.Readable=require('readable-stream/readable.js');Stream.Writable=require('readable-stream/writable.js');Stream.Duplex=require('readable-stream/duplex.js');Stream.Transform=require('readable-stream/transform.js');Stream.PassThrough=require('readable-stream/passthrough.js');Stream.Stream=Stream;function Stream(){EE.call(this);}
Stream.prototype.pipe=function(dest,options){var source=this;function ondata(chunk){if(dest.writable){if(false===dest.write(chunk)&&source.pause){source.pause();}}}
source.on('data',ondata);function ondrain(){if(source.readable&&source.resume){source.resume();}}
dest.on('drain',ondrain);if(!dest._isStdio&&(!options||options.end!==false)){source.on('end',onend);source.on('close',onclose);}
var didOnEnd=false;function onend(){if(didOnEnd)return;didOnEnd=true;dest.end();}
function onclose(){if(didOnEnd)return;didOnEnd=true;if(typeof dest.destroy==='function')dest.destroy();}
function onerror(er){cleanup();if(EE.listenerCount(this,'error')===0){throw er;}}
source.on('error',onerror);dest.on('error',onerror);function cleanup(){source.removeListener('data',ondata);dest.removeListener('drain',ondrain);source.removeListener('end',onend);source.removeListener('close',onclose);source.removeListener('error',onerror);dest.removeListener('error',onerror);source.removeListener('end',cleanup);source.removeListener('close',cleanup);dest.removeListener('close',cleanup);}
source.on('end',cleanup);source.on('close',cleanup);dest.on('close',cleanup);dest.emit('pipe',source);return dest;};},{"events":62,"inherits":64,"readable-stream/duplex.js":81,"readable-stream/passthrough.js":88,"readable-stream/readable.js":89,"readable-stream/transform.js":90,"readable-stream/writable.js":91}],93:[function(require,module,exports){var Buffer=require('buffer').Buffer;var isBufferEncoding=Buffer.isEncoding||function(encoding){switch(encoding&&encoding.toLowerCase()){case'hex':case'utf8':case'utf-8':case'ascii':case'binary':case'base64':case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':case'raw':return true;default:return false;}};function assertEncoding(encoding){if(encoding&&!isBufferEncoding(encoding)){throw new Error('Unknown encoding: '+encoding);}}
var StringDecoder=exports.StringDecoder=function(encoding){this.encoding=(encoding||'utf8').toLowerCase().replace(/[-_]/,'');assertEncoding(encoding);switch(this.encoding){case'utf8':this.surrogateSize=3;break;case'ucs2':case'utf16le':this.surrogateSize=2;this.detectIncompleteChar=utf16DetectIncompleteChar;break;case'base64':this.surrogateSize=3;this.detectIncompleteChar=base64DetectIncompleteChar;break;default:this.write=passThroughWrite;return;}
this.charBuffer=new Buffer(6);this.charReceived=0;this.charLength=0;};StringDecoder.prototype.write=function(buffer){var charStr='';while(this.charLength){var available=buffer.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:buffer.length;buffer.copy(this.charBuffer,this.charReceived,0,available);this.charReceived+=available;if(this.charReceived<this.charLength){return'';}
buffer=buffer.slice(available,buffer.length);charStr=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var charCode=charStr.charCodeAt(charStr.length-1);if(charCode>=0xD800&&charCode<=0xDBFF){this.charLength+=this.surrogateSize;charStr='';continue;}
this.charReceived=this.charLength=0;if(buffer.length===0){return charStr;}
break;}
this.detectIncompleteChar(buffer);var end=buffer.length;if(this.charLength){buffer.copy(this.charBuffer,0,buffer.length-this.charReceived,end);end-=this.charReceived;}
charStr+=buffer.toString(this.encoding,0,end);var end=charStr.length-1;var charCode=charStr.charCodeAt(end);if(charCode>=0xD800&&charCode<=0xDBFF){var size=this.surrogateSize;this.charLength+=size;this.charReceived+=size;this.charBuffer.copy(this.charBuffer,size,0,size);buffer.copy(this.charBuffer,0,0,size);return charStr.substring(0,end);}
return charStr;};StringDecoder.prototype.detectIncompleteChar=function(buffer){var i=buffer.length>=3?3:buffer.length;for(;i>0;i--){var c=buffer[buffer.length-i];if(i==1&&c>>5==0x06){this.charLength=2;break;}
if(i<=2&&c>>4==0x0E){this.charLength=3;break;}
if(i<=3&&c>>3==0x1E){this.charLength=4;break;}}
this.charReceived=i;};StringDecoder.prototype.end=function(buffer){var res='';if(buffer&&buffer.length)
res=this.write(buffer);if(this.charReceived){var cr=this.charReceived;var buf=this.charBuffer;var enc=this.encoding;res+=buf.slice(0,cr).toString(enc);}
return res;};function passThroughWrite(buffer){return buffer.toString(this.encoding);}
function utf16DetectIncompleteChar(buffer){this.charReceived=buffer.length%2;this.charLength=this.charReceived?2:0;}
function base64DetectIncompleteChar(buffer){this.charReceived=buffer.length%3;this.charLength=this.charReceived?3:0;}},{"buffer":60}],94:[function(require,module,exports){(function(global){module.exports=deprecate;function deprecate(fn,msg){if(config('noDeprecation')){return fn;}
var warned=false;function deprecated(){if(!warned){if(config('throwDeprecation')){throw new Error(msg);}else if(config('traceDeprecation')){console.trace(msg);}else{console.warn(msg);}
warned=true;}
return fn.apply(this,arguments);}
return deprecated;}
function config(name){try{if(!global.localStorage)return false;}catch(_){return false;}
var val=global.localStorage[name];if(null==val)return false;return String(val).toLowerCase()==='true';}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],95:[function(require,module,exports){arguments[4][64][0].apply(exports,arguments);},{"dup":64}],96:[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&typeof arg==='object'&&typeof arg.copy==='function'&&typeof arg.fill==='function'&&typeof arg.readUInt8==='function';};},{}],97:[function(require,module,exports){(function(process,global){var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i<arguments.length;i++){objects.push(inspect(arguments[i]));}
return objects.join(' ');}
var i=1;var args=arguments;var len=args.length;var str=String(f).replace(formatRegExp,function(x){if(x==='%%')return'%';if(i>=len)return x;switch(x){case'%s':return String(args[i++]);case'%d':return Number(args[i++]);case'%j':try{return JSON.stringify(args[i++]);}catch(_){return'[Circular]';}
default:return x;}});for(var x=args[i];i<len;x=args[++i]){if(isNull(x)||!isObject(x)){str+=' '+x;}else{str+=' '+inspect(x);}}
return str;};exports.deprecate=function(fn,msg){if(isUndefined(global.process)){return function(){return exports.deprecate(fn,msg).apply(this,arguments);};}
if(process.noDeprecation===true){return fn;}
var warned=false;function deprecated(){if(!warned){if(process.throwDeprecation){throw new Error(msg);}else if(process.traceDeprecation){console.trace(msg);}else{console.error(msg);}
warned=true;}
return fn.apply(this,arguments);}
return deprecated;};var debugs={};var debugEnviron;exports.debuglog=function(set){if(isUndefined(debugEnviron))
debugEnviron=process.env.NODE_DEBUG||'';set=set.toUpperCase();if(!debugs[set]){if(new RegExp('\\b'+set+'\\b','i').test(debugEnviron)){var pid=process.pid;debugs[set]=function(){var msg=exports.format.apply(exports,arguments);console.error('%s %d: %s',set,pid,msg);};}else{debugs[set]=function(){};}}
return debugs[set];};function inspect(obj,opts){var ctx={seen:[],stylize:stylizeNoColor};if(arguments.length>=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){ctx.showHidden=opts;}else if(opts){exports._extend(ctx,opts);}
if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth);}
exports.inspect=inspect;inspect.colors={'bold':[1,22],'italic':[3,23],'underline':[4,24],'inverse':[7,27],'white':[37,39],'grey':[90,39],'black':[30,39],'blue':[34,39],'cyan':[36,39],'green':[32,39],'magenta':[35,39],'red':[31,39],'yellow':[33,39]};inspect.styles={'special':'cyan','number':'yellow','boolean':'yellow','undefined':'grey','null':'bold','string':'green','date':'magenta','regexp':'red'};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return'\u001b['+inspect.colors[style][0]+'m'+str+'\u001b['+inspect.colors[style][1]+'m';}else{return str;}}
function stylizeNoColor(str,styleType){return str;}
function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true;});return hash;}
function formatValue(ctx,value,recurseTimes){if(ctx.customInspect&&value&&isFunction(value.inspect)&&value.inspect!==exports.inspect&&!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes);}
return ret;}
var primitive=formatPrimitive(ctx,value);if(primitive){return primitive;}
var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value);}
if(isError(value)&&(keys.indexOf('message')>=0||keys.indexOf('description')>=0)){return formatError(value);}
if(keys.length===0){if(isFunction(value)){var name=value.name?': '+value.name:'';return ctx.stylize('[Function'+name+']','special');}
if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}
if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),'date');}
if(isError(value)){return formatError(value);}}
var base='',array=false,braces=['{','}'];if(isArray(value)){array=true;braces=['[',']'];}
if(isFunction(value)){var n=value.name?': '+value.name:'';base=' [Function'+n+']';}
if(isRegExp(value)){base=' '+RegExp.prototype.toString.call(value);}
if(isDate(value)){base=' '+Date.prototype.toUTCString.call(value);}
if(isError(value)){base=' '+formatError(value);}
if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1];}
if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}else{return ctx.stylize('[Object]','special');}}
ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys);}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array);});}
ctx.seen.pop();return reduceToSingleString(output,base,braces);}
function formatPrimitive(ctx,value){if(isUndefined(value))
return ctx.stylize('undefined','undefined');if(isString(value)){var simple='\''+JSON.stringify(value).replace(/^"|"$/g,'').replace(/'/g,"\\'").replace(/\\"/g,'"')+'\'';return ctx.stylize(simple,'string');}
if(isNumber(value))
return ctx.stylize(''+value,'number');if(isBoolean(value))
return ctx.stylize(''+value,'boolean');if(isNull(value))
return ctx.stylize('null','null');}
function formatError(value){return'['+Error.prototype.toString.call(value)+']';}
function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i<l;++i){if(hasOwnProperty(value,String(i))){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,String(i),true));}else{output.push('');}}
keys.forEach(function(key){if(!key.match(/^\d+$/)){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,key,true));}});return output;}
function formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){var name,str,desc;desc=Object.getOwnPropertyDescriptor(value,key)||{value:value[key]};if(desc.get){if(desc.set){str=ctx.stylize('[Getter/Setter]','special');}else{str=ctx.stylize('[Getter]','special');}}else{if(desc.set){str=ctx.stylize('[Setter]','special');}}
if(!hasOwnProperty(visibleKeys,key)){name='['+key+']';}
if(!str){if(ctx.seen.indexOf(desc.value)<0){if(isNull(recurseTimes)){str=formatValue(ctx,desc.value,null);}else{str=formatValue(ctx,desc.value,recurseTimes-1);}
if(str.indexOf('\n')>-1){if(array){str=str.split('\n').map(function(line){return'  '+line;}).join('\n').substr(2);}else{str='\n'+str.split('\n').map(function(line){return'   '+line;}).join('\n');}}}else{str=ctx.stylize('[Circular]','special');}}
if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str;}
name=JSON.stringify(''+key);if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,'name');}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,'string');}}
return name+': '+str;}
function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf('\n')>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,'').length+1;},0);if(length>60){return braces[0]+(base===''?'':base+'\n ')+' '+
output.join(',\n  ')+' '+
braces[1];}
return braces[0]+base+' '+output.join(', ')+' '+braces[1];}
function isArray(ar){return Array.isArray(ar);}
exports.isArray=isArray;function isBoolean(arg){return typeof arg==='boolean';}
exports.isBoolean=isBoolean;function isNull(arg){return arg===null;}
exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null;}
exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==='number';}
exports.isNumber=isNumber;function isString(arg){return typeof arg==='string';}
exports.isString=isString;function isSymbol(arg){return typeof arg==='symbol';}
exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0;}
exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==='[object RegExp]';}
exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==='object'&&arg!==null;}
exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==='[object Date]';}
exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==='[object Error]'||e instanceof Error);}
exports.isError=isError;function isFunction(arg){return typeof arg==='function';}
exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==='boolean'||typeof arg==='number'||typeof arg==='string'||typeof arg==='symbol'||typeof arg==='undefined';}
exports.isPrimitive=isPrimitive;exports.isBuffer=require('./support/isBuffer');function objectToString(o){return Object.prototype.toString.call(o);}
function pad(n){return n<10?'0'+n.toString(10):n.toString(10);}
var months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];function timestamp(){var d=new Date();var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(':');return[d.getDate(),months[d.getMonth()],time].join(' ');}
exports.log=function(){console.log('%s - %s',timestamp(),exports.format.apply(exports,arguments));};exports.inherits=require('inherits');exports._extend=function(origin,add){if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]];}
return origin;};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop);}}).call(this,require('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{"./support/isBuffer":96,"_process":77,"inherits":95}],98:[function(require,module,exports){var langs=["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","in","io","is","it","iu","iw","ja","ji","jv","jw","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aaa","aab","aac","aad","aae","aaf","aag","aah","aai","aak","aal","aam","aan","aao","aap","aaq","aas","aat","aau","aav","aaw","aax","aaz","aba","abb","abc","abd","abe","abf","abg","abh","abi","abj","abl","abm","abn","abo","abp","abq","abr","abs","abt","abu","abv","abw","abx","aby","abz","aca","acb","acd","ace","acf","ach","aci","ack","acl","acm","acn","acp","acq","acr","acs","act","acu","acv","acw","acx","acy","acz","ada","adb","add","ade","adf","adg","adh","adi","adj","adl","adn","ado","adp","adq","adr","ads","adt","adu","adw","adx","ady","adz","aea","aeb","aec","aed","aee","aek","ael","aem","aen","aeq","aer","aes","aeu","aew","aey","aez","afa","afb","afd","afe","afg","afh","afi","afk","afn","afo","afp","afs","aft","afu","afz","aga","agb","agc","agd","age","agf","agg","agh","agi","agj","agk","agl","agm","agn","ago","agp","agq","agr","ags","agt","agu","agv","agw","agx","agy","agz","aha","ahb","ahg","ahh","ahi","ahk","ahl","ahm","ahn","aho","ahp","ahr","ahs","aht","aia","aib","aic","aid","aie","aif","aig","aih","aii","aij","aik","ail","aim","ain","aio","aip","aiq","air","ais","ait","aiw","aix","aiy","aja","ajg","aji","ajn","ajp","ajt","aju","ajw","ajz","akb","akc","akd","ake","akf","akg","akh","aki","akj","akk","akl","akm","ako","akp","akq","akr","aks","akt","aku","akv","akw","akx","aky","akz","ala","alc","ald","ale","alf","alg","alh","ali","alj","alk","all","alm","aln","alo","alp","alq","alr","als","alt","alu","alv","alw","alx","aly","alz","ama","amb","amc","ame","amf","amg","ami","amj","amk","aml","amm","amn","amo","amp","amq","amr","ams","amt","amu","amv","amw","amx","amy","amz","ana","anb","anc","and","ane","anf","ang","anh","ani","anj","ank","anl","anm","ann","ano","anp","anq","anr","ans","ant","anu","anv","anw","anx","any","anz","aoa","aob","aoc","aod","aoe","aof","aog","aoh","aoi","aoj","aok","aol","aom","aon","aor","aos","aot","aou","aox","aoz","apa","apb","apc","apd","ape","apf","apg","aph","api","apj","apk","apl","apm","apn","apo","app","apq","apr","aps","apt","apu","apv","apw","apx","apy","apz","aqa","aqc","aqd","aqg","aql","aqm","aqn","aqp","aqr","aqt","aqz","arb","arc","ard","are","arh","ari","arj","ark","arl","arn","aro","arp","arq","arr","ars","art","aru","arv","arw","arx","ary","arz","asa","asb","asc","asd","ase","asf","asg","ash","asi","asj","ask","asl","asn","aso","asp","asq","asr","ass","ast","asu","asv","asw","asx","asy","asz","ata","atb","atc","atd","ate","atg","ath","ati","atj","atk","atl","atm","atn","ato","atp","atq","atr","ats","att","atu","atv","atw","atx","aty","atz","aua","aub","auc","aud","aue","auf","aug","auh","aui","auj","auk","aul","aum","aun","auo","aup","auq","aur","aus","aut","auu","auw","aux","auy","auz","avb","avd","avi","avk","avl","avm","avn","avo","avs","avt","avu","avv","awa","awb","awc","awd","awe","awg","awh","awi","awk","awm","awn","awo","awr","aws","awt","awu","awv","aww","awx","awy","axb","axe","axg","axk","axl","axm","axx","aya","ayb","ayc","ayd","aye","ayg","ayh","ayi","ayk","ayl","ayn","ayo","ayp","ayq","ayr","ays","ayt","ayu","ayx","ayy","ayz","aza","azb","azc","azd","azg","azj","azm","azn","azo","azt","azz","baa","bab","bac","bad","bae","baf","bag","bah","bai","baj","bal","ban","bao","bap","bar","bas","bat","bau","bav","baw","bax","bay","baz","bba","bbb","bbc","bbd","bbe","bbf","bbg","bbh","bbi","bbj","bbk","bbl","bbm","bbn","bbo","bbp","bbq","bbr","bbs","bbt","bbu","bbv","bbw","bbx","bby","bbz","bca","bcb","bcc","bcd","bce","bcf","bcg","bch","bci","bcj","bck","bcl","bcm","bcn","bco","bcp","bcq","bcr","bcs","bct","bcu","bcv","bcw","bcy","bcz","bda","bdb","bdc","bdd","bde","bdf","bdg","bdh","bdi","bdj","bdk","bdl","bdm","bdn","bdo","bdp","bdq","bdr","bds","bdt","bdu","bdv","bdw","bdx","bdy","bdz","bea","beb","bec","bed","bee","bef","beg","beh","bei","bej","bek","bem","beo","bep","beq","ber","bes","bet","beu","bev","bew","bex","bey","bez","bfa","bfb","bfc","bfd","bfe","bff","bfg","bfh","bfi","bfj","bfk","bfl","bfm","bfn","bfo","bfp","bfq","bfr","bfs","bft","bfu","bfw","bfx","bfy","bfz","bga","bgb","bgc","bgd","bge","bgf","bgg","bgi","bgj","bgk","bgl","bgm","bgn","bgo","bgp","bgq","bgr","bgs","bgt","bgu","bgv","bgw","bgx","bgy","bgz","bha","bhb","bhc","bhd","bhe","bhf","bhg","bhh","bhi","bhj","bhk","bhl","bhm","bhn","bho","bhp","bhq","bhr","bhs","bht","bhu","bhv","bhw","bhx","bhy","bhz","bia","bib","bic","bid","bie","bif","big","bij","bik","bil","bim","bin","bio","bip","biq","bir","bit","biu","biv","biw","bix","biy","biz","bja","bjb","bjc","bjd","bje","bjf","bjg","bjh","bji","bjj","bjk","bjl","bjm","bjn","bjo","bjp","bjq","bjr","bjs","bjt","bju","bjv","bjw","bjx","bjy","bjz","bka","bkb","bkc","bkd","bkf","bkg","bkh","bki","bkj","bkk","bkl","bkm","bkn","bko","bkp","bkq","bkr","bks","bkt","bku","bkv","bkw","bkx","bky","bkz","bla","blb","blc","bld","ble","blf","blg","blh","bli","blj","blk","bll","blm","bln","blo","blp","blq","blr","bls","blt","blv","blw","blx","bly","blz","bma","bmb","bmc","bmd","bme","bmf","bmg","bmh","bmi","bmj","bmk","bml","bmm","bmn","bmo","bmp","bmq","bmr","bms","bmt","bmu","bmv","bmw","bmx","bmy","bmz","bna","bnb","bnc","bnd","bne","bnf","bng","bni","bnj","bnk","bnl","bnm","bnn","bno","bnp","bnq","bnr","bns","bnt","bnu","bnv","bnw","bnx","bny","bnz","boa","bob","boe","bof","bog","boh","boi","boj","bok","bol","bom","bon","boo","bop","boq","bor","bot","bou","bov","bow","box","boy","boz","bpa","bpb","bpd","bpg","bph","bpi","bpj","bpk","bpl","bpm","bpn","bpo","bpp","bpq","bpr","bps","bpt","bpu","bpv","bpw","bpx","bpy","bpz","bqa","bqb","bqc","bqd","bqf","bqg","bqh","bqi","bqj","bqk","bql","bqm","bqn","bqo","bqp","bqq","bqr","bqs","bqt","bqu","bqv","bqw","bqx","bqy","bqz","bra","brb","brc","brd","brf","brg","brh","bri","brj","brk","brl","brm","brn","bro","brp","brq","brr","brs","brt","bru","brv","brw","brx","bry","brz","bsa","bsb","bsc","bse","bsf","bsg","bsh","bsi","bsj","bsk","bsl","bsm","bsn","bso","bsp","bsq","bsr","bss","bst","bsu","bsv","bsw","bsx","bsy","bta","btb","btc","btd","bte","btf","btg","bth","bti","btj","btk","btl","btm","btn","bto","btp","btq","btr","bts","btt","btu","btv","btw","btx","bty","btz","bua","bub","buc","bud","bue","buf","bug","buh","bui","buj","buk","bum","bun","buo","bup","buq","bus","but","buu","buv","buw","bux","buy","buz","bva","bvb","bvc","bvd","bve","bvf","bvg","bvh","bvi","bvj","bvk","bvl","bvm","bvn","bvo","bvp","bvq","bvr","bvt","bvu","bvv","bvw","bvx","bvy","bvz","bwa","bwb","bwc","bwd","bwe","bwf","bwg","bwh","bwi","bwj","bwk","bwl","bwm","bwn","bwo","bwp","bwq","bwr","bws","bwt","bwu","bww","bwx","bwy","bwz","bxa","bxb","bxc","bxd","bxe","bxf","bxg","bxh","bxi","bxj","bxk","bxl","bxm","bxn","bxo","bxp","bxq","bxr","bxs","bxu","bxv","bxw","bxx","bxz","bya","byb","byc","byd","bye","byf","byg","byh","byi","byj","byk","byl","bym","byn","byo","byp","byq","byr","bys","byt","byv","byw","byx","byy","byz","bza","bzb","bzc","bzd","bze","bzf","bzg","bzh","bzi","bzj","bzk","bzl","bzm","bzn","bzo","bzp","bzq","bzr","bzs","bzt","bzu","bzv","bzw","bzx","bzy","bzz","caa","cab","cac","cad","cae","caf","cag","cah","cai","caj","cak","cal","cam","can","cao","cap","caq","car","cas","cau","cav","caw","cax","cay","caz","cba","cbb","cbc","cbd","cbe","cbg","cbh","cbi","cbj","cbk","cbl","cbn","cbo","cbq","cbr","cbs","cbt","cbu","cbv","cbw","cby","cca","ccc","ccd","cce","ccg","cch","ccj","ccl","ccm","ccn","cco","ccp","ccq","ccr","ccs","cda","cdc","cdd","cde","cdf","cdg","cdh","cdi","cdj","cdm","cdn","cdo","cdr","cds","cdy","cdz","cea","ceb","ceg","cek","cel","cen","cet","cfa","cfd","cfg","cfm","cga","cgc","cgg","cgk","chb","chc","chd","chf","chg","chh","chj","chk","chl","chm","chn","cho","chp","chq","chr","cht","chw","chx","chy","chz","cia","cib","cic","cid","cie","cih","cik","cim","cin","cip","cir","ciw","ciy","cja","cje","cjh","cji","cjk","cjm","cjn","cjo","cjp","cjr","cjs","cjv","cjy","cka","ckb","ckh","ckl","ckn","cko","ckq","ckr","cks","ckt","cku","ckv","ckx","cky","ckz","cla","clc","cld","cle","clh","cli","clj","clk","cll","clm","clo","clt","clu","clw","cly","cma","cmc","cme","cmg","cmi","cmk","cml","cmm","cmn","cmo","cmr","cms","cmt","cna","cnb","cnc","cng","cnh","cni","cnk","cnl","cno","cns","cnt","cnu","cnw","cnx","coa","cob","coc","cod","coe","cof","cog","coh","coj","cok","col","com","con","coo","cop","coq","cot","cou","cov","cow","cox","coy","coz","cpa","cpb","cpc","cpe","cpf","cpg","cpi","cpn","cpo","cpp","cps","cpu","cpx","cpy","cqd","cqu","cra","crb","crc","crd","crf","crg","crh","cri","crj","crk","crl","crm","crn","cro","crp","crq","crr","crs","crt","crv","crw","crx","cry","crz","csa","csb","csc","csd","cse","csf","csg","csh","csi","csj","csk","csl","csm","csn","cso","csq","csr","css","cst","csu","csv","csw","csy","csz","cta","ctc","ctd","cte","ctg","cth","ctl","ctm","ctn","cto","ctp","cts","ctt","ctu","ctz","cua","cub","cuc","cug","cuh","cui","cuj","cuk","cul","cum","cuo","cup","cuq","cur","cus","cut","cuu","cuv","cuw","cux","cvg","cvn","cwa","cwb","cwd","cwe","cwg","cwt","cya","cyb","cyo","czh","czk","czn","czo","czt","daa","dac","dad","dae","daf","dag","dah","dai","daj","dak","dal","dam","dao","dap","daq","dar","das","dau","dav","daw","dax","day","daz","dba","dbb","dbd","dbe","dbf","dbg","dbi","dbj","dbl","dbm","dbn","dbo","dbp","dbq","dbr","dbt","dbu","dbv","dbw","dby","dcc","dcr","dda","ddd","dde","ddg","ddi","ddj","ddn","ddo","ddr","dds","ddw","dec","ded","dee","def","deg","deh","dei","dek","del","dem","den","dep","deq","der","des","dev","dez","dga","dgb","dgc","dgd","dge","dgg","dgh","dgi","dgk","dgl","dgn","dgo","dgr","dgs","dgt","dgu","dgw","dgx","dgz","dha","dhd","dhg","dhi","dhl","dhm","dhn","dho","dhr","dhs","dhu","dhv","dhw","dhx","dia","dib","dic","did","dif","dig","dih","dii","dij","dik","dil","dim","din","dio","dip","diq","dir","dis","dit","diu","diw","dix","diy","diz","dja","djb","djc","djd","dje","djf","dji","djj","djk","djl","djm","djn","djo","djr","dju","djw","dka","dkk","dkl","dkr","dks","dkx","dlg","dlk","dlm","dln","dma","dmb","dmc","dmd","dme","dmg","dmk","dml","dmm","dmn","dmo","dmr","dms","dmu","dmv","dmw","dmx","dmy","dna","dnd","dne","dng","dni","dnj","dnk","dnn","dnr","dnt","dnu","dnv","dnw","dny","doa","dob","doc","doe","dof","doh","doi","dok","dol","don","doo","dop","doq","dor","dos","dot","dov","dow","dox","doy","doz","dpp","dra","drb","drc","drd","dre","drg","drh","dri","drl","drn","dro","drq","drr","drs","drt","dru","drw","dry","dsb","dse","dsh","dsi","dsl","dsn","dso","dsq","dta","dtb","dtd","dth","dti","dtk","dtm","dtn","dto","dtp","dtr","dts","dtt","dtu","dty","dua","dub","duc","dud","due","duf","dug","duh","dui","duj","duk","dul","dum","dun","duo","dup","duq","dur","dus","duu","duv","duw","dux","duy","duz","dva","dwa","dwl","dwr","dws","dwu","dww","dwy","dya","dyb","dyd","dyg","dyi","dym","dyn","dyo","dyu","dyy","dza","dzd","dze","dzg","dzl","dzn","eaa","ebg","ebk","ebo","ebr","ebu","ecr","ecs","ecy","eee","efa","efe","efi","ega","egl","ego","egx","egy","ehu","eip","eit","eiv","eja","eka","ekc","eke","ekg","eki","ekk","ekl","ekm","eko","ekp","ekr","eky","ele","elh","eli","elk","elm","elo","elp","elu","elx","ema","emb","eme","emg","emi","emk","emm","emn","emo","emp","ems","emu","emw","emx","emy","ena","enb","enc","end","enf","enh","enl","enm","enn","eno","enq","enr","enu","env","enw","enx","eot","epi","era","erg","erh","eri","erk","ero","err","ers","ert","erw","ese","esg","esh","esi","esk","esl","esm","esn","eso","esq","ess","esu","esx","esy","etb","etc","eth","etn","eto","etr","ets","ett","etu","etx","etz","euq","eve","evh","evn","ewo","ext","eya","eyo","eza","eze","faa","fab","fad","faf","fag","fah","fai","faj","fak","fal","fam","fan","fap","far","fat","fau","fax","fay","faz","fbl","fcs","fer","ffi","ffm","fgr","fia","fie","fil","fip","fir","fit","fiu","fiw","fkk","fkv","fla","flh","fli","fll","fln","flr","fly","fmp","fmu","fnb","fng","fni","fod","foi","fom","fon","for","fos","fox","fpe","fqs","frc","frd","frk","frm","fro","frp","frq","frr","frs","frt","fse","fsl","fss","fub","fuc","fud","fue","fuf","fuh","fui","fuj","fum","fun","fuq","fur","fut","fuu","fuv","fuy","fvr","fwa","fwe","gaa","gab","gac","gad","gae","gaf","gag","gah","gai","gaj","gak","gal","gam","gan","gao","gap","gaq","gar","gas","gat","gau","gav","gaw","gax","gay","gaz","gba","gbb","gbc","gbd","gbe","gbf","gbg","gbh","gbi","gbj","gbk","gbl","gbm","gbn","gbo","gbp","gbq","gbr","gbs","gbu","gbv","gbw","gbx","gby","gbz","gcc","gcd","gce","gcf","gcl","gcn","gcr","gct","gda","gdb","gdc","gdd","gde","gdf","gdg","gdh","gdi","gdj","gdk","gdl","gdm","gdn","gdo","gdq","gdr","gds","gdt","gdu","gdx","gea","geb","gec","ged","geg","geh","gei","gej","gek","gel","gem","geq","ges","gev","gew","gex","gey","gez","gfk","gft","gfx","gga","ggb","ggd","gge","ggg","ggk","ggl","ggn","ggo","ggr","ggt","ggu","ggw","gha","ghc","ghe","ghh","ghk","ghl","ghn","gho","ghr","ghs","ght","gia","gib","gic","gid","gie","gig","gih","gil","gim","gin","gio","gip","giq","gir","gis","git","giu","giw","gix","giy","giz","gji","gjk","gjm","gjn","gjr","gju","gka","gke","gkn","gko","gkp","gku","glc","gld","glh","gli","glj","glk","gll","glo","glr","glu","glw","gly","gma","gmb","gmd","gme","gmg","gmh","gml","gmm","gmn","gmq","gmu","gmv","gmw","gmx","gmy","gmz","gna","gnb","gnc","gnd","gne","gng","gnh","gni","gnk","gnl","gnm","gnn","gno","gnq","gnr","gnt","gnu","gnw","gnz","goa","gob","goc","god","goe","gof","gog","goh","goi","goj","gok","gol","gom","gon","goo","gop","goq","gor","gos","got","gou","gow","gox","goy","goz","gpa","gpe","gpn","gqa","gqi","gqn","gqr","gqu","gra","grb","grc","grd","grg","grh","gri","grj","grk","grm","gro","grq","grr","grs","grt","gru","grv","grw","grx","gry","grz","gse","gsg","gsl","gsm","gsn","gso","gsp","gss","gsw","gta","gti","gtu","gua","gub","guc","gud","gue","guf","gug","guh","gui","guk","gul","gum","gun","guo","gup","guq","gur","gus","gut","guu","guv","guw","gux","guz","gva","gvc","gve","gvf","gvj","gvl","gvm","gvn","gvo","gvp","gvr","gvs","gvy","gwa","gwb","gwc","gwd","gwe","gwf","gwg","gwi","gwj","gwm","gwn","gwr","gwt","gwu","gww","gwx","gxx","gya","gyb","gyd","gye","gyf","gyg","gyi","gyl","gym","gyn","gyr","gyy","gza","gzi","gzn","haa","hab","hac","had","hae","haf","hag","hah","hai","haj","hak","hal","ham","han","hao","hap","haq","har","has","hav","haw","hax","hay","haz","hba","hbb","hbn","hbo","hbu","hca","hch","hdn","hds","hdy","hea","hed","heg","heh","hei","hem","hgm","hgw","hhi","hhr","hhy","hia","hib","hid","hif","hig","hih","hii","hij","hik","hil","him","hio","hir","hit","hiw","hix","hji","hka","hke","hkk","hks","hla","hlb","hld","hle","hlt","hlu","hma","hmb","hmc","hmd","hme","hmf","hmg","hmh","hmi","hmj","hmk","hml","hmm","hmn","hmp","hmq","hmr","hms","hmt","hmu","hmv","hmw","hmx","hmy","hmz","hna","hnd","hne","hnh","hni","hnj","hnn","hno","hns","hnu","hoa","hob","hoc","hod","hoe","hoh","hoi","hoj","hok","hol","hom","hoo","hop","hor","hos","hot","hov","how","hoy","hoz","hpo","hps","hra","hrc","hre","hrk","hrm","hro","hrp","hrr","hrt","hru","hrw","hrx","hrz","hsb","hsh","hsl","hsn","hss","hti","hto","hts","htu","htx","hub","huc","hud","hue","huf","hug","huh","hui","huj","huk","hul","hum","huo","hup","huq","hur","hus","hut","huu","huv","huw","hux","huy","huz","hvc","hve","hvk","hvn","hvv","hwa","hwc","hwo","hya","hyx","iai","ian","iap","iar","iba","ibb","ibd","ibe","ibg","ibh","ibi","ibl","ibm","ibn","ibr","ibu","iby","ica","ich","icl","icr","ida","idb","idc","idd","ide","idi","idr","ids","idt","idu","ifa","ifb","ife","iff","ifk","ifm","ifu","ify","igb","ige","igg","igl","igm","ign","igo","igs","igw","ihb","ihi","ihp","ihw","iin","iir","ijc","ije","ijj","ijn","ijo","ijs","ike","iki","ikk","ikl","iko","ikp","ikr","iks","ikt","ikv","ikw","ikx","ikz","ila","ilb","ilg","ili","ilk","ill","ilm","ilo","ilp","ils","ilu","ilv","ilw","ima","ime","imi","iml","imn","imo","imr","ims","imy","inb","inc","ine","ing","inh","inj","inl","inm","inn","ino","inp","ins","int","inz","ior","iou","iow","ipi","ipo","iqu","iqw","ira","ire","irh","iri","irk","irn","iro","irr","iru","irx","iry","isa","isc","isd","ise","isg","ish","isi","isk","ism","isn","iso","isr","ist","isu","itb","itc","itd","ite","iti","itk","itl","itm","ito","itr","its","itt","itv","itw","itx","ity","itz","ium","ivb","ivv","iwk","iwm","iwo","iws","ixc","ixl","iya","iyo","iyx","izh","izi","izr","izz","jaa","jab","jac","jad","jae","jaf","jah","jaj","jak","jal","jam","jan","jao","jaq","jar","jas","jat","jau","jax","jay","jaz","jbe","jbi","jbj","jbk","jbn","jbo","jbr","jbt","jbu","jbw","jcs","jct","jda","jdg","jdt","jeb","jee","jeg","jeh","jei","jek","jel","jen","jer","jet","jeu","jgb","jge","jgk","jgo","jhi","jhs","jia","jib","jic","jid","jie","jig","jih","jii","jil","jim","jio","jiq","jit","jiu","jiv","jiy","jje","jjr","jka","jkm","jko","jkp","jkr","jku","jle","jls","jma","jmb","jmc","jmd","jmi","jml","jmn","jmr","jms","jmw","jmx","jna","jnd","jng","jni","jnj","jnl","jns","job","jod","jog","jor","jos","jow","jpa","jpr","jpx","jqr","jra","jrb","jrr","jrt","jru","jsl","jua","jub","juc","jud","juh","jui","juk","jul","jum","jun","juo","jup","jur","jus","jut","juu","juw","juy","jvd","jvn","jwi","jya","jye","jyy","kaa","kab","kac","kad","kae","kaf","kag","kah","kai","kaj","kak","kam","kao","kap","kaq","kar","kav","kaw","kax","kay","kba","kbb","kbc","kbd","kbe","kbf","kbg","kbh","kbi","kbj","kbk","kbl","kbm","kbn","kbo","kbp","kbq","kbr","kbs","kbt","kbu","kbv","kbw","kbx","kby","kbz","kca","kcb","kcc","kcd","kce","kcf","kcg","kch","kci","kcj","kck","kcl","kcm","kcn","kco","kcp","kcq","kcr","kcs","kct","kcu","kcv","kcw","kcx","kcy","kcz","kda","kdc","kdd","kde","kdf","kdg","kdh","kdi","kdj","kdk","kdl","kdm","kdn","kdo","kdp","kdq","kdr","kdt","kdu","kdv","kdw","kdx","kdy","kdz","kea","keb","kec","ked","kee","kef","keg","keh","kei","kej","kek","kel","kem","ken","keo","kep","keq","ker","kes","ket","keu","kev","kew","kex","key","kez","kfa","kfb","kfc","kfd","kfe","kff","kfg","kfh","kfi","kfj","kfk","kfl","kfm","kfn","kfo","kfp","kfq","kfr","kfs","kft","kfu","kfv","kfw","kfx","kfy","kfz","kga","kgb","kgc","kgd","kge","kgf","kgg","kgh","kgi","kgj","kgk","kgl","kgm","kgn","kgo","kgp","kgq","kgr","kgs","kgt","kgu","kgv","kgw","kgx","kgy","kha","khb","khc","khd","khe","khf","khg","khh","khi","khj","khk","khl","khn","kho","khp","khq","khr","khs","kht","khu","khv","khw","khx","khy","khz","kia","kib","kic","kid","kie","kif","kig","kih","kii","kij","kil","kim","kio","kip","kiq","kis","kit","kiu","kiv","kiw","kix","kiy","kiz","kja","kjb","kjc","kjd","kje","kjf","kjg","kjh","kji","kjj","kjk","kjl","kjm","kjn","kjo","kjp","kjq","kjr","kjs","kjt","kju","kjv","kjx","kjy","kjz","kka","kkb","kkc","kkd","kke","kkf","kkg","kkh","kki","kkj","kkk","kkl","kkm","kkn","kko","kkp","kkq","kkr","kks","kkt","kku","kkv","kkw","kkx","kky","kkz","kla","klb","klc","kld","kle","klf","klg","klh","kli","klj","klk","kll","klm","kln","klo","klp","klq","klr","kls","klt","klu","klv","klw","klx","kly","klz","kma","kmb","kmc","kmd","kme","kmf","kmg","kmh","kmi","kmj","kmk","kml","kmm","kmn","kmo","kmp","kmq","kmr","kms","kmt","kmu","kmv","kmw","kmx","kmy","kmz","kna","knb","knc","knd","kne","knf","kng","kni","knj","knk","knl","knm","knn","kno","knp","knq","knr","kns","knt","knu","knv","knw","knx","kny","knz","koa","koc","kod","koe","kof","kog","koh","koi","koj","kok","kol","koo","kop","koq","kos","kot","kou","kov","kow","kox","koy","koz","kpa","kpb","kpc","kpd","kpe","kpf","kpg","kph","kpi","kpj","kpk","kpl","kpm","kpn","kpo","kpp","kpq","kpr","kps","kpt","kpu","kpv","kpw","kpx","kpy","kpz","kqa","kqb","kqc","kqd","kqe","kqf","kqg","kqh","kqi","kqj","kqk","kql","kqm","kqn","kqo","kqp","kqq","kqr","kqs","kqt","kqu","kqv","kqw","kqx","kqy","kqz","kra","krb","krc","krd","kre","krf","krh","kri","krj","krk","krl","krm","krn","kro","krp","krr","krs","krt","kru","krv","krw","krx","kry","krz","ksa","ksb","ksc","ksd","kse","ksf","ksg","ksh","ksi","ksj","ksk","ksl","ksm","ksn","kso","ksp","ksq","ksr","kss","kst","ksu","ksv","ksw","ksx","ksy","ksz","kta","ktb","ktc","ktd","kte","ktf","ktg","kth","kti","ktj","ktk","ktl","ktm","ktn","kto","ktp","ktq","ktr","kts","ktt","ktu","ktv","ktw","ktx","kty","ktz","kub","kuc","kud","kue","kuf","kug","kuh","kui","kuj","kuk","kul","kum","kun","kuo","kup","kuq","kus","kut","kuu","kuv","kuw","kux","kuy","kuz","kva","kvb","kvc","kvd","kve","kvf","kvg","kvh","kvi","kvj","kvk","kvl","kvm","kvn","kvo","kvp","kvq","kvr","kvs","kvt","kvu","kvv","kvw","kvx","kvy","kvz","kwa","kwb","kwc","kwd","kwe","kwf","kwg","kwh","kwi","kwj","kwk","kwl","kwm","kwn","kwo","kwp","kwq","kwr","kws","kwt","kwu","kwv","kww","kwx","kwy","kwz","kxa","kxb","kxc","kxd","kxe","kxf","kxh","kxi","kxj","kxk","kxl","kxm","kxn","kxo","kxp","kxq","kxr","kxs","kxt","kxu","kxv","kxw","kxx","kxy","kxz","kya","kyb","kyc","kyd","kye","kyf","kyg","kyh","kyi","kyj","kyk","kyl","kym","kyn","kyo","kyp","kyq","kyr","kys","kyt","kyu","kyv","kyw","kyx","kyy","kyz","kza","kzb","kzc","kzd","kze","kzf","kzg","kzh","kzi","kzj","kzk","kzl","kzm","kzn","kzo","kzp","kzq","kzr","kzs","kzt","kzu","kzv","kzw","kzx","kzy","kzz","laa","lab","lac","lad","lae","laf","lag","lah","lai","laj","lak","lal","lam","lan","lap","laq","lar","las","lau","law","lax","lay","laz","lba","lbb","lbc","lbe","lbf","lbg","lbi","lbj","lbk","lbl","lbm","lbn","lbo","lbq","lbr","lbs","lbt","lbu","lbv","lbw","lbx","lby","lbz","lcc","lcd","lce","lcf","lch","lcl","lcm","lcp","lcq","lcs","lda","ldb","ldd","ldg","ldh","ldi","ldj","ldk","ldl","ldm","ldn","ldo","ldp","ldq","lea","leb","lec","led","lee","lef","leg","leh","lei","lej","lek","lel","lem","len","leo","lep","leq","ler","les","let","leu","lev","lew","lex","ley","lez","lfa","lfn","lga","lgb","lgg","lgh","lgi","lgk","lgl","lgm","lgn","lgq","lgr","lgt","lgu","lgz","lha","lhh","lhi","lhl","lhm","lhn","lhp","lhs","lht","lhu","lia","lib","lic","lid","lie","lif","lig","lih","lii","lij","lik","lil","lio","lip","liq","lir","lis","liu","liv","liw","lix","liy","liz","lja","lje","lji","ljl","ljp","ljw","ljx","lka","lkb","lkc","lkd","lke","lkh","lki","lkj","lkl","lkm","lkn","lko","lkr","lks","lkt","lku","lky","lla","llb","llc","lld","lle","llf","llg","llh","lli","llj","llk","lll","llm","lln","llo","llp","llq","lls","llu","llx","lma","lmb","lmc","lmd","lme","lmf","lmg","lmh","lmi","lmj","lmk","lml","lmm","lmn","lmo","lmp","lmq","lmr","lmu","lmv","lmw","lmx","lmy","lmz","lna","lnb","lnd","lng","lnh","lni","lnj","lnl","lnm","lnn","lno","lns","lnu","lnw","lnz","loa","lob","loc","loe","lof","log","loh","loi","loj","lok","lol","lom","lon","loo","lop","loq","lor","los","lot","lou","lov","low","lox","loy","loz","lpa","lpe","lpn","lpo","lpx","lra","lrc","lre","lrg","lri","lrk","lrl","lrm","lrn","lro","lrr","lrt","lrv","lrz","lsa","lsd","lse","lsg","lsh","lsi","lsl","lsm","lso","lsp","lsr","lss","lst","lsy","ltc","ltg","lth","lti","ltn","lto","lts","ltu","lua","luc","lud","lue","luf","lui","luj","luk","lul","lum","lun","luo","lup","luq","lur","lus","lut","luu","luv","luw","luy","luz","lva","lvk","lvs","lvu","lwa","lwe","lwg","lwh","lwl","lwm","lwo","lwt","lwu","lww","lya","lyg","lyn","lzh","lzl","lzn","lzz","maa","mab","mad","mae","maf","mag","mai","maj","mak","mam","man","map","maq","mas","mat","mau","mav","maw","max","maz","mba","mbb","mbc","mbd","mbe","mbf","mbh","mbi","mbj","mbk","mbl","mbm","mbn","mbo","mbp","mbq","mbr","mbs","mbt","mbu","mbv","mbw","mbx","mby","mbz","mca","mcb","mcc","mcd","mce","mcf","mcg","mch","mci","mcj","mck","mcl","mcm","mcn","mco","mcp","mcq","mcr","mcs","mct","mcu","mcv","mcw","mcx","mcy","mcz","mda","mdb","mdc","mdd","mde","mdf","mdg","mdh","mdi","mdj","mdk","mdl","mdm","mdn","mdp","mdq","mdr","mds","mdt","mdu","mdv","mdw","mdx","mdy","mdz","mea","meb","mec","med","mee","mef","meg","meh","mei","mej","mek","mel","mem","men","meo","mep","meq","mer","mes","met","meu","mev","mew","mey","mez","mfa","mfb","mfc","mfd","mfe","mff","mfg","mfh","mfi","mfj","mfk","mfl","mfm","mfn","mfo","mfp","mfq","mfr","mfs","mft","mfu","mfv","mfw","mfx","mfy","mfz","mga","mgb","mgc","mgd","mge","mgf","mgg","mgh","mgi","mgj","mgk","mgl","mgm","mgn","mgo","mgp","mgq","mgr","mgs","mgt","mgu","mgv","mgw","mgx","mgy","mgz","mha","mhb","mhc","mhd","mhe","mhf","mhg","mhh","mhi","mhj","mhk","mhl","mhm","mhn","mho","mhp","mhq","mhr","mhs","mht","mhu","mhw","mhx","mhy","mhz","mia","mib","mic","mid","mie","mif","mig","mih","mii","mij","mik","mil","mim","min","mio","mip","miq","mir","mis","mit","miu","miw","mix","miy","miz","mja","mjb","mjc","mjd","mje","mjg","mjh","mji","mjj","mjk","mjl","mjm","mjn","mjo","mjp","mjq","mjr","mjs","mjt","mju","mjv","mjw","mjx","mjy","mjz","mka","mkb","mkc","mke","mkf","mkg","mkh","mki","mkj","mkk","mkl","mkm","mkn","mko","mkp","mkq","mkr","mks","mkt","mku","mkv","mkw","mkx","mky","mkz","mla","mlb","mlc","mld","mle","mlf","mlh","mli","mlj","mlk","mll","mlm","mln","mlo","mlp","mlq","mlr","mls","mlu","mlv","mlw","mlx","mlz","mma","mmb","mmc","mmd","mme","mmf","mmg","mmh","mmi","mmj","mmk","mml","mmm","mmn","mmo","mmp","mmq","mmr","mmt","mmu","mmv","mmw","mmx","mmy","mmz","mna","mnb","mnc","mnd","mne","mnf","mng","mnh","mni","mnj","mnk","mnl","mnm","mnn","mno","mnp","mnq","mnr","mns","mnt","mnu","mnv","mnw","mnx","mny","mnz","moa","moc","mod","moe","mof","mog","moh","moi","moj","mok","mom","moo","mop","moq","mor","mos","mot","mou","mov","mow","mox","moy","moz","mpa","mpb","mpc","mpd","mpe","mpg","mph","mpi","mpj","mpk","mpl","mpm","mpn","mpo","mpp","mpq","mpr","mps","mpt","mpu","mpv","mpw","mpx","mpy","mpz","mqa","mqb","mqc","mqe","mqf","mqg","mqh","mqi","mqj","mqk","mql","mqm","mqn","mqo","mqp","mqq","mqr","mqs","mqt","mqu","mqv","mqw","mqx","mqy","mqz","mra","mrb","mrc","mrd","mre","mrf","mrg","mrh","mrj","mrk","mrl","mrm","mrn","mro","mrp","mrq","mrr","mrs","mrt","mru","mrv","mrw","mrx","mry","mrz","msb","msc","msd","mse","msf","msg","msh","msi","msj","msk","msl","msm","msn","mso","msp","msq","msr","mss","mst","msu","msv","msw","msx","msy","msz","mta","mtb","mtc","mtd","mte","mtf","mtg","mth","mti","mtj","mtk","mtl","mtm","mtn","mto","mtp","mtq","mtr","mts","mtt","mtu","mtv","mtw","mtx","mty","mua","mub","muc","mud","mue","mug","muh","mui","muj","muk","mul","mum","mun","muo","mup","muq","mur","mus","mut","muu","muv","mux","muy","muz","mva","mvb","mvd","mve","mvf","mvg","mvh","mvi","mvk","mvl","mvm","mvn","mvo","mvp","mvq","mvr","mvs","mvt","mvu","mvv","mvw","mvx","mvy","mvz","mwa","mwb","mwc","mwd","mwe","mwf","mwg","mwh","mwi","mwj","mwk","mwl","mwm","mwn","mwo","mwp","mwq","mwr","mws","mwt","mwu","mwv","mww","mwx","mwy","mwz","mxa","mxb","mxc","mxd","mxe","mxf","mxg","mxh","mxi","mxj","mxk","mxl","mxm","mxn","mxo","mxp","mxq","mxr","mxs","mxt","mxu","mxv","mxw","mxx","mxy","mxz","myb","myc","myd","mye","myf","myg","myh","myi","myj","myk","myl","mym","myn","myo","myp","myq","myr","mys","myt","myu","myv","myw","myx","myy","myz","mza","mzb","mzc","mzd","mze","mzg","mzh","mzi","mzj","mzk","mzl","mzm","mzn","mzo","mzp","mzq","mzr","mzs","mzt","mzu","mzv","mzw","mzx","mzy","mzz","naa","nab","nac","nad","nae","naf","nag","nah","nai","naj","nak","nal","nam","nan","nao","nap","naq","nar","nas","nat","naw","nax","nay","naz","nba","nbb","nbc","nbd","nbe","nbf","nbg","nbh","nbi","nbj","nbk","nbm","nbn","nbo","nbp","nbq","nbr","nbs","nbt","nbu","nbv","nbw","nbx","nby","nca","ncb","ncc","ncd","nce","ncf","ncg","nch","nci","ncj","nck","ncl","ncm","ncn","nco","ncp","ncq","ncr","ncs","nct","ncu","ncx","ncz","nda","ndb","ndc","ndd","ndf","ndg","ndh","ndi","ndj","ndk","ndl","ndm","ndn","ndp","ndq","ndr","nds","ndt","ndu","ndv","ndw","ndx","ndy","ndz","nea","neb","nec","ned","nee","nef","neg","neh","nei","nej","nek","nem","nen","neo","neq","ner","nes","net","neu","nev","new","nex","ney","nez","nfa","nfd","nfl","nfr","nfu","nga","ngb","ngc","ngd","nge","ngf","ngg","ngh","ngi","ngj","ngk","ngl","ngm","ngn","ngo","ngp","ngq","ngr","ngs","ngt","ngu","ngv","ngw","ngx","ngy","ngz","nha","nhb","nhc","nhd","nhe","nhf","nhg","nhh","nhi","nhk","nhm","nhn","nho","nhp","nhq","nhr","nht","nhu","nhv","nhw","nhx","nhy","nhz","nia","nib","nic","nid","nie","nif","nig","nih","nii","nij","nik","nil","nim","nin","nio","niq","nir","nis","nit","niu","niv","niw","nix","niy","niz","nja","njb","njd","njh","nji","njj","njl","njm","njn","njo","njr","njs","njt","nju","njx","njy","njz","nka","nkb","nkc","nkd","nke","nkf","nkg","nkh","nki","nkj","nkk","nkm","nkn","nko","nkp","nkq","nkr","nks","nkt","nku","nkv","nkw","nkx","nkz","nla","nlc","nle","nlg","nli","nlj","nlk","nll","nln","nlo","nlq","nlr","nlu","nlv","nlw","nlx","nly","nlz","nma","nmb","nmc","nmd","nme","nmf","nmg","nmh","nmi","nmj","nmk","nml","nmm","nmn","nmo","nmp","nmq","nmr","nms","nmt","nmu","nmv","nmw","nmx","nmy","nmz","nna","nnb","nnc","nnd","nne","nnf","nng","nnh","nni","nnj","nnk","nnl","nnm","nnn","nnp","nnq","nnr","nns","nnt","nnu","nnv","nnw","nnx","nny","nnz","noa","noc","nod","noe","nof","nog","noh","noi","noj","nok","nol","nom","non","noo","nop","noq","nos","not","nou","nov","now","noy","noz","npa","npb","npg","nph","npi","npl","npn","npo","nps","npu","npx","npy","nqg","nqk","nql","nqm","nqn","nqo","nqq","nqy","nra","nrb","nrc","nre","nrf","nrg","nri","nrk","nrl","nrm","nrn","nrp","nrr","nrt","nru","nrx","nrz","nsa","nsc","nsd","nse","nsf","nsg","nsh","nsi","nsk","nsl","nsm","nsn","nso","nsp","nsq","nsr","nss","nst","nsu","nsv","nsw","nsx","nsy","nsz","ntd","nte","ntg","nti","ntj","ntk","ntm","nto","ntp","ntr","nts","ntu","ntw","ntx","nty","ntz","nua","nub","nuc","nud","nue","nuf","nug","nuh","nui","nuj","nuk","nul","num","nun","nuo","nup","nuq","nur","nus","nut","nuu","nuv","nuw","nux","nuy","nuz","nvh","nvm","nvo","nwa","nwb","nwc","nwe","nwg","nwi","nwm","nwo","nwr","nwx","nwy","nxa","nxd","nxe","nxg","nxi","nxk","nxl","nxm","nxn","nxo","nxq","nxr","nxu","nxx","nyb","nyc","nyd","nye","nyf","nyg","nyh","nyi","nyj","nyk","nyl","nym","nyn","nyo","nyp","nyq","nyr","nys","nyt","nyu","nyv","nyw","nyx","nyy","nza","nzb","nzi","nzk","nzm","nzs","nzu","nzy","nzz","oaa","oac","oar","oav","obi","obk","obl","obm","obo","obr","obt","obu","oca","och","oco","ocu","oda","odk","odt","odu","ofo","ofs","ofu","ogb","ogc","oge","ogg","ogo","ogu","oht","ohu","oia","oin","ojb","ojc","ojg","ojp","ojs","ojv","ojw","oka","okb","okd","oke","okg","okh","oki","okj","okk","okl","okm","okn","oko","okr","oks","oku","okv","okx","ola","old","ole","olk","olm","olo","olr","olt","olu","oma","omb","omc","ome","omg","omi","omk","oml","omn","omo","omp","omq","omr","omt","omu","omv","omw","omx","ona","onb","one","ong","oni","onj","onk","onn","ono","onp","onr","ons","ont","onu","onw","onx","ood","oog","oon","oor","oos","opa","opk","opm","opo","opt","opy","ora","orc","ore","org","orh","orn","oro","orr","ors","ort","oru","orv","orw","orx","ory","orz","osa","osc","osi","oso","osp","ost","osu","osx","ota","otb","otd","ote","oti","otk","otl","otm","otn","oto","otq","otr","ots","ott","otu","otw","otx","oty","otz","oua","oub","oue","oui","oum","oun","ovd","owi","owl","oyb","oyd","oym","oyy","ozm","paa","pab","pac","pad","pae","paf","pag","pah","pai","pak","pal","pam","pao","pap","paq","par","pas","pat","pau","pav","paw","pax","pay","paz","pbb","pbc","pbe","pbf","pbg","pbh","pbi","pbl","pbn","pbo","pbp","pbr","pbs","pbt","pbu","pbv","pby","pbz","pca","pcb","pcc","pcd","pce","pcf","pcg","pch","pci","pcj","pck","pcl","pcm","pcn","pcp","pcr","pcw","pda","pdc","pdi","pdn","pdo","pdt","pdu","pea","peb","ped","pee","pef","peg","peh","pei","pej","pek","pel","pem","peo","pep","peq","pes","pev","pex","pey","pez","pfa","pfe","pfl","pga","pgd","pgg","pgi","pgk","pgl","pgn","pgs","pgu","pgy","pgz","pha","phd","phg","phh","phi","phk","phl","phm","phn","pho","phq","phr","pht","phu","phv","phw","pia","pib","pic","pid","pie","pif","pig","pih","pii","pij","pil","pim","pin","pio","pip","pir","pis","pit","piu","piv","piw","pix","piy","piz","pjt","pka","pkb","pkc","pkg","pkh","pkn","pko","pkp","pkr","pks","pkt","pku","pla","plb","plc","pld","ple","plf","plg","plh","plj","plk","pll","pln","plo","plp","plq","plr","pls","plt","plu","plv","plw","ply","plz","pma","pmb","pmc","pmd","pme","pmf","pmh","pmi","pmj","pmk","pml","pmm","pmn","pmo","pmq","pmr","pms","pmt","pmu","pmw","pmx","pmy","pmz","pna","pnb","pnc","pne","png","pnh","pni","pnj","pnk","pnl","pnm","pnn","pno","pnp","pnq","pnr","pns","pnt","pnu","pnv","pnw","pnx","pny","pnz","poc","pod","poe","pof","pog","poh","poi","pok","pom","pon","poo","pop","poq","pos","pot","pov","pow","pox","poy","poz","ppa","ppe","ppi","ppk","ppl","ppm","ppn","ppo","ppp","ppq","ppr","pps","ppt","ppu","pqa","pqe","pqm","pqw","pra","prb","prc","prd","pre","prf","prg","prh","pri","prk","prl","prm","prn","pro","prp","prq","prr","prs","prt","pru","prw","prx","pry","prz","psa","psc","psd","pse","psg","psh","psi","psl","psm","psn","pso","psp","psq","psr","pss","pst","psu","psw","psy","pta","pth","pti","ptn","pto","ptp","ptq","ptr","ptt","ptu","ptv","ptw","pty","pua","pub","puc","pud","pue","puf","pug","pui","puj","puk","pum","puo","pup","puq","pur","put","puu","puw","pux","puy","puz","pwa","pwb","pwg","pwi","pwm","pwn","pwo","pwr","pww","pxm","pye","pym","pyn","pys","pyu","pyx","pyy","pzn","qaa..qtz","qua","qub","quc","qud","quf","qug","quh","qui","quk","qul","qum","qun","qup","quq","qur","qus","quv","quw","qux","quy","quz","qva","qvc","qve","qvh","qvi","qvj","qvl","qvm","qvn","qvo","qvp","qvs","qvw","qvy","qvz","qwa","qwc","qwe","qwh","qwm","qws","qwt","qxa","qxc","qxh","qxl","qxn","qxo","qxp","qxq","qxr","qxs","qxt","qxu","qxw","qya","qyp","raa","rab","rac","rad","raf","rag","rah","rai","raj","rak","ral","ram","ran","rao","rap","raq","rar","ras","rat","rau","rav","raw","rax","ray","raz","rbb","rbk","rbl","rbp","rcf","rdb","rea","reb","ree","reg","rei","rej","rel","rem","ren","rer","res","ret","rey","rga","rge","rgk","rgn","rgr","rgs","rgu","rhg","rhp","ria","rie","rif","ril","rim","rin","rir","rit","riu","rjg","rji","rjs","rka","rkb","rkh","rki","rkm","rkt","rkw","rma","rmb","rmc","rmd","rme","rmf","rmg","rmh","rmi","rmk","rml","rmm","rmn","rmo","rmp","rmq","rmr","rms","rmt","rmu","rmv","rmw","rmx","rmy","rmz","rna","rnd","rng","rnl","rnn","rnp","rnr","rnw","roa","rob","roc","rod","roe","rof","rog","rol","rom","roo","rop","ror","rou","row","rpn","rpt","rri","rro","rrt","rsb","rsi","rsl","rsm","rtc","rth","rtm","rts","rtw","rub","ruc","rue","ruf","rug","ruh","rui","ruk","ruo","rup","ruq","rut","ruu","ruy","ruz","rwa","rwk","rwm","rwo","rwr","rxd","rxw","ryn","rys","ryu","rzh","saa","sab","sac","sad","sae","saf","sah","sai","saj","sak","sal","sam","sao","sap","saq","sar","sas","sat","sau","sav","saw","sax","say","saz","sba","sbb","sbc","sbd","sbe","sbf","sbg","sbh","sbi","sbj","sbk","sbl","sbm","sbn","sbo","sbp","sbq","sbr","sbs","sbt","sbu","sbv","sbw","sbx","sby","sbz","sca","scb","sce","scf","scg","sch","sci","sck","scl","scn","sco","scp","scq","scs","sct","scu","scv","scw","scx","sda","sdb","sdc","sde","sdf","sdg","sdh","sdj","sdk","sdl","sdm","sdn","sdo","sdp","sdr","sds","sdt","sdu","sdv","sdx","sdz","sea","seb","sec","sed","see","sef","seg","seh","sei","sej","sek","sel","sem","sen","seo","sep","seq","ser","ses","set","seu","sev","sew","sey","sez","sfb","sfe","sfm","sfs","sfw","sga","sgb","sgc","sgd","sge","sgg","sgh","sgi","sgj","sgk","sgl","sgm","sgn","sgo","sgp","sgr","sgs","sgt","sgu","sgw","sgx","sgy","sgz","sha","shb","shc","shd","she","shg","shh","shi","shj","shk","shl","shm","shn","sho","shp","shq","shr","shs","sht","shu","shv","shw","shx","shy","shz","sia","sib","sid","sie","sif","sig","sih","sii","sij","sik","sil","sim","sio","sip","siq","sir","sis","sit","siu","siv","siw","six","siy","siz","sja","sjb","sjd","sje","sjg","sjk","sjl","sjm","sjn","sjo","sjp","sjr","sjs","sjt","sju","sjw","ska","skb","skc","skd","ske","skf","skg","skh","ski","skj","skk","skm","skn","sko","skp","skq","skr","sks","skt","sku","skv","skw","skx","sky","skz","sla","slc","sld","sle","slf","slg","slh","sli","slj","sll","slm","sln","slp","slq","slr","sls","slt","slu","slw","slx","sly","slz","sma","smb","smc","smd","smf","smg","smh","smi","smj","smk","sml","smm","smn","smp","smq","smr","sms","smt","smu","smv","smw","smx","smy","smz","snb","snc","sne","snf","sng","snh","sni","snj","snk","snl","snm","snn","sno","snp","snq","snr","sns","snu","snv","snw","snx","sny","snz","soa","sob","soc","sod","soe","sog","soh","soi","soj","sok","sol","son","soo","sop","soq","sor","sos","sou","sov","sow","sox","soy","soz","spb","spc","spd","spe","spg","spi","spk","spl","spm","spn","spo","spp","spq","spr","sps","spt","spu","spv","spx","spy","sqa","sqh","sqj","sqk","sqm","sqn","sqo","sqq","sqr","sqs","sqt","squ","sra","srb","src","sre","srf","srg","srh","sri","srk","srl","srm","srn","sro","srq","srr","srs","srt","sru","srv","srw","srx","sry","srz","ssa","ssb","ssc","ssd","sse","ssf","ssg","ssh","ssi","ssj","ssk","ssl","ssm","ssn","sso","ssp","ssq","ssr","sss","sst","ssu","ssv","ssx","ssy","ssz","sta","stb","std","ste","stf","stg","sth","sti","stj","stk","stl","stm","stn","sto","stp","stq","str","sts","stt","stu","stv","stw","sty","sua","sub","suc","sue","sug","sui","suj","suk","sul","sum","suq","sur","sus","sut","suv","suw","sux","suy","suz","sva","svb","svc","sve","svk","svm","svr","svs","svx","swb","swc","swf","swg","swh","swi","swj","swk","swl","swm","swn","swo","swp","swq","swr","sws","swt","swu","swv","sww","swx","swy","sxb","sxc","sxe","sxg","sxk","sxl","sxm","sxn","sxo","sxr","sxs","sxu","sxw","sya","syb","syc","syd","syi","syk","syl","sym","syn","syo","syr","sys","syw","syx","syy","sza","szb","szc","szd","sze","szg","szl","szn","szp","szs","szv","szw","taa","tab","tac","tad","tae","taf","tag","tai","taj","tak","tal","tan","tao","tap","taq","tar","tas","tau","tav","taw","tax","tay","taz","tba","tbb","tbc","tbd","tbe","tbf","tbg","tbh","tbi","tbj","tbk","tbl","tbm","tbn","tbo","tbp","tbq","tbr","tbs","tbt","tbu","tbv","tbw","tbx","tby","tbz","tca","tcb","tcc","tcd","tce","tcf","tcg","tch","tci","tck","tcl","tcm","tcn","tco","tcp","tcq","tcs","tct","tcu","tcw","tcx","tcy","tcz","tda","tdb","tdc","tdd","tde","tdf","tdg","tdh","tdi","tdj","tdk","tdl","tdm","tdn","tdo","tdq","tdr","tds","tdt","tdu","tdv","tdx","tdy","tea","teb","tec","ted","tee","tef","teg","teh","tei","tek","tem","ten","teo","tep","teq","ter","tes","tet","teu","tev","tew","tex","tey","tfi","tfn","tfo","tfr","tft","tga","tgb","tgc","tgd","tge","tgf","tgg","tgh","tgi","tgj","tgn","tgo","tgp","tgq","tgr","tgs","tgt","tgu","tgv","tgw","tgx","tgy","tgz","thc","thd","the","thf","thh","thi","thk","thl","thm","thn","thp","thq","thr","ths","tht","thu","thv","thw","thx","thy","thz","tia","tic","tid","tie","tif","tig","tih","tii","tij","tik","til","tim","tin","tio","tip","tiq","tis","tit","tiu","tiv","tiw","tix","tiy","tiz","tja","tjg","tji","tjl","tjm","tjn","tjo","tjs","tju","tjw","tka","tkb","tkd","tke","tkf","tkg","tkk","tkl","tkm","tkn","tkp","tkq","tkr","tks","tkt","tku","tkv","tkw","tkx","tkz","tla","tlb","tlc","tld","tlf","tlg","tlh","tli","tlj","tlk","tll","tlm","tln","tlo","tlp","tlq","tlr","tls","tlt","tlu","tlv","tlw","tlx","tly","tma","tmb","tmc","tmd","tme","tmf","tmg","tmh","tmi","tmj","tmk","tml","tmm","tmn","tmo","tmp","tmq","tmr","tms","tmt","tmu","tmv","tmw","tmy","tmz","tna","tnb","tnc","tnd","tne","tnf","tng","tnh","tni","tnk","tnl","tnm","tnn","tno","tnp","tnq","tnr","tns","tnt","tnu","tnv","tnw","tnx","tny","tnz","tob","toc","tod","toe","tof","tog","toh","toi","toj","tol","tom","too","top","toq","tor","tos","tou","tov","tow","tox","toy","toz","tpa","tpc","tpe","tpf","tpg","tpi","tpj","tpk","tpl","tpm","tpn","tpo","tpp","tpq","tpr","tpt","tpu","tpv","tpw","tpx","tpy","tpz","tqb","tql","tqm","tqn","tqo","tqp","tqq","tqr","tqt","tqu","tqw","tra","trb","trc","trd","tre","trf","trg","trh","tri","trj","trk","trl","trm","trn","tro","trp","trq","trr","trs","trt","tru","trv","trw","trx","try","trz","tsa","tsb","tsc","tsd","tse","tsf","tsg","tsh","tsi","tsj","tsk","tsl","tsm","tsp","tsq","tsr","tss","tst","tsu","tsv","tsw","tsx","tsy","tsz","tta","ttb","ttc","ttd","tte","ttf","ttg","tth","tti","ttj","ttk","ttl","ttm","ttn","tto","ttp","ttq","ttr","tts","ttt","ttu","ttv","ttw","tty","ttz","tua","tub","tuc","tud","tue","tuf","tug","tuh","tui","tuj","tul","tum","tun","tuo","tup","tuq","tus","tut","tuu","tuv","tuw","tux","tuy","tuz","tva","tvd","tve","tvk","tvl","tvm","tvn","tvo","tvs","tvt","tvu","tvw","tvy","twa","twb","twc","twd","twe","twf","twg","twh","twl","twm","twn","two","twp","twq","twr","twt","twu","tww","twx","twy","txa","txb","txc","txe","txg","txh","txi","txj","txm","txn","txo","txq","txr","txs","txt","txu","txx","txy","tya","tye","tyh","tyi","tyj","tyl","tyn","typ","tyr","tys","tyt","tyu","tyv","tyx","tyz","tza","tzh","tzj","tzl","tzm","tzn","tzo","tzx","uam","uan","uar","uba","ubi","ubl","ubr","ubu","uby","uda","ude","udg","udi","udj","udl","udm","udu","ues","ufi","uga","ugb","uge","ugn","ugo","ugy","uha","uhn","uis","uiv","uji","uka","ukg","ukh","ukk","ukl","ukp","ukq","uks","uku","ukw","uky","ula","ulb","ulc","ule","ulf","uli","ulk","ull","ulm","uln","ulu","ulw","uma","umb","umc","umd","umg","umi","umm","umn","umo","ump","umr","ums","umu","una","und","une","ung","unk","unm","unn","unp","unr","unu","unx","unz","uok","upi","upv","ura","urb","urc","ure","urf","urg","urh","uri","urj","urk","url","urm","urn","uro","urp","urr","urt","uru","urv","urw","urx","ury","urz","usa","ush","usi","usk","usp","usu","uta","ute","utp","utr","utu","uum","uun","uur","uuu","uve","uvh","uvl","uwa","uya","uzn","uzs","vaa","vae","vaf","vag","vah","vai","vaj","val","vam","van","vao","vap","var","vas","vau","vav","vay","vbb","vbk","vec","ved","vel","vem","veo","vep","ver","vgr","vgt","vic","vid","vif","vig","vil","vin","vis","vit","viv","vka","vki","vkj","vkk","vkl","vkm","vko","vkp","vkt","vku","vlp","vls","vma","vmb","vmc","vmd","vme","vmf","vmg","vmh","vmi","vmj","vmk","vml","vmm","vmp","vmq","vmr","vms","vmu","vmv","vmw","vmx","vmy","vmz","vnk","vnm","vnp","vor","vot","vra","vro","vrs","vrt","vsi","vsl","vsv","vto","vum","vun","vut","vwa","waa","wab","wac","wad","wae","waf","wag","wah","wai","waj","wak","wal","wam","wan","wao","wap","waq","war","was","wat","wau","wav","waw","wax","way","waz","wba","wbb","wbe","wbf","wbh","wbi","wbj","wbk","wbl","wbm","wbp","wbq","wbr","wbs","wbt","wbv","wbw","wca","wci","wdd","wdg","wdj","wdk","wdu","wdy","wea","wec","wed","weg","weh","wei","wem","wen","weo","wep","wer","wes","wet","weu","wew","wfg","wga","wgb","wgg","wgi","wgo","wgu","wgw","wgy","wha","whg","whk","whu","wib","wic","wie","wif","wig","wih","wii","wij","wik","wil","wim","win","wir","wit","wiu","wiv","wiw","wiy","wja","wji","wka","wkb","wkd","wkl","wku","wkw","wky","wla","wlc","wle","wlg","wli","wlk","wll","wlm","wlo","wlr","wls","wlu","wlv","wlw","wlx","wly","wma","wmb","wmc","wmd","wme","wmh","wmi","wmm","wmn","wmo","wms","wmt","wmw","wmx","wnb","wnc","wnd","wne","wng","wni","wnk","wnm","wnn","wno","wnp","wnu","wnw","wny","woa","wob","woc","wod","woe","wof","wog","woi","wok","wom","won","woo","wor","wos","wow","woy","wpc","wra","wrb","wrd","wrg","wrh","wri","wrk","wrl","wrm","wrn","wro","wrp","wrr","wrs","wru","wrv","wrw","wrx","wry","wrz","wsa","wsg","wsi","wsk","wsr","wss","wsu","wsv","wtf","wth","wti","wtk","wtm","wtw","wua","wub","wud","wuh","wul","wum","wun","wur","wut","wuu","wuv","wux","wuy","wwa","wwb","wwo","wwr","www","wxa","wxw","wya","wyb","wyi","wym","wyr","wyy","xaa","xab","xac","xad","xae","xag","xai","xaj","xak","xal","xam","xan","xao","xap","xaq","xar","xas","xat","xau","xav","xaw","xay","xba","xbb","xbc","xbd","xbe","xbg","xbi","xbj","xbm","xbn","xbo","xbp","xbr","xbw","xbx","xby","xcb","xcc","xce","xcg","xch","xcl","xcm","xcn","xco","xcr","xct","xcu","xcv","xcw","xcy","xda","xdc","xdk","xdm","xdo","xdy","xeb","xed","xeg","xel","xem","xep","xer","xes","xet","xeu","xfa","xga","xgb","xgd","xgf","xgg","xgi","xgl","xgm","xgn","xgr","xgu","xgw","xha","xhc","xhd","xhe","xhr","xht","xhu","xhv","xia","xib","xii","xil","xin","xip","xir","xis","xiv","xiy","xjb","xjt","xka","xkb","xkc","xkd","xke","xkf","xkg","xkh","xki","xkj","xkk","xkl","xkn","xko","xkp","xkq","xkr","xks","xkt","xku","xkv","xkw","xkx","xky","xkz","xla","xlb","xlc","xld","xle","xlg","xli","xln","xlo","xlp","xls","xlu","xly","xma","xmb","xmc","xmd","xme","xmf","xmg","xmh","xmj","xmk","xml","xmm","xmn","xmo","xmp","xmq","xmr","xms","xmt","xmu","xmv","xmw","xmx","xmy","xmz","xna","xnb","xnd","xng","xnh","xni","xnk","xnn","xno","xnr","xns","xnt","xnu","xny","xnz","xoc","xod","xog","xoi","xok","xom","xon","xoo","xop","xor","xow","xpa","xpc","xpe","xpg","xpi","xpj","xpk","xpm","xpn","xpo","xpp","xpq","xpr","xps","xpt","xpu","xpy","xqa","xqt","xra","xrb","xrd","xre","xrg","xri","xrm","xrn","xrq","xrr","xrt","xru","xrw","xsa","xsb","xsc","xsd","xse","xsh","xsi","xsj","xsl","xsm","xsn","xso","xsp","xsq","xsr","xss","xsu","xsv","xsy","xta","xtb","xtc","xtd","xte","xtg","xth","xti","xtj","xtl","xtm","xtn","xto","xtp","xtq","xtr","xts","xtt","xtu","xtv","xtw","xty","xtz","xua","xub","xud","xug","xuj","xul","xum","xun","xuo","xup","xur","xut","xuu","xve","xvi","xvn","xvo","xvs","xwa","xwc","xwd","xwe","xwg","xwj","xwk","xwl","xwo","xwr","xwt","xww","xxb","xxk","xxm","xxr","xxt","xya","xyb","xyj","xyk","xyl","xyt","xyy","xzh","xzm","xzp","yaa","yab","yac","yad","yae","yaf","yag","yah","yai","yaj","yak","yal","yam","yan","yao","yap","yaq","yar","yas","yat","yau","yav","yaw","yax","yay","yaz","yba","ybb","ybd","ybe","ybh","ybi","ybj","ybk","ybl","ybm","ybn","ybo","ybx","yby","ych","ycl","ycn","ycp","yda","ydd","yde","ydg","ydk","yds","yea","yec","yee","yei","yej","yel","yen","yer","yes","yet","yeu","yev","yey","yga","ygi","ygl","ygm","ygp","ygr","ygs","ygu","ygw","yha","yhd","yhl","yhs","yia","yif","yig","yih","yii","yij","yik","yil","yim","yin","yip","yiq","yir","yis","yit","yiu","yiv","yix","yiy","yiz","yka","ykg","yki","ykk","ykl","ykm","ykn","yko","ykr","ykt","yku","yky","yla","ylb","yle","ylg","yli","yll","ylm","yln","ylo","ylr","ylu","yly","yma","ymb","ymc","ymd","yme","ymg","ymh","ymi","ymk","yml","ymm","ymn","ymo","ymp","ymq","ymr","yms","ymt","ymx","ymz","yna","ynd","yne","yng","ynh","ynk","ynl","ynn","yno","ynq","yns","ynu","yob","yog","yoi","yok","yol","yom","yon","yos","yot","yox","yoy","ypa","ypb","ypg","yph","ypk","ypm","ypn","ypo","ypp","ypz","yra","yrb","yre","yri","yrk","yrl","yrm","yrn","yro","yrs","yrw","yry","ysc","ysd","ysg","ysl","ysn","yso","ysp","ysr","yss","ysy","yta","ytl","ytp","ytw","yty","yua","yub","yuc","yud","yue","yuf","yug","yui","yuj","yuk","yul","yum","yun","yup","yuq","yur","yut","yuu","yuw","yux","yuy","yuz","yva","yvt","ywa","ywg","ywl","ywn","ywq","ywr","ywt","ywu","yww","yxa","yxg","yxl","yxm","yxu","yxy","yyr","yyu","yyz","yzg","yzk","zaa","zab","zac","zad","zae","zaf","zag","zah","zai","zaj","zak","zal","zam","zao","zap","zaq","zar","zas","zat","zau","zav","zaw","zax","zay","zaz","zbc","zbe","zbl","zbt","zbw","zca","zch","zdj","zea","zeg","zeh","zen","zga","zgb","zgh","zgm","zgn","zgr","zhb","zhd","zhi","zhn","zhw","zhx","zia","zib","zik","zil","zim","zin","zir","ziw","ziz","zka","zkb","zkd","zkg","zkh","zkk","zkn","zko","zkp","zkr","zkt","zku","zkv","zkz","zle","zlj","zlm","zln","zlq","zls","zlw","zma","zmb","zmc","zmd","zme","zmf","zmg","zmh","zmi","zmj","zmk","zml","zmm","zmn","zmo","zmp","zmq","zmr","zms","zmt","zmu","zmv","zmw","zmx","zmy","zmz","zna","znd","zne","zng","znk","zns","zoc","zoh","zom","zoo","zoq","zor","zos","zpa","zpb","zpc","zpd","zpe","zpf","zpg","zph","zpi","zpj","zpk","zpl","zpm","zpn","zpo","zpp","zpq","zpr","zps","zpt","zpu","zpv","zpw","zpx","zpy","zpz","zqe","zra","zrg","zrn","zro","zrp","zrs","zsa","zsk","zsl","zsm","zsr","zsu","zte","ztg","ztl","ztm","ztn","ztp","ztq","zts","ztt","ztu","ztx","zty","zua","zuh","zum","zun","zuy","zwa","zxx","zyb","zyg","zyj","zyn","zyp","zza","zzj"];axe.utils.validLangs=function(){'use strict';return langs;};},{}],99:[function(require,module,exports){window.requestFileSystem=window.requestFileSystem||window.webkitRequestFileSystem;WebInspector.TempFile=function()
{this._fileEntry=null;this._writer=null;};WebInspector.TempFile.create=function(dirPath,name)
{var file=new WebInspector.TempFile();function requestTempFileSystem()
{return new Promise(window.requestFileSystem.bind(window,window.TEMPORARY,10));}
function getDirectoryEntry(fs)
{return new Promise(fs.root.getDirectory.bind(fs.root,dirPath,{create:true}));}
function getFileEntry(dir)
{return new Promise(dir.getFile.bind(dir,name,{create:true}));}
function createFileWriter(fileEntry)
{file._fileEntry=fileEntry;return new Promise(fileEntry.createWriter.bind(fileEntry));}
function truncateFile(writer)
{if(!writer.length){file._writer=writer;return Promise.resolve(file);}
function truncate(fulfill,reject)
{writer.onwriteend=fulfill;writer.onerror=reject;writer.truncate(0);}
function didTruncate()
{file._writer=writer;writer.onwriteend=null;writer.onerror=null;return Promise.resolve(file);}
function onTruncateError(e)
{writer.onwriteend=null;writer.onerror=null;throw e;}
return new Promise(truncate).then(didTruncate,onTruncateError);}
return WebInspector.TempFile.ensureTempStorageCleared().then(requestTempFileSystem).then(getDirectoryEntry).then(getFileEntry).then(createFileWriter).then(truncateFile);};WebInspector.TempFile.prototype={write:function(strings,callback)
{var blob=new Blob(strings,{type:"text/plain"});this._writer.onerror=function(e)
{WebInspector.console.error("Failed to write into a temp file: "+e.target.error.message);callback(-1);};this._writer.onwriteend=function(e)
{callback(e.target.length);};this._writer.write(blob);},finishWriting:function()
{this._writer=null;},read:function(callback)
{this.readRange(undefined,undefined,callback);},readRange:function(startOffset,endOffset,callback)
{function didGetFile(file)
{var reader=new FileReader();if(typeof startOffset==="number"||typeof endOffset==="number")
file=file.slice(startOffset,endOffset);reader.onloadend=function(e)
{callback(this.result);};reader.onerror=function(error)
{WebInspector.console.error("Failed to read from temp file: "+error.message);};reader.readAsText(file);}
function didFailToGetFile(error)
{WebInspector.console.error("Failed to load temp file: "+error.message);callback(null);}
this._fileEntry.file(didGetFile,didFailToGetFile);},copyToOutputStream:function(outputStream,delegate)
{function didGetFile(file)
{var reader=new WebInspector.ChunkedFileReader(file,10*1000*1000,delegate);reader.start(outputStream);}
function didFailToGetFile(error)
{WebInspector.console.error("Failed to load temp file: "+error.message);outputStream.close();}
this._fileEntry.file(didGetFile,didFailToGetFile);},remove:function()
{if(this._fileEntry)
this._fileEntry.remove(function(){});}};WebInspector.DeferredTempFile=function(dirPath,name)
{this._chunks=[];this._tempFile=null;this._isWriting=false;this._finishCallback=null;this._finishedWriting=false;this._callsPendingOpen=[];this._pendingReads=[];WebInspector.TempFile.create(dirPath,name).then(this._didCreateTempFile.bind(this),this._failedToCreateTempFile.bind(this));};WebInspector.DeferredTempFile.prototype={write:function(strings,callback)
{if(this._finishCallback)
throw new Error("No writes are allowed after close.");this._chunks.push({strings:strings,callback:callback||null});if(this._tempFile&&!this._isWriting)
this._writeNextChunk();},finishWriting:function(callback)
{this._finishCallback=callback;if(this._finishedWriting)
callback(this._tempFile);else
if(!this._isWriting&&!this._chunks.length)
this._notifyFinished();},_failedToCreateTempFile:function(e)
{WebInspector.console.error("Failed to create temp file "+e.code+" : "+e.message);this._notifyFinished();},_didCreateTempFile:function(tempFile)
{this._tempFile=tempFile;var callsPendingOpen=this._callsPendingOpen;this._callsPendingOpen=null;for(var i=0;i<callsPendingOpen.length;++i)
callsPendingOpen[i]();if(this._chunks.length)
this._writeNextChunk();},_writeNextChunk:function()
{if(!this._tempFile)
return;var chunk=this._chunks.shift();this._isWriting=true;this._tempFile.write(chunk.strings,this._didWriteChunk.bind(this,chunk.callback));},_didWriteChunk:function(callback,size)
{this._isWriting=false;if(size===-1){this._tempFile=null;this._notifyFinished();return;}
if(callback)
callback(size);if(this._chunks.length)
this._writeNextChunk();else
if(this._finishCallback)
this._notifyFinished();},_notifyFinished:function()
{this._finishedWriting=true;if(this._tempFile)
this._tempFile.finishWriting();var chunks=this._chunks;this._chunks=[];for(var i=0;i<chunks.length;++i){if(chunks[i].callback)
chunks[i].callback(-1);}
if(this._finishCallback)
this._finishCallback(this._tempFile);var pendingReads=this._pendingReads;this._pendingReads=[];for(var i=0;i<pendingReads.length;++i)
pendingReads[i]();},readRange:function(startOffset,endOffset,callback)
{if(!this._finishedWriting){this._pendingReads.push(this.readRange.bind(this,startOffset,endOffset,callback));return;}
if(!this._tempFile){callback(null);return;}
this._tempFile.readRange(startOffset,endOffset,callback);},copyToOutputStream:function(outputStream,delegate)
{if(!this._finishedWriting){this._pendingReads.push(this.copyToOutputStream.bind(this,outputStream,delegate));return;}
if(this._tempFile)
this._tempFile.copyToOutputStream(outputStream,delegate);},remove:function()
{if(this._callsPendingOpen){this._callsPendingOpen.push(this.remove.bind(this));return;}
if(this._tempFile)
this._tempFile.remove();this._tempFile=null;}};WebInspector.TempFile._clearTempStorage=function(fulfill,reject)
{function handleError(event)
{WebInspector.console.error(WebInspector.UIString("Failed to clear temp storage: %s",event.data));reject(event.data);}
function handleMessage(event)
{if(event.data.type==="tempStorageCleared"){if(event.data.error)
WebInspector.console.error(event.data.error);else
fulfill(undefined);return;}
reject(event.data);}
try{var worker=new WebInspector.Worker("temp_storage_shared_worker","TempStorageCleaner");worker.onerror=handleError;worker.onmessage=handleMessage;}catch(e){if(e.name==="URLMismatchError")
console.log("Shared worker wasn't started due to url difference. "+e);else
throw e;}};WebInspector.TempFile.ensureTempStorageCleared=function()
{if(!WebInspector.TempFile._storageCleanerPromise)
WebInspector.TempFile._storageCleanerPromise=new Promise(WebInspector.TempFile._clearTempStorage);return WebInspector.TempFile._storageCleanerPromise;};WebInspector.TempFileBackingStorage=function(dirName)
{this._dirName=dirName;this.reset();};WebInspector.TempFileBackingStorage.Chunk;WebInspector.TempFileBackingStorage.prototype={appendString:function(string)
{this._strings.push(string);this._stringsLength+=string.length;var flushStringLength=10*1024*1024;if(this._stringsLength>flushStringLength)
this._flush(false);},appendAccessibleString:function(string)
{this._flush(false);this._strings.push(string);var chunk=this._flush(true);function readString(chunk,file)
{if(chunk.string)
return Promise.resolve(chunk.string);console.assert(chunk.endOffset);if(!chunk.endOffset)
return Promise.reject("Nor string nor offset to the string in the file were found.");function readRange(fulfill,reject)
{file.readRange(chunk.startOffset,chunk.endOffset,fulfill);}
return new Promise(readRange);}
return readString.bind(null,chunk,this._file);},_flush:function(createChunk)
{if(!this._strings.length)
return null;var chunk=null;if(createChunk){console.assert(this._strings.length===1);chunk={string:this._strings[0],startOffset:0,endOffset:0};}
function didWrite(chunk,fileSize)
{if(fileSize===-1)
return;if(chunk){chunk.startOffset=this._fileSize;chunk.endOffset=fileSize;chunk.string=null;}
this._fileSize=fileSize;}
this._file.write(this._strings,didWrite.bind(this,chunk));this._strings=[];this._stringsLength=0;return chunk;},finishWriting:function()
{this._flush(false);this._file.finishWriting(function(){});},reset:function()
{if(this._file)
this._file.remove();this._file=new WebInspector.DeferredTempFile(this._dirName,String(Date.now()));this._strings=[];this._stringsLength=0;this._fileSize=0;},writeToStream:function(outputStream,delegate)
{this._file.copyToOutputStream(outputStream,delegate);}};},{}],100:[function(require,module,exports){WebInspector.Color=function(rgba,format,originalText)
{this._rgba=rgba;this._originalText=originalText||null;this._originalTextIsValid=!!this._originalText;this._format=format;if(typeof this._rgba[3]==="undefined")
this._rgba[3]=1;for(var i=0;i<4;++i){if(this._rgba[i]<0){this._rgba[i]=0;this._originalTextIsValid=false;}
if(this._rgba[i]>1){this._rgba[i]=1;this._originalTextIsValid=false;}}};WebInspector.Color.Regex=/((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3}|\b[a-zA-Z]+\b(?!-))/g;WebInspector.Color.Format={Original:"original",Nickname:"nickname",HEX:"hex",ShortHEX:"shorthex",RGB:"rgb",RGBA:"rgba",HSL:"hsl",HSLA:"hsla"};WebInspector.Color.parse=function(text)
{var value=text.toLowerCase().replace(/\s+/g,"");var simple=/^(?:#([0-9a-f]{3}|[0-9a-f]{6})|rgb\(((?:-?\d+%?,){2}-?\d+%?)\)|(\w+)|hsl\((-?\d+\.?\d*(?:,-?\d+\.?\d*%){2})\))$/i;var match=value.match(simple);if(match){if(match[1]){var hex=match[1].toLowerCase();var format;if(hex.length===3){format=WebInspector.Color.Format.ShortHEX;hex=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2);}else
format=WebInspector.Color.Format.HEX;var r=parseInt(hex.substring(0,2),16);var g=parseInt(hex.substring(2,4),16);var b=parseInt(hex.substring(4,6),16);return new WebInspector.Color([r/255,g/255,b/255,1],format,text);}
if(match[2]){var rgbString=match[2].split(/\s*,\s*/);var rgba=[WebInspector.Color._parseRgbNumeric(rgbString[0]),WebInspector.Color._parseRgbNumeric(rgbString[1]),WebInspector.Color._parseRgbNumeric(rgbString[2]),1];return new WebInspector.Color(rgba,WebInspector.Color.Format.RGB,text);}
if(match[3]){var nickname=match[3].toLowerCase();if(nickname in WebInspector.Color.Nicknames){var rgba=WebInspector.Color.Nicknames[nickname];var color=WebInspector.Color.fromRGBA(rgba);color._format=WebInspector.Color.Format.Nickname;color._originalText=text;return color;}
return null;}
if(match[4]){var hslString=match[4].replace(/%/g,"").split(/\s*,\s*/);var hsla=[WebInspector.Color._parseHueNumeric(hslString[0]),WebInspector.Color._parseSatLightNumeric(hslString[1]),WebInspector.Color._parseSatLightNumeric(hslString[2]),1];var rgba=[];WebInspector.Color.hsl2rgb(hsla,rgba);return new WebInspector.Color(rgba,WebInspector.Color.Format.HSL,text);}
return null;}
var advanced=/^(?:rgba\(((?:-?\d+%?,){3}-?(?:\d+|\d*\.\d+))\)|hsla\((-?(?:\d+|\d*\.\d+)(?:,-?(?:\d+|\d*\.\d+)*%){2},-?(?:\d+|\d*\.\d+))\))$/;match=value.match(advanced);if(match){if(match[1]){var rgbaString=match[1].split(/\s*,\s*/);var rgba=[WebInspector.Color._parseRgbNumeric(rgbaString[0]),WebInspector.Color._parseRgbNumeric(rgbaString[1]),WebInspector.Color._parseRgbNumeric(rgbaString[2]),WebInspector.Color._parseAlphaNumeric(rgbaString[3])];return new WebInspector.Color(rgba,WebInspector.Color.Format.RGBA,text);}
if(match[2]){var hslaString=match[2].replace(/%/g,"").split(/\s*,\s*/);var hsla=[WebInspector.Color._parseHueNumeric(hslaString[0]),WebInspector.Color._parseSatLightNumeric(hslaString[1]),WebInspector.Color._parseSatLightNumeric(hslaString[2]),WebInspector.Color._parseAlphaNumeric(hslaString[3])];var rgba=[];WebInspector.Color.hsl2rgb(hsla,rgba);return new WebInspector.Color(rgba,WebInspector.Color.Format.HSLA,text);}}
return null;};WebInspector.Color.fromRGBA=function(rgba)
{return new WebInspector.Color([rgba[0]/255,rgba[1]/255,rgba[2]/255,rgba[3]],WebInspector.Color.Format.RGBA);};WebInspector.Color.fromHSVA=function(hsva)
{var rgba=[];WebInspector.Color.hsva2rgba(hsva,rgba);return new WebInspector.Color(rgba,WebInspector.Color.Format.HSLA);};WebInspector.Color.prototype={format:function()
{return this._format;},hsla:function()
{if(this._hsla)
return this._hsla;var r=this._rgba[0];var g=this._rgba[1];var b=this._rgba[2];var max=Math.max(r,g,b);var min=Math.min(r,g,b);var diff=max-min;var add=max+min;if(min===max)
var h=0;else
if(r===max)
var h=(1/6*(g-b)/diff+1)%1;else
if(g===max)
var h=1/6*(b-r)/diff+1/3;else
var h=1/6*(r-g)/diff+2/3;var l=0.5*add;if(l===0)
var s=0;else
if(l===1)
var s=0;else
if(l<=0.5)
var s=diff/add;else
var s=diff/(2-add);this._hsla=[h,s,l,this._rgba[3]];return this._hsla;},canonicalHSLA:function()
{var hsla=this.hsla();return[Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]];},hsva:function()
{var hsla=this.hsla();var h=hsla[0];var s=hsla[1];var l=hsla[2];s*=l<0.5?l:1-l;return[h,s!==0?2*s/(l+s):0,l+s,hsla[3]];},hasAlpha:function()
{return this._rgba[3]!==1;},canBeShortHex:function()
{if(this.hasAlpha())
return false;for(var i=0;i<3;++i){var c=Math.round(this._rgba[i]*255);if(c%17)
return false;}
return true;},asString:function(format)
{if(format===this._format&&this._originalTextIsValid)
return this._originalText;if(!format)
format=this._format;function toRgbValue(value)
{return Math.round(value*255);}
function toHexValue(value)
{var hex=Math.round(value*255).toString(16);return hex.length===1?"0"+hex:hex;}
function toShortHexValue(value)
{return(Math.round(value*255)/17).toString(16);}
switch(format){case WebInspector.Color.Format.Original:return this._originalText;case WebInspector.Color.Format.RGB:if(this.hasAlpha())
return null;return String.sprintf("rgb(%d, %d, %d)",toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]));case WebInspector.Color.Format.RGBA:return String.sprintf("rgba(%d, %d, %d, %f)",toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]),this._rgba[3]);case WebInspector.Color.Format.HSL:if(this.hasAlpha())
return null;var hsl=this.hsla();return String.sprintf("hsl(%d, %d%, %d%)",Math.round(hsl[0]*360),Math.round(hsl[1]*100),Math.round(hsl[2]*100));case WebInspector.Color.Format.HSLA:var hsla=this.hsla();return String.sprintf("hsla(%d, %d%, %d%, %f)",Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]);case WebInspector.Color.Format.HEX:if(this.hasAlpha())
return null;return String.sprintf("#%s%s%s",toHexValue(this._rgba[0]),toHexValue(this._rgba[1]),toHexValue(this._rgba[2])).toLowerCase();case WebInspector.Color.Format.ShortHEX:if(!this.canBeShortHex())
return null;return String.sprintf("#%s%s%s",toShortHexValue(this._rgba[0]),toShortHexValue(this._rgba[1]),toShortHexValue(this._rgba[2])).toLowerCase();case WebInspector.Color.Format.Nickname:return this.nickname();}
return this._originalText;},rgba:function()
{return this._rgba.slice();},canonicalRGBA:function()
{var rgba=new Array(4);for(var i=0;i<3;++i)
rgba[i]=Math.round(this._rgba[i]*255);rgba[3]=this._rgba[3];return rgba;},nickname:function()
{if(!WebInspector.Color._rgbaToNickname){WebInspector.Color._rgbaToNickname={};for(var nickname in WebInspector.Color.Nicknames){var rgba=WebInspector.Color.Nicknames[nickname];if(rgba.length!==4)
rgba=rgba.concat(1);WebInspector.Color._rgbaToNickname[rgba]=nickname;}}
return WebInspector.Color._rgbaToNickname[this.canonicalRGBA()]||null;},toProtocolRGBA:function()
{var rgba=this.canonicalRGBA();var result={r:rgba[0],g:rgba[1],b:rgba[2]};if(rgba[3]!==1)
result.a=rgba[3];return result;},invert:function()
{var rgba=[];rgba[0]=1-this._rgba[0];rgba[1]=1-this._rgba[1];rgba[2]=1-this._rgba[2];rgba[3]=this._rgba[3];return new WebInspector.Color(rgba,WebInspector.Color.Format.RGBA);},setAlpha:function(alpha)
{var rgba=this._rgba.slice();rgba[3]=alpha;return new WebInspector.Color(rgba,WebInspector.Color.Format.RGBA);}};WebInspector.Color._parseRgbNumeric=function(value)
{var parsed=parseInt(value,10);if(value.indexOf("%")!==-1)
parsed/=100;else
parsed/=255;return parsed;};WebInspector.Color._parseHueNumeric=function(value)
{return isNaN(value)?0:parseFloat(value)/360%1;};WebInspector.Color._parseSatLightNumeric=function(value)
{return Math.min(1,parseFloat(value)/100);};WebInspector.Color._parseAlphaNumeric=function(value)
{return isNaN(value)?0:parseFloat(value);};WebInspector.Color._hsva2hsla=function(hsva,out_hsla)
{var h=hsva[0];var s=hsva[1];var v=hsva[2];var t=(2-s)*v;if(v===0||s===0)
s=0;else
s*=v/(t<1?t:2-t);out_hsla[0]=h;out_hsla[1]=s;out_hsla[2]=t/2;out_hsla[3]=hsva[3];};WebInspector.Color.hsl2rgb=function(hsl,out_rgb)
{var h=hsl[0];var s=hsl[1];var l=hsl[2];function hue2rgb(p,q,h)
{if(h<0)
h+=1;else
if(h>1)
h-=1;if(h*6<1)
return p+(q-p)*h*6;else
if(h*2<1)
return q;else
if(h*3<2)
return p+(q-p)*(2/3-h)*6;else
return p;}
if(s<0)
s=0;if(l<=0.5)
var q=l*(1+s);else
var q=l+s-l*s;var p=2*l-q;var tr=h+1/3;var tg=h;var tb=h-1/3;out_rgb[0]=hue2rgb(p,q,tr);out_rgb[1]=hue2rgb(p,q,tg);out_rgb[2]=hue2rgb(p,q,tb);out_rgb[3]=hsl[3];};WebInspector.Color.hsva2rgba=function(hsva,out_rgba)
{WebInspector.Color._hsva2hsla(hsva,WebInspector.Color.hsva2rgba._tmpHSLA);WebInspector.Color.hsl2rgb(WebInspector.Color.hsva2rgba._tmpHSLA,out_rgba);for(var i=0;i<WebInspector.Color.hsva2rgba._tmpHSLA.length;i++)
WebInspector.Color.hsva2rgba._tmpHSLA[i]=0;};WebInspector.Color.hsva2rgba._tmpHSLA=[0,0,0,0];WebInspector.Color.luminance=function(rgba)
{var rSRGB=rgba[0];var gSRGB=rgba[1];var bSRGB=rgba[2];var r=rSRGB<=0.03928?rSRGB/12.92:Math.pow((rSRGB+0.055)/1.055,2.4);var g=gSRGB<=0.03928?gSRGB/12.92:Math.pow((gSRGB+0.055)/1.055,2.4);var b=bSRGB<=0.03928?bSRGB/12.92:Math.pow((bSRGB+0.055)/1.055,2.4);return 0.2126*r+0.7152*g+0.0722*b;};WebInspector.Color.blendColors=function(fgRGBA,bgRGBA,out_blended)
{var alpha=fgRGBA[3];out_blended[0]=(1-alpha)*bgRGBA[0]+alpha*fgRGBA[0];out_blended[1]=(1-alpha)*bgRGBA[1]+alpha*fgRGBA[1];out_blended[2]=(1-alpha)*bgRGBA[2]+alpha*fgRGBA[2];out_blended[3]=alpha+bgRGBA[3]*(1-alpha);};WebInspector.Color.calculateContrastRatio=function(fgRGBA,bgRGBA)
{WebInspector.Color.blendColors(fgRGBA,bgRGBA,WebInspector.Color.calculateContrastRatio._blendedFg);var fgLuminance=WebInspector.Color.luminance(WebInspector.Color.calculateContrastRatio._blendedFg);var bgLuminance=WebInspector.Color.luminance(bgRGBA);var contrastRatio=(Math.max(fgLuminance,bgLuminance)+0.05)/(Math.min(fgLuminance,bgLuminance)+0.05);for(var i=0;i<WebInspector.Color.calculateContrastRatio._blendedFg.length;i++)
WebInspector.Color.calculateContrastRatio._blendedFg[i]=0;return contrastRatio;};WebInspector.Color.calculateContrastRatio._blendedFg=[0,0,0,0];WebInspector.Color.desiredLuminance=function(luminance,contrast,lighter)
{function computeLuminance()
{if(lighter)
return(luminance+0.05)*contrast-0.05;else
return(luminance+0.05)/contrast-0.05;}
var desiredLuminance=computeLuminance();if(desiredLuminance<0||desiredLuminance>1){lighter=!lighter;desiredLuminance=computeLuminance();}
return desiredLuminance;};WebInspector.Color.Nicknames={"aliceblue":[240,248,255],"antiquewhite":[250,235,215],"aqua":[0,255,255],"aquamarine":[127,255,212],"azure":[240,255,255],"beige":[245,245,220],"bisque":[255,228,196],"black":[0,0,0],"blanchedalmond":[255,235,205],"blue":[0,0,255],"blueviolet":[138,43,226],"brown":[165,42,42],"burlywood":[222,184,135],"cadetblue":[95,158,160],"chartreuse":[127,255,0],"chocolate":[210,105,30],"coral":[255,127,80],"cornflowerblue":[100,149,237],"cornsilk":[255,248,220],"crimson":[237,20,61],"cyan":[0,255,255],"darkblue":[0,0,139],"darkcyan":[0,139,139],"darkgoldenrod":[184,134,11],"darkgray":[169,169,169],"darkgrey":[169,169,169],"darkgreen":[0,100,0],"darkkhaki":[189,183,107],"darkmagenta":[139,0,139],"darkolivegreen":[85,107,47],"darkorange":[255,140,0],"darkorchid":[153,50,204],"darkred":[139,0,0],"darksalmon":[233,150,122],"darkseagreen":[143,188,143],"darkslateblue":[72,61,139],"darkslategray":[47,79,79],"darkslategrey":[47,79,79],"darkturquoise":[0,206,209],"darkviolet":[148,0,211],"deeppink":[255,20,147],"deepskyblue":[0,191,255],"dimgray":[105,105,105],"dimgrey":[105,105,105],"dodgerblue":[30,144,255],"firebrick":[178,34,34],"floralwhite":[255,250,240],"forestgreen":[34,139,34],"fuchsia":[255,0,255],"gainsboro":[220,220,220],"ghostwhite":[248,248,255],"gold":[255,215,0],"goldenrod":[218,165,32],"gray":[128,128,128],"grey":[128,128,128],"green":[0,128,0],"greenyellow":[173,255,47],"honeydew":[240,255,240],"hotpink":[255,105,180],"indianred":[205,92,92],"indigo":[75,0,130],"ivory":[255,255,240],"khaki":[240,230,140],"lavender":[230,230,250],"lavenderblush":[255,240,245],"lawngreen":[124,252,0],"lemonchiffon":[255,250,205],"lightblue":[173,216,230],"lightcoral":[240,128,128],"lightcyan":[224,255,255],"lightgoldenrodyellow":[250,250,210],"lightgreen":[144,238,144],"lightgray":[211,211,211],"lightgrey":[211,211,211],"lightpink":[255,182,193],"lightsalmon":[255,160,122],"lightseagreen":[32,178,170],"lightskyblue":[135,206,250],"lightslategray":[119,136,153],"lightslategrey":[119,136,153],"lightsteelblue":[176,196,222],"lightyellow":[255,255,224],"lime":[0,255,0],"limegreen":[50,205,50],"linen":[250,240,230],"magenta":[255,0,255],"maroon":[128,0,0],"mediumaquamarine":[102,205,170],"mediumblue":[0,0,205],"mediumorchid":[186,85,211],"mediumpurple":[147,112,219],"mediumseagreen":[60,179,113],"mediumslateblue":[123,104,238],"mediumspringgreen":[0,250,154],"mediumturquoise":[72,209,204],"mediumvioletred":[199,21,133],"midnightblue":[25,25,112],"mintcream":[245,255,250],"mistyrose":[255,228,225],"moccasin":[255,228,181],"navajowhite":[255,222,173],"navy":[0,0,128],"oldlace":[253,245,230],"olive":[128,128,0],"olivedrab":[107,142,35],"orange":[255,165,0],"orangered":[255,69,0],"orchid":[218,112,214],"palegoldenrod":[238,232,170],"palegreen":[152,251,152],"paleturquoise":[175,238,238],"palevioletred":[219,112,147],"papayawhip":[255,239,213],"peachpuff":[255,218,185],"peru":[205,133,63],"pink":[255,192,203],"plum":[221,160,221],"powderblue":[176,224,230],"purple":[128,0,128],"rebeccapurple":[102,51,153],"red":[255,0,0],"rosybrown":[188,143,143],"royalblue":[65,105,225],"saddlebrown":[139,69,19],"salmon":[250,128,114],"sandybrown":[244,164,96],"seagreen":[46,139,87],"seashell":[255,245,238],"sienna":[160,82,45],"silver":[192,192,192],"skyblue":[135,206,235],"slateblue":[106,90,205],"slategray":[112,128,144],"slategrey":[112,128,144],"snow":[255,250,250],"springgreen":[0,255,127],"steelblue":[70,130,180],"tan":[210,180,140],"teal":[0,128,128],"thistle":[216,191,216],"tomato":[255,99,71],"turquoise":[64,224,208],"violet":[238,130,238],"wheat":[245,222,179],"white":[255,255,255],"whitesmoke":[245,245,245],"yellow":[255,255,0],"yellowgreen":[154,205,50],"transparent":[0,0,0,0]};WebInspector.Color.PageHighlight={Content:WebInspector.Color.fromRGBA([111,168,220,.66]),ContentLight:WebInspector.Color.fromRGBA([111,168,220,.5]),ContentOutline:WebInspector.Color.fromRGBA([9,83,148]),Padding:WebInspector.Color.fromRGBA([147,196,125,.55]),PaddingLight:WebInspector.Color.fromRGBA([147,196,125,.4]),Border:WebInspector.Color.fromRGBA([255,229,153,.66]),BorderLight:WebInspector.Color.fromRGBA([255,229,153,.5]),Margin:WebInspector.Color.fromRGBA([246,178,107,.66]),MarginLight:WebInspector.Color.fromRGBA([246,178,107,.5]),EventTarget:WebInspector.Color.fromRGBA([255,196,196,.66]),Shape:WebInspector.Color.fromRGBA([96,82,177,0.8]),ShapeMargin:WebInspector.Color.fromRGBA([96,82,127,.6])};WebInspector.Color.detectColorFormat=function(color)
{const cf=WebInspector.Color.Format;var format;var formatSetting=WebInspector.moduleSetting("colorFormat").get();if(formatSetting===cf.Original)
format=cf.Original;else
if(formatSetting===cf.RGB)
format=color.hasAlpha()?cf.RGBA:cf.RGB;else
if(formatSetting===cf.HSL)
format=color.hasAlpha()?cf.HSLA:cf.HSL;else
if(!color.hasAlpha())
format=color.canBeShortHex()?cf.ShortHEX:cf.HEX;else
format=cf.RGBA;return format;};},{}],101:[function(require,module,exports){WebInspector.Object=function(){};WebInspector.Object.prototype={addEventListener:function(eventType,listener,thisObject)
{if(!listener)
console.assert(false);if(!this._listeners)
this._listeners=new Map();if(!this._listeners.has(eventType))
this._listeners.set(eventType,[]);this._listeners.get(eventType).push({thisObject:thisObject,listener:listener});return new WebInspector.EventTarget.EventDescriptor(this,eventType,thisObject,listener);},removeEventListener:function(eventType,listener,thisObject)
{console.assert(listener);if(!this._listeners||!this._listeners.has(eventType))
return;var listeners=this._listeners.get(eventType);for(var i=0;i<listeners.length;++i){if(listeners[i].listener===listener&&listeners[i].thisObject===thisObject)
listeners.splice(i--,1);}
if(!listeners.length)
this._listeners.delete(eventType);},removeAllListeners:function()
{delete this._listeners;},hasEventListeners:function(eventType)
{return this._listeners&&this._listeners.has(eventType);},dispatchEventToListeners:function(eventType,eventData)
{if(!this._listeners||!this._listeners.has(eventType))
return false;var event=new WebInspector.Event(this,eventType,eventData);var listeners=this._listeners.get(eventType).slice(0);for(var i=0;i<listeners.length;++i){listeners[i].listener.call(listeners[i].thisObject,event);if(event._stoppedPropagation)
break;}
return event.defaultPrevented;}};WebInspector.Event=function(target,type,data)
{this.target=target;this.type=type;this.data=data;this.defaultPrevented=false;this._stoppedPropagation=false;};WebInspector.Event.prototype={stopPropagation:function()
{this._stoppedPropagation=true;},preventDefault:function()
{this.defaultPrevented=true;},consume:function(preventDefault)
{this.stopPropagation();if(preventDefault)
this.preventDefault();}};WebInspector.EventTarget=function()
{};WebInspector.EventTarget.removeEventListeners=function(eventList)
{for(var i=0;i<eventList.length;++i){var eventInfo=eventList[i];eventInfo.eventTarget.removeEventListener(eventInfo.eventType,eventInfo.method,eventInfo.receiver);}
eventList.splice(0,eventList.length);};WebInspector.EventTarget.prototype={addEventListener:function(eventType,listener,thisObject){},removeEventListener:function(eventType,listener,thisObject){},removeAllListeners:function(){},hasEventListeners:function(eventType){},dispatchEventToListeners:function(eventType,eventData){}};WebInspector.EventTarget.EventDescriptor=function(eventTarget,eventType,receiver,method)
{this.eventTarget=eventTarget;this.eventType=eventType;this.receiver=receiver;this.method=method;};},{}],102:[function(require,module,exports){WebInspector.ParsedURL=function(url)
{this.isValid=false;this.url=url;this.scheme="";this.host="";this.port="";this.path="";this.queryParams="";this.fragment="";this.folderPathComponents="";this.lastPathComponent="";var match=url.match(/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^\s\/:]*)(?::([\d]+))?(?:(\/[^#]*)(?:#(.*))?)?$/i);if(match){this.isValid=true;this.scheme=match[1].toLowerCase();this.host=match[2];this.port=match[3];this.path=match[4]||"/";this.fragment=match[5];}else{if(this.url.startsWith("data:")){this.scheme="data";return;}
if(this.url==="about:blank"){this.scheme="about";return;}
this.path=this.url;}
var path=this.path;var indexOfQuery=path.indexOf("?");if(indexOfQuery!==-1){this.queryParams=path.substring(indexOfQuery+1);path=path.substring(0,indexOfQuery);}
var lastSlashIndex=path.lastIndexOf("/");if(lastSlashIndex!==-1){this.folderPathComponents=path.substring(0,lastSlashIndex);this.lastPathComponent=path.substring(lastSlashIndex+1);}else
this.lastPathComponent=path;};WebInspector.ParsedURL.splitURLIntoPathComponents=function(url)
{if(url.startsWith("/"))
url="file://"+url;var parsedURL=new WebInspector.ParsedURL(url);var origin;var folderPath;var name;if(parsedURL.isValid){origin=parsedURL.scheme+"://"+parsedURL.host;if(parsedURL.port)
origin+=":"+parsedURL.port;folderPath=parsedURL.folderPathComponents;name=parsedURL.lastPathComponent;if(parsedURL.queryParams)
name+="?"+parsedURL.queryParams;}else{origin="";folderPath="";name=url;}
var result=[origin];var splittedPath=folderPath.split("/");for(var i=1;i<splittedPath.length;++i){if(!splittedPath[i])
continue;result.push(splittedPath[i]);}
result.push(name);return result;};WebInspector.ParsedURL.extractOrigin=function(url)
{var parsedURL=new WebInspector.ParsedURL(url);if(!parsedURL.isValid)
return"";var origin=parsedURL.scheme+"://"+parsedURL.host;if(parsedURL.port)
origin+=":"+parsedURL.port;return origin;};WebInspector.ParsedURL.extractExtension=function(url)
{var lastIndexOfDot=url.lastIndexOf(".");var extension=lastIndexOfDot!==-1?url.substr(lastIndexOfDot+1):"";var indexOfQuestionMark=extension.indexOf("?");if(indexOfQuestionMark!==-1)
extension=extension.substr(0,indexOfQuestionMark);return extension;};WebInspector.ParsedURL.extractName=function(url)
{var index=url.lastIndexOf("/");return index!==-1?url.substr(index+1):url;};WebInspector.ParsedURL.completeURL=function(baseURL,href)
{if(href){var trimmedHref=href.trim();if(trimmedHref.startsWith("data:")||trimmedHref.startsWith("blob:")||trimmedHref.startsWith("javascript:"))
return href;var parsedHref=trimmedHref.asParsedURL();if(parsedHref&&parsedHref.scheme)
return trimmedHref;}else{return baseURL;}
var parsedURL=baseURL.asParsedURL();if(parsedURL){if(parsedURL.isDataURL())
return href;var path=href;var query=path.indexOf("?");var postfix="";if(query!==-1){postfix=path.substring(query);path=path.substring(0,query);}else{var fragment=path.indexOf("#");if(fragment!==-1){postfix=path.substring(fragment);path=path.substring(0,fragment);}}
if(!path){var basePath=parsedURL.path;if(postfix.charAt(0)==="?"){var baseQuery=parsedURL.path.indexOf("?");if(baseQuery!==-1)
basePath=basePath.substring(0,baseQuery);}
return parsedURL.scheme+"://"+parsedURL.host+(parsedURL.port?":"+parsedURL.port:"")+basePath+postfix;}else if(path.charAt(0)!=="/"){var prefix=parsedURL.path;var prefixQuery=prefix.indexOf("?");if(prefixQuery!==-1)
prefix=prefix.substring(0,prefixQuery);prefix=prefix.substring(0,prefix.lastIndexOf("/"))+"/";path=prefix+path;}else if(path.length>1&&path.charAt(1)==="/"){return parsedURL.scheme+":"+path+postfix;}
return parsedURL.scheme+"://"+parsedURL.host+(parsedURL.port?":"+parsedURL.port:"")+Runtime.normalizePath(path)+postfix;}
return null;};WebInspector.ParsedURL.prototype={get displayName()
{if(this._displayName)
return this._displayName;if(this.isDataURL())
return this.dataURLDisplayName();if(this.isAboutBlank())
return this.url;this._displayName=this.lastPathComponent;if(!this._displayName)
this._displayName=(this.host||"")+"/";if(this._displayName==="/")
this._displayName=this.url;return this._displayName;},dataURLDisplayName:function()
{if(this._dataURLDisplayName)
return this._dataURLDisplayName;if(!this.isDataURL())
return"";this._dataURLDisplayName=this.url.trimEnd(20);return this._dataURLDisplayName;},isAboutBlank:function()
{return this.url==="about:blank";},isDataURL:function()
{return this.scheme==="data";},lastPathComponentWithFragment:function()
{return this.lastPathComponent+(this.fragment?"#"+this.fragment:"");},domain:function()
{if(this.isDataURL())
return"data:";return this.host+(this.port?":"+this.port:"");},securityOrigin:function()
{if(this.isDataURL())
return"data:";return this.scheme+"://"+this.domain();},urlWithoutScheme:function()
{if(this.scheme&&this.url.startsWith(this.scheme+"://"))
return this.url.substring(this.scheme.length+3);return this.url;}};WebInspector.ParsedURL.splitLineAndColumn=function(string)
{var lineColumnRegEx=/(?::(\d+))?(?::(\d+))?$/;var lineColumnMatch=lineColumnRegEx.exec(string);var lineNumber;var columnNumber;console.assert(lineColumnMatch);if(typeof lineColumnMatch[1]==="string"){lineNumber=parseInt(lineColumnMatch[1],10);lineNumber=isNaN(lineNumber)?undefined:lineNumber-1;}
if(typeof lineColumnMatch[2]==="string"){columnNumber=parseInt(lineColumnMatch[2],10);columnNumber=isNaN(columnNumber)?undefined:columnNumber-1;}
return{url:string.substring(0,string.length-lineColumnMatch[0].length),lineNumber:lineNumber,columnNumber:columnNumber};};WebInspector.ParsedURL.isRelativeURL=function(url)
{return!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(url);};String.prototype.asParsedURL=function()
{var parsedURL=new WebInspector.ParsedURL(this.toString());if(parsedURL.isValid)
return parsedURL;return null;};},{}],103:[function(require,module,exports){WebInspector.ResourceType=function(name,title,category,isTextType)
{this._name=name;this._title=title;this._category=category;this._isTextType=isTextType;};WebInspector.ResourceType.prototype={name:function()
{return this._name;},title:function()
{return this._title;},category:function()
{return this._category;},isTextType:function()
{return this._isTextType;},isScript:function()
{return this._name==="script"||this._name==="sm-script";},hasScripts:function()
{return this.isScript()||this.isDocument();},isStyleSheet:function()
{return this._name==="stylesheet"||this._name==="sm-stylesheet";},isDocument:function()
{return this._name==="document";},isDocumentOrScriptOrStyleSheet:function()
{return this.isDocument()||this.isScript()||this.isStyleSheet();},isFromSourceMap:function()
{return this._name.startsWith("sm-");},toString:function()
{return this._name;},canonicalMimeType:function()
{if(this.isDocument())
return"text/html";if(this.isScript())
return"text/javascript";if(this.isStyleSheet())
return"text/css";return"";}};WebInspector.ResourceCategory=function(title,shortTitle)
{this.title=title;this.shortTitle=shortTitle;};WebInspector.resourceCategories={XHR:new WebInspector.ResourceCategory("XHR and Fetch","XHR"),Script:new WebInspector.ResourceCategory("Scripts","JS"),Stylesheet:new WebInspector.ResourceCategory("Stylesheets","CSS"),Image:new WebInspector.ResourceCategory("Images","Img"),Media:new WebInspector.ResourceCategory("Media","Media"),Font:new WebInspector.ResourceCategory("Fonts","Font"),Document:new WebInspector.ResourceCategory("Documents","Doc"),WebSocket:new WebInspector.ResourceCategory("WebSockets","WS"),Manifest:new WebInspector.ResourceCategory("Manifest","Manifest"),Other:new WebInspector.ResourceCategory("Other","Other")};WebInspector.resourceTypes={XHR:new WebInspector.ResourceType("xhr","XHR",WebInspector.resourceCategories.XHR,true),Fetch:new WebInspector.ResourceType("fetch","Fetch",WebInspector.resourceCategories.XHR,true),EventSource:new WebInspector.ResourceType("eventsource","EventSource",WebInspector.resourceCategories.XHR,true),Script:new WebInspector.ResourceType("script","Script",WebInspector.resourceCategories.Script,true),Stylesheet:new WebInspector.ResourceType("stylesheet","Stylesheet",WebInspector.resourceCategories.Stylesheet,true),Image:new WebInspector.ResourceType("image","Image",WebInspector.resourceCategories.Image,false),Media:new WebInspector.ResourceType("media","Media",WebInspector.resourceCategories.Media,false),Font:new WebInspector.ResourceType("font","Font",WebInspector.resourceCategories.Font,false),Document:new WebInspector.ResourceType("document","Document",WebInspector.resourceCategories.Document,true),TextTrack:new WebInspector.ResourceType("texttrack","TextTrack",WebInspector.resourceCategories.Other,true),WebSocket:new WebInspector.ResourceType("websocket","WebSocket",WebInspector.resourceCategories.WebSocket,false),Other:new WebInspector.ResourceType("other","Other",WebInspector.resourceCategories.Other,false),SourceMapScript:new WebInspector.ResourceType("sm-script","Script",WebInspector.resourceCategories.Script,false),SourceMapStyleSheet:new WebInspector.ResourceType("sm-stylesheet","Stylesheet",WebInspector.resourceCategories.Stylesheet,false),Manifest:new WebInspector.ResourceType("manifest","Manifest",WebInspector.resourceCategories.Manifest,true)};WebInspector.ResourceType.mimeFromURL=function(url)
{var name=WebInspector.ParsedURL.extractName(url);if(WebInspector.ResourceType._mimeTypeByName.has(name)){return WebInspector.ResourceType._mimeTypeByName.get(name);}
var ext=WebInspector.ParsedURL.extractExtension(url).toLowerCase();return WebInspector.ResourceType._mimeTypeByExtension.get(ext);};WebInspector.ResourceType._mimeTypeByName=new Map([["Cakefile","text/x-coffeescript"]]);WebInspector.ResourceType._mimeTypeByExtension=new Map([["js","text/javascript"],["css","text/css"],["html","text/html"],["htm","text/html"],["xml","application/xml"],["xsl","application/xml"],["asp","application/x-aspx"],["aspx","application/x-aspx"],["jsp","application/x-jsp"],["c","text/x-c++src"],["cc","text/x-c++src"],["cpp","text/x-c++src"],["h","text/x-c++src"],["m","text/x-c++src"],["mm","text/x-c++src"],["coffee","text/x-coffeescript"],["dart","text/javascript"],["ts","text/typescript"],["tsx","text/typescript"],["json","application/json"],["gyp","application/json"],["gypi","application/json"],["cs","text/x-csharp"],["java","text/x-java"],["less","text/x-less"],["php","text/x-php"],["phtml","application/x-httpd-php"],["py","text/x-python"],["sh","text/x-sh"],["scss","text/x-scss"],["vtt","text/vtt"],["ls","text/x-livescript"],["cljs","text/x-clojure"],["cljc","text/x-clojure"],["cljx","text/x-clojure"],["styl","text/x-styl"],["jsx","text/jsx"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["svg","image/svg"],["gif","image/gif"],["webp","image/webp"],["png","image/png"],["ico","image/ico"],["tiff","image/tiff"],["tif","image/tif"],["bmp","image/bmp"],["ttf","font/opentype"],["otf","font/opentype"],["ttc","font/opentype"],["woff","application/font-woff"]]);},{}],104:[function(require,module,exports){WebInspector.Segment=function(begin,end,data)
{if(begin>end)
console.assert(false,"Invalid segment");this.begin=begin;this.end=end;this.data=data;};WebInspector.Segment.prototype={intersects:function(that)
{return this.begin<that.end&&that.begin<this.end;}};WebInspector.SegmentedRange=function(mergeCallback)
{this._segments=[];this._mergeCallback=mergeCallback;};WebInspector.SegmentedRange.prototype={append:function(newSegment)
{var startIndex=this._segments.lowerBound(newSegment,(a,b)=>a.begin-b.begin);var endIndex=startIndex;var merged=null;if(startIndex>0){var precedingSegment=this._segments[startIndex-1];merged=this._tryMerge(precedingSegment,newSegment);if(merged){--startIndex;newSegment=merged;}else if(this._segments[startIndex-1].end>=newSegment.begin){if(newSegment.end<precedingSegment.end)
this._segments.splice(startIndex,0,new WebInspector.Segment(newSegment.end,precedingSegment.end,precedingSegment.data));precedingSegment.end=newSegment.begin;}}
while(endIndex<this._segments.length&&this._segments[endIndex].end<=newSegment.end)
++endIndex;if(endIndex<this._segments.length){merged=this._tryMerge(newSegment,this._segments[endIndex]);if(merged){endIndex++;newSegment=merged;}else if(newSegment.intersects(this._segments[endIndex]))
this._segments[endIndex].begin=newSegment.end;}
this._segments.splice(startIndex,endIndex-startIndex,newSegment);},appendRange:function(that)
{that.segments().forEach(segment=>this.append(segment));},segments:function()
{return this._segments;},_tryMerge:function(first,second)
{var merged=this._mergeCallback&&this._mergeCallback(first,second);if(!merged)
return null;merged.begin=first.begin;merged.end=Math.max(first.end,second.end);return merged;}};},{}],105:[function(require,module,exports){WebInspector.TextRange=function(startLine,startColumn,endLine,endColumn)
{this.startLine=startLine;this.startColumn=startColumn;this.endLine=endLine;this.endColumn=endColumn;};WebInspector.TextRange.createFromLocation=function(line,column)
{return new WebInspector.TextRange(line,column,line,column);};WebInspector.TextRange.fromObject=function(serializedTextRange)
{return new WebInspector.TextRange(serializedTextRange.startLine,serializedTextRange.startColumn,serializedTextRange.endLine,serializedTextRange.endColumn);};WebInspector.TextRange.comparator=function(range1,range2)
{return range1.compareTo(range2);};WebInspector.TextRange.prototype={isEmpty:function()
{return this.startLine===this.endLine&&this.startColumn===this.endColumn;},immediatelyPrecedes:function(range)
{if(!range)
return false;return this.endLine===range.startLine&&this.endColumn===range.startColumn;},immediatelyFollows:function(range)
{if(!range)
return false;return range.immediatelyPrecedes(this);},follows:function(range)
{return range.endLine===this.startLine&&range.endColumn<=this.startColumn||range.endLine<this.startLine;},get linesCount()
{return this.endLine-this.startLine;},collapseToEnd:function()
{return new WebInspector.TextRange(this.endLine,this.endColumn,this.endLine,this.endColumn);},collapseToStart:function()
{return new WebInspector.TextRange(this.startLine,this.startColumn,this.startLine,this.startColumn);},normalize:function()
{if(this.startLine>this.endLine||this.startLine===this.endLine&&this.startColumn>this.endColumn)
return new WebInspector.TextRange(this.endLine,this.endColumn,this.startLine,this.startColumn);else
return this.clone();},clone:function()
{return new WebInspector.TextRange(this.startLine,this.startColumn,this.endLine,this.endColumn);},serializeToObject:function()
{var serializedTextRange={};serializedTextRange.startLine=this.startLine;serializedTextRange.startColumn=this.startColumn;serializedTextRange.endLine=this.endLine;serializedTextRange.endColumn=this.endColumn;return serializedTextRange;},compareTo:function(other)
{if(this.startLine>other.startLine)
return 1;if(this.startLine<other.startLine)
return-1;if(this.startColumn>other.startColumn)
return 1;if(this.startColumn<other.startColumn)
return-1;return 0;},compareToPosition:function(lineNumber,columnNumber)
{if(lineNumber<this.startLine||lineNumber===this.startLine&&columnNumber<this.startColumn)
return-1;if(lineNumber>this.endLine||lineNumber===this.endLine&&columnNumber>this.endColumn)
return 1;return 0;},equal:function(other)
{return this.startLine===other.startLine&&this.endLine===other.endLine&&this.startColumn===other.startColumn&&this.endColumn===other.endColumn;},relativeTo:function(line,column)
{var relative=this.clone();if(this.startLine===line)
relative.startColumn-=column;if(this.endLine===line)
relative.endColumn-=column;relative.startLine-=line;relative.endLine-=line;return relative;},rebaseAfterTextEdit:function(originalRange,editedRange)
{console.assert(originalRange.startLine===editedRange.startLine);console.assert(originalRange.startColumn===editedRange.startColumn);var rebase=this.clone();if(!this.follows(originalRange))
return rebase;var lineDelta=editedRange.endLine-originalRange.endLine;var columnDelta=editedRange.endColumn-originalRange.endColumn;rebase.startLine+=lineDelta;rebase.endLine+=lineDelta;if(rebase.startLine===editedRange.endLine)
rebase.startColumn+=columnDelta;if(rebase.endLine===editedRange.endLine)
rebase.endColumn+=columnDelta;return rebase;},toString:function()
{return JSON.stringify(this);},containsLocation:function(lineNumber,columnNumber)
{if(this.startLine===this.endLine)
return this.startLine===lineNumber&&this.startColumn<=columnNumber&&columnNumber<=this.endColumn;if(this.startLine===lineNumber)
return this.startColumn<=columnNumber;if(this.endLine===lineNumber)
return columnNumber<=this.endColumn;return this.startLine<lineNumber&&lineNumber<this.endLine;}};WebInspector.TextRange.fromEdit=function(oldRange,newText)
{var endLine=oldRange.startLine;var endColumn=oldRange.startColumn+newText.length;var lineEndings=newText.computeLineEndings();if(lineEndings.length>1){endLine=oldRange.startLine+lineEndings.length-1;var len=lineEndings.length;endColumn=lineEndings[len-1]-lineEndings[len-2]-1;}
return new WebInspector.TextRange(oldRange.startLine,oldRange.startColumn,endLine,endColumn);};WebInspector.SourceRange=function(offset,length)
{this.offset=offset;this.length=length;};WebInspector.SourceEdit=function(sourceURL,oldRange,newText)
{this.sourceURL=sourceURL;this.oldRange=oldRange;this.newText=newText;};WebInspector.SourceEdit.prototype={newRange:function()
{return WebInspector.TextRange.fromEdit(this.oldRange,this.newText);}};WebInspector.SourceEdit.comparator=function(edit1,edit2)
{return WebInspector.TextRange.comparator(edit1.oldRange,edit2.oldRange);};},{}],106:[function(require,module,exports){WebInspector.TextUtils={isStopChar:function(char)
{return char>" "&&char<"0"||char>"9"&&char<"A"||char>"Z"&&char<"_"||char>"_"&&char<"a"||char>"z"&&char<="~";},isWordChar:function(char)
{return!WebInspector.TextUtils.isStopChar(char)&&!WebInspector.TextUtils.isSpaceChar(char);},isSpaceChar:function(char)
{return WebInspector.TextUtils._SpaceCharRegex.test(char);},isWord:function(word)
{for(var i=0;i<word.length;++i){if(!WebInspector.TextUtils.isWordChar(word.charAt(i)))
return false;}
return true;},isOpeningBraceChar:function(char)
{return char==="("||char==="{";},isClosingBraceChar:function(char)
{return char===")"||char==="}";},isBraceChar:function(char)
{return WebInspector.TextUtils.isOpeningBraceChar(char)||WebInspector.TextUtils.isClosingBraceChar(char);},textToWords:function(text,isWordChar,wordCallback)
{var startWord=-1;for(var i=0;i<text.length;++i){if(!isWordChar(text.charAt(i))){if(startWord!==-1)
wordCallback(text.substring(startWord,i));startWord=-1;}else if(startWord===-1)
startWord=i;}
if(startWord!==-1)
wordCallback(text.substring(startWord));},lineIndent:function(line)
{var indentation=0;while(indentation<line.length&&WebInspector.TextUtils.isSpaceChar(line.charAt(indentation)))
++indentation;return line.substr(0,indentation);},isUpperCase:function(text)
{return text===text.toUpperCase();},isLowerCase:function(text)
{return text===text.toLowerCase();},splitStringByRegexes(text,regexes)
{var matches=[];var globalRegexes=[];for(var i=0;i<regexes.length;i++){var regex=regexes[i];if(!regex.global)
globalRegexes.push(new RegExp(regex.source,regex.flags?regex.flags+"g":"g"));else
globalRegexes.push(regex);}
doSplit(text,0,0);return matches;function doSplit(text,regexIndex,startIndex)
{if(regexIndex>=globalRegexes.length){matches.push({value:text,position:startIndex,regexIndex:-1});return;}
var regex=globalRegexes[regexIndex];var currentIndex=0;var result;regex.lastIndex=0;while((result=regex.exec(text))!==null){var stringBeforeMatch=text.substring(currentIndex,result.index);if(stringBeforeMatch)
doSplit(stringBeforeMatch,regexIndex+1,startIndex+currentIndex);var match=result[0];matches.push({value:match,position:startIndex+result.index,regexIndex:regexIndex});currentIndex=result.index+match.length;}
var stringAfterMatches=text.substring(currentIndex);if(stringAfterMatches)
doSplit(stringAfterMatches,regexIndex+1,startIndex+currentIndex);}}};WebInspector.TextUtils._SpaceCharRegex=/\s/;WebInspector.TextUtils.Indent={TwoSpaces:"  ",FourSpaces:"    ",EightSpaces:"        ",TabCharacter:"\t"};WebInspector.TextUtils.BalancedJSONTokenizer=function(callback,findMultiple)
{this._callback=callback;this._index=0;this._balance=0;this._buffer="";this._findMultiple=findMultiple||false;this._closingDoubleQuoteRegex=/[^\\](?:\\\\)*"/g;};WebInspector.TextUtils.BalancedJSONTokenizer.prototype={write:function(chunk)
{this._buffer+=chunk;var lastIndex=this._buffer.length;var buffer=this._buffer;for(var index=this._index;index<lastIndex;++index){var character=buffer[index];if(character==="\""){this._closingDoubleQuoteRegex.lastIndex=index;if(!this._closingDoubleQuoteRegex.test(buffer))
break;index=this._closingDoubleQuoteRegex.lastIndex-1;}else if(character==="{"){++this._balance;}else if(character==="}"){--this._balance;if(this._balance<0){this._reportBalanced();return false;}
if(!this._balance){this._lastBalancedIndex=index+1;if(!this._findMultiple)
break;}}else if(character==="]"&&!this._balance){this._reportBalanced();return false;}}
this._index=index;this._reportBalanced();return true;},_reportBalanced:function()
{if(!this._lastBalancedIndex)
return;this._callback(this._buffer.slice(0,this._lastBalancedIndex));this._buffer=this._buffer.slice(this._lastBalancedIndex);this._index-=this._lastBalancedIndex;this._lastBalancedIndex=0;},remainder:function()
{return this._buffer;}};WebInspector.TokenizerFactory=function(){};WebInspector.TokenizerFactory.prototype={createTokenizer:function(mimeType){}};},{}],107:[function(require,module,exports){WebInspector.UIString=function(string,vararg)
{return String.vsprintf(WebInspector.localize(string),Array.prototype.slice.call(arguments,1));};WebInspector.UIString.capitalize=function(string,vararg)
{if(WebInspector._useLowerCaseMenuTitles===undefined)
throw"WebInspector.setLocalizationPlatform() has not been called";var localized=WebInspector.localize(string);var capitalized;if(WebInspector._useLowerCaseMenuTitles)
capitalized=localized.replace(/\^(.)/g,"$1");else
capitalized=localized.replace(/\^(.)/g,function(str,char){return char.toUpperCase();});return String.vsprintf(capitalized,Array.prototype.slice.call(arguments,1));};WebInspector.setLocalizationPlatform=function(platform)
{WebInspector._useLowerCaseMenuTitles=platform==="windows";};WebInspector.localize=function(string)
{return string;};WebInspector.UIStringFormat=function(format)
{this._localizedFormat=WebInspector.localize(format);this._tokenizedFormat=String.tokenizeFormatString(this._localizedFormat,String.standardFormatters);};WebInspector.UIStringFormat._append=function(a,b)
{return a+b;};WebInspector.UIStringFormat.prototype={format:function(vararg)
{return String.format(this._localizedFormat,arguments,String.standardFormatters,"",WebInspector.UIStringFormat._append,this._tokenizedFormat).formattedResult;}};},{}],108:[function(require,module,exports){WebInspector.FilmStripModel=function(tracingModel,zeroTime)
{this.reset(tracingModel,zeroTime);};WebInspector.FilmStripModel._category="disabled-by-default-devtools.screenshot";WebInspector.FilmStripModel.TraceEvents={CaptureFrame:"CaptureFrame",Screenshot:"Screenshot"};WebInspector.FilmStripModel.prototype={reset:function(tracingModel,zeroTime)
{this._zeroTime=zeroTime||tracingModel.minimumRecordTime();this._spanTime=tracingModel.maximumRecordTime()-this._zeroTime;this._frames=[];var browserMain=WebInspector.TracingModel.browserMainThread(tracingModel);if(!browserMain)
return;var events=browserMain.events();for(var i=0;i<events.length;++i){var event=events[i];if(event.startTime<this._zeroTime)
continue;if(!event.hasCategory(WebInspector.FilmStripModel._category))
continue;if(event.name===WebInspector.FilmStripModel.TraceEvents.CaptureFrame){var data=event.args["data"];if(data)
this._frames.push(WebInspector.FilmStripModel.Frame._fromEvent(this,event,this._frames.length));}else if(event.name===WebInspector.FilmStripModel.TraceEvents.Screenshot){this._frames.push(WebInspector.FilmStripModel.Frame._fromSnapshot(this,event,this._frames.length));}}},frames:function()
{return this._frames;},zeroTime:function()
{return this._zeroTime;},spanTime:function()
{return this._spanTime;},frameByTimestamp:function(timestamp)
{var index=this._frames.upperBound(timestamp,(timestamp,frame)=>timestamp-frame.timestamp)-1;return index>=0?this._frames[index]:null;}};WebInspector.FilmStripModel.Frame=function(model,timestamp,index)
{this._model=model;this.timestamp=timestamp;this.index=index;this._imageData=null;this._snapshot=null;};WebInspector.FilmStripModel.Frame._fromEvent=function(model,event,index)
{var frame=new WebInspector.FilmStripModel.Frame(model,event.startTime,index);frame._imageData=event.args["data"];return frame;};WebInspector.FilmStripModel.Frame._fromSnapshot=function(model,snapshot,index)
{var frame=new WebInspector.FilmStripModel.Frame(model,snapshot.startTime,index);frame._snapshot=snapshot;return frame;};WebInspector.FilmStripModel.Frame.prototype={model:function()
{return this._model;},imageDataPromise:function()
{if(this._imageData||!this._snapshot)
return Promise.resolve(this._imageData);return this._snapshot.objectPromise();}};},{}],109:[function(require,module,exports){console=console;console.__originalAssert=console.assert;console.assert=function(value,message)
{if(value)
return;console.__originalAssert(value,message);};var ArrayLike;function mod(m,n)
{return(m%n+n)%n;}
String.prototype.findAll=function(string)
{var matches=[];var i=this.indexOf(string);while(i!==-1){matches.push(i);i=this.indexOf(string,i+string.length);}
return matches;};String.prototype.replaceControlCharacters=function()
{return this.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u0080-\u009f]/g,"�");};String.prototype.isWhitespace=function()
{return/^\s*$/.test(this);};String.prototype.computeLineEndings=function()
{var endings=this.findAll("\n");endings.push(this.length);return endings;};String.prototype.escapeCharacters=function(chars)
{var foundChar=false;for(var i=0;i<chars.length;++i){if(this.indexOf(chars.charAt(i))!==-1){foundChar=true;break;}}
if(!foundChar)
return String(this);var result="";for(var i=0;i<this.length;++i){if(chars.indexOf(this.charAt(i))!==-1)
result+="\\";result+=this.charAt(i);}
return result;};String.regexSpecialCharacters=function()
{return"^[]{}()\\.^$*+?|-,";};String.prototype.escapeForRegExp=function()
{return this.escapeCharacters(String.regexSpecialCharacters());};String.prototype.escapeHTML=function()
{return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");};String.prototype.unescapeHTML=function()
{return this.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#58;/g,":").replace(/&quot;/g,"\"").replace(/&#60;/g,"<").replace(/&#62;/g,">").replace(/&amp;/g,"&");};String.prototype.collapseWhitespace=function()
{return this.replace(/[\s\xA0]+/g," ");};String.prototype.trimMiddle=function(maxLength)
{if(this.length<=maxLength)
return String(this);var leftHalf=maxLength>>1;var rightHalf=maxLength-leftHalf-1;return this.substr(0,leftHalf)+"\u2026"+this.substr(this.length-rightHalf,rightHalf);};String.prototype.trimEnd=function(maxLength)
{if(this.length<=maxLength)
return String(this);return this.substr(0,maxLength-1)+"\u2026";};String.prototype.trimURL=function(baseURLDomain)
{var result=this.replace(/^(https|http|file):\/\//i,"");if(baseURLDomain){if(result.toLowerCase().startsWith(baseURLDomain.toLowerCase()))
result=result.substr(baseURLDomain.length);}
return result;};String.prototype.toTitleCase=function()
{return this.substring(0,1).toUpperCase()+this.substring(1);};String.prototype.compareTo=function(other)
{if(this>other)
return 1;if(this<other)
return-1;return 0;};String.prototype.removeURLFragment=function()
{var fragmentIndex=this.indexOf("#");if(fragmentIndex===-1)
fragmentIndex=this.length;return this.substring(0,fragmentIndex);};String.hashCode=function(string)
{if(!string)
return 0;var p=(1<<30)*4-5;var z=0x5033d967;var z2=0x59d2f15d;var s=0;var zi=1;for(var i=0;i<string.length;i++){var xi=string.charCodeAt(i)*z2;s=(s+zi*xi)%p;zi=zi*z%p;}
s=(s+zi*(p-1))%p;return Math.abs(s|0);};String.isDigitAt=function(string,index)
{var c=string.charCodeAt(index);return 48<=c&&c<=57;};String.prototype.toBase64=function()
{function encodeBits(b)
{return b<26?b+65:b<52?b+71:b<62?b-4:b===62?43:b===63?47:65;}
var encoder=new TextEncoder();var data=encoder.encode(this.toString());var n=data.length;var encoded="";if(n===0)
return encoded;var shift;var v=0;for(var i=0;i<n;i++){shift=i%3;v|=data[i]<<(16>>>shift&24);if(shift===2){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),encodeBits(v&63));v=0;}}
if(shift===0)
encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),61,61);else
if(shift===1)
encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),61);return encoded;};String.naturalOrderComparator=function(a,b)
{var chunk=/^\d+|^\D+/;var chunka,chunkb,anum,bnum;while(1){if(a){if(!b)
return 1;}else{if(b)
return-1;else
return 0;}
chunka=a.match(chunk)[0];chunkb=b.match(chunk)[0];anum=!isNaN(chunka);bnum=!isNaN(chunkb);if(anum&&!bnum)
return-1;if(bnum&&!anum)
return 1;if(anum&&bnum){var diff=chunka-chunkb;if(diff)
return diff;if(chunka.length!==chunkb.length){if(!+chunka&&!+chunkb)
return chunka.length-chunkb.length;else
return chunkb.length-chunka.length;}}else if(chunka!==chunkb)
return chunka<chunkb?-1:1;a=a.substring(chunka.length);b=b.substring(chunkb.length);}};String.caseInsensetiveComparator=function(a,b)
{a=a.toUpperCase();b=b.toUpperCase();if(a===b)
return 0;return a>b?1:-1;};Number.constrain=function(num,min,max)
{if(num<min)
num=min;else
if(num>max)
num=max;return num;};Number.gcd=function(a,b)
{if(b===0)
return a;else
return Number.gcd(b,a%b);};Number.toFixedIfFloating=function(value)
{if(!value||isNaN(value))
return value;var number=Number(value);return number%1?number.toFixed(3):String(number);};Date.prototype.toISO8601Compact=function()
{function leadZero(x)
{return(x>9?"":"0")+x;}
return this.getFullYear()+
leadZero(this.getMonth()+1)+
leadZero(this.getDate())+"T"+
leadZero(this.getHours())+
leadZero(this.getMinutes())+
leadZero(this.getSeconds());};Date.prototype.toConsoleTime=function()
{function leadZero2(x)
{return(x>9?"":"0")+x;}
function leadZero3(x)
{return"0".repeat(3-x.toString().length)+x;}
return this.getFullYear()+"-"+
leadZero2(this.getMonth()+1)+"-"+
leadZero2(this.getDate())+" "+
leadZero2(this.getHours())+":"+
leadZero2(this.getMinutes())+":"+
leadZero2(this.getSeconds())+"."+
leadZero3(this.getMilliseconds());};Object.defineProperty(Array.prototype,"remove",{value:function(value,firstOnly)
{var index=this.indexOf(value);if(index===-1)
return false;if(firstOnly){this.splice(index,1);return true;}
for(var i=index+1,n=this.length;i<n;++i){if(this[i]!==value)
this[index++]=this[i];}
this.length=index;return true;}});Object.defineProperty(Array.prototype,"pushAll",{value:function(array)
{Array.prototype.push.apply(this,array);}});Object.defineProperty(Array.prototype,"rotate",{value:function(index)
{var result=[];for(var i=index;i<index+this.length;++i)
result.push(this[i%this.length]);return result;}});Object.defineProperty(Array.prototype,"sortNumbers",{value:function()
{function numericComparator(a,b)
{return a-b;}
this.sort(numericComparator);}});Object.defineProperty(Uint32Array.prototype,"sort",{value:Array.prototype.sort});(function(){var partition={value:function(comparator,left,right,pivotIndex)
{function swap(array,i1,i2)
{var temp=array[i1];array[i1]=array[i2];array[i2]=temp;}
var pivotValue=this[pivotIndex];swap(this,right,pivotIndex);var storeIndex=left;for(var i=left;i<right;++i){if(comparator(this[i],pivotValue)<0){swap(this,storeIndex,i);++storeIndex;}}
swap(this,right,storeIndex);return storeIndex;}};Object.defineProperty(Array.prototype,"partition",partition);Object.defineProperty(Uint32Array.prototype,"partition",partition);var sortRange={value:function(comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight)
{function quickSortRange(array,comparator,left,right,sortWindowLeft,sortWindowRight)
{if(right<=left)
return;var pivotIndex=Math.floor(Math.random()*(right-left))+left;var pivotNewIndex=array.partition(comparator,left,right,pivotIndex);if(sortWindowLeft<pivotNewIndex)
quickSortRange(array,comparator,left,pivotNewIndex-1,sortWindowLeft,sortWindowRight);if(pivotNewIndex<sortWindowRight)
quickSortRange(array,comparator,pivotNewIndex+1,right,sortWindowLeft,sortWindowRight);}
if(leftBound===0&&rightBound===this.length-1&&sortWindowLeft===0&&sortWindowRight>=rightBound)
this.sort(comparator);else
quickSortRange(this,comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight);return this;}};Object.defineProperty(Array.prototype,"sortRange",sortRange);Object.defineProperty(Uint32Array.prototype,"sortRange",sortRange);})();Object.defineProperty(Array.prototype,"stableSort",{value:function(comparator)
{function defaultComparator(a,b)
{return a<b?-1:a>b?1:0;}
comparator=comparator||defaultComparator;var indices=new Array(this.length);for(var i=0;i<this.length;++i)
indices[i]=i;var self=this;function indexComparator(a,b)
{var result=comparator(self[a],self[b]);return result?result:a-b;}
indices.sort(indexComparator);for(var i=0;i<this.length;++i){if(indices[i]<0||i===indices[i])
continue;var cyclical=i;var saved=this[i];while(true){var next=indices[cyclical];indices[cyclical]=-1;if(next===i){this[cyclical]=saved;break;}else{this[cyclical]=this[next];cyclical=next;}}}
return this;}});Object.defineProperty(Array.prototype,"qselect",{value:function(k,comparator)
{if(k<0||k>=this.length)
return;if(!comparator)
comparator=function(a,b){return a-b;};var low=0;var high=this.length-1;for(;;){var pivotPosition=this.partition(comparator,low,high,Math.floor((high+low)/2));if(pivotPosition===k)
return this[k];else
if(pivotPosition>k)
high=pivotPosition-1;else
low=pivotPosition+1;}}});Object.defineProperty(Array.prototype,"lowerBound",{value:function(object,comparator,left,right)
{function defaultComparator(a,b)
{return a<b?-1:a>b?1:0;}
comparator=comparator||defaultComparator;var l=left||0;var r=right!==undefined?right:this.length;while(l<r){var m=l+r>>1;if(comparator(object,this[m])>0)
l=m+1;else
r=m;}
return r;}});Object.defineProperty(Array.prototype,"upperBound",{value:function(object,comparator,left,right)
{function defaultComparator(a,b)
{return a<b?-1:a>b?1:0;}
comparator=comparator||defaultComparator;var l=left||0;var r=right!==undefined?right:this.length;while(l<r){var m=l+r>>1;if(comparator(object,this[m])>=0)
l=m+1;else
r=m;}
return r;}});Object.defineProperty(Uint32Array.prototype,"lowerBound",{value:Array.prototype.lowerBound});Object.defineProperty(Uint32Array.prototype,"upperBound",{value:Array.prototype.upperBound});Object.defineProperty(Float64Array.prototype,"lowerBound",{value:Array.prototype.lowerBound});Object.defineProperty(Array.prototype,"binaryIndexOf",{value:function(value,comparator)
{var index=this.lowerBound(value,comparator);return index<this.length&&comparator(value,this[index])===0?index:-1;}});Object.defineProperty(Array.prototype,"select",{value:function(field)
{var result=new Array(this.length);for(var i=0;i<this.length;++i)
result[i]=this[i][field];return result;}});Object.defineProperty(Array.prototype,"peekLast",{value:function()
{return this[this.length-1];}});(function(){function mergeOrIntersect(array1,array2,comparator,mergeNotIntersect)
{var result=[];var i=0;var j=0;while(i<array1.length&&j<array2.length){var compareValue=comparator(array1[i],array2[j]);if(mergeNotIntersect||!compareValue)
result.push(compareValue<=0?array1[i]:array2[j]);if(compareValue<=0)
i++;if(compareValue>=0)
j++;}
if(mergeNotIntersect){while(i<array1.length)
result.push(array1[i++]);while(j<array2.length)
result.push(array2[j++]);}
return result;}
Object.defineProperty(Array.prototype,"intersectOrdered",{value:function(array,comparator)
{return mergeOrIntersect(this,array,comparator,false);}});Object.defineProperty(Array.prototype,"mergeOrdered",{value:function(array,comparator)
{return mergeOrIntersect(this,array,comparator,true);}});})();String.sprintf=function(format,var_arg)
{return String.vsprintf(format,Array.prototype.slice.call(arguments,1));};String.tokenizeFormatString=function(format,formatters)
{var tokens=[];var substitutionIndex=0;function addStringToken(str)
{if(tokens.length&&tokens[tokens.length-1].type==="string")
tokens[tokens.length-1].value+=str;else
tokens.push({type:"string",value:str});}
function addSpecifierToken(specifier,precision,substitutionIndex)
{tokens.push({type:"specifier",specifier:specifier,precision:precision,substitutionIndex:substitutionIndex});}
var index=0;for(var precentIndex=format.indexOf("%",index);precentIndex!==-1;precentIndex=format.indexOf("%",index)){if(format.length===index)
break;addStringToken(format.substring(index,precentIndex));index=precentIndex+1;if(format[index]==="%"){addStringToken("%");++index;continue;}
if(String.isDigitAt(format,index)){var number=parseInt(format.substring(index),10);while(String.isDigitAt(format,index))
++index;if(number>0&&format[index]==="$"){substitutionIndex=number-1;++index;}}
var precision=-1;if(format[index]==="."){++index;precision=parseInt(format.substring(index),10);if(isNaN(precision))
precision=0;while(String.isDigitAt(format,index))
++index;}
if(!(format[index]in formatters)){addStringToken(format.substring(precentIndex,index+1));++index;continue;}
addSpecifierToken(format[index],precision,substitutionIndex);++substitutionIndex;++index;}
addStringToken(format.substring(index));return tokens;};String.standardFormatters={d:function(substitution)
{return!isNaN(substitution)?substitution:0;},f:function(substitution,token)
{if(substitution&&token.precision>-1)
substitution=substitution.toFixed(token.precision);return!isNaN(substitution)?substitution:token.precision>-1?Number(0).toFixed(token.precision):0;},s:function(substitution)
{return substitution;}};String.vsprintf=function(format,substitutions)
{return String.format(format,substitutions,String.standardFormatters,"",function(a,b){return a+b;}).formattedResult;};String.format=function(format,substitutions,formatters,initialValue,append,tokenizedFormat)
{if(!format||!substitutions||!substitutions.length)
return{formattedResult:append(initialValue,format),unusedSubstitutions:substitutions};function prettyFunctionName()
{return"String.format(\""+format+"\", \""+Array.prototype.join.call(substitutions,"\", \"")+"\")";}
function warn(msg)
{console.warn(prettyFunctionName()+": "+msg);}
function error(msg)
{console.error(prettyFunctionName()+": "+msg);}
var result=initialValue;var tokens=tokenizedFormat||String.tokenizeFormatString(format,formatters);var usedSubstitutionIndexes={};for(var i=0;i<tokens.length;++i){var token=tokens[i];if(token.type==="string"){result=append(result,token.value);continue;}
if(token.type!=="specifier"){error("Unknown token type \""+token.type+"\" found.");continue;}
if(token.substitutionIndex>=substitutions.length){error("not enough substitution arguments. Had "+substitutions.length+" but needed "+(token.substitutionIndex+1)+", so substitution was skipped.");result=append(result,"%"+(token.precision>-1?token.precision:"")+token.specifier);continue;}
usedSubstitutionIndexes[token.substitutionIndex]=true;if(!(token.specifier in formatters)){warn("unsupported format character \u201C"+token.specifier+"\u201D. Treating as a string.");result=append(result,substitutions[token.substitutionIndex]);continue;}
result=append(result,formatters[token.specifier](substitutions[token.substitutionIndex],token));}
var unusedSubstitutions=[];for(var i=0;i<substitutions.length;++i){if(i in usedSubstitutionIndexes)
continue;unusedSubstitutions.push(substitutions[i]);}
return{formattedResult:result,unusedSubstitutions:unusedSubstitutions};};function createSearchRegex(query,caseSensitive,isRegex)
{var regexFlags=caseSensitive?"g":"gi";var regexObject;if(isRegex){try{regexObject=new RegExp(query,regexFlags);}catch(e){}}
if(!regexObject)
regexObject=createPlainTextSearchRegex(query,regexFlags);return regexObject;}
function createPlainTextSearchRegex(query,flags)
{var regexSpecialCharacters=String.regexSpecialCharacters();var regex="";for(var i=0;i<query.length;++i){var c=query.charAt(i);if(regexSpecialCharacters.indexOf(c)!==-1)
regex+="\\";regex+=c;}
return new RegExp(regex,flags||"");}
function countRegexMatches(regex,content)
{var text=content;var result=0;var match;while(text&&(match=regex.exec(text))){if(match[0].length>0)
++result;text=text.substring(match.index+1);}
return result;}
function spacesPadding(spacesCount)
{return"\u00a0".repeat(spacesCount);}
function numberToStringWithSpacesPadding(value,symbolsCount)
{var numberString=value.toString();var paddingLength=Math.max(0,symbolsCount-numberString.length);return spacesPadding(paddingLength)+numberString;}
Set.prototype.valuesArray=function()
{return Array.from(this.values());};Set.prototype.addAll=function(iterable)
{for(var e of iterable)
this.add(e);};Set.prototype.containsAll=function(iterable)
{for(var e of iterable){if(!this.has(e))
return false;}
return true;};Map.prototype.remove=function(key)
{var value=this.get(key);this.delete(key);return value;};Map.prototype.valuesArray=function()
{return Array.from(this.values());};Map.prototype.keysArray=function()
{return Array.from(this.keys());};Map.prototype.inverse=function()
{var result=new Multimap();for(var key of this.keys()){var value=this.get(key);result.set(value,key);}
return result;};var Multimap=function()
{this._map=new Map();};Multimap.prototype={set:function(key,value)
{var set=this._map.get(key);if(!set){set=new Set();this._map.set(key,set);}
set.add(value);},get:function(key)
{var result=this._map.get(key);if(!result)
result=new Set();return result;},has:function(key)
{return this._map.has(key);},hasValue:function(key,value)
{var set=this._map.get(key);if(!set)
return false;return set.has(value);},get size()
{return this._map.size;},remove:function(key,value)
{var values=this.get(key);values.delete(value);if(!values.size)
this._map.delete(key);},removeAll:function(key)
{this._map.delete(key);},keysArray:function()
{return this._map.keysArray();},valuesArray:function()
{var result=[];var keys=this.keysArray();for(var i=0;i<keys.length;++i)
result.pushAll(this.get(keys[i]).valuesArray());return result;},clear:function()
{this._map.clear();}};function loadXHR(url)
{return new Promise(load);function load(successCallback,failureCallback)
{function onReadyStateChanged()
{if(xhr.readyState!==XMLHttpRequest.DONE)
return;if(xhr.status!==200){xhr.onreadystatechange=null;failureCallback(new Error(xhr.status));return;}
xhr.onreadystatechange=null;successCallback(xhr.responseText);}
var xhr=new XMLHttpRequest();xhr.withCredentials=false;xhr.open("GET",url,true);xhr.onreadystatechange=onReadyStateChanged;xhr.send(null);}}
function CallbackBarrier()
{this._pendingIncomingCallbacksCount=0;}
CallbackBarrier.prototype={createCallback:function(userCallback)
{console.assert(!this._outgoingCallback,"CallbackBarrier.createCallback() is called after CallbackBarrier.callWhenDone()");++this._pendingIncomingCallbacksCount;return this._incomingCallback.bind(this,userCallback);},callWhenDone:function(callback)
{console.assert(!this._outgoingCallback,"CallbackBarrier.callWhenDone() is called multiple times");this._outgoingCallback=callback;if(!this._pendingIncomingCallbacksCount)
this._outgoingCallback();},donePromise:function()
{return new Promise(promiseConstructor.bind(this));function promiseConstructor(success)
{this.callWhenDone(success);}},_incomingCallback:function(userCallback)
{console.assert(this._pendingIncomingCallbacksCount>0);if(userCallback){var args=Array.prototype.slice.call(arguments,1);userCallback.apply(null,args);}
if(!--this._pendingIncomingCallbacksCount&&this._outgoingCallback)
this._outgoingCallback();}};function suppressUnused(value)
{}
self.setImmediate=function(callback)
{Promise.resolve().then(callback);return 0;};Promise.prototype.spread=function(callback)
{return this.then(spreadPromise);function spreadPromise(arg)
{return callback.apply(null,arg);}};Promise.prototype.catchException=function(defaultValue){return this.catch(function(error){console.error(error);return defaultValue;});};Map.prototype.diff=function(other,isEqual)
{var leftKeys=this.keysArray();var rightKeys=other.keysArray();leftKeys.sort((a,b)=>a-b);rightKeys.sort((a,b)=>a-b);var removed=[];var added=[];var equal=[];var leftIndex=0;var rightIndex=0;while(leftIndex<leftKeys.length&&rightIndex<rightKeys.length){var leftKey=leftKeys[leftIndex];var rightKey=rightKeys[rightIndex];if(leftKey===rightKey&&isEqual(this.get(leftKey),other.get(rightKey))){equal.push(this.get(leftKey));++leftIndex;++rightIndex;continue;}
if(leftKey<=rightKey){removed.push(this.get(leftKey));++leftIndex;continue;}
added.push(other.get(rightKey));++rightIndex;}
while(leftIndex<leftKeys.length){var leftKey=leftKeys[leftIndex++];removed.push(this.get(leftKey));}
while(rightIndex<rightKeys.length){var rightKey=rightKeys[rightIndex++];added.push(other.get(rightKey));}
return{added:added,removed:removed,equal:equal};};},{}],110:[function(require,module,exports){WebInspector.CPUProfileNode=function(node,sampleTime)
{var callFrame=node.callFrame||{functionName:node["functionName"],scriptId:node["scriptId"],url:node["url"],lineNumber:node["lineNumber"]-1,columnNumber:node["columnNumber"]-1};WebInspector.ProfileNode.call(this,callFrame);this.id=node.id;this.self=node.hitCount*sampleTime;this.positionTicks=node.positionTicks;this.deoptReason=node.deoptReason&&node.deoptReason!=="no reason"?node.deoptReason:null;};WebInspector.CPUProfileNode.prototype={__proto__:WebInspector.ProfileNode.prototype};WebInspector.CPUProfileDataModel=function(profile)
{var isLegacyFormat=!!profile["head"];if(isLegacyFormat){this.profileStartTime=profile.startTime*1000;this.profileEndTime=profile.endTime*1000;this.timestamps=profile.timestamps;this._compatibilityConversionHeadToNodes(profile);}else{this.profileStartTime=profile.startTime/1000;this.profileEndTime=profile.endTime/1000;this.timestamps=this._convertTimeDeltas(profile);}
this.samples=profile.samples;this.totalHitCount=0;this.profileHead=this._translateProfileTree(profile.nodes);WebInspector.ProfileTreeModel.call(this,this.profileHead);this._extractMetaNodes();if(this.samples){this._buildIdToNodeMap();this._sortSamples();this._normalizeTimestamps();}};WebInspector.CPUProfileDataModel.prototype={_compatibilityConversionHeadToNodes:function(profile)
{if(!profile.head||profile.nodes)
return;var nodes=[];convertNodesTree(profile.head);profile.nodes=nodes;delete profile.head;function convertNodesTree(node)
{nodes.push(node);node.children=node.children.map(convertNodesTree);return node.id;}},_convertTimeDeltas:function(profile)
{if(!profile.timeDeltas)
return null;var lastTimeUsec=profile.startTime;var timestamps=new Array(profile.timeDeltas.length);for(var i=0;i<timestamps.length;++i){lastTimeUsec+=profile.timeDeltas[i];timestamps[i]=lastTimeUsec;}
return timestamps;},_translateProfileTree:function(nodes)
{function isNativeNode(node)
{if(node.callFrame)
return!!node.callFrame.url&&node.callFrame.url.startsWith("native ");return!!node.url&&node.url.startsWith("native ");}
function buildChildrenFromParents(nodes)
{if(nodes[0].children)
return;nodes[0].children=[];for(var i=1;i<nodes.length;++i){var node=nodes[i];var parentNode=nodeByIdMap.get(node.parent);if(parentNode.children)
parentNode.children.push(node.id);else
parentNode.children=[node.id];}}
var nodeByIdMap=new Map();for(var i=0;i<nodes.length;++i){var node=nodes[i];nodeByIdMap.set(node.id,node);}
buildChildrenFromParents(nodes);this.totalHitCount=nodes.reduce((acc,node)=>acc+node.hitCount,0);var sampleTime=(this.profileEndTime-this.profileStartTime)/this.totalHitCount;var keepNatives=!!WebInspector.moduleSetting("showNativeFunctionsInJSProfile").get();var root=nodes[0];var idMap=new Map([[root.id,root.id]]);var resultRoot=new WebInspector.CPUProfileNode(root,sampleTime);var parentNodeStack=root.children.map(()=>resultRoot);var sourceNodeStack=root.children.map(id=>nodeByIdMap.get(id));while(sourceNodeStack.length){var parentNode=parentNodeStack.pop();var sourceNode=sourceNodeStack.pop();if(!sourceNode.children)
sourceNode.children=[];var targetNode=new WebInspector.CPUProfileNode(sourceNode,sampleTime);if(keepNatives||!isNativeNode(sourceNode)){parentNode.children.push(targetNode);parentNode=targetNode;}else{parentNode.self+=targetNode.self;}
idMap.set(sourceNode.id,parentNode.id);parentNodeStack.push.apply(parentNodeStack,sourceNode.children.map(()=>parentNode));sourceNodeStack.push.apply(sourceNodeStack,sourceNode.children.map(id=>nodeByIdMap.get(id)));}
if(this.samples)
this.samples=this.samples.map(id=>idMap.get(id));return resultRoot;},_sortSamples:function()
{var timestamps=this.timestamps;if(!timestamps)
return;var samples=this.samples;var indices=timestamps.map((x,index)=>index);indices.sort((a,b)=>timestamps[a]-timestamps[b]);for(var i=0;i<timestamps.length;++i){var index=indices[i];if(index===i)
continue;var savedTimestamp=timestamps[i];var savedSample=samples[i];var currentIndex=i;while(index!==i){samples[currentIndex]=samples[index];timestamps[currentIndex]=timestamps[index];currentIndex=index;index=indices[index];indices[currentIndex]=currentIndex;}
samples[currentIndex]=savedSample;timestamps[currentIndex]=savedTimestamp;}},_normalizeTimestamps:function()
{var timestamps=this.timestamps;if(!timestamps){var profileStartTime=this.profileStartTime;var interval=(this.profileEndTime-profileStartTime)/this.samples.length;timestamps=new Float64Array(this.samples.length+1);for(var i=0;i<timestamps.length;++i)
timestamps[i]=profileStartTime+i*interval;this.timestamps=timestamps;return;}
for(var i=0;i<timestamps.length;++i)
timestamps[i]/=1000;var averageSample=(timestamps.peekLast()-timestamps[0])/(timestamps.length-1);this.timestamps.push(timestamps.peekLast()+averageSample);this.profileStartTime=timestamps[0];this.profileEndTime=timestamps.peekLast();},_buildIdToNodeMap:function()
{this._idToNode=new Map();var idToNode=this._idToNode;var stack=[this.profileHead];while(stack.length){var node=stack.pop();idToNode.set(node.id,node);stack.push.apply(stack,node.children);}},_extractMetaNodes:function()
{var topLevelNodes=this.profileHead.children;for(var i=0;i<topLevelNodes.length&&!(this.gcNode&&this.programNode&&this.idleNode);i++){var node=topLevelNodes[i];if(node.functionName==="(garbage collector)")
this.gcNode=node;else
if(node.functionName==="(program)")
this.programNode=node;else
if(node.functionName==="(idle)")
this.idleNode=node;}},forEachFrame:function(openFrameCallback,closeFrameCallback,startTime,stopTime)
{if(!this.profileHead||!this.samples)
return;startTime=startTime||0;stopTime=stopTime||Infinity;var samples=this.samples;var timestamps=this.timestamps;var idToNode=this._idToNode;var gcNode=this.gcNode;var samplesCount=samples.length;var startIndex=timestamps.lowerBound(startTime);var stackTop=0;var stackNodes=[];var prevId=this.profileHead.id;var sampleTime=timestamps[samplesCount];var gcParentNode=null;if(!this._stackStartTimes)
this._stackStartTimes=new Float64Array(this.maxDepth+2);var stackStartTimes=this._stackStartTimes;if(!this._stackChildrenDuration)
this._stackChildrenDuration=new Float64Array(this.maxDepth+2);var stackChildrenDuration=this._stackChildrenDuration;for(var sampleIndex=startIndex;sampleIndex<samplesCount;sampleIndex++){sampleTime=timestamps[sampleIndex];if(sampleTime>=stopTime)
break;var id=samples[sampleIndex];if(id===prevId)
continue;var node=idToNode.get(id);var prevNode=idToNode.get(prevId);if(node===gcNode){gcParentNode=prevNode;openFrameCallback(gcParentNode.depth+1,gcNode,sampleTime);stackStartTimes[++stackTop]=sampleTime;stackChildrenDuration[stackTop]=0;prevId=id;continue;}
if(prevNode===gcNode){var start=stackStartTimes[stackTop];var duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(gcParentNode.depth+1,gcNode,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;prevNode=gcParentNode;prevId=prevNode.id;gcParentNode=null;}
while(node.depth>prevNode.depth){stackNodes.push(node);node=node.parent;}
while(prevNode!==node){var start=stackStartTimes[stackTop];var duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(prevNode.depth,prevNode,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;if(node.depth===prevNode.depth){stackNodes.push(node);node=node.parent;}
prevNode=prevNode.parent;}
while(stackNodes.length){node=stackNodes.pop();openFrameCallback(node.depth,node,sampleTime);stackStartTimes[++stackTop]=sampleTime;stackChildrenDuration[stackTop]=0;}
prevId=id;}
if(idToNode.get(prevId)===gcNode){var start=stackStartTimes[stackTop];var duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(gcParentNode.depth+1,node,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;}
for(var node=idToNode.get(prevId);node.parent;node=node.parent){var start=stackStartTimes[stackTop];var duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(node.depth,node,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;}},nodeByIndex:function(index)
{return this._idToNode.get(this.samples[index])||null;},__proto__:WebInspector.ProfileTreeModel.prototype};},{}],111:[function(require,module,exports){WebInspector.CSSMatchedStyles=function(cssModel,node,inlinePayload,attributesPayload,matchedPayload,pseudoPayload,inheritedPayload,animationsPayload)
{this._cssModel=cssModel;this._node=node;this._nodeStyles=[];this._nodeForStyle=new Map();this._inheritedStyles=new Set();this._keyframes=[];this._matchingSelectors=new Map();function addAttributesStyle()
{if(!attributesPayload)
return;var style=new WebInspector.CSSStyleDeclaration(cssModel,null,attributesPayload,WebInspector.CSSStyleDeclaration.Type.Attributes);this._nodeForStyle.set(style,this._node);this._nodeStyles.push(style);}
if(inlinePayload&&this._node.nodeType()===Node.ELEMENT_NODE){var style=new WebInspector.CSSStyleDeclaration(cssModel,null,inlinePayload,WebInspector.CSSStyleDeclaration.Type.Inline);this._nodeForStyle.set(style,this._node);this._nodeStyles.push(style);}
var addedAttributesStyle;for(var i=matchedPayload.length-1;i>=0;--i){var rule=new WebInspector.CSSStyleRule(cssModel,matchedPayload[i].rule);if((rule.isInjected()||rule.isUserAgent())&&!addedAttributesStyle){addedAttributesStyle=true;addAttributesStyle.call(this);}
this._nodeForStyle.set(rule.style,this._node);this._nodeStyles.push(rule.style);addMatchingSelectors.call(this,this._node,rule,matchedPayload[i].matchingSelectors);}
if(!addedAttributesStyle)
addAttributesStyle.call(this);var parentNode=this._node.parentNode;for(var i=0;parentNode&&inheritedPayload&&i<inheritedPayload.length;++i){var entryPayload=inheritedPayload[i];var inheritedInlineStyle=entryPayload.inlineStyle?new WebInspector.CSSStyleDeclaration(cssModel,null,entryPayload.inlineStyle,WebInspector.CSSStyleDeclaration.Type.Inline):null;if(inheritedInlineStyle&&this._containsInherited(inheritedInlineStyle)){this._nodeForStyle.set(inheritedInlineStyle,parentNode);this._nodeStyles.push(inheritedInlineStyle);this._inheritedStyles.add(inheritedInlineStyle);}
var inheritedMatchedCSSRules=entryPayload.matchedCSSRules||[];for(var j=inheritedMatchedCSSRules.length-1;j>=0;--j){var inheritedRule=new WebInspector.CSSStyleRule(cssModel,inheritedMatchedCSSRules[j].rule);addMatchingSelectors.call(this,parentNode,inheritedRule,inheritedMatchedCSSRules[j].matchingSelectors);if(!this._containsInherited(inheritedRule.style))
continue;this._nodeForStyle.set(inheritedRule.style,parentNode);this._nodeStyles.push(inheritedRule.style);this._inheritedStyles.add(inheritedRule.style);}
parentNode=parentNode.parentNode;}
this._pseudoStyles=new Map();if(pseudoPayload){for(var i=0;i<pseudoPayload.length;++i){var entryPayload=pseudoPayload[i];var pseudoElement=this._node.pseudoElements().get(entryPayload.pseudoType)||null;var pseudoStyles=[];var rules=entryPayload.matches||[];for(var j=rules.length-1;j>=0;--j){var pseudoRule=new WebInspector.CSSStyleRule(cssModel,rules[j].rule);pseudoStyles.push(pseudoRule.style);this._nodeForStyle.set(pseudoRule.style,pseudoElement);if(pseudoElement)
addMatchingSelectors.call(this,pseudoElement,pseudoRule,rules[j].matchingSelectors);}
this._pseudoStyles.set(entryPayload.pseudoType,pseudoStyles);}}
if(animationsPayload)
this._keyframes=animationsPayload.map(rule=>new WebInspector.CSSKeyframesRule(cssModel,rule));this.resetActiveProperties();function addMatchingSelectors(node,rule,matchingSelectorIndices)
{for(var matchingSelectorIndex of matchingSelectorIndices){var selector=rule.selectors[matchingSelectorIndex];this._setSelectorMatches(node,selector.text,true);}}};WebInspector.CSSMatchedStyles.prototype={node:function()
{return this._node;},cssModel:function()
{return this._cssModel;},hasMatchingSelectors:function(rule)
{var matchingSelectors=this.matchingSelectors(rule);return matchingSelectors.length>0&&this.mediaMatches(rule.style);},matchingSelectors:function(rule)
{var node=this.nodeForStyle(rule.style);if(!node)
return[];var map=this._matchingSelectors.get(node.id);if(!map)
return[];var result=[];for(var i=0;i<rule.selectors.length;++i){if(map.get(rule.selectors[i].text))
result.push(i);}
return result;},recomputeMatchingSelectors:function(rule)
{var node=this.nodeForStyle(rule.style);if(!node)
return Promise.resolve();var promises=[];for(var selector of rule.selectors)
promises.push(querySelector.call(this,node,selector.text));return Promise.all(promises);function querySelector(node,selectorText)
{var ownerDocument=node.ownerDocument||null;var map=this._matchingSelectors.get(node.id);if(map&&map.has(selectorText)||!ownerDocument)
return Promise.resolve();var resolve;var promise=new Promise(fulfill=>resolve=fulfill);this._node.domModel().querySelectorAll(ownerDocument.id,selectorText,onQueryComplete.bind(this,node,selectorText,resolve));return promise;}
function onQueryComplete(node,selectorText,callback,matchingNodeIds)
{if(matchingNodeIds)
this._setSelectorMatches(node,selectorText,matchingNodeIds.indexOf(node.id)!==-1);callback();}},addNewRule:function(rule,node)
{this._nodeForStyle.set(rule.style,node);return this.recomputeMatchingSelectors(rule);},_setSelectorMatches:function(node,selectorText,value)
{var map=this._matchingSelectors.get(node.id);if(!map){map=new Map();this._matchingSelectors.set(node.id,map);}
map.set(selectorText,value);},mediaMatches:function(style)
{var media=style.parentRule?style.parentRule.media:[];for(var i=0;media&&i<media.length;++i){if(!media[i].active())
return false;}
return true;},nodeStyles:function()
{return this._nodeStyles;},keyframes:function()
{return this._keyframes;},pseudoStyles:function()
{return this._pseudoStyles;},_containsInherited:function(style)
{var properties=style.allProperties;for(var i=0;i<properties.length;++i){var property=properties[i];if(property.activeInStyle()&&WebInspector.cssMetadata().isPropertyInherited(property.name))
return true;}
return false;},nodeForStyle:function(style)
{return this._nodeForStyle.get(style)||null;},isInherited:function(style)
{return this._inheritedStyles.has(style);},propertyState:function(property)
{if(this._propertiesState.size===0){this._computeActiveProperties(this._nodeStyles,this._propertiesState);for(var pseudoElementStyles of this._pseudoStyles.valuesArray())
this._computeActiveProperties(pseudoElementStyles,this._propertiesState);}
return this._propertiesState.get(property)||null;},resetActiveProperties:function()
{this._propertiesState=new Map();},_computeActiveProperties:function(styles,result)
{var foundImportantProperties=new Set();var propertyToEffectiveRule=new Map();var inheritedPropertyToNode=new Map();var allUsedProperties=new Set();for(var i=0;i<styles.length;++i){var style=styles[i];var rule=style.parentRule;if(rule&&!(rule instanceof WebInspector.CSSStyleRule))
continue;if(rule&&!this.hasMatchingSelectors(rule))
continue;var styleActiveProperties=new Map();var allProperties=style.allProperties;for(var j=0;j<allProperties.length;++j){var property=allProperties[j];var inherited=this.isInherited(style);if(inherited&&!WebInspector.cssMetadata().isPropertyInherited(property.name))
continue;if(!property.activeInStyle()){result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);continue;}
var canonicalName=WebInspector.cssMetadata().canonicalPropertyName(property.name);if(foundImportantProperties.has(canonicalName)){result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);continue;}
if(!property.important&&allUsedProperties.has(canonicalName)){result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);continue;}
var isKnownProperty=propertyToEffectiveRule.has(canonicalName);var inheritedFromNode=inherited?this.nodeForStyle(style):null;if(!isKnownProperty&&inheritedFromNode&&!inheritedPropertyToNode.has(canonicalName))
inheritedPropertyToNode.set(canonicalName,inheritedFromNode);if(property.important){if(inherited&&isKnownProperty&&inheritedFromNode!==inheritedPropertyToNode.get(canonicalName)){result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);continue;}
foundImportantProperties.add(canonicalName);if(isKnownProperty){var overloaded=propertyToEffectiveRule.get(canonicalName).get(canonicalName);result.set(overloaded,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);propertyToEffectiveRule.get(canonicalName).delete(canonicalName);}}
styleActiveProperties.set(canonicalName,property);allUsedProperties.add(canonicalName);propertyToEffectiveRule.set(canonicalName,styleActiveProperties);result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Active);}
for(var property of style.leadingProperties()){var canonicalName=WebInspector.cssMetadata().canonicalPropertyName(property.name);if(!styleActiveProperties.has(canonicalName))
continue;var longhands=style.longhandProperties(property.name);if(!longhands.length)
continue;var notUsed=true;for(var longhand of longhands){var longhandCanonicalName=WebInspector.cssMetadata().canonicalPropertyName(longhand.name);notUsed=notUsed&&!styleActiveProperties.has(longhandCanonicalName);}
if(!notUsed)
continue;styleActiveProperties.delete(canonicalName);allUsedProperties.delete(canonicalName);result.set(property,WebInspector.CSSMatchedStyles.PropertyState.Overloaded);}}}};WebInspector.CSSMatchedStyles.PropertyState={Active:"Active",Overloaded:"Overloaded"};},{}],112:[function(require,module,exports){WebInspector.CSSMediaQuery=function(payload)
{this._active=payload.active;this._expressions=[];for(var j=0;j<payload.expressions.length;++j)
this._expressions.push(WebInspector.CSSMediaQueryExpression.parsePayload(payload.expressions[j]));};WebInspector.CSSMediaQuery.parsePayload=function(payload)
{return new WebInspector.CSSMediaQuery(payload);};WebInspector.CSSMediaQuery.prototype={active:function()
{return this._active;},expressions:function()
{return this._expressions;}};WebInspector.CSSMediaQueryExpression=function(payload)
{this._value=payload.value;this._unit=payload.unit;this._feature=payload.feature;this._valueRange=payload.valueRange?WebInspector.TextRange.fromObject(payload.valueRange):null;this._computedLength=payload.computedLength||null;};WebInspector.CSSMediaQueryExpression.parsePayload=function(payload)
{return new WebInspector.CSSMediaQueryExpression(payload);};WebInspector.CSSMediaQueryExpression.prototype={value:function()
{return this._value;},unit:function()
{return this._unit;},feature:function()
{return this._feature;},valueRange:function()
{return this._valueRange;},computedLength:function()
{return this._computedLength;}};WebInspector.CSSMedia=function(cssModel,payload)
{this._cssModel=cssModel;this._reinitialize(payload);};WebInspector.CSSMedia.Source={LINKED_SHEET:"linkedSheet",INLINE_SHEET:"inlineSheet",MEDIA_RULE:"mediaRule",IMPORT_RULE:"importRule"};WebInspector.CSSMedia.parsePayload=function(cssModel,payload)
{return new WebInspector.CSSMedia(cssModel,payload);};WebInspector.CSSMedia.parseMediaArrayPayload=function(cssModel,payload)
{var result=[];for(var i=0;i<payload.length;++i)
result.push(WebInspector.CSSMedia.parsePayload(cssModel,payload[i]));return result;};WebInspector.CSSMedia.prototype={_reinitialize:function(payload)
{this.text=payload.text;this.source=payload.source;this.sourceURL=payload.sourceURL||"";this.range=payload.range?WebInspector.TextRange.fromObject(payload.range):null;this.styleSheetId=payload.styleSheetId;this.mediaList=null;if(payload.mediaList){this.mediaList=[];for(var i=0;i<payload.mediaList.length;++i)
this.mediaList.push(WebInspector.CSSMediaQuery.parsePayload(payload.mediaList[i]));}},rebase:function(edit)
{if(this.styleSheetId!==edit.styleSheetId||!this.range)
return;if(edit.oldRange.equal(this.range))
this._reinitialize(edit.payload);else
this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);},equal:function(other)
{if(!this.styleSheetId||!this.range||!other.range)
return false;return this.styleSheetId===other.styleSheetId&&this.range.equal(other.range);},active:function()
{if(!this.mediaList)
return true;for(var i=0;i<this.mediaList.length;++i){if(this.mediaList[i].active())
return true;}
return false;},lineNumberInSource:function()
{if(!this.range)
return undefined;var header=this.header();if(!header)
return undefined;return header.lineNumberInSource(this.range.startLine);},columnNumberInSource:function()
{if(!this.range)
return undefined;var header=this.header();if(!header)
return undefined;return header.columnNumberInSource(this.range.startLine,this.range.startColumn);},header:function()
{return this.styleSheetId?this._cssModel.styleSheetHeaderForId(this.styleSheetId):null;},rawLocation:function()
{var header=this.header();if(!header||this.lineNumberInSource()===undefined)
return null;var lineNumber=Number(this.lineNumberInSource());return new WebInspector.CSSLocation(header,lineNumber,this.columnNumberInSource());}};},{}],113:[function(require,module,exports){WebInspector.CSSMetadata=function(properties)
{this._values=[];this._longhands=new Map();this._shorthands=new Map();this._inherited=new Set();for(var i=0;i<properties.length;++i){var property=properties[i];var propertyName=property.name;if(!CSS.supports(propertyName,"initial"))
continue;this._values.push(propertyName);if(property.inherited)
this._inherited.add(propertyName);var longhands=properties[i].longhands;if(longhands){this._longhands.set(propertyName,longhands);for(var j=0;j<longhands.length;++j){var longhandName=longhands[j];var shorthands=this._shorthands.get(longhandName);if(!shorthands){shorthands=[];this._shorthands.set(longhandName,shorthands);}
shorthands.push(propertyName);}}}
this._values.sort();this._valuesSet=new Set(this._values);};WebInspector.CSSMetadata.VariableRegex=/(var\(--.*?\))/g;WebInspector.CSSMetadata.URLRegex=/url\(\s*('.+?'|".+?"|[^)]+)\s*\)/g;WebInspector.CSSMetadata.prototype={allProperties:function()
{return this._values;},longhands:function(shorthand)
{return this._longhands.get(shorthand)||null;},shorthands:function(longhand)
{return this._shorthands.get(longhand)||null;},isColorAwareProperty:function(propertyName)
{return!!WebInspector.CSSMetadata._colorAwareProperties.has(propertyName.toLowerCase())||this.isCustomProperty(propertyName.toLowerCase());},isLengthProperty:function(propertyName)
{propertyName=propertyName.toLowerCase();if(propertyName==="line-height")
return false;return WebInspector.CSSMetadata._distanceProperties.has(propertyName)||propertyName.startsWith("margin")||propertyName.startsWith("padding")||propertyName.indexOf("width")!==-1||propertyName.indexOf("height")!==-1;},isBezierAwareProperty:function(propertyName)
{propertyName=propertyName.toLowerCase();return!!WebInspector.CSSMetadata._bezierAwareProperties.has(propertyName)||this.isCustomProperty(propertyName);},isCustomProperty:function(propertyName)
{return propertyName.startsWith("--");},canonicalPropertyName:function(name)
{name=name.toLowerCase();if(!name||name.length<9||name.charAt(0)!=="-")
return name;var match=name.match(/(?:-webkit-)(.+)/);if(!match||!this._valuesSet.has(match[1]))
return name;return match[1];},isCSSPropertyName:function(propertyName)
{propertyName=propertyName.toLowerCase();if(propertyName.startsWith("-moz-")||propertyName.startsWith("-o-")||propertyName.startsWith("-webkit-")||propertyName.startsWith("-ms-"))
return true;return this._valuesSet.has(propertyName);},isPropertyInherited:function(propertyName)
{propertyName=propertyName.toLowerCase();return this._inherited.has(this.canonicalPropertyName(propertyName))||this._inherited.has(propertyName);},propertyValues:function(propertyName)
{var acceptedKeywords=["inherit","initial"];propertyName=propertyName.toLowerCase();var unprefixedName=propertyName.replace(/^-webkit-/,"");var entry=WebInspector.CSSMetadata._propertyDataMap[propertyName]||WebInspector.CSSMetadata._propertyDataMap[unprefixedName];if(entry&&entry.values)
acceptedKeywords.pushAll(entry.values);if(this.isColorAwareProperty(propertyName)){acceptedKeywords.push("currentColor");for(var color in WebInspector.Color.Nicknames)
acceptedKeywords.push(color);}
return acceptedKeywords.sort();},mostUsedProperty:function(properties)
{var maxWeight=0;var index=0;for(var i=0;i<properties.length;i++){var weight=WebInspector.CSSMetadata.Weight[properties[i]];if(!weight)
weight=WebInspector.CSSMetadata.Weight[this.canonicalPropertyName(properties[i])];if(weight>maxWeight){maxWeight=weight;index=i;}}
return index;}};WebInspector.cssMetadata=function()
{if(!WebInspector.CSSMetadata._instance)
WebInspector.CSSMetadata._instance=new WebInspector.CSSMetadata(WebInspector.CSSMetadata._generatedProperties||[]);return WebInspector.CSSMetadata._instance;};WebInspector.CSSMetadata._distanceProperties=new Set(["background-position","border-spacing","bottom","font-size","height","left","letter-spacing","max-height","max-width","min-height","min-width","right","text-indent","top","width","word-spacing"]);WebInspector.CSSMetadata._bezierAwareProperties=new Set(["animation","animation-timing-function","transition","transition-timing-function","-webkit-animation","-webkit-animation-timing-function","-webkit-transition","-webkit-transition-timing-function"]);WebInspector.CSSMetadata._colorAwareProperties=new Set(["backdrop-filter","background","background-color","background-image","border","border-color","border-image","border-image-source","border-bottom","border-bottom-color","border-left","border-left-color","border-right","border-right-color","border-top","border-top-color","box-shadow","color","column-rule","column-rule-color","fill","list-style","list-style-image","outline","outline-color","stroke","text-decoration-color","text-shadow","-webkit-border-after","-webkit-border-after-color","-webkit-border-before","-webkit-border-before-color","-webkit-border-end","-webkit-border-end-color","-webkit-border-start","-webkit-border-start-color","-webkit-box-reflect","-webkit-box-shadow","-webkit-column-rule-color","-webkit-filter","-webkit-mask","-webkit-mask-box-image","-webkit-mask-box-image-source","-webkit-mask-image","-webkit-tap-highlight-color","-webkit-text-decoration-color","-webkit-text-emphasis","-webkit-text-emphasis-color","-webkit-text-fill-color","-webkit-text-stroke","-webkit-text-stroke-color"]);WebInspector.CSSMetadata._propertyDataMap={"table-layout":{values:["auto","fixed"]},"visibility":{values:["hidden","visible","collapse"]},"background-repeat":{values:["repeat","repeat-x","repeat-y","no-repeat","space","round"]},"content":{values:["list-item","close-quote","no-close-quote","no-open-quote","open-quote"]},"list-style-image":{values:["none"]},"clear":{values:["none","left","right","both"]},"overflow-x":{values:["hidden","auto","visible","overlay","scroll"]},"stroke-linejoin":{values:["round","miter","bevel"]},"baseline-shift":{values:["baseline","sub","super"]},"border-bottom-width":{values:["medium","thick","thin"]},"margin-top-collapse":{values:["collapse","separate","discard"]},"max-height":{values:["none"]},"box-orient":{values:["horizontal","vertical","inline-axis","block-axis"]},"font-stretch":{values:["normal","wider","narrower","ultra-condensed","extra-condensed","condensed","semi-condensed","semi-expanded","expanded","extra-expanded","ultra-expanded"]},"border-left-width":{values:["medium","thick","thin"]},"box-shadow":{values:["inset","none"]},"writing-mode":{values:["horizontal-tb","vertical-rl","vertical-lr"]},"-webkit-writing-mode":{values:["lr","rl","tb","lr-tb","rl-tb","tb-rl","horizontal-tb","vertical-rl","vertical-lr"]},"border-collapse":{values:["collapse","separate"]},"page-break-inside":{values:["auto","avoid"]},"border-top-width":{values:["medium","thick","thin"]},"outline-color":{values:["invert"]},"outline-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"cursor":{values:["none","copy","auto","crosshair","default","pointer","move","vertical-text","cell","context-menu","alias","progress","no-drop","not-allowed","-webkit-zoom-in","-webkit-zoom-out","e-resize","ne-resize","nw-resize","n-resize","se-resize","sw-resize","s-resize","w-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","col-resize","row-resize","text","wait","help","all-scroll","-webkit-grab","-webkit-grabbing"]},"border-width":{values:["medium","thick","thin"]},"border-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"size":{values:["a3","a4","a5","b4","b5","landscape","ledger","legal","letter","portrait"]},"background-size":{values:["contain","cover"]},"direction":{values:["ltr","rtl"]},"enable-background":{values:["accumulate","new"]},"float":{values:["none","left","right"]},"overflow-y":{values:["hidden","auto","visible","overlay","scroll"]},"margin-bottom-collapse":{values:["collapse","separate","discard"]},"box-reflect":{values:["left","right","above","below"]},"overflow":{values:["hidden","auto","visible","overlay","scroll"]},"contain":{values:["none","strict","content","size","layout","style","paint"]},"text-rendering":{values:["auto","optimizeSpeed","optimizeLegibility","geometricPrecision"]},"text-align":{values:["-webkit-auto","start","end","left","right","center","justify","-webkit-left","-webkit-right","-webkit-center"]},"list-style-position":{values:["outside","inside","hanging"]},"margin-bottom":{values:["auto"]},"color-interpolation":{values:["linearrgb"]},"background-origin":{values:["border-box","content-box","padding-box"]},"word-wrap":{values:["normal","break-word"]},"font-weight":{values:["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]},"margin-before-collapse":{values:["collapse","separate","discard"]},"text-transform":{values:["none","capitalize","uppercase","lowercase"]},"border-right-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"border-left-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"-webkit-text-emphasis":{values:["circle","filled","open","dot","double-circle","triangle","sesame"]},"font-style":{values:["italic","oblique","normal"]},"speak":{values:["none","normal","spell-out","digits","literal-punctuation","no-punctuation"]},"color-rendering":{values:["auto","optimizeSpeed","optimizeQuality"]},"list-style-type":{values:["none","inline","disc","circle","square","decimal","decimal-leading-zero","arabic-indic","binary","bengali","cambodian","khmer","devanagari","gujarati","gurmukhi","kannada","lower-hexadecimal","lao","malayalam","mongolian","myanmar","octal","oriya","persian","urdu","telugu","tibetan","thai","upper-hexadecimal","lower-roman","upper-roman","lower-greek","lower-alpha","lower-latin","upper-alpha","upper-latin","afar","ethiopic-halehame-aa-et","ethiopic-halehame-aa-er","amharic","ethiopic-halehame-am-et","amharic-abegede","ethiopic-abegede-am-et","cjk-earthly-branch","cjk-heavenly-stem","ethiopic","ethiopic-halehame-gez","ethiopic-abegede","ethiopic-abegede-gez","hangul-consonant","hangul","lower-norwegian","oromo","ethiopic-halehame-om-et","sidama","ethiopic-halehame-sid-et","somali","ethiopic-halehame-so-et","tigre","ethiopic-halehame-tig","tigrinya-er","ethiopic-halehame-ti-er","tigrinya-er-abegede","ethiopic-abegede-ti-er","tigrinya-et","ethiopic-halehame-ti-et","tigrinya-et-abegede","ethiopic-abegede-ti-et","upper-greek","upper-norwegian","asterisks","footnotes","hebrew","armenian","lower-armenian","upper-armenian","georgian","cjk-ideographic","hiragana","katakana","hiragana-iroha","katakana-iroha"]},"text-combine-upright":{values:["none","all"]},"-webkit-text-combine":{values:["none","horizontal"]},"text-orientation":{values:["mixed","upright","sideways"]},"outline":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"font":{values:["caption","icon","menu","message-box","small-caption","-webkit-mini-control","-webkit-small-control","-webkit-control","status-bar","italic","oblique","small-caps","normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900","xx-small","x-small","small","medium","large","x-large","xx-large","-webkit-xxx-large","smaller","larger","serif","sans-serif","cursive","fantasy","monospace","-webkit-body","-webkit-pictograph"]},"dominant-baseline":{values:["middle","auto","central","text-before-edge","text-after-edge","ideographic","alphabetic","hanging","mathematical","use-script","no-change","reset-size"]},"display":{values:["none","inline","block","list-item","run-in","inline-block","table","inline-table","table-row-group","table-header-group","table-footer-group","table-row","table-column-group","table-column","table-cell","table-caption","-webkit-box","-webkit-inline-box","flex","inline-flex","grid","inline-grid"]},"-webkit-text-emphasis-position":{values:["over","under"]},"image-rendering":{values:["auto","optimizeSpeed","optimizeQuality","pixelated"]},"alignment-baseline":{values:["baseline","middle","auto","before-edge","after-edge","central","text-before-edge","text-after-edge","ideographic","alphabetic","hanging","mathematical"]},"outline-width":{values:["medium","thick","thin"]},"box-align":{values:["baseline","center","stretch","start","end"]},"border-right-width":{values:["medium","thick","thin"]},"border-top-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"line-height":{values:["normal"]},"text-overflow":{values:["clip","ellipsis"]},"overflow-wrap":{values:["normal","break-word"]},"box-direction":{values:["normal","reverse"]},"margin-after-collapse":{values:["collapse","separate","discard"]},"page-break-before":{values:["left","right","auto","always","avoid"]},"border-image":{values:["repeat","stretch"]},"text-decoration":{values:["none","blink","line-through","overline","underline"]},"position":{values:["absolute","fixed","relative","static"]},"font-family":{values:["serif","sans-serif","cursive","fantasy","monospace","-webkit-body","-webkit-pictograph"]},"text-overflow-mode":{values:["clip","ellipsis"]},"border-bottom-style":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"unicode-bidi":{values:["normal","bidi-override","embed","isolate","isolate-override","plaintext"]},"clip-rule":{values:["nonzero","evenodd"]},"margin-left":{values:["auto"]},"margin-top":{values:["auto"]},"zoom":{values:["normal","document","reset"]},"max-width":{values:["none"]},"caption-side":{values:["top","bottom"]},"empty-cells":{values:["hide","show"]},"pointer-events":{values:["none","all","auto","visible","visiblepainted","visiblefill","visiblestroke","painted","fill","stroke","bounding-box"]},"letter-spacing":{values:["normal"]},"background-clip":{values:["border-box","content-box","padding-box"]},"-webkit-font-smoothing":{values:["none","auto","antialiased","subpixel-antialiased"]},"border":{values:["none","hidden","inset","groove","ridge","outset","dotted","dashed","solid","double"]},"font-size":{values:["xx-small","x-small","small","medium","large","x-large","xx-large","-webkit-xxx-large","smaller","larger"]},"font-variant":{values:["small-caps","normal"]},"vertical-align":{values:["baseline","middle","sub","super","text-top","text-bottom","top","bottom","-webkit-baseline-middle"]},"white-space":{values:["normal","nowrap","pre","pre-line","pre-wrap"]},"box-lines":{values:["single","multiple"]},"page-break-after":{values:["left","right","auto","always","avoid"]},"clip-path":{values:["none"]},"margin":{values:["auto"]},"margin-right":{values:["auto"]},"word-break":{values:["normal","break-all","break-word"]},"word-spacing":{values:["normal"]},"-webkit-text-emphasis-style":{values:["circle","filled","open","dot","double-circle","triangle","sesame"]},"transform":{values:["scale","scaleX","scaleY","scale3d","rotate","rotateX","rotateY","rotateZ","rotate3d","skew","skewX","skewY","translate","translateX","translateY","translateZ","translate3d","matrix","matrix3d","perspective"]},"image-resolution":{values:["from-image","snap"]},"box-sizing":{values:["content-box","border-box"]},"clip":{values:["auto"]},"resize":{values:["none","both","horizontal","vertical"]},"align-content":{values:["flex-start","flex-end","center","space-between","space-around","stretch"]},"align-items":{values:["flex-start","flex-end","center","baseline","stretch"]},"align-self":{values:["auto","flex-start","flex-end","center","baseline","stretch"]},"flex-direction":{values:["row","row-reverse","column","column-reverse"]},"justify-content":{values:["flex-start","flex-end","center","space-between","space-around"]},"flex-wrap":{values:["nowrap","wrap","wrap-reverse"]},"perspective":{values:["none"]},"perspective-origin":{values:["left","center","right","top","bottom"]},"transform-origin":{values:["left","center","right","top","bottom"]},"transform-style":{values:["flat","preserve-3d"]},"transition-timing-function":{values:["ease","linear","ease-in","ease-out","ease-in-out","step-start","step-end","steps","cubic-bezier"]},"animation-timing-function":{values:["ease","linear","ease-in","ease-out","ease-in-out","step-start","step-end","steps","cubic-bezier"]},"animation-direction":{values:["normal","reverse","alternate","alternate-reverse"]},"animation-play-state":{values:["running","paused"]},"animation-fill-mode":{values:["none","forwards","backwards","both"]},"-webkit-backface-visibility":{values:["visible","hidden"]},"-webkit-box-decoration-break":{values:["slice","clone"]},"-webkit-column-break-after":{values:["auto","always","avoid","left","right","page","column","avoid-page","avoid-column"]},"-webkit-column-break-before":{values:["auto","always","avoid","left","right","page","column","avoid-page","avoid-column"]},"-webkit-column-break-inside":{values:["auto","avoid","avoid-page","avoid-column"]},"-webkit-column-span":{values:["none","all"]},"-webkit-column-count":{values:["auto"]},"-webkit-column-gap":{values:["normal"]},"-webkit-filter":{values:["url","blur","brightness","contrast","drop-shadow","grayscale","hue-rotate","invert","opacity","saturate","sepia"]},"-webkit-line-break":{values:["auto","loose","normal","strict"]},"-webkit-user-select":{values:["none","text","all"]},"-webkit-user-modify":{values:["read-only","read-write","read-write-plaintext-only"]},"text-align-last":{values:["auto","start","end","left","right","center","justify"]},"-webkit-text-decoration-line":{values:["none","underline","overline","line-through","blink"]},"-webkit-text-decoration-style":{values:["solid","double","dotted","dashed","wavy"]},"-webkit-text-decoration-skip":{values:["none","objects","spaces","ink","edges","box-decoration"]},"mix-blend-mode":{values:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","unset"]},"background-blend-mode":{values:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","unset"]}};WebInspector.CSSMetadata.Weight={"align-content":57,"align-items":129,"align-self":55,"animation":175,"animation-delay":114,"animation-direction":113,"animation-duration":137,"animation-fill-mode":132,"animation-iteration-count":124,"animation-name":139,"animation-play-state":104,"animation-timing-function":141,"backface-visibility":123,"background":260,"background-attachment":119,"background-clip":165,"background-color":259,"background-image":246,"background-origin":107,"background-position":237,"background-position-x":108,"background-position-y":93,"background-repeat":234,"background-size":203,"border":263,"border-bottom":233,"border-bottom-color":190,"border-bottom-left-radius":186,"border-bottom-right-radius":185,"border-bottom-style":150,"border-bottom-width":179,"border-collapse":209,"border-color":226,"border-image":89,"border-image-outset":50,"border-image-repeat":49,"border-image-slice":58,"border-image-source":32,"border-image-width":52,"border-left":221,"border-left-color":174,"border-left-style":142,"border-left-width":172,"border-radius":224,"border-right":223,"border-right-color":182,"border-right-style":130,"border-right-width":178,"border-spacing":198,"border-style":206,"border-top":231,"border-top-color":192,"border-top-left-radius":187,"border-top-right-radius":189,"border-top-style":152,"border-top-width":180,"border-width":214,"bottom":227,"box-shadow":213,"box-sizing":216,"caption-side":96,"clear":229,"clip":173,"clip-rule":5,"color":256,"content":219,"counter-increment":111,"counter-reset":110,"cursor":250,"direction":176,"display":262,"empty-cells":99,"fill":140,"fill-opacity":82,"fill-rule":22,"filter":160,"flex":133,"flex-basis":66,"flex-direction":85,"flex-flow":94,"flex-grow":112,"flex-shrink":61,"flex-wrap":68,"float":252,"font":211,"font-family":254,"font-kerning":18,"font-size":264,"font-stretch":77,"font-style":220,"font-variant":161,"font-weight":257,"height":266,"image-rendering":90,"justify-content":127,"left":248,"letter-spacing":188,"line-height":244,"list-style":215,"list-style-image":145,"list-style-position":149,"list-style-type":199,"margin":267,"margin-bottom":241,"margin-left":243,"margin-right":238,"margin-top":253,"mask":20,"max-height":205,"max-width":225,"min-height":217,"min-width":218,"object-fit":33,"opacity":251,"order":117,"orphans":146,"outline":222,"outline-color":153,"outline-offset":147,"outline-style":151,"outline-width":148,"overflow":255,"overflow-wrap":105,"overflow-x":184,"overflow-y":196,"padding":265,"padding-bottom":230,"padding-left":235,"padding-right":232,"padding-top":240,"page":8,"page-break-after":120,"page-break-before":69,"page-break-inside":121,"perspective":92,"perspective-origin":103,"pointer-events":183,"position":261,"quotes":158,"resize":168,"right":245,"shape-rendering":38,"size":64,"speak":118,"src":170,"stop-color":42,"stop-opacity":31,"stroke":98,"stroke-dasharray":36,"stroke-dashoffset":3,"stroke-linecap":30,"stroke-linejoin":21,"stroke-miterlimit":12,"stroke-opacity":34,"stroke-width":87,"table-layout":171,"tab-size":46,"text-align":260,"text-anchor":35,"text-decoration":247,"text-indent":207,"text-overflow":204,"text-rendering":155,"text-shadow":208,"text-transform":202,"top":258,"touch-action":80,"transform":181,"transform-origin":162,"transform-style":86,"transition":193,"transition-delay":134,"transition-duration":135,"transition-property":131,"transition-timing-function":122,"unicode-bidi":156,"unicode-range":136,"vertical-align":236,"visibility":242,"-webkit-appearance":191,"-webkit-backface-visibility":154,"-webkit-background-clip":164,"-webkit-background-origin":40,"-webkit-background-size":163,"-webkit-border-end":9,"-webkit-border-horizontal-spacing":81,"-webkit-border-image":75,"-webkit-border-radius":212,"-webkit-border-start":10,"-webkit-border-start-color":16,"-webkit-border-start-width":13,"-webkit-border-vertical-spacing":43,"-webkit-box-align":101,"-webkit-box-direction":51,"-webkit-box-flex":128,"-webkit-box-lines":2,"-webkit-box-ordinal-group":91,"-webkit-box-orient":144,"-webkit-box-pack":106,"-webkit-box-reflect":39,"-webkit-box-shadow":210,"-webkit-column-break-inside":60,"-webkit-column-count":84,"-webkit-column-gap":76,"-webkit-column-rule":25,"-webkit-column-rule-color":23,"-webkit-columns":44,"-webkit-column-span":29,"-webkit-column-width":47,"-webkit-filter":159,"-webkit-font-feature-settings":59,"-webkit-font-smoothing":177,"-webkit-highlight":1,"-webkit-line-break":45,"-webkit-line-clamp":126,"-webkit-margin-after":67,"-webkit-margin-before":70,"-webkit-margin-collapse":14,"-webkit-margin-end":65,"-webkit-margin-start":100,"-webkit-margin-top-collapse":78,"-webkit-mask":19,"-webkit-mask-box-image":72,"-webkit-mask-image":88,"-webkit-mask-position":54,"-webkit-mask-repeat":63,"-webkit-mask-size":79,"-webkit-padding-after":15,"-webkit-padding-before":28,"-webkit-padding-end":48,"-webkit-padding-start":73,"-webkit-print-color-adjust":83,"-webkit-rtl-ordering":7,"-webkit-tap-highlight-color":169,"-webkit-text-emphasis-color":11,"-webkit-text-fill-color":71,"-webkit-text-security":17,"-webkit-text-stroke":56,"-webkit-text-stroke-color":37,"-webkit-text-stroke-width":53,"-webkit-user-drag":95,"-webkit-user-modify":62,"-webkit-user-select":194,"-webkit-writing-mode":4,"white-space":228,"widows":115,"width":268,"will-change":74,"word-break":166,"word-spacing":157,"word-wrap":197,"writing-mode":41,"z-index":239,"zoom":200};},{}],114:[function(require,module,exports){WebInspector.CSSProperty=function(ownerStyle,index,name,value,important,disabled,parsedOk,implicit,text,range)
{this.ownerStyle=ownerStyle;this.index=index;this.name=name;this.value=value;this.important=important;this.disabled=disabled;this.parsedOk=parsedOk;this.implicit=implicit;this.text=text;this.range=range?WebInspector.TextRange.fromObject(range):null;this._active=true;this._nameRange=null;this._valueRange=null;};WebInspector.CSSProperty.parsePayload=function(ownerStyle,index,payload)
{var result=new WebInspector.CSSProperty(ownerStyle,index,payload.name,payload.value,payload.important||false,payload.disabled||false,"parsedOk"in payload?!!payload.parsedOk:true,!!payload.implicit,payload.text,payload.range);return result;};WebInspector.CSSProperty.prototype={_ensureRanges:function()
{if(this._nameRange&&this._valueRange)
return;var range=this.range;var text=this.text?new WebInspector.Text(this.text):null;if(!range||!text)
return;var nameIndex=text.value().indexOf(this.name);var valueIndex=text.value().lastIndexOf(this.value);if(nameIndex===-1||valueIndex===-1||nameIndex>valueIndex)
return;var nameSourceRange=new WebInspector.SourceRange(nameIndex,this.name.length);var valueSourceRange=new WebInspector.SourceRange(valueIndex,this.value.length);this._nameRange=rebase(text.toTextRange(nameSourceRange),range.startLine,range.startColumn);this._valueRange=rebase(text.toTextRange(valueSourceRange),range.startLine,range.startColumn);function rebase(oneLineRange,lineOffset,columnOffset)
{if(oneLineRange.startLine===0){oneLineRange.startColumn+=columnOffset;oneLineRange.endColumn+=columnOffset;}
oneLineRange.startLine+=lineOffset;oneLineRange.endLine+=lineOffset;return oneLineRange;}},nameRange:function()
{this._ensureRanges();return this._nameRange;},valueRange:function()
{this._ensureRanges();return this._valueRange;},rebase:function(edit)
{if(this.ownerStyle.styleSheetId!==edit.styleSheetId)
return;if(this.range)
this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);},_setActive:function(active)
{this._active=active;},get propertyText()
{if(this.text!==undefined)
return this.text;if(this.name==="")
return"";return this.name+": "+this.value+(this.important?" !important":"")+";";},activeInStyle:function()
{return this._active;},setText:function(propertyText,majorChange,overwrite)
{if(!this.ownerStyle)
return Promise.reject(new Error("No ownerStyle for property"));if(!this.ownerStyle.styleSheetId)
return Promise.reject(new Error("No owner style id"));if(!this.range||!this.ownerStyle.range)
return Promise.reject(new Error("Style not editable"));if(majorChange)
WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);if(overwrite&&propertyText===this.propertyText){if(majorChange)
this.ownerStyle.cssModel().domModel().markUndoableState();return Promise.resolve(true);}
var range=this.range.relativeTo(this.ownerStyle.range.startLine,this.ownerStyle.range.startColumn);var indentation=this.ownerStyle.cssText?this._detectIndentation(this.ownerStyle.cssText):WebInspector.moduleSetting("textEditorIndent").get();var endIndentation=this.ownerStyle.cssText?indentation.substring(0,this.ownerStyle.range.endColumn):"";var text=new WebInspector.Text(this.ownerStyle.cssText||"");var newStyleText=text.replaceRange(range,String.sprintf(";%s;",propertyText));return self.runtime.extension(WebInspector.TokenizerFactory).instance().then(this._formatStyle.bind(this,newStyleText,indentation,endIndentation)).then(setStyleText.bind(this));function setStyleText(styleText)
{return this.ownerStyle.setText(styleText,majorChange);}},_formatStyle:function(styleText,indentation,endIndentation,tokenizerFactory)
{if(indentation)
indentation="\n"+indentation;var result="";var propertyText;var insideProperty=false;var tokenize=tokenizerFactory.createTokenizer("text/css");tokenize("*{"+styleText+"}",processToken);if(insideProperty)
result+=propertyText;result=result.substring(2,result.length-1).trimRight();return result+(indentation?"\n"+endIndentation:"");function processToken(token,tokenType,column,newColumn)
{if(!insideProperty){var disabledProperty=tokenType&&tokenType.includes("css-comment")&&isDisabledProperty(token);var isPropertyStart=tokenType&&(tokenType.includes("css-string")||tokenType.includes("css-meta")||tokenType.includes("css-property")||tokenType.includes("css-variable-2"));if(disabledProperty){result=result.trimRight()+indentation+token;}else if(isPropertyStart){insideProperty=true;propertyText=token;}else if(token!==";"){result+=token;}
return;}
if(token==="}"||token===";"){result=result.trimRight()+indentation+propertyText.trim()+";";insideProperty=false;if(token==="}")
result+="}";}else{propertyText+=token;}}
function isDisabledProperty(text)
{var colon=text.indexOf(":");if(colon===-1)
return false;var propertyName=text.substring(2,colon).trim();return WebInspector.cssMetadata().isCSSPropertyName(propertyName);}},_detectIndentation:function(text)
{var lines=text.split("\n");if(lines.length<2)
return"";return WebInspector.TextUtils.lineIndent(lines[1]);},setValue:function(newValue,majorChange,overwrite,userCallback)
{var text=this.name+": "+newValue+(this.important?" !important":"")+";";this.setText(text,majorChange,overwrite).then(userCallback);},setDisabled:function(disabled)
{if(!this.ownerStyle)
return Promise.resolve(false);if(disabled===this.disabled)
return Promise.resolve(true);var propertyText=this.text.trim();var text=disabled?"/* "+propertyText+" */":this.text.substring(2,propertyText.length-2).trim();return this.setText(text,true,true);}};},{}],115:[function(require,module,exports){WebInspector.CSSValue=function(payload)
{this.text=payload.text;if(payload.range)
this.range=WebInspector.TextRange.fromObject(payload.range);};WebInspector.CSSValue.prototype={rebase:function(edit)
{if(!this.range)
return;this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);}};WebInspector.CSSRule=function(cssModel,payload)
{this._cssModel=cssModel;this.styleSheetId=payload.styleSheetId;if(this.styleSheetId){var styleSheetHeader=cssModel.styleSheetHeaderForId(this.styleSheetId);this.sourceURL=styleSheetHeader.sourceURL;}
this.origin=payload.origin;this.style=new WebInspector.CSSStyleDeclaration(this._cssModel,this,payload.style,WebInspector.CSSStyleDeclaration.Type.Regular);};WebInspector.CSSRule.prototype={rebase:function(edit)
{if(this.styleSheetId!==edit.styleSheetId)
return;this.style.rebase(edit);},resourceURL:function()
{if(!this.styleSheetId)
return"";var styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);return styleSheetHeader.resourceURL();},isUserAgent:function()
{return this.origin===CSSAgent.StyleSheetOrigin.UserAgent;},isInjected:function()
{return this.origin===CSSAgent.StyleSheetOrigin.Injected;},isViaInspector:function()
{return this.origin===CSSAgent.StyleSheetOrigin.Inspector;},isRegular:function()
{return this.origin===CSSAgent.StyleSheetOrigin.Regular;}};WebInspector.CSSStyleRule=function(cssModel,payload)
{WebInspector.CSSRule.call(this,cssModel,payload);this._reinitializeSelectors(payload.selectorList);this.media=payload.media?WebInspector.CSSMedia.parseMediaArrayPayload(cssModel,payload.media):[];};WebInspector.CSSStyleRule.createDummyRule=function(cssModel,selectorText)
{var dummyPayload={selectorList:{selectors:[{text:selectorText}]},style:{styleSheetId:"0",range:new WebInspector.TextRange(0,0,0,0),shorthandEntries:[],cssProperties:[]}};return new WebInspector.CSSStyleRule(cssModel,dummyPayload);};WebInspector.CSSStyleRule.prototype={_reinitializeSelectors:function(selectorList)
{this.selectors=[];for(var i=0;i<selectorList.selectors.length;++i)
this.selectors.push(new WebInspector.CSSValue(selectorList.selectors[i]));},setSelectorText:function(newSelector)
{var styleSheetId=this.styleSheetId;if(!styleSheetId)
throw"No rule stylesheet id";var range=this.selectorRange();if(!range)
throw"Rule selector is not editable";return this._cssModel.setSelectorText(styleSheetId,range,newSelector);},selectorText:function()
{return this.selectors.select("text").join(", ");},selectorRange:function()
{var firstRange=this.selectors[0].range;if(!firstRange)
return null;var lastRange=this.selectors.peekLast().range;return new WebInspector.TextRange(firstRange.startLine,firstRange.startColumn,lastRange.endLine,lastRange.endColumn);},lineNumberInSource:function(selectorIndex)
{var selector=this.selectors[selectorIndex];if(!selector||!selector.range||!this.styleSheetId)
return 0;var styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);return styleSheetHeader.lineNumberInSource(selector.range.startLine);},columnNumberInSource:function(selectorIndex)
{var selector=this.selectors[selectorIndex];if(!selector||!selector.range||!this.styleSheetId)
return undefined;var styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);console.assert(styleSheetHeader);return styleSheetHeader.columnNumberInSource(selector.range.startLine,selector.range.startColumn);},rebase:function(edit)
{if(this.styleSheetId!==edit.styleSheetId)
return;if(this.selectorRange().equal(edit.oldRange)){this._reinitializeSelectors(edit.payload);}else{for(var i=0;i<this.selectors.length;++i)
this.selectors[i].rebase(edit);}
for(var media of this.media)
media.rebase(edit);WebInspector.CSSRule.prototype.rebase.call(this,edit);},__proto__:WebInspector.CSSRule.prototype};WebInspector.CSSKeyframesRule=function(cssModel,payload)
{this._cssModel=cssModel;this._animationName=new WebInspector.CSSValue(payload.animationName);this._keyframes=payload.keyframes.map(keyframeRule=>new WebInspector.CSSKeyframeRule(cssModel,keyframeRule));};WebInspector.CSSKeyframesRule.prototype={name:function()
{return this._animationName;},keyframes:function()
{return this._keyframes;}};WebInspector.CSSKeyframeRule=function(cssModel,payload)
{WebInspector.CSSRule.call(this,cssModel,payload);this._reinitializeKey(payload.keyText);};WebInspector.CSSKeyframeRule.prototype={key:function()
{return this._keyText;},_reinitializeKey:function(payload)
{this._keyText=new WebInspector.CSSValue(payload);},rebase:function(edit)
{if(this.styleSheetId!==edit.styleSheetId||!this._keyText.range)
return;if(edit.oldRange.equal(this._keyText.range))
this._reinitializeKey(edit.payload);else
this._keyText.rebase(edit);WebInspector.CSSRule.prototype.rebase.call(this,edit);},setKeyText:function(newKeyText)
{var styleSheetId=this.styleSheetId;if(!styleSheetId)
throw"No rule stylesheet id";var range=this._keyText.range;if(!range)
throw"Keyframe key is not editable";return this._cssModel.setKeyframeKey(styleSheetId,range,newKeyText);},__proto__:WebInspector.CSSRule.prototype};},{}],116:[function(require,module,exports){WebInspector.CSSStyleDeclaration=function(cssModel,parentRule,payload,type)
{this._cssModel=cssModel;this.parentRule=parentRule;this._reinitialize(payload);this.type=type;};WebInspector.CSSStyleDeclaration.Type={Regular:"Regular",Inline:"Inline",Attributes:"Attributes"};WebInspector.CSSStyleDeclaration.prototype={rebase:function(edit)
{if(this.styleSheetId!==edit.styleSheetId||!this.range)
return;if(edit.oldRange.equal(this.range)){this._reinitialize(edit.payload);}else{this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);for(var i=0;i<this._allProperties.length;++i)
this._allProperties[i].rebase(edit);}},_reinitialize:function(payload)
{this.styleSheetId=payload.styleSheetId;this.range=payload.range?WebInspector.TextRange.fromObject(payload.range):null;var shorthandEntries=payload.shorthandEntries;this._shorthandValues=new Map();this._shorthandIsImportant=new Set();for(var i=0;i<shorthandEntries.length;++i){this._shorthandValues.set(shorthandEntries[i].name,shorthandEntries[i].value);if(shorthandEntries[i].important)
this._shorthandIsImportant.add(shorthandEntries[i].name);}
this._allProperties=[];for(var i=0;i<payload.cssProperties.length;++i){var property=WebInspector.CSSProperty.parsePayload(this,i,payload.cssProperties[i]);this._allProperties.push(property);}
this._generateSyntheticPropertiesIfNeeded();this._computeInactiveProperties();this._activePropertyMap=new Map();for(var property of this._allProperties){if(!property.activeInStyle())
continue;this._activePropertyMap.set(property.name,property);}
this.cssText=payload.cssText;this._leadingProperties=null;},_generateSyntheticPropertiesIfNeeded:function()
{if(this.range)
return;if(!this._shorthandValues.size)
return;var propertiesSet=new Set();for(var property of this._allProperties)
propertiesSet.add(property.name);var generatedProperties=[];for(var property of this._allProperties){var shorthands=WebInspector.cssMetadata().shorthands(property.name)||[];for(var shorthand of shorthands){if(propertiesSet.has(shorthand))
continue;var shorthandValue=this._shorthandValues.get(shorthand);if(!shorthandValue)
continue;var shorthandImportance=!!this._shorthandIsImportant.has(shorthand);var shorthandProperty=new WebInspector.CSSProperty(this,this.allProperties.length,shorthand,shorthandValue,shorthandImportance,false,true,false);generatedProperties.push(shorthandProperty);propertiesSet.add(shorthand);}}
this._allProperties=this._allProperties.concat(generatedProperties);},_computeLeadingProperties:function()
{function propertyHasRange(property)
{return!!property.range;}
if(this.range)
return this._allProperties.filter(propertyHasRange);var leadingProperties=[];for(var property of this._allProperties){var shorthands=WebInspector.cssMetadata().shorthands(property.name)||[];var belongToAnyShorthand=false;for(var shorthand of shorthands){if(this._shorthandValues.get(shorthand)){belongToAnyShorthand=true;break;}}
if(!belongToAnyShorthand)
leadingProperties.push(property);}
return leadingProperties;},leadingProperties:function()
{if(!this._leadingProperties)
this._leadingProperties=this._computeLeadingProperties();return this._leadingProperties;},target:function()
{return this._cssModel.target();},cssModel:function()
{return this._cssModel;},_computeInactiveProperties:function()
{var activeProperties={};for(var i=0;i<this._allProperties.length;++i){var property=this._allProperties[i];if(property.disabled||!property.parsedOk){property._setActive(false);continue;}
var canonicalName=WebInspector.cssMetadata().canonicalPropertyName(property.name);var activeProperty=activeProperties[canonicalName];if(!activeProperty){activeProperties[canonicalName]=property;}else if(!activeProperty.important||property.important){activeProperty._setActive(false);activeProperties[canonicalName]=property;}else{property._setActive(false);}}},get allProperties()
{return this._allProperties;},getPropertyValue:function(name)
{var property=this._activePropertyMap.get(name);return property?property.value:"";},isPropertyImplicit:function(name)
{var property=this._activePropertyMap.get(name);return property?property.implicit:"";},longhandProperties:function(name)
{var longhands=WebInspector.cssMetadata().longhands(name);var result=[];for(var i=0;longhands&&i<longhands.length;++i){var property=this._activePropertyMap.get(longhands[i]);if(property)
result.push(property);}
return result;},propertyAt:function(index)
{return index<this.allProperties.length?this.allProperties[index]:null;},pastLastSourcePropertyIndex:function()
{for(var i=this.allProperties.length-1;i>=0;--i){if(this.allProperties[i].range)
return i+1;}
return 0;},_insertionRange:function(index)
{var property=this.propertyAt(index);return property&&property.range?property.range.collapseToStart():this.range.collapseToEnd();},newBlankProperty:function(index)
{index=typeof index==="undefined"?this.pastLastSourcePropertyIndex():index;var property=new WebInspector.CSSProperty(this,index,"","",false,false,true,false,"",this._insertionRange(index));return property;},setText:function(text,majorChange)
{return this._cssModel.setStyleText(this.styleSheetId,this.range,text,majorChange);},insertPropertyAt:function(index,name,value,userCallback)
{this.newBlankProperty(index).setText(name+": "+value+";",false,true).then(userCallback);},appendProperty:function(name,value,userCallback)
{this.insertPropertyAt(this.allProperties.length,name,value,userCallback);}};},{}],117:[function(require,module,exports){WebInspector.NetworkManager=function(target)
{WebInspector.SDKModel.call(this,WebInspector.NetworkManager,target);this._dispatcher=new WebInspector.NetworkDispatcher(this);this._target=target;this._networkAgent=target.networkAgent();target.registerNetworkDispatcher(this._dispatcher);if(WebInspector.moduleSetting("cacheDisabled").get())
this._networkAgent.setCacheDisabled(true);if(WebInspector.moduleSetting("monitoringXHREnabled").get())
this._networkAgent.setMonitoringXHREnabled(true);if(Runtime.queryParam("remoteFrontend")||Runtime.queryParam("ws"))
this._networkAgent.enable(10000000,5000000);else
this._networkAgent.enable();this._bypassServiceWorkerSetting=WebInspector.settings.createSetting("bypassServiceWorker",false);if(this._bypassServiceWorkerSetting.get())
this._bypassServiceWorkerChanged();this._bypassServiceWorkerSetting.addChangeListener(this._bypassServiceWorkerChanged,this);WebInspector.moduleSetting("cacheDisabled").addChangeListener(this._cacheDisabledSettingChanged,this);};WebInspector.NetworkManager.Events={RequestStarted:Symbol("RequestStarted"),RequestUpdated:Symbol("RequestUpdated"),RequestFinished:Symbol("RequestFinished"),RequestUpdateDropped:Symbol("RequestUpdateDropped"),ResponseReceived:Symbol("ResponseReceived")};WebInspector.NetworkManager._MIMETypes={"text/html":{"document":true},"text/xml":{"document":true},"text/plain":{"document":true},"application/xhtml+xml":{"document":true},"image/svg+xml":{"document":true},"text/css":{"stylesheet":true},"text/xsl":{"stylesheet":true},"text/vtt":{"texttrack":true}};WebInspector.NetworkManager.fromTarget=function(target)
{return target.model(WebInspector.NetworkManager);};WebInspector.NetworkManager.Conditions;WebInspector.NetworkManager.NoThrottlingConditions={title:WebInspector.UIString("No throttling"),download:-1,upload:-1,latency:0};WebInspector.NetworkManager.OfflineConditions={title:WebInspector.UIString("Offline"),download:0,upload:0,latency:0};WebInspector.NetworkManager._connectionType=function(conditions)
{if(!conditions.download&&!conditions.upload)
return NetworkAgent.ConnectionType.None;var types=WebInspector.NetworkManager._connectionTypes;if(!types){WebInspector.NetworkManager._connectionTypes=[];types=WebInspector.NetworkManager._connectionTypes;types.push(["2g",NetworkAgent.ConnectionType.Cellular2g]);types.push(["3g",NetworkAgent.ConnectionType.Cellular3g]);types.push(["4g",NetworkAgent.ConnectionType.Cellular4g]);types.push(["bluetooth",NetworkAgent.ConnectionType.Bluetooth]);types.push(["wifi",NetworkAgent.ConnectionType.Wifi]);types.push(["wimax",NetworkAgent.ConnectionType.Wimax]);}
for(var type of types){if(conditions.title.toLowerCase().indexOf(type[0])!==-1)
return type[1];}
return NetworkAgent.ConnectionType.Other;};WebInspector.NetworkManager.prototype={inflightRequestForURL:function(url)
{return this._dispatcher._inflightRequestsByURL[url];},_cacheDisabledSettingChanged:function(event)
{var enabled=event.data;this._networkAgent.setCacheDisabled(enabled);},dispose:function()
{WebInspector.moduleSetting("cacheDisabled").removeChangeListener(this._cacheDisabledSettingChanged,this);},bypassServiceWorkerSetting:function()
{return this._bypassServiceWorkerSetting;},_bypassServiceWorkerChanged:function()
{this._networkAgent.setBypassServiceWorker(this._bypassServiceWorkerSetting.get());},__proto__:WebInspector.SDKModel.prototype};WebInspector.NetworkDispatcher=function(manager)
{this._manager=manager;this._inflightRequestsById={};this._inflightRequestsByURL={};};WebInspector.NetworkDispatcher.prototype={_headersMapToHeadersArray:function(headersMap)
{var result=[];for(var name in headersMap){var values=headersMap[name].split("\n");for(var i=0;i<values.length;++i)
result.push({name:name,value:values[i]});}
return result;},_updateNetworkRequestWithRequest:function(networkRequest,request)
{networkRequest.requestMethod=request.method;networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));networkRequest.requestFormData=request.postData;networkRequest.setInitialPriority(request.initialPriority);networkRequest.mixedContentType=request.mixedContentType||NetworkAgent.RequestMixedContentType.None;},_updateNetworkRequestWithResponse:function(networkRequest,response)
{if(response.url&&networkRequest.url!==response.url)
networkRequest.url=response.url;networkRequest.mimeType=response.mimeType;networkRequest.statusCode=response.status;networkRequest.statusText=response.statusText;networkRequest.responseHeaders=this._headersMapToHeadersArray(response.headers);if(response.encodedDataLength>=0)
networkRequest.setTransferSize(response.encodedDataLength);if(response.headersText)
networkRequest.responseHeadersText=response.headersText;if(response.requestHeaders){networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders));networkRequest.setRequestHeadersText(response.requestHeadersText||"");}
networkRequest.connectionReused=response.connectionReused;networkRequest.connectionId=String(response.connectionId);if(response.remoteIPAddress)
networkRequest.setRemoteAddress(response.remoteIPAddress,response.remotePort||-1);if(response.fromServiceWorker)
networkRequest.fetchedViaServiceWorker=true;if(response.fromDiskCache)
networkRequest.setFromDiskCache();networkRequest.timing=response.timing;networkRequest.protocol=response.protocol;networkRequest.setSecurityState(response.securityState);if(!this._mimeTypeIsConsistentWithType(networkRequest)){var consoleModel=this._manager._target.consoleModel;consoleModel.addMessage(new WebInspector.ConsoleMessage(consoleModel.target(),WebInspector.ConsoleMessage.MessageSource.Network,WebInspector.ConsoleMessage.MessageLevel.Log,WebInspector.UIString("Resource interpreted as %s but transferred with MIME type %s: \"%s\".",networkRequest.resourceType().title(),networkRequest.mimeType,networkRequest.url),WebInspector.ConsoleMessage.MessageType.Log,"",0,0,networkRequest.requestId));}
if(response.securityDetails)
networkRequest.setSecurityDetails(response.securityDetails);},_mimeTypeIsConsistentWithType:function(networkRequest)
{if(networkRequest.hasErrorStatusCode()||networkRequest.statusCode===304||networkRequest.statusCode===204)
return true;var resourceType=networkRequest.resourceType();if(resourceType!==WebInspector.resourceTypes.Stylesheet&&resourceType!==WebInspector.resourceTypes.Document&&resourceType!==WebInspector.resourceTypes.TextTrack){return true;}
if(!networkRequest.mimeType)
return true;if(networkRequest.mimeType in WebInspector.NetworkManager._MIMETypes)
return resourceType.name()in WebInspector.NetworkManager._MIMETypes[networkRequest.mimeType];return false;},resourceChangedPriority:function(requestId,newPriority,timestamp)
{var networkRequest=this._inflightRequestsById[requestId];if(networkRequest)
networkRequest.setPriority(newPriority);},requestWillBeSent:function(requestId,frameId,loaderId,documentURL,request,time,wallTime,initiator,redirectResponse,resourceType)
{var networkRequest=this._inflightRequestsById[requestId];if(networkRequest){if(!redirectResponse)
return;this.responseReceived(requestId,frameId,loaderId,time,PageAgent.ResourceType.Other,redirectResponse);networkRequest=this._appendRedirect(requestId,time,request.url);}else
networkRequest=this._createNetworkRequest(requestId,frameId,loaderId,request.url,documentURL,initiator);networkRequest.hasNetworkData=true;this._updateNetworkRequestWithRequest(networkRequest,request);networkRequest.setIssueTime(time,wallTime);networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]);this._startNetworkRequest(networkRequest);},requestServedFromCache:function(requestId)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.setFromMemoryCache();},responseReceived:function(requestId,frameId,loaderId,time,resourceType,response)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){var eventData={};eventData.url=response.url;eventData.frameId=frameId;eventData.loaderId=loaderId;eventData.resourceType=resourceType;eventData.mimeType=response.mimeType;this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdateDropped,eventData);return;}
networkRequest.responseReceivedTime=time;networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]);this._updateNetworkRequestWithResponse(networkRequest,response);this._updateNetworkRequest(networkRequest);this._manager.dispatchEventToListeners(WebInspector.NetworkManager.Events.ResponseReceived,networkRequest);},dataReceived:function(requestId,time,dataLength,encodedDataLength)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.resourceSize+=dataLength;if(encodedDataLength!==-1)
networkRequest.increaseTransferSize(encodedDataLength);networkRequest.endTime=time;this._updateNetworkRequest(networkRequest);},loadingFinished:function(requestId,finishTime,encodedDataLength)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;this._finishNetworkRequest(networkRequest,finishTime,encodedDataLength);},loadingFailed:function(requestId,time,resourceType,localizedDescription,canceled,blockedReason)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.failed=true;networkRequest.setResourceType(WebInspector.resourceTypes[resourceType]);networkRequest.canceled=canceled;if(blockedReason){networkRequest.setBlockedReason(blockedReason);if(blockedReason===NetworkAgent.BlockedReason.Inspector){var consoleModel=this._manager._target.consoleModel;consoleModel.addMessage(new WebInspector.ConsoleMessage(consoleModel.target(),WebInspector.ConsoleMessage.MessageSource.Network,WebInspector.ConsoleMessage.MessageLevel.Warning,WebInspector.UIString("Request was blocked by DevTools: \"%s\".",networkRequest.url),WebInspector.ConsoleMessage.MessageType.Log,"",0,0,networkRequest.requestId));}}
networkRequest.localizedFailDescription=localizedDescription;this._finishNetworkRequest(networkRequest,time,-1);},webSocketCreated:function(requestId,requestURL,initiator)
{var networkRequest=new WebInspector.NetworkRequest(this._manager._target,requestId,requestURL,"","","",initiator||null);networkRequest.setResourceType(WebInspector.resourceTypes.WebSocket);this._startNetworkRequest(networkRequest);},webSocketWillSendHandshakeRequest:function(requestId,time,wallTime,request)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.requestMethod="GET";networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));networkRequest.setIssueTime(time,wallTime);this._updateNetworkRequest(networkRequest);},webSocketHandshakeResponseReceived:function(requestId,time,response)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.statusCode=response.status;networkRequest.statusText=response.statusText;networkRequest.responseHeaders=this._headersMapToHeadersArray(response.headers);networkRequest.responseHeadersText=response.headersText;if(response.requestHeaders)
networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders));if(response.requestHeadersText)
networkRequest.setRequestHeadersText(response.requestHeadersText);networkRequest.responseReceivedTime=time;networkRequest.protocol="websocket";this._updateNetworkRequest(networkRequest);},webSocketFrameReceived:function(requestId,time,response)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.addFrame(response,time);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);},webSocketFrameSent:function(requestId,time,response)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.addFrame(response,time,true);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);},webSocketFrameError:function(requestId,time,errorMessage)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.addFrameError(errorMessage,time);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);},webSocketClosed:function(requestId,time)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;this._finishNetworkRequest(networkRequest,time,-1);},eventSourceMessageReceived:function(requestId,time,eventName,eventId,data)
{var networkRequest=this._inflightRequestsById[requestId];if(!networkRequest)
return;networkRequest.addEventSourceMessage(time,eventName,eventId,data);},_appendRedirect:function(requestId,time,redirectURL)
{var originalNetworkRequest=this._inflightRequestsById[requestId];var previousRedirects=originalNetworkRequest.redirects||[];originalNetworkRequest.requestId=requestId+":redirected."+previousRedirects.length;delete originalNetworkRequest.redirects;if(previousRedirects.length>0)
originalNetworkRequest.redirectSource=previousRedirects[previousRedirects.length-1];this._finishNetworkRequest(originalNetworkRequest,time,-1);var newNetworkRequest=this._createNetworkRequest(requestId,originalNetworkRequest.frameId,originalNetworkRequest.loaderId,redirectURL,originalNetworkRequest.documentURL,originalNetworkRequest.initiator());newNetworkRequest.redirects=previousRedirects.concat(originalNetworkRequest);return newNetworkRequest;},_startNetworkRequest:function(networkRequest)
{this._inflightRequestsById[networkRequest.requestId]=networkRequest;this._inflightRequestsByURL[networkRequest.url]=networkRequest;this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestStarted,networkRequest);},_updateNetworkRequest:function(networkRequest)
{this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestUpdated,networkRequest);},_finishNetworkRequest:function(networkRequest,finishTime,encodedDataLength)
{networkRequest.endTime=finishTime;networkRequest.finished=true;if(encodedDataLength>=0)
networkRequest.setTransferSize(encodedDataLength);this._dispatchEventToListeners(WebInspector.NetworkManager.Events.RequestFinished,networkRequest);delete this._inflightRequestsById[networkRequest.requestId];delete this._inflightRequestsByURL[networkRequest.url];},_dispatchEventToListeners:function(eventType,networkRequest)
{this._manager.dispatchEventToListeners(eventType,networkRequest);},_createNetworkRequest:function(requestId,frameId,loaderId,url,documentURL,initiator)
{return new WebInspector.NetworkRequest(this._manager._target,requestId,url,documentURL,frameId,loaderId,initiator);}};WebInspector.MultitargetNetworkManager=function()
{WebInspector.Object.call(this);WebInspector.targetManager.observeTargets(this);this._blockedURLs=new Set();this._blockedSetting=WebInspector.moduleSetting("blockedURLs");this._blockedSetting.addChangeListener(this._updateBlockedURLs,this);this._blockedSetting.set([]);this._updateBlockedURLs();this._userAgentOverride="";this._agents=new Set();this._networkConditions=WebInspector.NetworkManager.NoThrottlingConditions;};WebInspector.MultitargetNetworkManager.Events={ConditionsChanged:Symbol("ConditionsChanged"),UserAgentChanged:Symbol("UserAgentChanged")};WebInspector.MultitargetNetworkManager.patchUserAgentWithChromeVersion=function(uaString)
{var chromeRegex=new RegExp("(?:^|\\W)Chrome/(\\S+)");var chromeMatch=navigator.userAgent.match(chromeRegex);if(chromeMatch&&chromeMatch.length>1)
return String.sprintf(uaString,chromeMatch[1]);return uaString;};WebInspector.MultitargetNetworkManager.prototype={targetAdded:function(target)
{var networkAgent=target.networkAgent();if(this._extraHeaders)
networkAgent.setExtraHTTPHeaders(this._extraHeaders);if(this._currentUserAgent())
networkAgent.setUserAgentOverride(this._currentUserAgent());for(var url of this._blockedURLs)
networkAgent.addBlockedURL(url);this._agents.add(networkAgent);if(this.isThrottling())
this._updateNetworkConditions(networkAgent);},targetRemoved:function(target)
{this._agents.delete(target.networkAgent());},isThrottling:function()
{return this._networkConditions.download>=0||this._networkConditions.upload>=0||this._networkConditions.latency>0;},isOffline:function()
{return!this._networkConditions.download&&!this._networkConditions.upload;},setNetworkConditions:function(conditions)
{this._networkConditions=conditions;for(var agent of this._agents)
this._updateNetworkConditions(agent);this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.ConditionsChanged);},networkConditions:function()
{return this._networkConditions;},_updateNetworkConditions:function(networkAgent)
{var conditions=this._networkConditions;if(!this.isThrottling()){networkAgent.emulateNetworkConditions(false,0,0,0);}else{networkAgent.emulateNetworkConditions(this.isOffline(),conditions.latency,conditions.download<0?0:conditions.download,conditions.upload<0?0:conditions.upload,WebInspector.NetworkManager._connectionType(conditions));}},setExtraHTTPHeaders:function(headers)
{this._extraHeaders=headers;for(var target of WebInspector.targetManager.targets())
target.networkAgent().setExtraHTTPHeaders(this._extraHeaders);},_currentUserAgent:function()
{return this._customUserAgent?this._customUserAgent:this._userAgentOverride;},_updateUserAgentOverride:function()
{var userAgent=this._currentUserAgent();WebInspector.ResourceLoader.targetUserAgent=userAgent;for(var target of WebInspector.targetManager.targets())
target.networkAgent().setUserAgentOverride(userAgent);},setUserAgentOverride:function(userAgent)
{if(this._userAgentOverride===userAgent)
return;this._userAgentOverride=userAgent;if(!this._customUserAgent)
this._updateUserAgentOverride();this.dispatchEventToListeners(WebInspector.MultitargetNetworkManager.Events.UserAgentChanged);},userAgentOverride:function()
{return this._userAgentOverride;},setCustomUserAgentOverride:function(userAgent)
{this._customUserAgent=userAgent;this._updateUserAgentOverride();},_updateBlockedURLs:function()
{var blocked=this._blockedSetting.get();for(var url of blocked){if(!this._blockedURLs.has(url))
this._addBlockedURL(url);}
for(var url of this._blockedURLs){if(blocked.indexOf(url)===-1)
this._removeBlockedURL(url);}},_addBlockedURL:function(url)
{this._blockedURLs.add(url);for(var target of WebInspector.targetManager.targets())
target.networkAgent().addBlockedURL(url);},_removeBlockedURL:function(url)
{this._blockedURLs.delete(url);for(var target of WebInspector.targetManager.targets())
target.networkAgent().removeBlockedURL(url);},clearBrowserCache:function()
{for(var target of WebInspector.targetManager.targets())
target.networkAgent().clearBrowserCache();},clearBrowserCookies:function()
{for(var target of WebInspector.targetManager.targets())
target.networkAgent().clearBrowserCookies();},getCertificate:function(origin,callback)
{var target=WebInspector.targetManager.mainTarget();target.networkAgent().getCertificate(origin,mycallback);function mycallback(error,certificate)
{callback(error?[]:certificate);}},loadResource:function(url,callback)
{var headers={};var currentUserAgent=this._currentUserAgent();if(currentUserAgent)
headers["User-Agent"]=currentUserAgent;if(WebInspector.moduleSetting("cacheDisabled").get())
headers["Cache-Control"]="no-cache";WebInspector.ResourceLoader.load(url,headers,callback);},__proto__:WebInspector.Object.prototype};WebInspector.multitargetNetworkManager;},{}],118:[function(require,module,exports){WebInspector.NetworkRequest=function(target,requestId,url,documentURL,frameId,loaderId,initiator)
{WebInspector.SDKObject.call(this,target);this._networkLog=WebInspector.NetworkLog.fromTarget(target);this._networkManager=WebInspector.NetworkManager.fromTarget(target);this._requestId=requestId;this.url=url;this._documentURL=documentURL;this._frameId=frameId;this._loaderId=loaderId;this._initiator=initiator;this._issueTime=-1;this._startTime=-1;this._endTime=-1;this._blockedReason=undefined;this.statusCode=0;this.statusText="";this.requestMethod="";this.requestTime=0;this.protocol="";this.mixedContentType=NetworkAgent.RequestMixedContentType.None;this._initialPriority=null;this._currentPriority=null;this._resourceType=WebInspector.resourceTypes.Other;this._contentEncoded=false;this._pendingContentCallbacks=[];this._frames=[];this._eventSourceMessages=[];this._responseHeaderValues={};this._remoteAddress="";this._securityState=SecurityAgent.SecurityState.Unknown;this._securityDetails=null;this.connectionId="0";};WebInspector.NetworkRequest.Events={FinishedLoading:Symbol("FinishedLoading"),TimingChanged:Symbol("TimingChanged"),RemoteAddressChanged:Symbol("RemoteAddressChanged"),RequestHeadersChanged:Symbol("RequestHeadersChanged"),ResponseHeadersChanged:Symbol("ResponseHeadersChanged"),WebsocketFrameAdded:Symbol("WebsocketFrameAdded"),EventSourceMessageAdded:Symbol("EventSourceMessageAdded")};WebInspector.NetworkRequest.InitiatorType={Other:"other",Parser:"parser",Redirect:"redirect",Script:"script"};WebInspector.NetworkRequest.NameValue;WebInspector.NetworkRequest.WebSocketFrameType={Send:"send",Receive:"receive",Error:"error"};WebInspector.NetworkRequest.WebSocketFrame;WebInspector.NetworkRequest.EventSourceMessage;WebInspector.NetworkRequest.prototype={indentityCompare:function(other)
{if(this._requestId>other._requestId)
return 1;if(this._requestId<other._requestId)
return-1;return 0;},get requestId()
{return this._requestId;},set requestId(requestId)
{this._requestId=requestId;},get url()
{return this._url;},set url(x)
{if(this._url===x)
return;this._url=x;this._parsedURL=new WebInspector.ParsedURL(x);delete this._queryString;delete this._parsedQueryParameters;delete this._name;delete this._path;},get documentURL()
{return this._documentURL;},get parsedURL()
{return this._parsedURL;},get frameId()
{return this._frameId;},get loaderId()
{return this._loaderId;},setRemoteAddress:function(ip,port)
{this._remoteAddress=ip+":"+port;this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RemoteAddressChanged,this);},remoteAddress:function()
{return this._remoteAddress;},securityState:function()
{return this._securityState;},setSecurityState:function(securityState)
{this._securityState=securityState;},securityDetails:function()
{return this._securityDetails;},setSecurityDetails:function(securityDetails)
{this._securityDetails=securityDetails;},get startTime()
{return this._startTime||-1;},setIssueTime:function(monotonicTime,wallTime)
{this._issueTime=monotonicTime;this._wallIssueTime=wallTime;this._startTime=monotonicTime;},issueTime:function()
{return this._issueTime;},pseudoWallTime:function(monotonicTime)
{return this._wallIssueTime?this._wallIssueTime-this._issueTime+monotonicTime:monotonicTime;},get responseReceivedTime()
{return this._responseReceivedTime||-1;},set responseReceivedTime(x)
{this._responseReceivedTime=x;},get endTime()
{return this._endTime||-1;},set endTime(x)
{if(this.timing&&this.timing.requestTime){this._endTime=Math.max(x,this.responseReceivedTime);}else{this._endTime=x;if(this._responseReceivedTime>x)
this._responseReceivedTime=x;}
this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.TimingChanged,this);},get duration()
{if(this._endTime===-1||this._startTime===-1)
return-1;return this._endTime-this._startTime;},get latency()
{if(this._responseReceivedTime===-1||this._startTime===-1)
return-1;return this._responseReceivedTime-this._startTime;},get resourceSize()
{return this._resourceSize||0;},set resourceSize(x)
{this._resourceSize=x;},get transferSize()
{return this._transferSize||0;},increaseTransferSize:function(x)
{this._transferSize=(this._transferSize||0)+x;},setTransferSize:function(x)
{this._transferSize=x;},get finished()
{return this._finished;},set finished(x)
{if(this._finished===x)
return;this._finished=x;if(x){this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.FinishedLoading,this);if(this._pendingContentCallbacks.length)
this._innerRequestContent();}},get failed()
{return this._failed;},set failed(x)
{this._failed=x;},get canceled()
{return this._canceled;},set canceled(x)
{this._canceled=x;},blockedReason:function()
{return this._blockedReason;},setBlockedReason:function(reason)
{this._blockedReason=reason;},wasBlocked:function()
{return!!this._blockedReason;},cached:function()
{return(!!this._fromMemoryCache||!!this._fromDiskCache)&&!this._transferSize;},cachedInMemory:function()
{return!!this._fromMemoryCache&&!this._transferSize;},setFromMemoryCache:function()
{this._fromMemoryCache=true;delete this._timing;},setFromDiskCache:function()
{this._fromDiskCache=true;},get fetchedViaServiceWorker()
{return this._fetchedViaServiceWorker;},set fetchedViaServiceWorker(x)
{this._fetchedViaServiceWorker=x;},get timing()
{return this._timing;},set timing(x)
{if(x&&!this._fromMemoryCache){this._startTime=x.requestTime;this._responseReceivedTime=x.requestTime+x.receiveHeadersEnd/1000.0;this._timing=x;this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.TimingChanged,this);}},get mimeType()
{return this._mimeType;},set mimeType(x)
{this._mimeType=x;},get displayName()
{return this._parsedURL.displayName;},name:function()
{if(this._name)
return this._name;this._parseNameAndPathFromURL();return this._name;},path:function()
{if(this._path)
return this._path;this._parseNameAndPathFromURL();return this._path;},_parseNameAndPathFromURL:function()
{if(this._parsedURL.isDataURL()){this._name=this._parsedURL.dataURLDisplayName();this._path="";}else if(this._parsedURL.isAboutBlank()){this._name=this._parsedURL.url;this._path="";}else{this._path=this._parsedURL.host+this._parsedURL.folderPathComponents;var inspectedURL=this.target().inspectedURL().asParsedURL();this._path=this._path.trimURL(inspectedURL?inspectedURL.host:"");if(this._parsedURL.lastPathComponent||this._parsedURL.queryParams)
this._name=this._parsedURL.lastPathComponent+(this._parsedURL.queryParams?"?"+this._parsedURL.queryParams:"");else
if(this._parsedURL.folderPathComponents){this._name=this._parsedURL.folderPathComponents.substring(this._parsedURL.folderPathComponents.lastIndexOf("/")+1)+"/";this._path=this._path.substring(0,this._path.lastIndexOf("/"));}else{this._name=this._parsedURL.host;this._path="";}}},get folder()
{var path=this._parsedURL.path;var indexOfQuery=path.indexOf("?");if(indexOfQuery!==-1)
path=path.substring(0,indexOfQuery);var lastSlashIndex=path.lastIndexOf("/");return lastSlashIndex!==-1?path.substring(0,lastSlashIndex):"";},resourceType:function()
{return this._resourceType;},setResourceType:function(resourceType)
{this._resourceType=resourceType;},get domain()
{return this._parsedURL.host;},get scheme()
{return this._parsedURL.scheme;},get redirectSource()
{if(this.redirects&&this.redirects.length>0)
return this.redirects[this.redirects.length-1];return this._redirectSource;},set redirectSource(x)
{this._redirectSource=x;delete this._initiatorInfo;},requestHeaders:function()
{return this._requestHeaders||[];},setRequestHeaders:function(headers)
{this._requestHeaders=headers;delete this._requestCookies;this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RequestHeadersChanged);},requestHeadersText:function()
{return this._requestHeadersText;},setRequestHeadersText:function(text)
{this._requestHeadersText=text;this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RequestHeadersChanged);},requestHeaderValue:function(headerName)
{return this._headerValue(this.requestHeaders(),headerName);},get requestCookies()
{if(!this._requestCookies)
this._requestCookies=WebInspector.CookieParser.parseCookie(this.target(),this.requestHeaderValue("Cookie"));return this._requestCookies;},get requestFormData()
{return this._requestFormData;},set requestFormData(x)
{this._requestFormData=x;delete this._parsedFormParameters;},requestHttpVersion:function()
{var headersText=this.requestHeadersText();if(!headersText)
return this.requestHeaderValue("version")||this.requestHeaderValue(":version")||"unknown";var firstLine=headersText.split(/\r\n/)[0];var match=firstLine.match(/(HTTP\/\d+\.\d+)$/);return match?match[1]:"HTTP/0.9";},get responseHeaders()
{return this._responseHeaders||[];},set responseHeaders(x)
{this._responseHeaders=x;delete this._sortedResponseHeaders;delete this._serverTimings;delete this._responseCookies;this._responseHeaderValues={};this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.ResponseHeadersChanged);},get responseHeadersText()
{return this._responseHeadersText;},set responseHeadersText(x)
{this._responseHeadersText=x;this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.ResponseHeadersChanged);},get sortedResponseHeaders()
{if(this._sortedResponseHeaders!==undefined)
return this._sortedResponseHeaders;this._sortedResponseHeaders=this.responseHeaders.slice();this._sortedResponseHeaders.sort(function(a,b){return a.name.toLowerCase().compareTo(b.name.toLowerCase());});return this._sortedResponseHeaders;},responseHeaderValue:function(headerName)
{var value=this._responseHeaderValues[headerName];if(value===undefined){value=this._headerValue(this.responseHeaders,headerName);this._responseHeaderValues[headerName]=value!==undefined?value:null;}
return value!==null?value:undefined;},get responseCookies()
{if(!this._responseCookies)
this._responseCookies=WebInspector.CookieParser.parseSetCookie(this.target(),this.responseHeaderValue("Set-Cookie"));return this._responseCookies;},get serverTimings()
{if(typeof this._serverTimings==="undefined")
this._serverTimings=WebInspector.ServerTiming.parseHeaders(this.responseHeaders);return this._serverTimings;},queryString:function()
{if(this._queryString!==undefined)
return this._queryString;var queryString=null;var url=this.url;var questionMarkPosition=url.indexOf("?");if(questionMarkPosition!==-1){queryString=url.substring(questionMarkPosition+1);var hashSignPosition=queryString.indexOf("#");if(hashSignPosition!==-1)
queryString=queryString.substring(0,hashSignPosition);}
this._queryString=queryString;return this._queryString;},get queryParameters()
{if(this._parsedQueryParameters)
return this._parsedQueryParameters;var queryString=this.queryString();if(!queryString)
return null;this._parsedQueryParameters=this._parseParameters(queryString);return this._parsedQueryParameters;},get formParameters()
{if(this._parsedFormParameters)
return this._parsedFormParameters;if(!this.requestFormData)
return null;var requestContentType=this.requestContentType();if(!requestContentType||!requestContentType.match(/^application\/x-www-form-urlencoded\s*(;.*)?$/i))
return null;this._parsedFormParameters=this._parseParameters(this.requestFormData);return this._parsedFormParameters;},responseHttpVersion:function()
{var headersText=this._responseHeadersText;if(!headersText)
return this.responseHeaderValue("version")||this.responseHeaderValue(":version")||"unknown";var firstLine=headersText.split(/\r\n/)[0];var match=firstLine.match(/^(HTTP\/\d+\.\d+)/);return match?match[1]:"HTTP/0.9";},_parseParameters:function(queryString)
{function parseNameValue(pair)
{var position=pair.indexOf("=");if(position===-1)
return{name:pair,value:""};else
return{name:pair.substring(0,position),value:pair.substring(position+1)};}
return queryString.split("&").map(parseNameValue);},_headerValue:function(headers,headerName)
{headerName=headerName.toLowerCase();var values=[];for(var i=0;i<headers.length;++i){if(headers[i].name.toLowerCase()===headerName)
values.push(headers[i].value);}
if(!values.length)
return undefined;if(headerName==="set-cookie")
return values.join("\n");return values.join(", ");},get content()
{return this._content;},contentError:function()
{return this._contentError;},get contentEncoded()
{return this._contentEncoded;},contentURL:function()
{return this._url;},contentType:function()
{return this._resourceType;},requestContent:function()
{if(this._resourceType===WebInspector.resourceTypes.WebSocket)
return Promise.resolve(null);if(typeof this._content!=="undefined")
return Promise.resolve(this.content||null);var callback;var promise=new Promise(fulfill=>callback=fulfill);this._pendingContentCallbacks.push(callback);if(this.finished)
this._innerRequestContent();return promise;},searchInContent:function(query,caseSensitive,isRegex,callback)
{callback([]);},isHttpFamily:function()
{return!!this.url.match(/^https?:/i);},requestContentType:function()
{return this.requestHeaderValue("Content-Type");},hasErrorStatusCode:function()
{return this.statusCode>=400;},setInitialPriority:function(priority)
{this._initialPriority=priority;},initialPriority:function()
{return this._initialPriority;},setPriority:function(priority)
{this._currentPriority=priority;},priority:function()
{return this._currentPriority||this._initialPriority||null;},populateImageSource:function(image)
{function onResourceContent(content)
{var imageSrc=WebInspector.ContentProvider.contentAsDataURL(content,this._mimeType,true);if(imageSrc===null)
imageSrc=this._url;image.src=imageSrc;}
this.requestContent().then(onResourceContent.bind(this));},asDataURL:function()
{var content=this._content;var charset=null;if(!this._contentEncoded){content=content.toBase64();charset="utf-8";}
return WebInspector.ContentProvider.contentAsDataURL(content,this.mimeType,true,charset);},_innerRequestContent:function()
{if(this._contentRequested)
return;this._contentRequested=true;function onResourceContent(error,content,contentEncoded)
{this._content=error?null:content;this._contentError=error;this._contentEncoded=contentEncoded;var callbacks=this._pendingContentCallbacks.slice();for(var i=0;i<callbacks.length;++i)
callbacks[i](this._content);this._pendingContentCallbacks.length=0;delete this._contentRequested;}
this.target().networkAgent().getResponseBody(this._requestId,onResourceContent.bind(this));},initiator:function()
{return this._initiator;},initiatorInfo:function()
{if(this._initiatorInfo)
return this._initiatorInfo;var type=WebInspector.NetworkRequest.InitiatorType.Other;var url="";var lineNumber=-Infinity;var columnNumber=-Infinity;var scriptId=null;var initiator=this._initiator;if(this.redirectSource){type=WebInspector.NetworkRequest.InitiatorType.Redirect;url=this.redirectSource.url;}else if(initiator){if(initiator.type===NetworkAgent.InitiatorType.Parser){type=WebInspector.NetworkRequest.InitiatorType.Parser;url=initiator.url?initiator.url:url;lineNumber=initiator.lineNumber?initiator.lineNumber:lineNumber;}else if(initiator.type===NetworkAgent.InitiatorType.Script){for(var stack=initiator.stack;stack;stack=stack.parent){var topFrame=stack.callFrames.length?stack.callFrames[0]:null;if(!topFrame)
continue;type=WebInspector.NetworkRequest.InitiatorType.Script;url=topFrame.url||WebInspector.UIString("<anonymous>");lineNumber=topFrame.lineNumber;columnNumber=topFrame.columnNumber;scriptId=topFrame.scriptId;break;}}}
this._initiatorInfo={type:type,url:url,lineNumber:lineNumber,columnNumber:columnNumber,scriptId:scriptId};return this._initiatorInfo;},initiatorRequest:function()
{if(this._initiatorRequest===undefined)
this._initiatorRequest=this._networkLog.requestForURL(this.initiatorInfo().url);return this._initiatorRequest;},initiatorChain:function()
{if(this._initiatorChain)
return this._initiatorChain;this._initiatorChain=new Set();var request=this;while(request){this._initiatorChain.add(request);request=request.initiatorRequest();}
return this._initiatorChain;},frames:function()
{return this._frames;},addFrameError:function(errorMessage,time)
{this._addFrame({type:WebInspector.NetworkRequest.WebSocketFrameType.Error,text:errorMessage,time:this.pseudoWallTime(time),opCode:-1,mask:false});},addFrame:function(response,time,sent)
{var type=sent?WebInspector.NetworkRequest.WebSocketFrameType.Send:WebInspector.NetworkRequest.WebSocketFrameType.Receive;this._addFrame({type:type,text:response.payloadData,time:this.pseudoWallTime(time),opCode:response.opcode,mask:response.mask});},_addFrame:function(frame)
{this._frames.push(frame);this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.WebsocketFrameAdded,frame);},eventSourceMessages:function()
{return this._eventSourceMessages;},addEventSourceMessage:function(time,eventName,eventId,data)
{var message={time:this.pseudoWallTime(time),eventName:eventName,eventId:eventId,data:data};this._eventSourceMessages.push(message);this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.EventSourceMessageAdded,message);},replayXHR:function()
{this.target().networkAgent().replayXHR(this.requestId);},networkLog:function()
{return this._networkLog;},networkManager:function()
{return this._networkManager;},__proto__:WebInspector.SDKObject.prototype};},{}],119:[function(require,module,exports){WebInspector.ProfileNode=function(callFrame)
{this.callFrame=callFrame;this.callUID=`${this.callFrame.functionName}@${this.callFrame.scriptId}:${this.callFrame.lineNumber}`;this.self=0;this.total=0;this.id=0;this.parent=null;this.children=[];};WebInspector.ProfileNode.prototype={get functionName()
{return this.callFrame.functionName;},get scriptId()
{return this.callFrame.scriptId;},get url()
{return this.callFrame.url;},get lineNumber()
{return this.callFrame.lineNumber;},get columnNumber()
{return this.callFrame.columnNumber;}};WebInspector.ProfileTreeModel=function(root)
{this.root=root;this._assignDepthsAndParents();this.total=this._calculateTotals(this.root);};WebInspector.ProfileTreeModel.prototype={_assignDepthsAndParents:function()
{var root=this.root;root.depth=-1;root.parent=null;this.maxDepth=0;var nodesToTraverse=[root];while(nodesToTraverse.length){var parent=nodesToTraverse.pop();var depth=parent.depth+1;if(depth>this.maxDepth)
this.maxDepth=depth;var children=parent.children;var length=children.length;for(var i=0;i<length;++i){var child=children[i];child.depth=depth;child.parent=parent;if(child.children.length)
nodesToTraverse.push(child);}}},_calculateTotals:function(root)
{var nodesToTraverse=[root];var dfsList=[];while(nodesToTraverse.length){var node=nodesToTraverse.pop();node.total=node.self;dfsList.push(node);nodesToTraverse.push(...node.children);}
while(dfsList.length>1){var node=dfsList.pop();node.parent.total+=node.total;}
return root.total;}};},{}],120:[function(require,module,exports){WebInspector.Target=function(targetManager,name,capabilitiesMask,connection,parentTarget)
{Protocol.Agents.call(this,connection.agentsMap());this._targetManager=targetManager;this._name=name;this._inspectedURL="";this._capabilitiesMask=capabilitiesMask;this._connection=connection;this._parentTarget=parentTarget;connection.addEventListener(InspectorBackendClass.Connection.Events.Disconnected,this._onDisconnect,this);this._id=WebInspector.Target._nextId++;this._modelByConstructor=new Map();};WebInspector.Target.Capability={Browser:1,DOM:2,JS:4,Log:8,Network:16,Worker:32};WebInspector.Target._nextId=1;WebInspector.Target.prototype={id:function()
{return this._id;},name:function()
{return this._name;},targetManager:function()
{return this._targetManager;},hasAllCapabilities:function(capabilitiesMask)
{return(this._capabilitiesMask&capabilitiesMask)===capabilitiesMask;},connection:function()
{return this._connection;},decorateLabel:function(label)
{return!this.hasBrowserCapability()?"\u2699 "+label:label;},registerDispatcher:function(domain,dispatcher)
{this._connection.registerDispatcher(domain,dispatcher);},hasBrowserCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.Browser);},hasJSCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.JS);},hasLogCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.Log);},hasNetworkCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.Network);},hasWorkerCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.Worker);},hasDOMCapability:function()
{return this.hasAllCapabilities(WebInspector.Target.Capability.DOM);},parentTarget:function()
{return this._parentTarget;},_onDisconnect:function()
{this._targetManager.removeTarget(this);this._dispose();},_dispose:function()
{this._targetManager.dispatchEventToListeners(WebInspector.TargetManager.Events.TargetDisposed,this);if(this.workerManager)
this.workerManager.dispose();},isDetached:function()
{return this._connection.isClosed();},model:function(modelClass)
{return this._modelByConstructor.get(modelClass)||null;},models:function()
{return this._modelByConstructor.valuesArray();},inspectedURL:function()
{return this._inspectedURL;},setInspectedURL:function(inspectedURL)
{this._inspectedURL=inspectedURL;InspectorFrontendHost.inspectedURLChanged(inspectedURL||"");this._targetManager.dispatchEventToListeners(WebInspector.TargetManager.Events.InspectedURLChanged,this);},__proto__:Protocol.Agents.prototype};WebInspector.SDKObject=function(target)
{WebInspector.Object.call(this);this._target=target;};WebInspector.SDKObject.prototype={target:function()
{return this._target;},__proto__:WebInspector.Object.prototype};WebInspector.SDKModel=function(modelClass,target)
{WebInspector.SDKObject.call(this,target);target._modelByConstructor.set(modelClass,this);WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.TargetDisposed,this._targetDisposed,this);};WebInspector.SDKModel.prototype={suspendModel:function()
{return Promise.resolve();},resumeModel:function()
{return Promise.resolve();},dispose:function(){},_targetDisposed:function(event)
{var target=event.data;if(target!==this._target)
return;this.dispose();WebInspector.targetManager.removeEventListener(WebInspector.TargetManager.Events.TargetDisposed,this._targetDisposed,this);},__proto__:WebInspector.SDKObject.prototype};},{}],121:[function(require,module,exports){WebInspector.TargetManager=function()
{WebInspector.Object.call(this);this._targets=[];this._observers=[];this._observerCapabiliesMaskSymbol=Symbol("observerCapabilitiesMask");this._modelListeners=new Map();this._isSuspended=false;};WebInspector.TargetManager.Events={InspectedURLChanged:Symbol("InspectedURLChanged"),MainFrameNavigated:Symbol("MainFrameNavigated"),Load:Symbol("Load"),PageReloadRequested:Symbol("PageReloadRequested"),WillReloadPage:Symbol("WillReloadPage"),TargetDisposed:Symbol("TargetDisposed"),SuspendStateChanged:Symbol("SuspendStateChanged")};WebInspector.TargetManager._listenersSymbol=Symbol("WebInspector.TargetManager.Listeners");WebInspector.TargetManager.prototype={suspendAllTargets:function()
{if(this._isSuspended)
return;this._isSuspended=true;this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);for(var i=0;i<this._targets.length;++i){for(var model of this._targets[i].models())
model.suspendModel();}},resumeAllTargets:function()
{if(!this._isSuspended)
throw new Error("Not suspended");this._isSuspended=false;this.dispatchEventToListeners(WebInspector.TargetManager.Events.SuspendStateChanged);var promises=[];for(var i=0;i<this._targets.length;++i){for(var model of this._targets[i].models())
promises.push(model.resumeModel());}
return Promise.all(promises);},suspendAndResumeAllTargets:function()
{this.suspendAllTargets();this.resumeAllTargets();},allTargetsSuspended:function()
{return this._isSuspended;},inspectedURL:function()
{return this._targets[0]?this._targets[0].inspectedURL():"";},_redispatchEvent:function(eventName,event)
{this.dispatchEventToListeners(eventName,event.data);},reloadPage:function(bypassCache,injectedScript)
{if(!this._targets.length)
return;var resourceTreeModel=WebInspector.ResourceTreeModel.fromTarget(this._targets[0]);if(!resourceTreeModel)
return;resourceTreeModel.reloadPage(bypassCache,injectedScript);},addModelListener:function(modelClass,eventType,listener,thisObject)
{for(var i=0;i<this._targets.length;++i){var model=this._targets[i].model(modelClass);if(model)
model.addEventListener(eventType,listener,thisObject);}
if(!this._modelListeners.has(eventType))
this._modelListeners.set(eventType,[]);this._modelListeners.get(eventType).push({modelClass:modelClass,thisObject:thisObject,listener:listener});},removeModelListener:function(modelClass,eventType,listener,thisObject)
{if(!this._modelListeners.has(eventType))
return;for(var i=0;i<this._targets.length;++i){var model=this._targets[i].model(modelClass);if(model)
model.removeEventListener(eventType,listener,thisObject);}
var listeners=this._modelListeners.get(eventType);for(var i=0;i<listeners.length;++i){if(listeners[i].modelClass===modelClass&&listeners[i].listener===listener&&listeners[i].thisObject===thisObject)
listeners.splice(i--,1);}
if(!listeners.length)
this._modelListeners.delete(eventType);},observeTargets:function(targetObserver,capabilitiesMask)
{if(this._observerCapabiliesMaskSymbol in targetObserver)
throw new Error("Observer can only be registered once");targetObserver[this._observerCapabiliesMaskSymbol]=capabilitiesMask||0;this.targets(capabilitiesMask).forEach(targetObserver.targetAdded.bind(targetObserver));this._observers.push(targetObserver);},unobserveTargets:function(targetObserver)
{delete targetObserver[this._observerCapabiliesMaskSymbol];this._observers.remove(targetObserver);},createTarget:function(name,capabilitiesMask,connection,parentTarget)
{var target=new WebInspector.Target(this,name,capabilitiesMask,connection,parentTarget);var logAgent=target.hasLogCapability()?target.logAgent():null;target.consoleModel=new WebInspector.ConsoleModel(target,logAgent);target.runtimeModel=new WebInspector.RuntimeModel(target);var networkManager=null;var resourceTreeModel=null;if(target.hasNetworkCapability())
networkManager=new WebInspector.NetworkManager(target);if(networkManager&&target.hasDOMCapability()){resourceTreeModel=new WebInspector.ResourceTreeModel(target,networkManager,WebInspector.SecurityOriginManager.fromTarget(target));new WebInspector.NetworkLog(target,resourceTreeModel,networkManager);}
if(target.hasJSCapability())
new WebInspector.DebuggerModel(target);if(resourceTreeModel){var domModel=new WebInspector.DOMModel(target);new WebInspector.CSSModel(target,domModel);}
target.workerManager=target.hasWorkerCapability()?new WebInspector.WorkerManager(target):null;target.cpuProfilerModel=new WebInspector.CPUProfilerModel(target);target.heapProfilerModel=new WebInspector.HeapProfilerModel(target);target.tracingManager=new WebInspector.TracingManager(target);if(target.hasBrowserCapability()){target.subTargetsManager=new WebInspector.SubTargetsManager(target);target.serviceWorkerManager=new WebInspector.ServiceWorkerManager(target,target.subTargetsManager);}
this.addTarget(target);return target;},_observersForTarget:function(target)
{return this._observers.filter(observer=>target.hasAllCapabilities(observer[this._observerCapabiliesMaskSymbol]||0));},addTarget:function(target)
{this._targets.push(target);var resourceTreeModel=WebInspector.ResourceTreeModel.fromTarget(target);if(this._targets.length===1&&resourceTreeModel){resourceTreeModel[WebInspector.TargetManager._listenersSymbol]=[setupRedispatch.call(this,WebInspector.ResourceTreeModel.Events.MainFrameNavigated,WebInspector.TargetManager.Events.MainFrameNavigated),setupRedispatch.call(this,WebInspector.ResourceTreeModel.Events.Load,WebInspector.TargetManager.Events.Load),setupRedispatch.call(this,WebInspector.ResourceTreeModel.Events.PageReloadRequested,WebInspector.TargetManager.Events.PageReloadRequested),setupRedispatch.call(this,WebInspector.ResourceTreeModel.Events.WillReloadPage,WebInspector.TargetManager.Events.WillReloadPage)];}
var copy=this._observersForTarget(target);for(var i=0;i<copy.length;++i)
copy[i].targetAdded(target);for(var pair of this._modelListeners){var listeners=pair[1];for(var i=0;i<listeners.length;++i){var model=target.model(listeners[i].modelClass);if(model)
model.addEventListener(pair[0],listeners[i].listener,listeners[i].thisObject);}}
function setupRedispatch(sourceEvent,targetEvent)
{return resourceTreeModel.addEventListener(sourceEvent,this._redispatchEvent.bind(this,targetEvent));}},removeTarget:function(target)
{this._targets.remove(target);var resourceTreeModel=WebInspector.ResourceTreeModel.fromTarget(target);var treeModelListeners=resourceTreeModel&&resourceTreeModel[WebInspector.TargetManager._listenersSymbol];if(treeModelListeners)
WebInspector.EventTarget.removeEventListeners(treeModelListeners);var copy=this._observersForTarget(target);for(var i=0;i<copy.length;++i)
copy[i].targetRemoved(target);for(var pair of this._modelListeners){var listeners=pair[1];for(var i=0;i<listeners.length;++i){var model=target.model(listeners[i].modelClass);if(model)
model.removeEventListener(pair[0],listeners[i].listener,listeners[i].thisObject);}}},targets:function(capabilitiesMask)
{if(!capabilitiesMask)
return this._targets.slice();else
return this._targets.filter(target=>target.hasAllCapabilities(capabilitiesMask||0));},targetById:function(id)
{for(var i=0;i<this._targets.length;++i){if(this._targets[i].id()===id)
return this._targets[i];}
return null;},mainTarget:function()
{return this._targets[0]||null;},suspendReload:function(target)
{var resourceTreeModel=WebInspector.ResourceTreeModel.fromTarget(target);if(resourceTreeModel)
resourceTreeModel.suspendReload();},resumeReload:function(target)
{var resourceTreeModel=WebInspector.ResourceTreeModel.fromTarget(target);if(resourceTreeModel)
setImmediate(resourceTreeModel.resumeReload.bind(resourceTreeModel));},__proto__:WebInspector.Object.prototype};WebInspector.TargetManager.Observer=function()
{};WebInspector.TargetManager.Observer.prototype={targetAdded:function(target){},targetRemoved:function(target){}};WebInspector.targetManager=new WebInspector.TargetManager();},{}],122:[function(require,module,exports){WebInspector.TracingModel=function(backingStorage)
{this._backingStorage=backingStorage;this._firstWritePending=true;this.reset();};WebInspector.TracingModel.Phase={Begin:"B",End:"E",Complete:"X",Instant:"I",AsyncBegin:"S",AsyncStepInto:"T",AsyncStepPast:"p",AsyncEnd:"F",NestableAsyncBegin:"b",NestableAsyncEnd:"e",NestableAsyncInstant:"n",FlowBegin:"s",FlowStep:"t",FlowEnd:"f",Metadata:"M",Counter:"C",Sample:"P",CreateObject:"N",SnapshotObject:"O",DeleteObject:"D"};WebInspector.TracingModel.MetadataEvent={ProcessSortIndex:"process_sort_index",ProcessName:"process_name",ThreadSortIndex:"thread_sort_index",ThreadName:"thread_name"};WebInspector.TracingModel.TopLevelEventCategory="toplevel";WebInspector.TracingModel.DevToolsMetadataEventCategory="disabled-by-default-devtools.timeline";WebInspector.TracingModel.DevToolsTimelineEventCategory="disabled-by-default-devtools.timeline";WebInspector.TracingModel.FrameLifecycleEventCategory="cc,devtools";WebInspector.TracingModel.isNestableAsyncPhase=function(phase)
{return phase==="b"||phase==="e"||phase==="n";};WebInspector.TracingModel.isAsyncBeginPhase=function(phase)
{return phase==="S"||phase==="b";};WebInspector.TracingModel.isAsyncPhase=function(phase)
{return WebInspector.TracingModel.isNestableAsyncPhase(phase)||phase==="S"||phase==="T"||phase==="F"||phase==="p";};WebInspector.TracingModel.isFlowPhase=function(phase)
{return phase==="s"||phase==="t"||phase==="f";};WebInspector.TracingModel.isTopLevelEvent=function(event)
{return event.hasCategory(WebInspector.TracingModel.TopLevelEventCategory)||event.hasCategory(WebInspector.TracingModel.DevToolsMetadataEventCategory)&&event.name==="Program";};WebInspector.TracingModel._extractId=function(payload)
{var scope=payload.scope||"";if(typeof payload.id2==="undefined")
return scope&&payload.id?`${scope}@${payload.id}`:payload.id;var id2=payload.id2;if(typeof id2==="object"&&"global"in id2!=="local"in id2)
return typeof id2["global"]!=="undefined"?`:${scope}:${id2["global"]}`:`:${scope}:${payload.pid}:${id2["local"]}`;console.error(`Unexpected id2 field at ${payload.ts/1000}, one and only one of 'local' and 'global' should be present.`);};WebInspector.TracingModel.browserMainThread=function(tracingModel)
{var processes=tracingModel.sortedProcesses();var browserProcesses=[];var crRendererMainThreads=[];for(var process of processes){if(process.name().toLowerCase().endsWith("browser"))
browserProcesses.push(process);crRendererMainThreads.push(...process.sortedThreads().filter(t=>t.name()==="CrBrowserMain"));}
if(crRendererMainThreads.length===1)
return crRendererMainThreads[0];if(browserProcesses.length===1)
return browserProcesses[0].threadByName("CrBrowserMain");var tracingStartedInBrowser=tracingModel.devToolsMetadataEvents().filter(e=>e.name==="TracingStartedInBrowser");if(tracingStartedInBrowser.length===1)
return tracingStartedInBrowser[0].thread;WebInspector.console.error("Failed to find browser main thread in trace, some timeline features may be unavailable");return null;};WebInspector.BackingStorage=function()
{};WebInspector.BackingStorage.prototype={appendString:function(string){},appendAccessibleString:function(string){},finishWriting:function(){},reset:function(){}};WebInspector.TracingModel.prototype={devToolsMetadataEvents:function()
{return this._devToolsMetadataEvents;},setEventsForTest:function(events)
{this.reset();this.addEvents(events);this.tracingComplete();},addEvents:function(events)
{for(var i=0;i<events.length;++i)
this._addEvent(events[i]);},tracingComplete:function()
{this._processPendingAsyncEvents();this._backingStorage.appendString(this._firstWritePending?"[]":"]");this._backingStorage.finishWriting();this._firstWritePending=false;for(var process of this._processById.values()){for(var thread of process._threads.values())
thread.tracingComplete();}},reset:function()
{this._processById=new Map();this._processByName=new Map();this._minimumRecordTime=0;this._maximumRecordTime=0;this._devToolsMetadataEvents=[];if(!this._firstWritePending)
this._backingStorage.reset();this._firstWritePending=true;this._asyncEvents=[];this._openAsyncEvents=new Map();this._openNestableAsyncEvents=new Map();this._parsedCategories=new Map();},_addEvent:function(payload)
{var process=this._processById.get(payload.pid);if(!process){process=new WebInspector.TracingModel.Process(this,payload.pid);this._processById.set(payload.pid,process);}
var eventsDelimiter=",\n";this._backingStorage.appendString(this._firstWritePending?"[":eventsDelimiter);this._firstWritePending=false;var stringPayload=JSON.stringify(payload);var isAccessible=payload.ph===WebInspector.TracingModel.Phase.SnapshotObject;var backingStorage=null;var keepStringsLessThan=10000;if(isAccessible&&stringPayload.length>keepStringsLessThan)
backingStorage=this._backingStorage.appendAccessibleString(stringPayload);else
this._backingStorage.appendString(stringPayload);var timestamp=payload.ts/1000;if(timestamp&&(!this._minimumRecordTime||timestamp<this._minimumRecordTime))
this._minimumRecordTime=timestamp;var endTimeStamp=(payload.ts+(payload.dur||0))/1000;this._maximumRecordTime=Math.max(this._maximumRecordTime,endTimeStamp);var event=process._addEvent(payload);if(!event)
return;if(WebInspector.TracingModel.isAsyncPhase(payload.ph))
this._asyncEvents.push(event);event._setBackingStorage(backingStorage);if(event.hasCategory(WebInspector.TracingModel.DevToolsMetadataEventCategory))
this._devToolsMetadataEvents.push(event);if(payload.ph!==WebInspector.TracingModel.Phase.Metadata)
return;switch(payload.name){case WebInspector.TracingModel.MetadataEvent.ProcessSortIndex:process._setSortIndex(payload.args["sort_index"]);break;case WebInspector.TracingModel.MetadataEvent.ProcessName:var processName=payload.args["name"];process._setName(processName);this._processByName.set(processName,process);break;case WebInspector.TracingModel.MetadataEvent.ThreadSortIndex:process.threadById(payload.tid)._setSortIndex(payload.args["sort_index"]);break;case WebInspector.TracingModel.MetadataEvent.ThreadName:process.threadById(payload.tid)._setName(payload.args["name"]);break;}},minimumRecordTime:function()
{return this._minimumRecordTime;},maximumRecordTime:function()
{return this._maximumRecordTime;},sortedProcesses:function()
{return WebInspector.TracingModel.NamedObject._sort(this._processById.valuesArray());},processByName:function(name)
{return this._processByName.get(name);},threadByName:function(processName,threadName)
{var process=this.processByName(processName);return process&&process.threadByName(threadName);},_processPendingAsyncEvents:function()
{this._asyncEvents.stableSort(WebInspector.TracingModel.Event.compareStartTime);for(var i=0;i<this._asyncEvents.length;++i){var event=this._asyncEvents[i];if(WebInspector.TracingModel.isNestableAsyncPhase(event.phase))
this._addNestableAsyncEvent(event);else
this._addAsyncEvent(event);}
this._asyncEvents=[];this._closeOpenAsyncEvents();},_closeOpenAsyncEvents:function()
{for(var event of this._openAsyncEvents.values()){event.setEndTime(this._maximumRecordTime);event.steps[0].setEndTime(this._maximumRecordTime);}
this._openAsyncEvents.clear();for(var eventStack of this._openNestableAsyncEvents.values()){while(eventStack.length)
eventStack.pop().setEndTime(this._maximumRecordTime);}
this._openNestableAsyncEvents.clear();},_addNestableAsyncEvent:function(event)
{var phase=WebInspector.TracingModel.Phase;var key=event.categoriesString+"."+event.id;var openEventsStack=this._openNestableAsyncEvents.get(key);switch(event.phase){case phase.NestableAsyncBegin:if(!openEventsStack){openEventsStack=[];this._openNestableAsyncEvents.set(key,openEventsStack);}
var asyncEvent=new WebInspector.TracingModel.AsyncEvent(event);openEventsStack.push(asyncEvent);event.thread._addAsyncEvent(asyncEvent);break;case phase.NestableAsyncInstant:if(openEventsStack&&openEventsStack.length)
openEventsStack.peekLast()._addStep(event);break;case phase.NestableAsyncEnd:if(!openEventsStack||!openEventsStack.length)
break;var top=openEventsStack.pop();if(top.name!==event.name){console.error(`Begin/end event mismatch for nestable async event, ${top.name} vs. ${event.name}, key: ${key}`);break;}
top._addStep(event);}},_addAsyncEvent:function(event)
{var phase=WebInspector.TracingModel.Phase;var key=event.categoriesString+"."+event.name+"."+event.id;var asyncEvent=this._openAsyncEvents.get(key);if(event.phase===phase.AsyncBegin){if(asyncEvent){console.error(`Event ${event.name} has already been started`);return;}
asyncEvent=new WebInspector.TracingModel.AsyncEvent(event);this._openAsyncEvents.set(key,asyncEvent);event.thread._addAsyncEvent(asyncEvent);return;}
if(!asyncEvent){return;}
if(event.phase===phase.AsyncEnd){asyncEvent._addStep(event);this._openAsyncEvents.delete(key);return;}
if(event.phase===phase.AsyncStepInto||event.phase===phase.AsyncStepPast){var lastStep=asyncEvent.steps.peekLast();if(lastStep.phase!==phase.AsyncBegin&&lastStep.phase!==event.phase){console.assert(false,"Async event step phase mismatch: "+lastStep.phase+" at "+lastStep.startTime+" vs. "+event.phase+" at "+event.startTime);return;}
asyncEvent._addStep(event);return;}
console.assert(false,"Invalid async event phase");},_parsedCategoriesForString:function(str)
{var parsedCategories=this._parsedCategories.get(str);if(!parsedCategories){parsedCategories=new Set(str.split(","));this._parsedCategories.set(str,parsedCategories);}
return parsedCategories;}};WebInspector.TracingModel.Event=function(categories,name,phase,startTime,thread)
{this.categoriesString=categories;this._parsedCategories=thread._model._parsedCategoriesForString(categories);this.name=name;this.phase=phase;this.startTime=startTime;this.thread=thread;this.args={};this.warning=null;this.initiator=null;this.stackTrace=null;this.previewElement=null;this.url=null;this.backendNodeId=0;this.selfTime=0;};WebInspector.TracingModel.Event.fromPayload=function(payload,thread)
{var event=new WebInspector.TracingModel.Event(payload.cat,payload.name,payload.ph,payload.ts/1000,thread);if(payload.args)
event.addArgs(payload.args);else
console.error("Missing mandatory event argument 'args' at "+payload.ts/1000);if(typeof payload.dur==="number")
event.setEndTime((payload.ts+payload.dur)/1000);var id=WebInspector.TracingModel._extractId(payload);if(typeof id!=="undefined")
event.id=id;if(payload.bind_id)
event.bind_id=payload.bind_id;return event;};WebInspector.TracingModel.Event.prototype={hasCategory:function(categoryName)
{return this._parsedCategories.has(categoryName);},setEndTime:function(endTime)
{if(endTime<this.startTime){console.assert(false,"Event out of order: "+this.name);return;}
this.endTime=endTime;this.duration=endTime-this.startTime;},addArgs:function(args)
{for(var name in args){if(name in this.args)
console.error("Same argument name ("+name+") is used for begin and end phases of "+this.name);this.args[name]=args[name];}},_complete:function(endEvent)
{if(endEvent.args)
this.addArgs(endEvent.args);else
console.error("Missing mandatory event argument 'args' at "+endEvent.startTime);this.setEndTime(endEvent.startTime);},_setBackingStorage:function(backingStorage)
{}};WebInspector.TracingModel.Event.compareStartTime=function(a,b)
{return a.startTime-b.startTime;};WebInspector.TracingModel.Event.compareStartAndEndTime=function(a,b)
{return a.startTime-b.startTime||b.endTime!==undefined&&a.endTime!==undefined&&b.endTime-a.endTime||0;};WebInspector.TracingModel.Event.orderedCompareStartTime=function(a,b)
{return a.startTime-b.startTime||a.ordinal-b.ordinal||-1;};WebInspector.TracingModel.ObjectSnapshot=function(category,name,startTime,thread)
{WebInspector.TracingModel.Event.call(this,category,name,WebInspector.TracingModel.Phase.SnapshotObject,startTime,thread);};WebInspector.TracingModel.ObjectSnapshot.fromPayload=function(payload,thread)
{var snapshot=new WebInspector.TracingModel.ObjectSnapshot(payload.cat,payload.name,payload.ts/1000,thread);var id=WebInspector.TracingModel._extractId(payload);if(typeof id!=="undefined")
snapshot.id=id;if(!payload.args||!payload.args["snapshot"]){console.error("Missing mandatory 'snapshot' argument at "+payload.ts/1000);return snapshot;}
if(payload.args)
snapshot.addArgs(payload.args);return snapshot;};WebInspector.TracingModel.ObjectSnapshot.prototype={requestObject:function(callback)
{var snapshot=this.args["snapshot"];if(snapshot){callback(snapshot);return;}
this._backingStorage().then(onRead,callback.bind(null,null));function onRead(result)
{if(!result){callback(null);return;}
try{var payload=JSON.parse(result);callback(payload["args"]["snapshot"]);}catch(e){WebInspector.console.error("Malformed event data in backing storage");callback(null);}}},objectPromise:function()
{if(!this._objectPromise)
this._objectPromise=new Promise(this.requestObject.bind(this));return this._objectPromise;},_setBackingStorage:function(backingStorage)
{if(!backingStorage)
return;this._backingStorage=backingStorage;this.args={};},__proto__:WebInspector.TracingModel.Event.prototype};WebInspector.TracingModel.AsyncEvent=function(startEvent)
{WebInspector.TracingModel.Event.call(this,startEvent.categoriesString,startEvent.name,startEvent.phase,startEvent.startTime,startEvent.thread);this.addArgs(startEvent.args);this.steps=[startEvent];};WebInspector.TracingModel.AsyncEvent.prototype={_addStep:function(event)
{this.steps.push(event);if(event.phase===WebInspector.TracingModel.Phase.AsyncEnd||event.phase===WebInspector.TracingModel.Phase.NestableAsyncEnd){this.setEndTime(event.startTime);this.steps[0].setEndTime(event.startTime);}},__proto__:WebInspector.TracingModel.Event.prototype};WebInspector.TracingModel.NamedObject=function()
{};WebInspector.TracingModel.NamedObject.prototype={_setName:function(name)
{this._name=name;},name:function()
{return this._name;},_setSortIndex:function(sortIndex)
{this._sortIndex=sortIndex;}};WebInspector.TracingModel.NamedObject._sort=function(array)
{function comparator(a,b)
{return a._sortIndex!==b._sortIndex?a._sortIndex-b._sortIndex:a.name().localeCompare(b.name());}
return array.sort(comparator);};WebInspector.TracingModel.Process=function(model,id)
{WebInspector.TracingModel.NamedObject.call(this);this._setName("Process "+id);this._id=id;this._threads=new Map();this._threadByName=new Map();this._model=model;};WebInspector.TracingModel.Process.prototype={id:function()
{return this._id;},threadById:function(id)
{var thread=this._threads.get(id);if(!thread){thread=new WebInspector.TracingModel.Thread(this,id);this._threads.set(id,thread);}
return thread;},threadByName:function(name)
{return this._threadByName.get(name)||null;},_setThreadByName:function(name,thread)
{this._threadByName.set(name,thread);},_addEvent:function(payload)
{return this.threadById(payload.tid)._addEvent(payload);},sortedThreads:function()
{return WebInspector.TracingModel.NamedObject._sort(this._threads.valuesArray());},__proto__:WebInspector.TracingModel.NamedObject.prototype};WebInspector.TracingModel.Thread=function(process,id)
{WebInspector.TracingModel.NamedObject.call(this);this._process=process;this._setName("Thread "+id);this._events=[];this._asyncEvents=[];this._id=id;this._model=process._model;};WebInspector.TracingModel.Thread.prototype={tracingComplete:function()
{this._asyncEvents.stableSort(WebInspector.TracingModel.Event.compareStartAndEndTime);this._events.stableSort(WebInspector.TracingModel.Event.compareStartTime);var phases=WebInspector.TracingModel.Phase;var stack=[];for(var i=0;i<this._events.length;++i){var e=this._events[i];e.ordinal=i;switch(e.phase){case phases.End:this._events[i]=null;if(!stack.length)
continue;var top=stack.pop();if(top.name!==e.name||top.categoriesString!==e.categoriesString)
console.error("B/E events mismatch at "+top.startTime+" ("+top.name+") vs. "+e.startTime+" ("+e.name+")");else
top._complete(e);break;case phases.Begin:stack.push(e);break;}}
while(stack.length)
stack.pop().setEndTime(this._model.maximumRecordTime());this._events.remove(null,false);},_addEvent:function(payload)
{var event=payload.ph===WebInspector.TracingModel.Phase.SnapshotObject?WebInspector.TracingModel.ObjectSnapshot.fromPayload(payload,this):WebInspector.TracingModel.Event.fromPayload(payload,this);if(WebInspector.TracingModel.isTopLevelEvent(event)){if(this._lastTopLevelEvent&&this._lastTopLevelEvent.endTime>event.startTime)
return null;this._lastTopLevelEvent=event;}
this._events.push(event);return event;},_addAsyncEvent:function(asyncEvent)
{this._asyncEvents.push(asyncEvent);},_setName:function(name)
{WebInspector.TracingModel.NamedObject.prototype._setName.call(this,name);this._process._setThreadByName(name,this);},id:function()
{return this._id;},process:function()
{return this._process;},events:function()
{return this._events;},asyncEvents:function()
{return this._asyncEvents;},__proto__:WebInspector.TracingModel.NamedObject.prototype};},{}],123:[function(require,module,exports){WebInspector.TimelineLoader=function(model,delegate)
{this._model=model;this._delegate=delegate;this._canceledCallback=null;this._state=WebInspector.TimelineLoader.State.Initial;this._buffer="";this._firstChunk=true;this._loadedBytes=0;this._totalSize;this._jsonTokenizer=new WebInspector.TextUtils.BalancedJSONTokenizer(this._writeBalancedJSON.bind(this),true);};WebInspector.TimelineLoader.loadFromFile=function(model,file,delegate)
{var loader=new WebInspector.TimelineLoader(model,delegate);var fileReader=WebInspector.TimelineLoader._createFileReader(file,loader);loader._canceledCallback=fileReader.cancel.bind(fileReader);loader._totalSize=file.size;fileReader.start(loader);return loader;};WebInspector.TimelineLoader.loadFromURL=function(model,url,delegate)
{var stream=new WebInspector.TimelineLoader(model,delegate);WebInspector.ResourceLoader.loadAsStream(url,null,stream);return stream;};WebInspector.TimelineLoader.TransferChunkLengthBytes=5000000;WebInspector.TimelineLoader._createFileReader=function(file,delegate)
{return new WebInspector.ChunkedFileReader(file,WebInspector.TimelineLoader.TransferChunkLengthBytes,delegate);};WebInspector.TimelineLoader.State={Initial:Symbol("Initial"),LookingForEvents:Symbol("LookingForEvents"),ReadingEvents:Symbol("ReadingEvents"),SkippingTail:Symbol("SkippingTail")};WebInspector.TimelineLoader.prototype={cancel:function()
{this._model.reset();this._delegate.loadingComplete(false);this._delegate=null;if(this._canceledCallback)
this._canceledCallback();},write:function(chunk)
{if(!this._delegate)
return;this._loadedBytes+=chunk.length;if(!this._firstChunk)
this._delegate.loadingProgress(this._totalSize?this._loadedBytes/this._totalSize:undefined);if(this._state===WebInspector.TimelineLoader.State.Initial){if(chunk[0]==="{")
this._state=WebInspector.TimelineLoader.State.LookingForEvents;else
if(chunk[0]==="[")
this._state=WebInspector.TimelineLoader.State.ReadingEvents;else
{this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed timeline data: Unknown JSON format"));return;}}
if(this._state===WebInspector.TimelineLoader.State.LookingForEvents){var objectName="\"traceEvents\":";var startPos=this._buffer.length-objectName.length;this._buffer+=chunk;var pos=this._buffer.indexOf(objectName,startPos);if(pos===-1)
return;chunk=this._buffer.slice(pos+objectName.length);this._state=WebInspector.TimelineLoader.State.ReadingEvents;}
if(this._state!==WebInspector.TimelineLoader.State.ReadingEvents)
return;if(this._jsonTokenizer.write(chunk))
return;this._state=WebInspector.TimelineLoader.State.SkippingTail;if(this._firstChunk){this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed timeline input, wrong JSON brackets balance"));return;}},_writeBalancedJSON:function(data)
{var json=data+"]";if(this._firstChunk){this._delegate.loadingStarted();}else{var commaIndex=json.indexOf(",");if(commaIndex!==-1)
json=json.slice(commaIndex+1);json="["+json;}
var items;try{items=JSON.parse(json);}catch(e){this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed timeline data: %s",e.toString()));return;}
if(this._firstChunk){this._firstChunk=false;this._model.reset();if(this._looksLikeAppVersion(items[0])){this._reportErrorAndCancelLoading(WebInspector.UIString("Legacy Timeline format is not supported."));return;}}
try{this._model.addEvents(items);}catch(e){this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed timeline data: %s",e.toString()));return;}},_reportErrorAndCancelLoading:function(message)
{if(message)
WebInspector.console.error(message);this.cancel();},_looksLikeAppVersion:function(item)
{return typeof item==="string"&&item.indexOf("Chrome")!==-1;},close:function()
{this._model.tracingComplete();if(this._delegate)
this._delegate.loadingComplete(true);},onTransferStarted:function(){},onChunkTransferred:function(reader){},onTransferFinished:function(){},onError:function(reader,event)
{switch(event.target.error.name){case"NotFoundError":this._reportErrorAndCancelLoading(WebInspector.UIString("File \"%s\" not found.",reader.fileName()));break;case"NotReadableError":this._reportErrorAndCancelLoading(WebInspector.UIString("File \"%s\" is not readable",reader.fileName()));break;case"AbortError":break;default:this._reportErrorAndCancelLoading(WebInspector.UIString("An error occurred while reading the file \"%s\"",reader.fileName()));}}};WebInspector.TracingTimelineSaver=function()
{};WebInspector.TracingTimelineSaver.prototype={onTransferStarted:function(){},onTransferFinished:function(){},onChunkTransferred:function(reader){},onError:function(reader,event)
{var error=event.target.error;WebInspector.console.error(WebInspector.UIString("Failed to save timeline: %s (%s, %s)",error.message,error.name,error.code));}};},{}],124:[function(require,module,exports){WebInspector.TimelineTreeView=function(model,filters)
{WebInspector.VBox.call(this);this.element.classList.add("timeline-tree-view");this._model=model;this._linkifier=new WebInspector.Linkifier();this._filters=filters.slice();var columns=[];this._populateColumns(columns);var mainView=new WebInspector.VBox();this._populateToolbar(mainView.element);this._dataGrid=new WebInspector.SortableDataGrid(columns);this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged,this._sortingChanged,this);this._dataGrid.element.addEventListener("mousemove",this._onMouseMove.bind(this),true);this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);this._dataGrid.asWidget().show(mainView.element);this._splitWidget=new WebInspector.SplitWidget(true,true,"timelineTreeViewDetailsSplitWidget");this._splitWidget.show(this.element);this._splitWidget.setMainWidget(mainView);this._detailsView=new WebInspector.VBox();this._detailsView.element.classList.add("timeline-details-view","timeline-details-view-body");this._splitWidget.setSidebarWidget(this._detailsView);this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode,this._updateDetailsForSelection,this);this._lastSelectedNode;};WebInspector.TimelineTreeView.prototype={updateContents:function(selection)
{this.setRange(selection.startTime(),selection.endTime());},setRange:function(startTime,endTime)
{this._startTime=startTime;this._endTime=endTime;this._refreshTree();},_exposePercentages:function()
{return false;},_populateToolbar:function(parent){},_onHover:function(node){},_linkifyLocation:function(event)
{var target=this._model.targetByEvent(event);if(!target)
return null;var frame=WebInspector.TimelineProfileTree.eventStackFrame(event);if(!frame)
return null;return this._linkifier.maybeLinkifyConsoleCallFrame(target,frame);},selectProfileNode:function(treeNode,suppressSelectedEvent)
{var pathToRoot=[];for(var node=treeNode;node;node=node.parent)
pathToRoot.push(node);for(var i=pathToRoot.length-1;i>0;--i){var gridNode=this._dataGridNodeForTreeNode(pathToRoot[i]);if(gridNode&&gridNode.dataGrid)
gridNode.expand();}
var gridNode=this._dataGridNodeForTreeNode(treeNode);if(gridNode.dataGrid){gridNode.reveal();gridNode.select(suppressSelectedEvent);}},_refreshTree:function()
{this._linkifier.reset();this._dataGrid.rootNode().removeChildren();var tree=this._buildTree();if(!tree.children)
return;var maxSelfTime=0;var maxTotalTime=0;for(var child of tree.children.values()){maxSelfTime=Math.max(maxSelfTime,child.selfTime);maxTotalTime=Math.max(maxTotalTime,child.totalTime);}
for(var child of tree.children.values()){var gridNode=new WebInspector.TimelineTreeView.TreeGridNode(child,tree.totalTime,maxSelfTime,maxTotalTime,this);this._dataGrid.insertChild(gridNode);}
this._sortingChanged();this._updateDetailsForSelection();},_buildTree:function()
{throw new Error("Not Implemented");},_buildTopDownTree:function(eventIdCallback)
{return WebInspector.TimelineProfileTree.buildTopDown(this._model.mainThreadEvents(),this._filters,this._startTime,this._endTime,eventIdCallback);},_populateColumns:function(columns)
{columns.push({id:"self",title:WebInspector.UIString("Self Time"),width:"110px",fixedWidth:true,sortable:true});columns.push({id:"total",title:WebInspector.UIString("Total Time"),width:"110px",fixedWidth:true,sortable:true});columns.push({id:"activity",title:WebInspector.UIString("Activity"),disclosure:true,sortable:true});},_sortingChanged:function()
{var columnIdentifier=this._dataGrid.sortColumnIdentifier();if(!columnIdentifier)
return;var sortFunction;switch(columnIdentifier){case"startTime":sortFunction=compareStartTime;break;case"self":sortFunction=compareNumericField.bind(null,"selfTime");break;case"total":sortFunction=compareNumericField.bind(null,"totalTime");break;case"activity":sortFunction=compareName;break;default:console.assert(false,"Unknown sort field: "+columnIdentifier);return;}
this._dataGrid.sortNodes(sortFunction,!this._dataGrid.isSortOrderAscending());function compareNumericField(field,a,b)
{var nodeA=a;var nodeB=b;return nodeA._profileNode[field]-nodeB._profileNode[field];}
function compareStartTime(a,b)
{var nodeA=a;var nodeB=b;return nodeA._profileNode.event.startTime-nodeB._profileNode.event.startTime;}
function compareName(a,b)
{var nodeA=a;var nodeB=b;var nameA=WebInspector.TimelineTreeView.eventNameForSorting(nodeA._profileNode.event);var nameB=WebInspector.TimelineTreeView.eventNameForSorting(nodeB._profileNode.event);return nameA.localeCompare(nameB);}},_updateDetailsForSelection:function()
{var selectedNode=this._dataGrid.selectedNode?this._dataGrid.selectedNode._profileNode:null;if(selectedNode===this._lastSelectedNode)
return;this._lastSelectedNode=selectedNode;this._detailsView.detachChildWidgets();this._detailsView.element.removeChildren();if(!selectedNode||!this._showDetailsForNode(selectedNode)){var banner=this._detailsView.element.createChild("div","full-widget-dimmed-banner");banner.createTextChild(WebInspector.UIString("Select item for details."));}},_showDetailsForNode:function(node)
{return false;},_onMouseMove:function(event)
{var gridNode=event.target&&event.target instanceof Node?this._dataGrid.dataGridNodeFromNode(event.target):null;var profileNode=gridNode&&gridNode._profileNode;if(profileNode===this._lastHoveredProfileNode)
return;this._lastHoveredProfileNode=profileNode;this._onHover(profileNode);},_dataGridNodeForTreeNode:function(treeNode)
{return treeNode[WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol]||null;},__proto__:WebInspector.VBox.prototype};WebInspector.TimelineTreeView.eventNameForSorting=function(event)
{if(event.name===WebInspector.TimelineModel.RecordType.JSFrame){var data=event.args["data"];return data["functionName"]+"@"+(data["scriptId"]||data["url"]||"");}
return event.name+":@"+WebInspector.TimelineProfileTree.eventURL(event);};WebInspector.TimelineTreeView.GridNode=function(profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView)
{this._populated=false;this._profileNode=profileNode;this._treeView=treeView;this._grandTotalTime=grandTotalTime;this._maxSelfTime=maxSelfTime;this._maxTotalTime=maxTotalTime;WebInspector.SortableDataGridNode.call(this,null,false);};WebInspector.TimelineTreeView.GridNode.prototype={createCell:function(columnIdentifier)
{if(columnIdentifier==="activity")
return this._createNameCell(columnIdentifier);return this._createValueCell(columnIdentifier)||WebInspector.DataGridNode.prototype.createCell.call(this,columnIdentifier);},_createNameCell:function(columnIdentifier)
{var cell=this.createTD(columnIdentifier);var container=cell.createChild("div","name-container");var icon=container.createChild("div","activity-icon");var name=container.createChild("div","activity-name");var event=this._profileNode.event;if(this._profileNode.isGroupNode()){var treeView=this._treeView;var info=treeView._displayInfoForGroupNode(this._profileNode);name.textContent=info.name;icon.style.backgroundColor=info.color;}else if(event){var data=event.args["data"];var deoptReason=data&&data["deoptReason"];if(deoptReason)
container.createChild("div","activity-warning").title=WebInspector.UIString("Not optimized: %s",deoptReason);name.textContent=event.name===WebInspector.TimelineModel.RecordType.JSFrame?WebInspector.beautifyFunctionName(event.args["data"]["functionName"]):WebInspector.TimelineUIUtils.eventTitle(event);var link=this._treeView._linkifyLocation(event);if(link)
container.createChild("div","activity-link").appendChild(link);icon.style.backgroundColor=WebInspector.TimelineUIUtils.eventColor(event);}
return cell;},_createValueCell:function(columnIdentifier)
{if(columnIdentifier!=="self"&&columnIdentifier!=="total"&&columnIdentifier!=="startTime")
return null;var showPercents=false;var value;var maxTime;switch(columnIdentifier){case"startTime":value=this._profileNode.event.startTime-this._treeView._model.minimumRecordTime();break;case"self":value=this._profileNode.selfTime;maxTime=this._maxSelfTime;showPercents=true;break;case"total":value=this._profileNode.totalTime;maxTime=this._maxTotalTime;showPercents=true;break;default:return null;}
var cell=this.createTD(columnIdentifier);cell.className="numeric-column";var textDiv=cell.createChild("div");textDiv.createChild("span").textContent=WebInspector.UIString("%.1f\u2009ms",value);if(showPercents&&this._treeView._exposePercentages())
textDiv.createChild("span","percent-column").textContent=WebInspector.UIString("%.1f\u2009%%",value/this._grandTotalTime*100);if(maxTime){textDiv.classList.add("background-percent-bar");cell.createChild("div","background-bar-container").createChild("div","background-bar").style.width=(value*100/maxTime).toFixed(1)+"%";}
return cell;},__proto__:WebInspector.SortableDataGridNode.prototype};WebInspector.TimelineTreeView.TreeGridNode=function(profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView)
{WebInspector.TimelineTreeView.GridNode.call(this,profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView);this.hasChildren=this._profileNode.children?this._profileNode.children.size>0:false;profileNode[WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol]=this;};WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol=Symbol("treeGridNode");WebInspector.TimelineTreeView.TreeGridNode.prototype={populate:function()
{if(this._populated)
return;this._populated=true;if(!this._profileNode.children)
return;for(var node of this._profileNode.children.values()){var gridNode=new WebInspector.TimelineTreeView.TreeGridNode(node,this._grandTotalTime,this._maxSelfTime,this._maxTotalTime,this._treeView);this.insertChildOrdered(gridNode);}},__proto__:WebInspector.TimelineTreeView.GridNode.prototype};WebInspector.AggregatedTimelineTreeView=function(model,filters)
{this._groupBySetting=WebInspector.settings.createSetting("timelineTreeGroupBy",WebInspector.TimelineAggregator.GroupBy.Category);WebInspector.TimelineTreeView.call(this,model,filters);var nonessentialEvents=[WebInspector.TimelineModel.RecordType.EventDispatch,WebInspector.TimelineModel.RecordType.FunctionCall,WebInspector.TimelineModel.RecordType.TimerFire];this._filters.push(new WebInspector.ExclusiveNameFilter(nonessentialEvents));this._stackView=new WebInspector.TimelineStackView(this);this._stackView.addEventListener(WebInspector.TimelineStackView.Events.SelectionChanged,this._onStackViewSelectionChanged,this);};WebInspector.AggregatedTimelineTreeView.prototype={updateContents:function(selection)
{this._updateExtensionResolver();WebInspector.TimelineTreeView.prototype.updateContents.call(this,selection);var rootNode=this._dataGrid.rootNode();if(rootNode.children.length)
rootNode.children[0].revealAndSelect();},_updateExtensionResolver:function()
{this._executionContextNamesByOrigin=new Map();for(var target of WebInspector.targetManager.targets()){for(var context of target.runtimeModel.executionContexts())
this._executionContextNamesByOrigin.set(context.origin,context.name);}},_displayInfoForGroupNode:function(node)
{var categories=WebInspector.TimelineUIUtils.categories();var color=node.id?WebInspector.TimelineUIUtils.eventColor(node.event):categories["other"].color;switch(this._groupBySetting.get()){case WebInspector.TimelineAggregator.GroupBy.Category:var category=categories[node.id]||categories["other"];return{name:category.title,color:category.color};case WebInspector.TimelineAggregator.GroupBy.Domain:case WebInspector.TimelineAggregator.GroupBy.Subdomain:var name=node.id;if(WebInspector.TimelineAggregator.isExtensionInternalURL(name))
name=WebInspector.UIString("[Chrome extensions overhead]");else
if(name.startsWith("chrome-extension"))
name=this._executionContextNamesByOrigin.get(name)||name;return{name:name||WebInspector.UIString("unattributed"),color:color};case WebInspector.TimelineAggregator.GroupBy.EventName:var name=node.event.name===WebInspector.TimelineModel.RecordType.JSFrame?WebInspector.UIString("JavaScript"):WebInspector.TimelineUIUtils.eventTitle(node.event);return{name:name,color:node.event.name===WebInspector.TimelineModel.RecordType.JSFrame?WebInspector.TimelineUIUtils.eventStyle(node.event).category.color:color};case WebInspector.TimelineAggregator.GroupBy.URL:break;default:console.assert(false,"Unexpected aggregation type");}
return{name:node.id||WebInspector.UIString("unattributed"),color:color};},_populateToolbar:function(parent)
{var panelToolbar=new WebInspector.Toolbar("",parent);this._groupByCombobox=new WebInspector.ToolbarComboBox(this._onGroupByChanged.bind(this));function addGroupingOption(name,id)
{var option=this._groupByCombobox.createOption(name,"",id);this._groupByCombobox.addOption(option);if(id===this._groupBySetting.get())
this._groupByCombobox.select(option);}
addGroupingOption.call(this,WebInspector.UIString("No Grouping"),WebInspector.TimelineAggregator.GroupBy.None);addGroupingOption.call(this,WebInspector.UIString("Group by Activity"),WebInspector.TimelineAggregator.GroupBy.EventName);addGroupingOption.call(this,WebInspector.UIString("Group by Category"),WebInspector.TimelineAggregator.GroupBy.Category);addGroupingOption.call(this,WebInspector.UIString("Group by Domain"),WebInspector.TimelineAggregator.GroupBy.Domain);addGroupingOption.call(this,WebInspector.UIString("Group by Subdomain"),WebInspector.TimelineAggregator.GroupBy.Subdomain);addGroupingOption.call(this,WebInspector.UIString("Group by URL"),WebInspector.TimelineAggregator.GroupBy.URL);panelToolbar.appendToolbarItem(this._groupByCombobox);},_buildHeaviestStack:function(treeNode)
{console.assert(!!treeNode.parent,"Attempt to build stack for tree root");var result=[];for(var node=treeNode;node&&node.parent;node=node.parent)
result.push(node);result=result.reverse();for(node=treeNode;node&&node.children&&node.children.size;){var children=Array.from(node.children.values());node=children.reduce((a,b)=>a.totalTime>b.totalTime?a:b);result.push(node);}
return result;},_exposePercentages:function()
{return true;},_onGroupByChanged:function()
{this._groupBySetting.set(this._groupByCombobox.selectedOption().value);this._refreshTree();},_onStackViewSelectionChanged:function()
{var treeNode=this._stackView.selectedTreeNode();if(treeNode)
this.selectProfileNode(treeNode,true);},_showDetailsForNode:function(node)
{var stack=this._buildHeaviestStack(node);this._stackView.setStack(stack,node);this._stackView.show(this._detailsView.element);return true;},_createAggregator:function()
{return new WebInspector.TimelineAggregator(event=>WebInspector.TimelineUIUtils.eventStyle(event).title,event=>WebInspector.TimelineUIUtils.eventStyle(event).category.name);},__proto__:WebInspector.TimelineTreeView.prototype};WebInspector.CallTreeTimelineTreeView=function(model,filters)
{WebInspector.AggregatedTimelineTreeView.call(this,model,filters);this._dataGrid.markColumnAsSortedBy("total",WebInspector.DataGrid.Order.Descending);};WebInspector.CallTreeTimelineTreeView.prototype={_buildTree:function()
{var topDown=this._buildTopDownTree(WebInspector.TimelineAggregator.eventId);return this._createAggregator().performGrouping(topDown,this._groupBySetting.get());},__proto__:WebInspector.AggregatedTimelineTreeView.prototype};WebInspector.BottomUpTimelineTreeView=function(model,filters)
{WebInspector.AggregatedTimelineTreeView.call(this,model,filters);this._dataGrid.markColumnAsSortedBy("self",WebInspector.DataGrid.Order.Descending);};WebInspector.BottomUpTimelineTreeView.prototype={_buildTree:function()
{var topDown=this._buildTopDownTree(WebInspector.TimelineAggregator.eventId);return WebInspector.TimelineProfileTree.buildBottomUp(topDown,this._createAggregator().groupFunction(this._groupBySetting.get()));},__proto__:WebInspector.AggregatedTimelineTreeView.prototype};WebInspector.EventsTimelineTreeView=function(model,filters,delegate)
{this._filtersControl=new WebInspector.TimelineFilters();this._filtersControl.addEventListener(WebInspector.TimelineFilters.Events.FilterChanged,this._onFilterChanged,this);WebInspector.TimelineTreeView.call(this,model,filters);this._delegate=delegate;this._filters.push.apply(this._filters,this._filtersControl.filters());this._dataGrid.markColumnAsSortedBy("startTime",WebInspector.DataGrid.Order.Ascending);};WebInspector.EventsTimelineTreeView.prototype={updateContents:function(selection)
{WebInspector.TimelineTreeView.prototype.updateContents.call(this,selection);if(selection.type()===WebInspector.TimelineSelection.Type.TraceEvent){var event=selection.object();this._selectEvent(event,true);}},_buildTree:function()
{this._currentTree=this._buildTopDownTree();return this._currentTree;},_onFilterChanged:function()
{var selectedEvent=this._lastSelectedNode&&this._lastSelectedNode.event;this._refreshTree();if(selectedEvent)
this._selectEvent(selectedEvent,false);},_findNodeWithEvent:function(event)
{var iterators=[this._currentTree.children.values()];while(iterators.length){var iterator=iterators.peekLast().next();if(iterator.done){iterators.pop();continue;}
var child=iterator.value;if(child.event===event)
return child;if(child.children)
iterators.push(child.children.values());}
return null;},_selectEvent:function(event,expand)
{var node=this._findNodeWithEvent(event);if(!node)
return;this.selectProfileNode(node,false);if(expand)
this._dataGridNodeForTreeNode(node).expand();},_populateColumns:function(columns)
{columns.push({id:"startTime",title:WebInspector.UIString("Start Time"),width:"110px",fixedWidth:true,sortable:true});WebInspector.TimelineTreeView.prototype._populateColumns.call(this,columns);},_populateToolbar:function(parent)
{var filtersWidget=this._filtersControl.filtersWidget();filtersWidget.forceShowFilterBar();filtersWidget.show(parent);},_showDetailsForNode:function(node)
{var traceEvent=node.event;if(!traceEvent)
return false;WebInspector.TimelineUIUtils.buildTraceEventDetails(traceEvent,this._model,this._linkifier,false,showDetails.bind(this));return true;function showDetails(fragment)
{this._detailsView.element.appendChild(fragment);}},_onHover:function(node)
{this._delegate.highlightEvent(node&&node.event);},__proto__:WebInspector.TimelineTreeView.prototype};WebInspector.TimelineStackView=function(treeView)
{WebInspector.VBox.call(this);var header=this.element.createChild("div","timeline-stack-view-header");header.textContent=WebInspector.UIString("Heaviest stack");this._treeView=treeView;var columns=[{id:"total",title:WebInspector.UIString("Total Time"),fixedWidth:true,width:"110px"},{id:"activity",title:WebInspector.UIString("Activity")}];this._dataGrid=new WebInspector.ViewportDataGrid(columns);this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last);this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode,this._onSelectionChanged,this);this._dataGrid.asWidget().show(this.element);};WebInspector.TimelineStackView.Events={SelectionChanged:Symbol("SelectionChanged")};WebInspector.TimelineStackView.prototype={setStack:function(stack,selectedNode)
{var rootNode=this._dataGrid.rootNode();rootNode.removeChildren();var nodeToReveal=null;var totalTime=Math.max.apply(Math,stack.map(node=>node.totalTime));for(var node of stack){var gridNode=new WebInspector.TimelineTreeView.GridNode(node,totalTime,totalTime,totalTime,this._treeView);rootNode.appendChild(gridNode);if(node===selectedNode)
nodeToReveal=gridNode;}
nodeToReveal.revealAndSelect();},selectedTreeNode:function()
{var selectedNode=this._dataGrid.selectedNode;return selectedNode&&selectedNode._profileNode;},_onSelectionChanged:function()
{this.dispatchEventToListeners(WebInspector.TimelineStackView.Events.SelectionChanged);},__proto__:WebInspector.VBox.prototype};},{}],125:[function(require,module,exports){WebInspector.TimelineUIUtils=function(){};WebInspector.TimelineRecordStyle=function(title,category,hidden)
{this.title=title;this.category=category;this.hidden=!!hidden;};WebInspector.TimelineUIUtils._initEventStyles=function()
{if(WebInspector.TimelineUIUtils._eventStylesMap)
return WebInspector.TimelineUIUtils._eventStylesMap;var recordTypes=WebInspector.TimelineModel.RecordType;var categories=WebInspector.TimelineUIUtils.categories();var eventStyles={};eventStyles[recordTypes.Task]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Task"),categories["other"]);eventStyles[recordTypes.Program]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Other"),categories["other"]);eventStyles[recordTypes.Animation]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Animation"),categories["rendering"]);eventStyles[recordTypes.EventDispatch]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Event"),categories["scripting"]);eventStyles[recordTypes.RequestMainThreadFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Request Main Thread Frame"),categories["rendering"],true);eventStyles[recordTypes.BeginFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Frame Start"),categories["rendering"],true);eventStyles[recordTypes.BeginMainThreadFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Frame Start (main thread)"),categories["rendering"],true);eventStyles[recordTypes.DrawFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Draw Frame"),categories["rendering"],true);eventStyles[recordTypes.HitTest]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Hit Test"),categories["rendering"]);eventStyles[recordTypes.ScheduleStyleRecalculation]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Schedule Style Recalculation"),categories["rendering"],true);eventStyles[recordTypes.RecalculateStyles]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Recalculate Style"),categories["rendering"]);eventStyles[recordTypes.UpdateLayoutTree]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Recalculate Style"),categories["rendering"]);eventStyles[recordTypes.InvalidateLayout]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Invalidate Layout"),categories["rendering"],true);eventStyles[recordTypes.Layout]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Layout"),categories["rendering"]);eventStyles[recordTypes.PaintSetup]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint Setup"),categories["painting"]);eventStyles[recordTypes.PaintImage]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint Image"),categories["painting"],true);eventStyles[recordTypes.UpdateLayer]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Update Layer"),categories["painting"],true);eventStyles[recordTypes.UpdateLayerTree]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Update Layer Tree"),categories["rendering"]);eventStyles[recordTypes.Paint]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Paint"),categories["painting"]);eventStyles[recordTypes.RasterTask]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Rasterize Paint"),categories["painting"]);eventStyles[recordTypes.ScrollLayer]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Scroll"),categories["rendering"]);eventStyles[recordTypes.CompositeLayers]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Composite Layers"),categories["painting"]);eventStyles[recordTypes.ParseHTML]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Parse HTML"),categories["loading"]);eventStyles[recordTypes.ParseAuthorStyleSheet]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Parse Stylesheet"),categories["loading"]);eventStyles[recordTypes.TimerInstall]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Install Timer"),categories["scripting"]);eventStyles[recordTypes.TimerRemove]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Remove Timer"),categories["scripting"]);eventStyles[recordTypes.TimerFire]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Timer Fired"),categories["scripting"]);eventStyles[recordTypes.XHRReadyStateChange]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("XHR Ready State Change"),categories["scripting"]);eventStyles[recordTypes.XHRLoad]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("XHR Load"),categories["scripting"]);eventStyles[recordTypes.CompileScript]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Compile Script"),categories["scripting"]);eventStyles[recordTypes.EvaluateScript]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Evaluate Script"),categories["scripting"]);eventStyles[recordTypes.ParseScriptOnBackground]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Parse Script"),categories["scripting"]);eventStyles[recordTypes.MarkLoad]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Load event"),categories["scripting"],true);eventStyles[recordTypes.MarkDOMContent]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("DOMContentLoaded event"),categories["scripting"],true);eventStyles[recordTypes.MarkFirstPaint]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("First paint"),categories["painting"],true);eventStyles[recordTypes.TimeStamp]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Timestamp"),categories["scripting"]);eventStyles[recordTypes.ConsoleTime]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Console Time"),categories["scripting"]);eventStyles[recordTypes.UserTiming]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("User Timing"),categories["scripting"]);eventStyles[recordTypes.ResourceSendRequest]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Send Request"),categories["loading"]);eventStyles[recordTypes.ResourceReceiveResponse]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive Response"),categories["loading"]);eventStyles[recordTypes.ResourceFinish]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Finish Loading"),categories["loading"]);eventStyles[recordTypes.ResourceReceivedData]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive Data"),categories["loading"]);eventStyles[recordTypes.RunMicrotasks]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Run Microtasks"),categories["scripting"]);eventStyles[recordTypes.FunctionCall]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Function Call"),categories["scripting"]);eventStyles[recordTypes.GCEvent]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("GC Event"),categories["scripting"]);eventStyles[recordTypes.MajorGC]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Major GC"),categories["scripting"]);eventStyles[recordTypes.MinorGC]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Minor GC"),categories["scripting"]);eventStyles[recordTypes.JSFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("JS Frame"),categories["scripting"]);eventStyles[recordTypes.RequestAnimationFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Request Animation Frame"),categories["scripting"]);eventStyles[recordTypes.CancelAnimationFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Cancel Animation Frame"),categories["scripting"]);eventStyles[recordTypes.FireAnimationFrame]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Animation Frame Fired"),categories["scripting"]);eventStyles[recordTypes.RequestIdleCallback]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Request Idle Callback"),categories["scripting"]);eventStyles[recordTypes.CancelIdleCallback]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Cancel Idle Callback"),categories["scripting"]);eventStyles[recordTypes.FireIdleCallback]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Fire Idle Callback"),categories["scripting"]);eventStyles[recordTypes.WebSocketCreate]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Create WebSocket"),categories["scripting"]);eventStyles[recordTypes.WebSocketSendHandshakeRequest]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Send WebSocket Handshake"),categories["scripting"]);eventStyles[recordTypes.WebSocketReceiveHandshakeResponse]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Receive WebSocket Handshake"),categories["scripting"]);eventStyles[recordTypes.WebSocketDestroy]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Destroy WebSocket"),categories["scripting"]);eventStyles[recordTypes.EmbedderCallback]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Embedder Callback"),categories["scripting"]);eventStyles[recordTypes.DecodeImage]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Image Decode"),categories["painting"]);eventStyles[recordTypes.ResizeImage]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Image Resize"),categories["painting"]);eventStyles[recordTypes.GPUTask]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("GPU"),categories["gpu"]);eventStyles[recordTypes.LatencyInfo]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("Input Latency"),categories["scripting"]);eventStyles[recordTypes.GCIdleLazySweep]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("DOM GC"),categories["scripting"]);eventStyles[recordTypes.GCCompleteSweep]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("DOM GC"),categories["scripting"]);eventStyles[recordTypes.GCCollectGarbage]=new WebInspector.TimelineRecordStyle(WebInspector.UIString("DOM GC"),categories["scripting"]);WebInspector.TimelineUIUtils._eventStylesMap=eventStyles;return eventStyles;};WebInspector.TimelineUIUtils.inputEventDisplayName=function(inputEventType)
{if(!WebInspector.TimelineUIUtils._inputEventToDisplayName){var inputEvent=WebInspector.TimelineIRModel.InputEvents;WebInspector.TimelineUIUtils._inputEventToDisplayName=new Map([[inputEvent.Char,WebInspector.UIString("Key Character")],[inputEvent.KeyDown,WebInspector.UIString("Key Down")],[inputEvent.KeyDownRaw,WebInspector.UIString("Key Down")],[inputEvent.KeyUp,WebInspector.UIString("Key Up")],[inputEvent.Click,WebInspector.UIString("Click")],[inputEvent.ContextMenu,WebInspector.UIString("Context Menu")],[inputEvent.MouseDown,WebInspector.UIString("Mouse Down")],[inputEvent.MouseMove,WebInspector.UIString("Mouse Move")],[inputEvent.MouseUp,WebInspector.UIString("Mouse Up")],[inputEvent.MouseWheel,WebInspector.UIString("Mouse Wheel")],[inputEvent.ScrollBegin,WebInspector.UIString("Scroll Begin")],[inputEvent.ScrollEnd,WebInspector.UIString("Scroll End")],[inputEvent.ScrollUpdate,WebInspector.UIString("Scroll Update")],[inputEvent.FlingStart,WebInspector.UIString("Fling Start")],[inputEvent.FlingCancel,WebInspector.UIString("Fling Halt")],[inputEvent.Tap,WebInspector.UIString("Tap")],[inputEvent.TapCancel,WebInspector.UIString("Tap Halt")],[inputEvent.ShowPress,WebInspector.UIString("Tap Begin")],[inputEvent.TapDown,WebInspector.UIString("Tap Down")],[inputEvent.TouchCancel,WebInspector.UIString("Touch Cancel")],[inputEvent.TouchEnd,WebInspector.UIString("Touch End")],[inputEvent.TouchMove,WebInspector.UIString("Touch Move")],[inputEvent.TouchStart,WebInspector.UIString("Touch Start")],[inputEvent.PinchBegin,WebInspector.UIString("Pinch Begin")],[inputEvent.PinchEnd,WebInspector.UIString("Pinch End")],[inputEvent.PinchUpdate,WebInspector.UIString("Pinch Update")]]);}
return WebInspector.TimelineUIUtils._inputEventToDisplayName.get(inputEventType)||null;};WebInspector.TimelineUIUtils.testContentMatching=function(traceEvent,regExp)
{var title=WebInspector.TimelineUIUtils.eventStyle(traceEvent).title;var tokens=[title];if(traceEvent.url)
tokens.push(traceEvent.url);for(var argName in traceEvent.args){var argValue=traceEvent.args[argName];for(var key in argValue)
tokens.push(argValue[key]);}
return regExp.test(tokens.join("|"));};WebInspector.TimelineUIUtils.categoryForRecord=function(record)
{return WebInspector.TimelineUIUtils.eventStyle(record.traceEvent()).category;};WebInspector.TimelineUIUtils.eventStyle=function(event)
{var eventStyles=WebInspector.TimelineUIUtils._initEventStyles();if(event.hasCategory(WebInspector.TimelineModel.Category.Console)||event.hasCategory(WebInspector.TimelineModel.Category.UserTiming))
return{title:event.name,category:WebInspector.TimelineUIUtils.categories()["scripting"]};if(event.hasCategory(WebInspector.TimelineModel.Category.LatencyInfo)){var prefix="InputLatency::";var inputEventType=event.name.startsWith(prefix)?event.name.substr(prefix.length):event.name;var displayName=WebInspector.TimelineUIUtils.inputEventDisplayName(inputEventType);return{title:displayName||inputEventType,category:WebInspector.TimelineUIUtils.categories()["scripting"]};}
var result=eventStyles[event.name];if(!result){result=new WebInspector.TimelineRecordStyle(event.name,WebInspector.TimelineUIUtils.categories()["other"],true);eventStyles[event.name]=result;}
return result;};WebInspector.TimelineUIUtils.eventColor=function(event)
{if(event.name===WebInspector.TimelineModel.RecordType.JSFrame){var frame=event.args["data"];if(WebInspector.TimelineUIUtils.isUserFrame(frame))
return WebInspector.TimelineUIUtils.colorForURL(frame.url);}
return WebInspector.TimelineUIUtils.eventStyle(event).category.color;};WebInspector.TimelineUIUtils.eventTitle=function(event)
{var title=WebInspector.TimelineUIUtils.eventStyle(event).title;if(event.hasCategory(WebInspector.TimelineModel.Category.Console))
return title;if(event.name===WebInspector.TimelineModel.RecordType.TimeStamp)
return WebInspector.UIString("%s: %s",title,event.args["data"]["message"]);if(event.name===WebInspector.TimelineModel.RecordType.Animation&&event.args["data"]&&event.args["data"]["name"])
return WebInspector.UIString("%s: %s",title,event.args["data"]["name"]);return title;};WebInspector.TimelineUIUtils.eventURL=function(event)
{if(event.url)
return event.url;var data=event.args["data"]||event.args["beginData"];return data&&data.url||null;};WebInspector.TimelineUIUtils._interactionPhaseStyles=function()
{var map=WebInspector.TimelineUIUtils._interactionPhaseStylesMap;if(!map){map=new Map([[WebInspector.TimelineIRModel.Phases.Idle,{color:"white",label:"Idle"}],[WebInspector.TimelineIRModel.Phases.Response,{color:"hsl(43, 83%, 64%)",label:WebInspector.UIString("Response")}],[WebInspector.TimelineIRModel.Phases.Scroll,{color:"hsl(256, 67%, 70%)",label:WebInspector.UIString("Scroll")}],[WebInspector.TimelineIRModel.Phases.Fling,{color:"hsl(256, 67%, 70%)",label:WebInspector.UIString("Fling")}],[WebInspector.TimelineIRModel.Phases.Drag,{color:"hsl(256, 67%, 70%)",label:WebInspector.UIString("Drag")}],[WebInspector.TimelineIRModel.Phases.Animation,{color:"hsl(256, 67%, 70%)",label:WebInspector.UIString("Animation")}],[WebInspector.TimelineIRModel.Phases.Uncategorized,{color:"hsl(0, 0%, 87%)",label:WebInspector.UIString("Uncategorized")}]]);WebInspector.TimelineUIUtils._interactionPhaseStylesMap=map;}
return map;};WebInspector.TimelineUIUtils.interactionPhaseColor=function(phase)
{return WebInspector.TimelineUIUtils._interactionPhaseStyles().get(phase).color;};WebInspector.TimelineUIUtils.interactionPhaseLabel=function(phase)
{return WebInspector.TimelineUIUtils._interactionPhaseStyles().get(phase).label;};WebInspector.TimelineUIUtils.isUserFrame=function(frame)
{return frame.scriptId!=="0"&&!(frame.url&&frame.url.startsWith("native "));};WebInspector.TimelineUIUtils.topStackFrame=function(event)
{var stackTrace=event.stackTrace||event.initiator&&event.initiator.stackTrace;return stackTrace&&stackTrace.length?stackTrace[0]:null;};WebInspector.TimelineUIUtils.NetworkCategory={HTML:Symbol("HTML"),Script:Symbol("Script"),Style:Symbol("Style"),Media:Symbol("Media"),Other:Symbol("Other")};WebInspector.TimelineUIUtils.networkRequestCategory=function(request)
{var categories=WebInspector.TimelineUIUtils.NetworkCategory;switch(request.mimeType){case"text/html":return categories.HTML;case"application/javascript":case"application/x-javascript":case"text/javascript":return categories.Script;case"text/css":return categories.Style;case"audio/ogg":case"image/gif":case"image/jpeg":case"image/png":case"image/svg+xml":case"image/webp":case"image/x-icon":case"font/opentype":case"font/woff2":case"application/font-woff":return categories.Media;default:return categories.Other;}};WebInspector.TimelineUIUtils.networkCategoryColor=function(category)
{var categories=WebInspector.TimelineUIUtils.NetworkCategory;switch(category){case categories.HTML:return"hsl(214, 67%, 66%)";case categories.Script:return"hsl(43, 83%, 64%)";case categories.Style:return"hsl(256, 67%, 70%)";case categories.Media:return"hsl(109, 33%, 55%)";default:return"hsl(0, 0%, 70%)";}};WebInspector.TimelineUIUtils.buildDetailsTextForTraceEvent=function(event,target)
{var recordType=WebInspector.TimelineModel.RecordType;var detailsText;var eventData=event.args["data"];switch(event.name){case recordType.GCEvent:case recordType.MajorGC:case recordType.MinorGC:var delta=event.args["usedHeapSizeBefore"]-event.args["usedHeapSizeAfter"];detailsText=WebInspector.UIString("%s collected",Number.bytesToString(delta));break;case recordType.FunctionCall:if(eventData)
detailsText=linkifyLocationAsText(eventData["scriptId"],eventData["lineNumber"],0);break;case recordType.JSFrame:detailsText=WebInspector.beautifyFunctionName(eventData["functionName"]);break;case recordType.EventDispatch:detailsText=eventData?eventData["type"]:null;break;case recordType.Paint:var width=WebInspector.TimelineUIUtils.quadWidth(eventData.clip);var height=WebInspector.TimelineUIUtils.quadHeight(eventData.clip);if(width&&height)
detailsText=WebInspector.UIString("%d\u2009\u00d7\u2009%d",width,height);break;case recordType.ParseHTML:var endLine=event.args["endData"]&&event.args["endData"]["endLine"];var url=WebInspector.displayNameForURL(event.args["beginData"]["url"]);detailsText=WebInspector.UIString("%s [%s\u2026%s]",url,event.args["beginData"]["startLine"]+1,endLine>=0?endLine+1:"");break;case recordType.CompileScript:case recordType.EvaluateScript:var url=eventData["url"];if(url)
detailsText=WebInspector.displayNameForURL(url)+":"+(eventData["lineNumber"]+1);break;case recordType.ParseScriptOnBackground:case recordType.XHRReadyStateChange:case recordType.XHRLoad:var url=eventData["url"];if(url)
detailsText=WebInspector.displayNameForURL(url);break;case recordType.TimeStamp:detailsText=eventData["message"];break;case recordType.WebSocketCreate:case recordType.WebSocketSendHandshakeRequest:case recordType.WebSocketReceiveHandshakeResponse:case recordType.WebSocketDestroy:case recordType.ResourceSendRequest:case recordType.ResourceReceivedData:case recordType.ResourceReceiveResponse:case recordType.ResourceFinish:case recordType.PaintImage:case recordType.DecodeImage:case recordType.ResizeImage:case recordType.DecodeLazyPixelRef:if(event.url)
detailsText=WebInspector.displayNameForURL(event.url);break;case recordType.EmbedderCallback:detailsText=eventData["callbackName"];break;case recordType.Animation:detailsText=eventData&&eventData["name"];break;case recordType.GCIdleLazySweep:detailsText=WebInspector.UIString("idle sweep");break;case recordType.GCCompleteSweep:detailsText=WebInspector.UIString("complete sweep");break;case recordType.GCCollectGarbage:detailsText=WebInspector.UIString("collect");break;default:if(event.hasCategory(WebInspector.TimelineModel.Category.Console))
detailsText=null;else
detailsText=linkifyTopCallFrameAsText();break;}
return detailsText;function linkifyLocationAsText(scriptId,lineNumber,columnNumber)
{var debuggerModel=WebInspector.DebuggerModel.fromTarget(target);if(!target||target.isDetached()||!scriptId||!debuggerModel)
return null;var rawLocation=debuggerModel.createRawLocationByScriptId(scriptId,lineNumber,columnNumber);if(!rawLocation)
return null;var uiLocation=WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(rawLocation);return uiLocation.linkText();}
function linkifyTopCallFrameAsText()
{var frame=WebInspector.TimelineUIUtils.topStackFrame(event);if(!frame)
return null;var text=linkifyLocationAsText(frame.scriptId,frame.lineNumber,frame.columnNumber);if(!text){text=frame.url;if(typeof frame.lineNumber==="number")
text+=":"+(frame.lineNumber+1);}
return text;}};WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent=function(event,target,linkifier)
{var recordType=WebInspector.TimelineModel.RecordType;var details=null;var detailsText;var eventData=event.args["data"];switch(event.name){case recordType.GCEvent:case recordType.MajorGC:case recordType.MinorGC:case recordType.EventDispatch:case recordType.Paint:case recordType.Animation:case recordType.EmbedderCallback:case recordType.ParseHTML:case recordType.WebSocketCreate:case recordType.WebSocketSendHandshakeRequest:case recordType.WebSocketReceiveHandshakeResponse:case recordType.WebSocketDestroy:case recordType.GCIdleLazySweep:case recordType.GCCompleteSweep:case recordType.GCCollectGarbage:detailsText=WebInspector.TimelineUIUtils.buildDetailsTextForTraceEvent(event,target);break;case recordType.PaintImage:case recordType.DecodeImage:case recordType.ResizeImage:case recordType.DecodeLazyPixelRef:case recordType.XHRReadyStateChange:case recordType.XHRLoad:case recordType.ResourceSendRequest:case recordType.ResourceReceivedData:case recordType.ResourceReceiveResponse:case recordType.ResourceFinish:if(event.url)
details=WebInspector.linkifyResourceAsNode(event.url);break;case recordType.FunctionCall:case recordType.JSFrame:details=createElement("span");details.createTextChild(WebInspector.beautifyFunctionName(eventData["functionName"]));var location=linkifyLocation(eventData["scriptId"],eventData["url"],eventData["lineNumber"],eventData["columnNumber"]);if(location){details.createTextChild(" @ ");details.appendChild(location);}
break;case recordType.CompileScript:case recordType.EvaluateScript:var url=eventData["url"];if(url)
details=linkifyLocation("",url,eventData["lineNumber"],0);break;case recordType.ParseScriptOnBackground:var url=eventData["url"];if(url)
details=linkifyLocation("",url,0,0);break;default:if(event.hasCategory(WebInspector.TimelineModel.Category.Console))
detailsText=null;else
details=linkifyTopCallFrame();break;}
if(!details&&detailsText)
details=createTextNode(detailsText);return details;function linkifyLocation(scriptId,url,lineNumber,columnNumber)
{return linkifier.linkifyScriptLocation(target,scriptId,url,lineNumber,columnNumber,"timeline-details");}
function linkifyTopCallFrame()
{var frame=WebInspector.TimelineUIUtils.topStackFrame(event);return frame?linkifier.maybeLinkifyConsoleCallFrame(target,frame,"timeline-details"):null;}};WebInspector.TimelineUIUtils.buildTraceEventDetails=function(event,model,linkifier,detailed,callback)
{var target=model.targetByEvent(event);if(!target){callbackWrapper();return;}
var relatedNodes=null;var barrier=new CallbackBarrier();if(!event.previewElement){if(event.url)
WebInspector.DOMPresentationUtils.buildImagePreviewContents(target,event.url,false,barrier.createCallback(saveImage));else
if(event.picture)
WebInspector.TimelineUIUtils.buildPicturePreviewContent(event,target,barrier.createCallback(saveImage));}
var nodeIdsToResolve=new Set();if(event.backendNodeId)
nodeIdsToResolve.add(event.backendNodeId);if(event.invalidationTrackingEvents)
WebInspector.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve,event.invalidationTrackingEvents);if(nodeIdsToResolve.size){var domModel=WebInspector.DOMModel.fromTarget(target);if(domModel)
domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve,barrier.createCallback(setRelatedNodeMap));}
barrier.callWhenDone(callbackWrapper);function saveImage(element)
{event.previewElement=element||null;}
function setRelatedNodeMap(nodeMap)
{relatedNodes=nodeMap;}
function callbackWrapper()
{callback(WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously(event,model,linkifier,detailed,relatedNodes));}};WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously=function(event,model,linkifier,detailed,relatedNodesMap)
{var stats={};var recordTypes=WebInspector.TimelineModel.RecordType;var relatedNodeLabel;var contentHelper=new WebInspector.TimelineDetailsContentHelper(model.targetByEvent(event),linkifier);contentHelper.addSection(WebInspector.TimelineUIUtils.eventTitle(event),WebInspector.TimelineUIUtils.eventStyle(event).category);var eventData=event.args["data"];var initiator=event.initiator;if(event.warning)
contentHelper.appendWarningRow(event);if(event.name===recordTypes.JSFrame&&eventData["deoptReason"])
contentHelper.appendWarningRow(event,WebInspector.TimelineModel.WarningType.V8Deopt);if(detailed){contentHelper.appendTextRow(WebInspector.UIString("Self Time"),Number.millisToString(event.selfTime,true));contentHelper.appendTextRow(WebInspector.UIString("Total Time"),Number.millisToString(event.duration||0,true));}
switch(event.name){case recordTypes.GCEvent:case recordTypes.MajorGC:case recordTypes.MinorGC:var delta=event.args["usedHeapSizeBefore"]-event.args["usedHeapSizeAfter"];contentHelper.appendTextRow(WebInspector.UIString("Collected"),Number.bytesToString(delta));break;case recordTypes.JSFrame:case recordTypes.FunctionCall:var detailsNode=WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event,model.targetByEvent(event),linkifier);if(detailsNode)
contentHelper.appendElementRow(WebInspector.UIString("Function"),detailsNode);break;case recordTypes.TimerFire:case recordTypes.TimerInstall:case recordTypes.TimerRemove:contentHelper.appendTextRow(WebInspector.UIString("Timer ID"),eventData["timerId"]);if(event.name===recordTypes.TimerInstall){contentHelper.appendTextRow(WebInspector.UIString("Timeout"),Number.millisToString(eventData["timeout"]));contentHelper.appendTextRow(WebInspector.UIString("Repeats"),!eventData["singleShot"]);}
break;case recordTypes.FireAnimationFrame:contentHelper.appendTextRow(WebInspector.UIString("Callback ID"),eventData["id"]);break;case recordTypes.ResourceSendRequest:case recordTypes.ResourceReceiveResponse:case recordTypes.ResourceReceivedData:case recordTypes.ResourceFinish:var url=event.name===recordTypes.ResourceSendRequest?eventData["url"]:initiator&&initiator.args["data"]["url"];if(url)
contentHelper.appendElementRow(WebInspector.UIString("Resource"),WebInspector.linkifyResourceAsNode(url));if(eventData["requestMethod"])
contentHelper.appendTextRow(WebInspector.UIString("Request Method"),eventData["requestMethod"]);if(typeof eventData["statusCode"]==="number")
contentHelper.appendTextRow(WebInspector.UIString("Status Code"),eventData["statusCode"]);if(eventData["mimeType"])
contentHelper.appendTextRow(WebInspector.UIString("MIME Type"),eventData["mimeType"]);if("priority"in eventData){var priority=WebInspector.uiLabelForPriority(eventData["priority"]);contentHelper.appendTextRow(WebInspector.UIString("Priority"),priority);}
if(eventData["encodedDataLength"])
contentHelper.appendTextRow(WebInspector.UIString("Encoded Data Length"),WebInspector.UIString("%d Bytes",eventData["encodedDataLength"]));break;case recordTypes.CompileScript:case recordTypes.EvaluateScript:var url=eventData["url"];if(url)
contentHelper.appendLocationRow(WebInspector.UIString("Script"),url,eventData["lineNumber"],eventData["columnNumber"]);break;case recordTypes.Paint:var clip=eventData["clip"];contentHelper.appendTextRow(WebInspector.UIString("Location"),WebInspector.UIString("(%d, %d)",clip[0],clip[1]));var clipWidth=WebInspector.TimelineUIUtils.quadWidth(clip);var clipHeight=WebInspector.TimelineUIUtils.quadHeight(clip);contentHelper.appendTextRow(WebInspector.UIString("Dimensions"),WebInspector.UIString("%d × %d",clipWidth,clipHeight));case recordTypes.PaintSetup:case recordTypes.Rasterize:case recordTypes.ScrollLayer:relatedNodeLabel=WebInspector.UIString("Layer Root");break;case recordTypes.PaintImage:case recordTypes.DecodeLazyPixelRef:case recordTypes.DecodeImage:case recordTypes.ResizeImage:case recordTypes.DrawLazyPixelRef:relatedNodeLabel=WebInspector.UIString("Owner Element");if(event.url)
contentHelper.appendElementRow(WebInspector.UIString("Image URL"),WebInspector.linkifyResourceAsNode(event.url));break;case recordTypes.ParseAuthorStyleSheet:var url=eventData["styleSheetUrl"];if(url)
contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL"),WebInspector.linkifyResourceAsNode(url));break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"),event.args["elementCount"]);break;case recordTypes.Layout:var beginData=event.args["beginData"];contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layout"),WebInspector.UIString("%s of %s",beginData["dirtyObjects"],beginData["totalObjects"]));relatedNodeLabel=WebInspector.UIString("Layout root");break;case recordTypes.ConsoleTime:contentHelper.appendTextRow(WebInspector.UIString("Message"),event.name);break;case recordTypes.WebSocketCreate:case recordTypes.WebSocketSendHandshakeRequest:case recordTypes.WebSocketReceiveHandshakeResponse:case recordTypes.WebSocketDestroy:var initiatorData=initiator?initiator.args["data"]:eventData;if(typeof initiatorData["webSocketURL"]!=="undefined")
contentHelper.appendTextRow(WebInspector.UIString("URL"),initiatorData["webSocketURL"]);if(typeof initiatorData["webSocketProtocol"]!=="undefined")
contentHelper.appendTextRow(WebInspector.UIString("WebSocket Protocol"),initiatorData["webSocketProtocol"]);if(typeof eventData["message"]!=="undefined")
contentHelper.appendTextRow(WebInspector.UIString("Message"),eventData["message"]);break;case recordTypes.EmbedderCallback:contentHelper.appendTextRow(WebInspector.UIString("Callback Function"),eventData["callbackName"]);break;case recordTypes.Animation:if(event.phase===WebInspector.TracingModel.Phase.NestableAsyncInstant)
contentHelper.appendTextRow(WebInspector.UIString("State"),eventData["state"]);break;case recordTypes.ParseHTML:var beginData=event.args["beginData"];var url=beginData["url"];var startLine=beginData["startLine"]-1;var endLine=event.args["endData"]?event.args["endData"]["endLine"]-1:undefined;if(url)
contentHelper.appendLocationRange(WebInspector.UIString("Range"),url,startLine,endLine);break;case recordTypes.FireIdleCallback:contentHelper.appendTextRow(WebInspector.UIString("Allotted Time"),Number.millisToString(eventData["allottedMilliseconds"]));contentHelper.appendTextRow(WebInspector.UIString("Invoked by Timeout"),eventData["timedOut"]);case recordTypes.RequestIdleCallback:case recordTypes.CancelIdleCallback:contentHelper.appendTextRow(WebInspector.UIString("Callback ID"),eventData["id"]);break;case recordTypes.EventDispatch:contentHelper.appendTextRow(WebInspector.UIString("Type"),eventData["type"]);break;default:var detailsNode=WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event,model.targetByEvent(event),linkifier);if(detailsNode)
contentHelper.appendElementRow(WebInspector.UIString("Details"),detailsNode);break;}
if(event.timeWaitingForMainThread)
contentHelper.appendTextRow(WebInspector.UIString("Time Waiting for Main Thread"),Number.millisToString(event.timeWaitingForMainThread,true));var relatedNode=relatedNodesMap&&relatedNodesMap.get(event.backendNodeId);if(relatedNode)
contentHelper.appendElementRow(relatedNodeLabel||WebInspector.UIString("Related Node"),WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode));if(event.previewElement){contentHelper.addSection(WebInspector.UIString("Preview"));contentHelper.appendElementRow("",event.previewElement);}
if(event.stackTrace||event.initiator&&event.initiator.stackTrace||event.invalidationTrackingEvents)
WebInspector.TimelineUIUtils._generateCauses(event,model.targetByEvent(event),relatedNodesMap,contentHelper);var showPieChart=detailed&&WebInspector.TimelineUIUtils._aggregatedStatsForTraceEvent(stats,model,event);if(showPieChart){contentHelper.addSection(WebInspector.UIString("Aggregated Time"));var pieChart=WebInspector.TimelineUIUtils.generatePieChart(stats,WebInspector.TimelineUIUtils.eventStyle(event).category,event.selfTime);contentHelper.appendElementRow("",pieChart);}
return contentHelper.fragment;};WebInspector.TimelineUIUtils._aggregatedStatsKey=Symbol("aggregatedStats");WebInspector.TimelineUIUtils.buildRangeStats=function(model,startTime,endTime)
{var aggregatedStats={};function compareEndTime(value,task)
{return value<task.endTime()?-1:1;}
var mainThreadTasks=model.mainThreadTasks();var taskIndex=mainThreadTasks.lowerBound(startTime,compareEndTime);for(;taskIndex<mainThreadTasks.length;++taskIndex){var task=mainThreadTasks[taskIndex];if(task.startTime()>endTime)
break;if(task.startTime()>startTime&&task.endTime()<endTime){var taskStats=task[WebInspector.TimelineUIUtils._aggregatedStatsKey];if(!taskStats){taskStats={};WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task,startTime,endTime,taskStats);task[WebInspector.TimelineUIUtils._aggregatedStatsKey]=taskStats;}
for(var key in taskStats)
aggregatedStats[key]=(aggregatedStats[key]||0)+taskStats[key];continue;}
WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task,startTime,endTime,aggregatedStats);}
var aggregatedTotal=0;for(var categoryName in aggregatedStats)
aggregatedTotal+=aggregatedStats[categoryName];aggregatedStats["idle"]=Math.max(0,endTime-startTime-aggregatedTotal);var startOffset=startTime-model.minimumRecordTime();var endOffset=endTime-model.minimumRecordTime();var contentHelper=new WebInspector.TimelineDetailsContentHelper(null,null);contentHelper.addSection(WebInspector.UIString("Range:  %s \u2013 %s",Number.millisToString(startOffset),Number.millisToString(endOffset)));var pieChart=WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats);contentHelper.appendElementRow("",pieChart);return contentHelper.fragment;};WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord=function(record,startTime,endTime,aggregatedStats)
{var records=[];if(!record.endTime()||record.endTime()<startTime||record.startTime()>endTime)
return;var childrenTime=0;var children=record.children()||[];for(var i=0;i<children.length;++i){var child=children[i];if(!child.endTime()||child.endTime()<startTime||child.startTime()>endTime)
continue;childrenTime+=Math.min(endTime,child.endTime())-Math.max(startTime,child.startTime());WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(child,startTime,endTime,aggregatedStats);}
var categoryName=WebInspector.TimelineUIUtils.categoryForRecord(record).name;var ownTime=Math.min(endTime,record.endTime())-Math.max(startTime,record.startTime())-childrenTime;aggregatedStats[categoryName]=(aggregatedStats[categoryName]||0)+ownTime;};WebInspector.TimelineUIUtils.buildNetworkRequestDetails=function(request,model,linkifier)
{var target=model.targetByEvent(request.children[0]);var contentHelper=new WebInspector.TimelineDetailsContentHelper(target,linkifier);var duration=request.endTime-(request.startTime||-Infinity);var items=[];if(request.url)
contentHelper.appendElementRow(WebInspector.UIString("URL"),WebInspector.linkifyURLAsNode(request.url));if(isFinite(duration))
contentHelper.appendTextRow(WebInspector.UIString("Duration"),Number.millisToString(duration,true));if(request.requestMethod)
contentHelper.appendTextRow(WebInspector.UIString("Request Method"),request.requestMethod);if(typeof request.priority==="string"){var priority=WebInspector.uiLabelForPriority(request.priority);contentHelper.appendTextRow(WebInspector.UIString("Priority"),priority);}
if(request.mimeType)
contentHelper.appendTextRow(WebInspector.UIString("Mime Type"),request.mimeType);var title=WebInspector.UIString("Initiator");var sendRequest=request.children[0];var topFrame=WebInspector.TimelineUIUtils.topStackFrame(sendRequest);if(topFrame){var link=linkifier.maybeLinkifyConsoleCallFrame(target,topFrame);if(link)
contentHelper.appendElementRow(title,link);}else if(sendRequest.initiator){var initiatorURL=WebInspector.TimelineUIUtils.eventURL(sendRequest.initiator);if(initiatorURL){var link=linkifier.maybeLinkifyScriptLocation(target,null,initiatorURL,0);if(link)
contentHelper.appendElementRow(title,link);}}
function action(fulfill)
{WebInspector.DOMPresentationUtils.buildImagePreviewContents(target,request.url,false,saveImage);function saveImage(element)
{request.previewElement=element||null;fulfill(request.previewElement);}}
var previewPromise;if(request.previewElement)
previewPromise=Promise.resolve(request.previewElement);else
previewPromise=request.url&&target?new Promise(action):Promise.resolve(null);function appendPreview(element)
{if(element)
contentHelper.appendElementRow(WebInspector.UIString("Preview"),request.previewElement);return contentHelper.fragment;}
return previewPromise.then(appendPreview);};WebInspector.TimelineUIUtils._stackTraceFromCallFrames=function(callFrames)
{return{callFrames:callFrames};};WebInspector.TimelineUIUtils._generateCauses=function(event,target,relatedNodesMap,contentHelper)
{var recordTypes=WebInspector.TimelineModel.RecordType;var callSiteStackLabel;var stackLabel;var initiator=event.initiator;switch(event.name){case recordTypes.TimerFire:callSiteStackLabel=WebInspector.UIString("Timer Installed");break;case recordTypes.FireAnimationFrame:callSiteStackLabel=WebInspector.UIString("Animation Frame Requested");break;case recordTypes.FireIdleCallback:callSiteStackLabel=WebInspector.UIString("Idle Callback Requested");break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:stackLabel=WebInspector.UIString("Recalculation Forced");break;case recordTypes.Layout:callSiteStackLabel=WebInspector.UIString("First Layout Invalidation");stackLabel=WebInspector.UIString("Layout Forced");break;}
if(event.stackTrace&&event.stackTrace.length){contentHelper.addSection(WebInspector.UIString("Call Stacks"));contentHelper.appendStackTrace(stackLabel||WebInspector.UIString("Stack Trace"),WebInspector.TimelineUIUtils._stackTraceFromCallFrames(event.stackTrace));}
if(event.invalidationTrackingEvents&&target){contentHelper.addSection(WebInspector.UIString("Invalidations"));WebInspector.TimelineUIUtils._generateInvalidations(event,target,relatedNodesMap,contentHelper);}else if(initiator&&initiator.stackTrace){contentHelper.appendStackTrace(callSiteStackLabel||WebInspector.UIString("First Invalidated"),WebInspector.TimelineUIUtils._stackTraceFromCallFrames(initiator.stackTrace));}};WebInspector.TimelineUIUtils._generateInvalidations=function(event,target,relatedNodesMap,contentHelper)
{if(!event.invalidationTrackingEvents)
return;var invalidations={};event.invalidationTrackingEvents.forEach(function(invalidation){if(!invalidations[invalidation.type])
invalidations[invalidation.type]=[invalidation];else
invalidations[invalidation.type].push(invalidation);});Object.keys(invalidations).forEach(function(type){WebInspector.TimelineUIUtils._generateInvalidationsForType(type,target,invalidations[type],relatedNodesMap,contentHelper);});};WebInspector.TimelineUIUtils._generateInvalidationsForType=function(type,target,invalidations,relatedNodesMap,contentHelper)
{var title;switch(type){case WebInspector.TimelineModel.RecordType.StyleRecalcInvalidationTracking:title=WebInspector.UIString("Style Invalidations");break;case WebInspector.TimelineModel.RecordType.LayoutInvalidationTracking:title=WebInspector.UIString("Layout Invalidations");break;default:title=WebInspector.UIString("Other Invalidations");break;}
var invalidationsTreeOutline=new TreeOutlineInShadow();invalidationsTreeOutline.registerRequiredCSS("timeline/invalidationsTree.css");invalidationsTreeOutline.element.classList.add("invalidations-tree");var invalidationGroups=groupInvalidationsByCause(invalidations);invalidationGroups.forEach(function(group){var groupElement=new WebInspector.TimelineUIUtils.InvalidationsGroupElement(target,relatedNodesMap,contentHelper,group);invalidationsTreeOutline.appendChild(groupElement);});contentHelper.appendElementRow(title,invalidationsTreeOutline.element,false,true);function groupInvalidationsByCause(invalidations)
{var causeToInvalidationMap=new Map();for(var index=0;index<invalidations.length;index++){var invalidation=invalidations[index];var causeKey="";if(invalidation.cause.reason)
causeKey+=invalidation.cause.reason+".";if(invalidation.cause.stackTrace){invalidation.cause.stackTrace.forEach(function(stackFrame){causeKey+=stackFrame["functionName"]+".";causeKey+=stackFrame["scriptId"]+".";causeKey+=stackFrame["url"]+".";causeKey+=stackFrame["lineNumber"]+".";causeKey+=stackFrame["columnNumber"]+".";});}
if(causeToInvalidationMap.has(causeKey))
causeToInvalidationMap.get(causeKey).push(invalidation);else
causeToInvalidationMap.set(causeKey,[invalidation]);}
return causeToInvalidationMap.valuesArray();}};WebInspector.TimelineUIUtils._collectInvalidationNodeIds=function(nodeIds,invalidations)
{for(var i=0;i<invalidations.length;++i){if(invalidations[i].nodeId)
nodeIds.add(invalidations[i].nodeId);}};WebInspector.TimelineUIUtils.InvalidationsGroupElement=function(target,relatedNodesMap,contentHelper,invalidations)
{TreeElement.call(this,"",true);this.listItemElement.classList.add("header");this.selectable=false;this.toggleOnClick=true;this._relatedNodesMap=relatedNodesMap;this._contentHelper=contentHelper;this._invalidations=invalidations;this.title=this._createTitle(target);};WebInspector.TimelineUIUtils.InvalidationsGroupElement.prototype={_createTitle:function(target)
{var first=this._invalidations[0];var reason=first.cause.reason;var topFrame=first.cause.stackTrace&&first.cause.stackTrace[0];var title=createElement("span");if(reason)
title.createTextChild(WebInspector.UIString("%s for ",reason));else
title.createTextChild(WebInspector.UIString("Unknown cause for "));this._appendTruncatedNodeList(title,this._invalidations);if(topFrame&&this._contentHelper.linkifier()){title.createTextChild(WebInspector.UIString(". "));var stack=title.createChild("span","monospace");stack.createChild("span").textContent=WebInspector.beautifyFunctionName(topFrame.functionName);var link=this._contentHelper.linkifier().maybeLinkifyConsoleCallFrame(target,topFrame);if(link){stack.createChild("span").textContent=" @ ";stack.createChild("span").appendChild(link);}}
return title;},onpopulate:function()
{var content=createElementWithClass("div","content");var first=this._invalidations[0];if(first.cause.stackTrace){var stack=content.createChild("div");stack.createTextChild(WebInspector.UIString("Stack trace:"));this._contentHelper.createChildStackTraceElement(stack,WebInspector.TimelineUIUtils._stackTraceFromCallFrames(first.cause.stackTrace));}
content.createTextChild(this._invalidations.length>1?WebInspector.UIString("Nodes:"):WebInspector.UIString("Node:"));var nodeList=content.createChild("div","node-list");var firstNode=true;for(var i=0;i<this._invalidations.length;i++){var invalidation=this._invalidations[i];var invalidationNode=this._createInvalidationNode(invalidation,true);if(invalidationNode){if(!firstNode)
nodeList.createTextChild(WebInspector.UIString(", "));firstNode=false;nodeList.appendChild(invalidationNode);var extraData=invalidation.extraData?", "+invalidation.extraData:"";if(invalidation.changedId)
nodeList.createTextChild(WebInspector.UIString("(changed id to \"%s\"%s)",invalidation.changedId,extraData));else
if(invalidation.changedClass)
nodeList.createTextChild(WebInspector.UIString("(changed class to \"%s\"%s)",invalidation.changedClass,extraData));else
if(invalidation.changedAttribute)
nodeList.createTextChild(WebInspector.UIString("(changed attribute to \"%s\"%s)",invalidation.changedAttribute,extraData));else
if(invalidation.changedPseudo)
nodeList.createTextChild(WebInspector.UIString("(changed pesudo to \"%s\"%s)",invalidation.changedPseudo,extraData));else
if(invalidation.selectorPart)
nodeList.createTextChild(WebInspector.UIString("(changed \"%s\"%s)",invalidation.selectorPart,extraData));}}
var contentTreeElement=new TreeElement(content,false);contentTreeElement.selectable=false;this.appendChild(contentTreeElement);},_appendTruncatedNodeList:function(parentElement,invalidations)
{var invalidationNodes=[];var invalidationNodeIdMap={};for(var i=0;i<invalidations.length;i++){var invalidation=invalidations[i];var invalidationNode=this._createInvalidationNode(invalidation,false);invalidationNode.addEventListener("click",consumeEvent,false);if(invalidationNode&&!invalidationNodeIdMap[invalidation.nodeId]){invalidationNodes.push(invalidationNode);invalidationNodeIdMap[invalidation.nodeId]=true;}}
if(invalidationNodes.length===1){parentElement.appendChild(invalidationNodes[0]);}else if(invalidationNodes.length===2){parentElement.appendChild(invalidationNodes[0]);parentElement.createTextChild(WebInspector.UIString(" and "));parentElement.appendChild(invalidationNodes[1]);}else if(invalidationNodes.length>=3){parentElement.appendChild(invalidationNodes[0]);parentElement.createTextChild(WebInspector.UIString(", "));parentElement.appendChild(invalidationNodes[1]);parentElement.createTextChild(WebInspector.UIString(", and %s others",invalidationNodes.length-2));}},_createInvalidationNode:function(invalidation,showUnknownNodes)
{var node=invalidation.nodeId&&this._relatedNodesMap?this._relatedNodesMap.get(invalidation.nodeId):null;if(node)
return WebInspector.DOMPresentationUtils.linkifyNodeReference(node);if(invalidation.nodeName){var nodeSpan=createElement("span");nodeSpan.textContent=WebInspector.UIString("[ %s ]",invalidation.nodeName);return nodeSpan;}
if(showUnknownNodes){var nodeSpan=createElement("span");return nodeSpan.createTextChild(WebInspector.UIString("[ unknown node ]"));}},__proto__:TreeElement.prototype};WebInspector.TimelineUIUtils._aggregatedStatsForTraceEvent=function(total,model,event)
{var events=model.inspectedTargetEvents();function eventComparator(startTime,e)
{return startTime-e.startTime;}
var index=events.binaryIndexOf(event.startTime,eventComparator);if(index<0)
return false;var hasChildren=false;var endTime=event.endTime;if(endTime){for(var i=index;i<events.length;i++){var nextEvent=events[i];if(nextEvent.startTime>=endTime)
break;if(!nextEvent.selfTime)
continue;if(nextEvent.thread!==event.thread)
continue;if(i>index)
hasChildren=true;var categoryName=WebInspector.TimelineUIUtils.eventStyle(nextEvent).category.name;total[categoryName]=(total[categoryName]||0)+nextEvent.selfTime;}}
if(WebInspector.TracingModel.isAsyncPhase(event.phase)){if(event.endTime){var aggregatedTotal=0;for(var categoryName in total)
aggregatedTotal+=total[categoryName];total["idle"]=Math.max(0,event.endTime-event.startTime-aggregatedTotal);}
return false;}
return hasChildren;};WebInspector.TimelineUIUtils.buildPicturePreviewContent=function(event,target,callback)
{new WebInspector.LayerPaintEvent(event,target).loadSnapshot(onSnapshotLoaded);function onSnapshotLoaded(rect,snapshot)
{if(!snapshot){callback();return;}
snapshot.requestImage(null,null,1,onGotImage);snapshot.dispose();}
function onGotImage(imageURL)
{if(!imageURL){callback();return;}
var container=createElement("div");container.classList.add("image-preview-container","vbox","link");var img=container.createChild("img");img.src=imageURL;var paintProfilerButton=container.createChild("a");paintProfilerButton.textContent=WebInspector.UIString("Paint Profiler");container.addEventListener("click",showPaintProfiler,false);callback(container);}
function showPaintProfiler()
{WebInspector.TimelinePanel.instance().select(WebInspector.TimelineSelection.fromTraceEvent(event),WebInspector.TimelinePanel.DetailsTab.PaintProfiler);}};WebInspector.TimelineUIUtils.createEventDivider=function(recordType,title,position)
{var eventDivider=createElement("div");eventDivider.className="resources-event-divider";var recordTypes=WebInspector.TimelineModel.RecordType;if(recordType===recordTypes.MarkDOMContent)
eventDivider.className+=" resources-blue-divider";else
if(recordType===recordTypes.MarkLoad)
eventDivider.className+=" resources-red-divider";else
if(recordType===recordTypes.MarkFirstPaint)
eventDivider.className+=" resources-green-divider";else
if(recordType===recordTypes.TimeStamp||recordType===recordTypes.ConsoleTime||recordType===recordTypes.UserTiming)
eventDivider.className+=" resources-orange-divider";else
if(recordType===recordTypes.BeginFrame)
eventDivider.className+=" timeline-frame-divider";if(title)
eventDivider.title=title;eventDivider.style.left=position+"px";return eventDivider;};WebInspector.TimelineUIUtils.createDividerForRecord=function(record,zeroTime,position)
{var startTime=Number.millisToString(record.startTime()-zeroTime);var title=WebInspector.UIString("%s at %s",WebInspector.TimelineUIUtils.eventTitle(record.traceEvent()),startTime);return WebInspector.TimelineUIUtils.createEventDivider(record.type(),title,position);};WebInspector.TimelineUIUtils._visibleTypes=function()
{var eventStyles=WebInspector.TimelineUIUtils._initEventStyles();var result=[];for(var name in eventStyles){if(!eventStyles[name].hidden)
result.push(name);}
return result;};WebInspector.TimelineUIUtils.visibleEventsFilter=function()
{return new WebInspector.TimelineVisibleEventsFilter(WebInspector.TimelineUIUtils._visibleTypes());};WebInspector.TimelineUIUtils.categories=function()
{if(WebInspector.TimelineUIUtils._categories)
return WebInspector.TimelineUIUtils._categories;WebInspector.TimelineUIUtils._categories={loading:new WebInspector.TimelineCategory("loading",WebInspector.UIString("Loading"),true,"hsl(214, 67%, 74%)","hsl(214, 67%, 66%)"),scripting:new WebInspector.TimelineCategory("scripting",WebInspector.UIString("Scripting"),true,"hsl(43, 83%, 72%)","hsl(43, 83%, 64%) "),rendering:new WebInspector.TimelineCategory("rendering",WebInspector.UIString("Rendering"),true,"hsl(256, 67%, 76%)","hsl(256, 67%, 70%)"),painting:new WebInspector.TimelineCategory("painting",WebInspector.UIString("Painting"),true,"hsl(109, 33%, 64%)","hsl(109, 33%, 55%)"),gpu:new WebInspector.TimelineCategory("gpu",WebInspector.UIString("GPU"),false,"hsl(109, 33%, 64%)","hsl(109, 33%, 55%)"),other:new WebInspector.TimelineCategory("other",WebInspector.UIString("Other"),false,"hsl(0, 0%, 87%)","hsl(0, 0%, 79%)"),idle:new WebInspector.TimelineCategory("idle",WebInspector.UIString("Idle"),false,"hsl(0, 100%, 100%)","hsl(0, 100%, 100%)")};return WebInspector.TimelineUIUtils._categories;};WebInspector.TimelineUIUtils.titleForAsyncEventGroup=function(group)
{if(!WebInspector.TimelineUIUtils._titleForAsyncEventGroupMap){var groups=WebInspector.TimelineModel.AsyncEventGroup;WebInspector.TimelineUIUtils._titleForAsyncEventGroupMap=new Map([[groups.animation,WebInspector.UIString("Animation")],[groups.console,WebInspector.UIString("Console")],[groups.userTiming,WebInspector.UIString("User Timing")],[groups.input,WebInspector.UIString("Input")]]);}
return WebInspector.TimelineUIUtils._titleForAsyncEventGroupMap.get(group)||"";};WebInspector.TimelineUIUtils.generatePieChart=function(aggregatedStats,selfCategory,selfTime)
{var total=0;for(var categoryName in aggregatedStats)
total+=aggregatedStats[categoryName];var element=createElementWithClass("div","timeline-details-view-pie-chart-wrapper hbox");var pieChart=new WebInspector.PieChart(100);pieChart.element.classList.add("timeline-details-view-pie-chart");pieChart.setTotal(total);var pieChartContainer=element.createChild("div","vbox");pieChartContainer.appendChild(pieChart.element);pieChartContainer.createChild("div","timeline-details-view-pie-chart-total").textContent=WebInspector.UIString("Total: %s",Number.millisToString(total,true));var footerElement=element.createChild("div","timeline-aggregated-info-legend");function appendLegendRow(name,title,value,color)
{if(!value)
return;pieChart.addSlice(value,color);var rowElement=footerElement.createChild("div");rowElement.createChild("span","timeline-aggregated-legend-value").textContent=Number.preciseMillisToString(value,1);rowElement.createChild("span","timeline-aggregated-legend-swatch").style.backgroundColor=color;rowElement.createChild("span","timeline-aggregated-legend-title").textContent=title;}
if(selfCategory){if(selfTime)
appendLegendRow(selfCategory.name,WebInspector.UIString("%s (self)",selfCategory.title),selfTime,selfCategory.color);var categoryTime=aggregatedStats[selfCategory.name];var value=categoryTime-selfTime;if(value>0)
appendLegendRow(selfCategory.name,WebInspector.UIString("%s (children)",selfCategory.title),value,selfCategory.childColor);}
for(var categoryName in WebInspector.TimelineUIUtils.categories()){var category=WebInspector.TimelineUIUtils.categories()[categoryName];if(category===selfCategory)
continue;appendLegendRow(category.name,category.title,aggregatedStats[category.name],category.childColor);}
return element;};WebInspector.TimelineUIUtils.generateDetailsContentForFrame=function(frameModel,frame,filmStripFrame)
{var pieChart=WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCategory);var contentHelper=new WebInspector.TimelineDetailsContentHelper(null,null);contentHelper.addSection(WebInspector.UIString("Frame"));var duration=WebInspector.TimelineUIUtils.frameDuration(frame);contentHelper.appendElementRow(WebInspector.UIString("Duration"),duration,frame.hasWarnings());if(filmStripFrame){var filmStripPreview=createElementWithClass("img","timeline-filmstrip-preview");filmStripFrame.imageDataPromise().then(onGotImageData.bind(null,filmStripPreview));contentHelper.appendElementRow("",filmStripPreview);filmStripPreview.addEventListener("click",frameClicked.bind(null,filmStripFrame),false);}
var durationInMillis=frame.endTime-frame.startTime;contentHelper.appendTextRow(WebInspector.UIString("FPS"),Math.floor(1000/durationInMillis));contentHelper.appendTextRow(WebInspector.UIString("CPU time"),Number.millisToString(frame.cpuTime,true));if(Runtime.experiments.isEnabled("layersPanel")&&frame.layerTree){contentHelper.appendElementRow(WebInspector.UIString("Layer tree"),WebInspector.Linkifier.linkifyUsingRevealer(frame.layerTree,WebInspector.UIString("show")));}
function onGotImageData(image,data)
{if(data)
image.src="data:image/jpg;base64,"+data;}
function frameClicked(filmStripFrame)
{new WebInspector.FilmStripView.Dialog(filmStripFrame,0);}
return contentHelper.fragment;};WebInspector.TimelineUIUtils.frameDuration=function(frame)
{var durationText=WebInspector.UIString("%s (at %s)",Number.millisToString(frame.endTime-frame.startTime,true),Number.millisToString(frame.startTimeOffset,true));var element=createElement("span");element.createTextChild(durationText);if(!frame.hasWarnings())
return element;element.createTextChild(WebInspector.UIString(". Long frame times are an indication of "));element.appendChild(WebInspector.linkifyURLAsNode("https://developers.google.com/web/fundamentals/performance/rendering/",WebInspector.UIString("jank"),undefined,true));element.createTextChild(".");return element;};WebInspector.TimelineUIUtils.createFillStyle=function(context,width,height,color0,color1,color2)
{var gradient=context.createLinearGradient(0,0,width,height);gradient.addColorStop(0,color0);gradient.addColorStop(0.25,color1);gradient.addColorStop(0.75,color1);gradient.addColorStop(1,color2);return gradient;};WebInspector.TimelineUIUtils.quadWidth=function(quad)
{return Math.round(Math.sqrt(Math.pow(quad[0]-quad[2],2)+Math.pow(quad[1]-quad[3],2)));};WebInspector.TimelineUIUtils.quadHeight=function(quad)
{return Math.round(Math.sqrt(Math.pow(quad[0]-quad[6],2)+Math.pow(quad[1]-quad[7],2)));};WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor=function(priority,color,eventTypes)
{this.priority=priority;this.color=color;this.eventTypes=eventTypes;};WebInspector.TimelineUIUtils.eventDispatchDesciptors=function()
{if(WebInspector.TimelineUIUtils._eventDispatchDesciptors)
return WebInspector.TimelineUIUtils._eventDispatchDesciptors;var lightOrange="hsl(40,100%,80%)";var orange="hsl(40,100%,50%)";var green="hsl(90,100%,40%)";var purple="hsl(256,100%,75%)";WebInspector.TimelineUIUtils._eventDispatchDesciptors=[new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(1,lightOrange,["mousemove","mouseenter","mouseleave","mouseout","mouseover"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(1,lightOrange,["pointerover","pointerout","pointerenter","pointerleave","pointermove"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(2,green,["wheel"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,["click","mousedown","mouseup"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,["touchstart","touchend","touchmove","touchcancel"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,["pointerdown","pointerup","pointercancel","gotpointercapture","lostpointercapture"]),new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3,purple,["keydown","keyup","keypress"])];return WebInspector.TimelineUIUtils._eventDispatchDesciptors;};WebInspector.TimelineCategory=function(name,title,visible,childColor,color)
{this.name=name;this.title=title;this.visible=visible;this.childColor=childColor;this.color=color;this.hidden=false;};WebInspector.TimelineCategory.Events={VisibilityChanged:Symbol("VisibilityChanged")};WebInspector.TimelineCategory.prototype={get hidden()
{return this._hidden;},set hidden(hidden)
{this._hidden=hidden;this.dispatchEventToListeners(WebInspector.TimelineCategory.Events.VisibilityChanged,this);},__proto__:WebInspector.Object.prototype};WebInspector.TimelineMarkerStyle;WebInspector.TimelineUIUtils.markerStyleForEvent=function(event)
{var red="rgb(255, 0, 0)";var blue="rgb(0, 0, 255)";var orange="rgb(255, 178, 23)";var green="rgb(0, 130, 0)";var tallMarkerDashStyle=[10,5];var title=WebInspector.TimelineUIUtils.eventTitle(event);if(event.hasCategory(WebInspector.TimelineModel.Category.Console)||event.hasCategory(WebInspector.TimelineModel.Category.UserTiming)){return{title:title,dashStyle:tallMarkerDashStyle,lineWidth:0.5,color:orange,tall:false,lowPriority:false};}
var recordTypes=WebInspector.TimelineModel.RecordType;var tall=false;var color=green;switch(event.name){case recordTypes.MarkDOMContent:color=blue;tall=true;break;case recordTypes.MarkLoad:color=red;tall=true;break;case recordTypes.MarkFirstPaint:color=green;tall=true;break;case recordTypes.TimeStamp:color=orange;break;}
return{title:title,dashStyle:tallMarkerDashStyle,lineWidth:0.5,color:color,tall:tall,lowPriority:false};};WebInspector.TimelineUIUtils.markerStyleForFrame=function()
{return{title:WebInspector.UIString("Frame"),color:"rgba(100, 100, 100, 0.4)",lineWidth:3,dashStyle:[3],tall:true,lowPriority:true};};WebInspector.TimelineUIUtils.colorForURL=function(url)
{if(!WebInspector.TimelineUIUtils.colorForURL._colorGenerator){WebInspector.TimelineUIUtils.colorForURL._colorGenerator=new WebInspector.FlameChart.ColorGenerator({min:30,max:330},{min:50,max:80,count:3},85);}
return WebInspector.TimelineUIUtils.colorForURL._colorGenerator.colorForID(url);};WebInspector.TimelinePopupContentHelper=function(title)
{this._contentTable=createElement("table");var titleCell=this._createCell(WebInspector.UIString("%s - Details",title),"timeline-details-title");titleCell.colSpan=2;var titleRow=createElement("tr");titleRow.appendChild(titleCell);this._contentTable.appendChild(titleRow);};WebInspector.TimelinePopupContentHelper.prototype={contentTable:function()
{return this._contentTable;},_createCell:function(content,styleName)
{var text=createElement("label");text.createTextChild(String(content));var cell=createElement("td");cell.className="timeline-details";if(styleName)
cell.className+=" "+styleName;cell.textContent=content;return cell;},appendTextRow:function(title,content)
{var row=createElement("tr");row.appendChild(this._createCell(title,"timeline-details-row-title"));row.appendChild(this._createCell(content,"timeline-details-row-data"));this._contentTable.appendChild(row);},appendElementRow:function(title,content)
{var row=createElement("tr");var titleCell=this._createCell(title,"timeline-details-row-title");row.appendChild(titleCell);var cell=createElement("td");cell.className="details";if(content instanceof Node)
cell.appendChild(content);else
cell.createTextChild(content||"");row.appendChild(cell);this._contentTable.appendChild(row);}};WebInspector.TimelineDetailsContentHelper=function(target,linkifier)
{this.fragment=createDocumentFragment();this._linkifier=linkifier;this._target=target;this.element=createElementWithClass("div","timeline-details-view-block");this._tableElement=this.element.createChild("div","vbox timeline-details-chip-body");this.fragment.appendChild(this.element);};WebInspector.TimelineDetailsContentHelper.prototype={addSection:function(title,category)
{if(!this._tableElement.hasChildNodes()){this.element.removeChildren();}else{this.element=createElementWithClass("div","timeline-details-view-block");this.fragment.appendChild(this.element);}
if(title){var titleElement=this.element.createChild("div","timeline-details-chip-title");if(category)
titleElement.createChild("div").style.backgroundColor=category.color;titleElement.createTextChild(title);}
this._tableElement=this.element.createChild("div","vbox timeline-details-chip-body");this.fragment.appendChild(this.element);},linkifier:function()
{return this._linkifier;},appendTextRow:function(title,value)
{var rowElement=this._tableElement.createChild("div","timeline-details-view-row");rowElement.createChild("div","timeline-details-view-row-title").textContent=title;rowElement.createChild("div","timeline-details-view-row-value").textContent=value;},appendElementRow:function(title,content,isWarning,isStacked)
{var rowElement=this._tableElement.createChild("div","timeline-details-view-row");if(isWarning)
rowElement.classList.add("timeline-details-warning");if(isStacked)
rowElement.classList.add("timeline-details-stack-values");var titleElement=rowElement.createChild("div","timeline-details-view-row-title");titleElement.textContent=title;var valueElement=rowElement.createChild("div","timeline-details-view-row-value");if(content instanceof Node)
valueElement.appendChild(content);else
valueElement.createTextChild(content||"");},appendLocationRow:function(title,url,startLine,startColumn)
{if(!this._linkifier||!this._target)
return;var link=this._linkifier.maybeLinkifyScriptLocation(this._target,null,url,startLine,startColumn);if(!link)
return;this.appendElementRow(title,link);},appendLocationRange:function(title,url,startLine,endLine)
{if(!this._linkifier||!this._target)
return;var locationContent=createElement("span");var link=this._linkifier.maybeLinkifyScriptLocation(this._target,null,url,startLine);if(!link)
return;locationContent.appendChild(link);locationContent.createTextChild(String.sprintf(" [%s\u2026%s]",startLine+1,endLine+1||""));this.appendElementRow(title,locationContent);},appendStackTrace:function(title,stackTrace)
{if(!this._linkifier||!this._target)
return;var rowElement=this._tableElement.createChild("div","timeline-details-view-row");rowElement.createChild("div","timeline-details-view-row-title").textContent=title;this.createChildStackTraceElement(rowElement,stackTrace);},createChildStackTraceElement:function(parentElement,stackTrace)
{if(!this._linkifier||!this._target)
return;parentElement.classList.add("timeline-details-stack-values");var stackTraceElement=parentElement.createChild("div","timeline-details-view-row-value timeline-details-view-row-stack-trace");var callFrameElem=WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(this._target,this._linkifier,stackTrace);stackTraceElement.appendChild(callFrameElem);},appendWarningRow:function(event,warningType)
{var warning=WebInspector.TimelineUIUtils.eventWarning(event,warningType);if(warning)
this.appendElementRow(WebInspector.UIString("Warning"),warning,true);}};WebInspector.TimelineUIUtils.eventWarning=function(event,warningType)
{var warning=warningType||event.warning;if(!warning)
return null;var warnings=WebInspector.TimelineModel.WarningType;var span=createElement("span");var eventData=event.args["data"];switch(warning){case warnings.ForcedStyle:case warnings.ForcedLayout:span.appendChild(WebInspector.linkifyDocumentationURLAsNode("../../fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing#avoid-forced-synchronous-layouts",WebInspector.UIString("Forced reflow")));span.createTextChild(WebInspector.UIString(" is a likely performance bottleneck."));break;case warnings.IdleDeadlineExceeded:span.textContent=WebInspector.UIString("Idle callback execution extended beyond deadline by "+
Number.millisToString(event.duration-eventData["allottedMilliseconds"],true));break;case warnings.V8Deopt:span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/GoogleChrome/devtools-docs/issues/53",WebInspector.UIString("Not optimized"),undefined,true));span.createTextChild(WebInspector.UIString(": %s",eventData["deoptReason"]));break;default:console.assert(false,"Unhandled TimelineModel.WarningType");}
return span;};},{}],126:[function(require,module,exports){WebInspector.TracingLayerPayload;WebInspector.TracingLayerTile;WebInspector.LayerTreeModel=function(target)
{WebInspector.SDKModel.call(this,WebInspector.LayerTreeModel,target);target.registerLayerTreeDispatcher(new WebInspector.LayerTreeDispatcher(this));WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.MainFrameNavigated,this._onMainFrameNavigated,this);this._layerTree=null;};WebInspector.LayerTreeModel.Events={LayerTreeChanged:Symbol("LayerTreeChanged"),LayerPainted:Symbol("LayerPainted")};WebInspector.LayerTreeModel.ScrollRectType={NonFastScrollable:{name:"NonFastScrollable",description:"Non fast scrollable"},TouchEventHandler:{name:"TouchEventHandler",description:"Touch event handler"},WheelEventHandler:{name:"WheelEventHandler",description:"Wheel event handler"},RepaintsOnScroll:{name:"RepaintsOnScroll",description:"Repaints on scroll"}};WebInspector.LayerTreeModel.prototype={disable:function()
{if(!this._enabled)
return;this._enabled=false;this._layerTree=null;this.target().layerTreeAgent().disable();},enable:function()
{if(this._enabled)
return;this._enabled=true;this._forceEnable();},_forceEnable:function()
{this._layerTree=new WebInspector.AgentLayerTree(this.target());this._lastPaintRectByLayerId={};this.target().layerTreeAgent().enable();},setLayerTree:function(layerTree)
{this.disable();this._layerTree=layerTree;this.dispatchEventToListeners(WebInspector.LayerTreeModel.Events.LayerTreeChanged);},layerTree:function()
{return this._layerTree;},_layerTreeChanged:function(layers)
{if(!this._enabled)
return;var layerTree=this._layerTree;layerTree.setLayers(layers,onLayersSet.bind(this));function onLayersSet()
{for(var layerId in this._lastPaintRectByLayerId){var lastPaintRect=this._lastPaintRectByLayerId[layerId];var layer=layerTree.layerById(layerId);if(layer)
layer._lastPaintRect=lastPaintRect;}
this._lastPaintRectByLayerId={};this.dispatchEventToListeners(WebInspector.LayerTreeModel.Events.LayerTreeChanged);}},_layerPainted:function(layerId,clipRect)
{if(!this._enabled)
return;var layerTree=this._layerTree;var layer=layerTree.layerById(layerId);if(!layer){this._lastPaintRectByLayerId[layerId]=clipRect;return;}
layer._didPaint(clipRect);this.dispatchEventToListeners(WebInspector.LayerTreeModel.Events.LayerPainted,layer);},_onMainFrameNavigated:function()
{if(this._enabled)
this._forceEnable();},__proto__:WebInspector.SDKModel.prototype};WebInspector.LayerTreeBase=function(target)
{this._target=target;this._domModel=target?WebInspector.DOMModel.fromTarget(target):null;this._layersById={};this._backendNodeIdToNode=new Map();this._reset();};WebInspector.LayerTreeBase.prototype={_reset:function()
{this._root=null;this._contentRoot=null;this._layers=null;},target:function()
{return this._target;},root:function()
{return this._root;},contentRoot:function()
{return this._contentRoot;},layers:function()
{return this._layers;},forEachLayer:function(callback,root)
{if(!root){root=this.root();if(!root)
return false;}
return callback(root)||root.children().some(this.forEachLayer.bind(this,callback));},layerById:function(id)
{return this._layersById[id]||null;},_resolveBackendNodeIds:function(requestedNodeIds,callback)
{if(!requestedNodeIds.size||!this._domModel){callback();return;}
if(this._domModel)
this._domModel.pushNodesByBackendIdsToFrontend(requestedNodeIds,populateBackendNodeMap.bind(this));function populateBackendNodeMap(nodesMap)
{if(nodesMap){for(var nodeId of nodesMap.keysArray())
this._backendNodeIdToNode.set(nodeId,nodesMap.get(nodeId)||null);}
callback();}},setViewportSize:function(viewportSize)
{this._viewportSize=viewportSize;},viewportSize:function()
{return this._viewportSize;},_nodeForId:function(id)
{return this._domModel?this._domModel.nodeForId(id):null;}};WebInspector.TracingLayerTree=function(target)
{WebInspector.LayerTreeBase.call(this,target);this._tileById=new Map();};WebInspector.TracingLayerTree.prototype={setLayers:function(root,layers,callback)
{var idsToResolve=new Set();if(root){this._extractNodeIdsToResolve(idsToResolve,{},root);}else{for(var i=0;i<layers.length;++i)
this._extractNodeIdsToResolve(idsToResolve,{},layers[i]);}
this._resolveBackendNodeIds(idsToResolve,onBackendNodeIdsResolved.bind(this));function onBackendNodeIdsResolved()
{var oldLayersById=this._layersById;this._layersById={};this._contentRoot=null;if(root){this._root=this._innerSetLayers(oldLayersById,root);}else{this._layers=layers.map(this._innerSetLayers.bind(this,oldLayersById));this._root=this._contentRoot;for(var i=0;i<this._layers.length;++i){if(this._layers[i].id()!==this._contentRoot.id()){this._contentRoot.addChild(this._layers[i]);}}}
callback();}},setTiles:function(tiles)
{this._tileById=new Map();for(var tile of tiles)
this._tileById.set(tile.id,tile);},tileById:function(id)
{return this._tileById.get(id)||null;},_innerSetLayers:function(oldLayersById,payload)
{var layer=oldLayersById[payload.layer_id];if(layer)
layer._reset(payload);else
layer=new WebInspector.TracingLayer(payload);this._layersById[payload.layer_id]=layer;if(payload.owner_node)
layer._setNode(this._backendNodeIdToNode.get(payload.owner_node)||null);if(!this._contentRoot&&layer.drawsContent())
this._contentRoot=layer;for(var i=0;payload.children&&i<payload.children.length;++i)
layer.addChild(this._innerSetLayers(oldLayersById,payload.children[i]));return layer;},_extractNodeIdsToResolve:function(nodeIdsToResolve,seenNodeIds,payload)
{var backendNodeId=payload.owner_node;if(backendNodeId&&!this._backendNodeIdToNode.has(backendNodeId))
nodeIdsToResolve.add(backendNodeId);for(var i=0;payload.children&&i<payload.children.length;++i)
this._extractNodeIdsToResolve(nodeIdsToResolve,seenNodeIds,payload.children[i]);},__proto__:WebInspector.LayerTreeBase.prototype};WebInspector.AgentLayerTree=function(target)
{WebInspector.LayerTreeBase.call(this,target);};WebInspector.AgentLayerTree.prototype={setLayers:function(payload,callback)
{if(!payload){onBackendNodeIdsResolved.call(this);return;}
var idsToResolve=new Set();for(var i=0;i<payload.length;++i){var backendNodeId=payload[i].backendNodeId;if(!backendNodeId||this._backendNodeIdToNode.has(backendNodeId))
continue;idsToResolve.add(backendNodeId);}
this._resolveBackendNodeIds(idsToResolve,onBackendNodeIdsResolved.bind(this));function onBackendNodeIdsResolved()
{this._innerSetLayers(payload);callback();}},_innerSetLayers:function(layers)
{this._reset();if(!layers)
return;var oldLayersById=this._layersById;this._layersById={};for(var i=0;i<layers.length;++i){var layerId=layers[i].layerId;var layer=oldLayersById[layerId];if(layer)
layer._reset(layers[i]);else
layer=new WebInspector.AgentLayer(this._target,layers[i]);this._layersById[layerId]=layer;var backendNodeId=layers[i].backendNodeId;if(backendNodeId)
layer._setNode(this._backendNodeIdToNode.get(backendNodeId));if(!this._contentRoot&&layer.drawsContent())
this._contentRoot=layer;var parentId=layer.parentId();if(parentId){var parent=this._layersById[parentId];if(!parent)
console.assert(parent,"missing parent "+parentId+" for layer "+layerId);parent.addChild(layer);}else{if(this._root)
console.assert(false,"Multiple root layers");this._root=layer;}}
if(this._root)
this._root._calculateQuad(new WebKitCSSMatrix());},__proto__:WebInspector.LayerTreeBase.prototype};WebInspector.Layer=function()
{};WebInspector.Layer.prototype={id:function(){},parentId:function(){},parent:function(){},isRoot:function(){},children:function(){},addChild:function(child){},node:function(){},nodeForSelfOrAncestor:function(){},offsetX:function(){},offsetY:function(){},width:function(){},height:function(){},transform:function(){},quad:function(){},anchorPoint:function(){},invisible:function(){},paintCount:function(){},lastPaintRect:function(){},scrollRects:function(){},gpuMemoryUsage:function(){},requestCompositingReasons:function(callback){},drawsContent:function(){}};WebInspector.AgentLayer=function(target,layerPayload)
{this._target=target;this._reset(layerPayload);};WebInspector.AgentLayer.prototype={id:function()
{return this._layerPayload.layerId;},parentId:function()
{return this._layerPayload.parentLayerId;},parent:function()
{return this._parent;},isRoot:function()
{return!this.parentId();},children:function()
{return this._children;},addChild:function(child)
{if(child._parent)
console.assert(false,"Child already has a parent");this._children.push(child);child._parent=this;},_setNode:function(node)
{this._node=node;},node:function()
{return this._node;},nodeForSelfOrAncestor:function()
{for(var layer=this;layer;layer=layer._parent){if(layer._node)
return layer._node;}
return null;},offsetX:function()
{return this._layerPayload.offsetX;},offsetY:function()
{return this._layerPayload.offsetY;},width:function()
{return this._layerPayload.width;},height:function()
{return this._layerPayload.height;},transform:function()
{return this._layerPayload.transform;},quad:function()
{return this._quad;},anchorPoint:function()
{return[this._layerPayload.anchorX||0,this._layerPayload.anchorY||0,this._layerPayload.anchorZ||0];},invisible:function()
{return this._layerPayload.invisible;},paintCount:function()
{return this._paintCount||this._layerPayload.paintCount;},lastPaintRect:function()
{return this._lastPaintRect;},scrollRects:function()
{return this._scrollRects;},requestCompositingReasons:function(callback)
{if(!this._target){callback([]);return;}
var wrappedCallback=InspectorBackend.wrapClientCallback(callback,"LayerTreeAgent.reasonsForCompositingLayer(): ",undefined,[]);this._target.layerTreeAgent().compositingReasons(this.id(),wrappedCallback);},drawsContent:function()
{return this._layerPayload.drawsContent;},gpuMemoryUsage:function()
{var bytesPerPixel=4;return this.drawsContent()?this.width()*this.height()*bytesPerPixel:0;},requestSnapshot:function(callback)
{if(!this._target){callback();return;}
var wrappedCallback=InspectorBackend.wrapClientCallback(callback,"LayerTreeAgent.makeSnapshot(): ",WebInspector.PaintProfilerSnapshot.bind(null,this._target));this._target.layerTreeAgent().makeSnapshot(this.id(),wrappedCallback);},_didPaint:function(rect)
{this._lastPaintRect=rect;this._paintCount=this.paintCount()+1;this._image=null;},_reset:function(layerPayload)
{this._node=null;this._children=[];this._parent=null;this._paintCount=0;this._layerPayload=layerPayload;this._image=null;this._scrollRects=this._layerPayload.scrollRects||[];},_matrixFromArray:function(a)
{function toFixed9(x){return x.toFixed(9);}
return new WebKitCSSMatrix("matrix3d("+a.map(toFixed9).join(",")+")");},_calculateTransformToViewport:function(parentTransform)
{var offsetMatrix=new WebKitCSSMatrix().translate(this._layerPayload.offsetX,this._layerPayload.offsetY);var matrix=offsetMatrix;if(this._layerPayload.transform){var transformMatrix=this._matrixFromArray(this._layerPayload.transform);var anchorVector=new WebInspector.Geometry.Vector(this._layerPayload.width*this.anchorPoint()[0],this._layerPayload.height*this.anchorPoint()[1],this.anchorPoint()[2]);var anchorPoint=WebInspector.Geometry.multiplyVectorByMatrixAndNormalize(anchorVector,matrix);var anchorMatrix=new WebKitCSSMatrix().translate(-anchorPoint.x,-anchorPoint.y,-anchorPoint.z);matrix=anchorMatrix.inverse().multiply(transformMatrix.multiply(anchorMatrix.multiply(matrix)));}
matrix=parentTransform.multiply(matrix);return matrix;},_createVertexArrayForRect:function(width,height)
{return[0,0,0,width,0,0,width,height,0,0,height,0];},_calculateQuad:function(parentTransform)
{var matrix=this._calculateTransformToViewport(parentTransform);this._quad=[];var vertices=this._createVertexArrayForRect(this._layerPayload.width,this._layerPayload.height);for(var i=0;i<4;++i){var point=WebInspector.Geometry.multiplyVectorByMatrixAndNormalize(new WebInspector.Geometry.Vector(vertices[i*3],vertices[i*3+1],vertices[i*3+2]),matrix);this._quad.push(point.x,point.y);}
function calculateQuadForLayer(layer)
{layer._calculateQuad(matrix);}
this._children.forEach(calculateQuadForLayer);}};WebInspector.TracingLayer=function(payload)
{this._reset(payload);};WebInspector.TracingLayer.prototype={_reset:function(payload)
{this._node=null;this._layerId=String(payload.layer_id);this._offsetX=payload.position[0];this._offsetY=payload.position[1];this._width=payload.bounds.width;this._height=payload.bounds.height;this._children=[];this._parentLayerId=null;this._parent=null;this._quad=payload.layer_quad||[];this._createScrollRects(payload);this._compositingReasons=payload.compositing_reasons||[];this._drawsContent=!!payload.draws_content;this._gpuMemoryUsage=payload.gpu_memory_usage;},id:function()
{return this._layerId;},parentId:function()
{return this._parentLayerId;},parent:function()
{return this._parent;},isRoot:function()
{return!this.parentId();},children:function()
{return this._children;},addChild:function(child)
{if(child._parent)
console.assert(false,"Child already has a parent");this._children.push(child);child._parent=this;child._parentLayerId=this._layerId;},_setNode:function(node)
{this._node=node;},node:function()
{return this._node;},nodeForSelfOrAncestor:function()
{for(var layer=this;layer;layer=layer._parent){if(layer._node)
return layer._node;}
return null;},offsetX:function()
{return this._offsetX;},offsetY:function()
{return this._offsetY;},width:function()
{return this._width;},height:function()
{return this._height;},transform:function()
{return null;},quad:function()
{return this._quad;},anchorPoint:function()
{return[0.5,0.5,0];},invisible:function()
{return false;},paintCount:function()
{return 0;},lastPaintRect:function()
{return null;},scrollRects:function()
{return this._scrollRects;},gpuMemoryUsage:function()
{return this._gpuMemoryUsage;},_scrollRectsFromParams:function(params,type)
{return{rect:{x:params[0],y:params[1],width:params[2],height:params[3]},type:type};},_createScrollRects:function(payload)
{this._scrollRects=[];if(payload.non_fast_scrollable_region)
this._scrollRects.push(this._scrollRectsFromParams(payload.non_fast_scrollable_region,WebInspector.LayerTreeModel.ScrollRectType.NonFastScrollable.name));if(payload.touch_event_handler_region)
this._scrollRects.push(this._scrollRectsFromParams(payload.touch_event_handler_region,WebInspector.LayerTreeModel.ScrollRectType.TouchEventHandler.name));if(payload.wheel_event_handler_region)
this._scrollRects.push(this._scrollRectsFromParams(payload.wheel_event_handler_region,WebInspector.LayerTreeModel.ScrollRectType.WheelEventHandler.name));if(payload.scroll_event_handler_region)
this._scrollRects.push(this._scrollRectsFromParams(payload.scroll_event_handler_region,WebInspector.LayerTreeModel.ScrollRectType.RepaintsOnScroll.name));},requestCompositingReasons:function(callback)
{callback(this._compositingReasons);},drawsContent:function()
{return this._drawsContent;}};WebInspector.DeferredLayerTree=function(target)
{this._target=target;};WebInspector.DeferredLayerTree.prototype={resolve:function(callback){},target:function()
{return this._target;}};WebInspector.LayerTreeDispatcher=function(layerTreeModel)
{this._layerTreeModel=layerTreeModel;};WebInspector.LayerTreeDispatcher.prototype={layerTreeDidChange:function(layers)
{this._layerTreeModel._layerTreeChanged(layers||null);},layerPainted:function(layerId,clipRect)
{this._layerTreeModel._layerPainted(layerId,clipRect);}};WebInspector.LayerTreeModel.fromTarget=function(target)
{if(!target.hasDOMCapability())
return null;var model=target.model(WebInspector.LayerTreeModel);if(!model)
model=new WebInspector.LayerTreeModel(target);return model;};},{}],127:[function(require,module,exports){WebInspector.TimelineFrameModel=function(categoryMapper)
{this._categoryMapper=categoryMapper;this.reset();};WebInspector.TimelineFrameModel._mainFrameMarkers=[WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,WebInspector.TimelineModel.RecordType.InvalidateLayout,WebInspector.TimelineModel.RecordType.BeginMainThreadFrame,WebInspector.TimelineModel.RecordType.ScrollLayer];WebInspector.TimelineFrameModel.prototype={frames:function()
{return this._frames;},filteredFrames:function(startTime,endTime)
{function compareStartTime(value,object)
{return value-object.startTime;}
function compareEndTime(value,object)
{return value-object.endTime;}
var frames=this._frames;var firstFrame=frames.lowerBound(startTime,compareEndTime);var lastFrame=frames.lowerBound(endTime,compareStartTime);return frames.slice(firstFrame,lastFrame);},hasRasterTile:function(rasterTask)
{var data=rasterTask.args["tileData"];if(!data)
return false;var frameId=data["sourceFrameNumber"];var frame=frameId&&this._frameById[frameId];if(!frame||!frame.layerTree)
return false;return true;},requestRasterTile:function(rasterTask,callback)
{var target=this._target;if(!target){callback(null,null);return;}
var data=rasterTask.args["tileData"];var frameId=data["sourceFrameNumber"];var frame=frameId&&this._frameById[frameId];if(!frame||!frame.layerTree){callback(null,null);return;}
var tileId=data["tileId"]&&data["tileId"]["id_ref"];var fragments=[];var tile=null;var x0=Infinity;var y0=Infinity;frame.layerTree.resolve(layerTreeResolved);function layerTreeResolved(layerTree)
{tile=tileId&&layerTree.tileById("cc::Tile/"+tileId);if(!tile){console.error("Tile "+tileId+" missing in frame "+frameId);callback(null,null);return;}
var fetchPictureFragmentsBarrier=new CallbackBarrier();for(var paint of frame.paints){if(tile.layer_id===paint.layerId())
paint.loadPicture(fetchPictureFragmentsBarrier.createCallback(pictureLoaded));}
fetchPictureFragmentsBarrier.callWhenDone(allPicturesLoaded);}
function segmentsOverlap(a1,a2,b1,b2)
{console.assert(a1<=a2&&b1<=b2,"segments should be specified as ordered pairs");return a2>b1&&a1<b2;}
function rectsOverlap(a,b)
{return segmentsOverlap(a[0],a[0]+a[2],b[0],b[0]+b[2])&&segmentsOverlap(a[1],a[1]+a[3],b[1],b[1]+b[3]);}
function pictureLoaded(rect,picture)
{if(!rect||!picture)
return;if(!rectsOverlap(rect,tile.content_rect))
return;var x=rect[0];var y=rect[1];x0=Math.min(x0,x);y0=Math.min(y0,y);fragments.push({x:x,y:y,picture:picture});}
function allPicturesLoaded()
{if(!fragments.length){callback(null,null);return;}
var rectArray=tile.content_rect;var rect={x:rectArray[0]-x0,y:rectArray[1]-y0,width:rectArray[2],height:rectArray[3]};WebInspector.PaintProfilerSnapshot.loadFromFragments(target,fragments,callback.bind(null,rect));}},reset:function()
{this._minimumRecordTime=Infinity;this._frames=[];this._frameById={};this._lastFrame=null;this._lastLayerTree=null;this._mainFrameCommitted=false;this._mainFrameRequested=false;this._framePendingCommit=null;this._lastBeginFrame=null;this._lastNeedsBeginFrame=null;this._framePendingActivation=null;this._lastTaskBeginTime=null;this._target=null;this._sessionId=null;this._currentTaskTimeByCategory={};},handleBeginFrame:function(startTime)
{if(!this._lastFrame)
this._startFrame(startTime);this._lastBeginFrame=startTime;},handleDrawFrame:function(startTime)
{if(!this._lastFrame){this._startFrame(startTime);return;}
if(this._mainFrameCommitted||!this._mainFrameRequested){if(this._lastNeedsBeginFrame){var idleTimeEnd=this._framePendingActivation?this._framePendingActivation.triggerTime:this._lastBeginFrame||this._lastNeedsBeginFrame;if(idleTimeEnd>this._lastFrame.startTime){this._lastFrame.idle=true;this._startFrame(idleTimeEnd);if(this._framePendingActivation)
this._commitPendingFrame();this._lastBeginFrame=null;}
this._lastNeedsBeginFrame=null;}
this._startFrame(startTime);}
this._mainFrameCommitted=false;},handleActivateLayerTree:function()
{if(!this._lastFrame)
return;if(this._framePendingActivation&&!this._lastNeedsBeginFrame)
this._commitPendingFrame();},handleRequestMainThreadFrame:function()
{if(!this._lastFrame)
return;this._mainFrameRequested=true;},handleCompositeLayers:function()
{if(!this._framePendingCommit)
return;this._framePendingActivation=this._framePendingCommit;this._framePendingCommit=null;this._mainFrameRequested=false;this._mainFrameCommitted=true;},handleLayerTreeSnapshot:function(layerTree)
{this._lastLayerTree=layerTree;},handleNeedFrameChanged:function(startTime,needsBeginFrame)
{if(needsBeginFrame)
this._lastNeedsBeginFrame=startTime;},_startFrame:function(startTime)
{if(this._lastFrame)
this._flushFrame(this._lastFrame,startTime);this._lastFrame=new WebInspector.TimelineFrame(startTime,startTime-this._minimumRecordTime);},_flushFrame:function(frame,endTime)
{frame._setLayerTree(this._lastLayerTree);frame._setEndTime(endTime);if(this._frames.length&&(frame.startTime!==this._frames.peekLast().endTime||frame.startTime>frame.endTime))
console.assert(false,`Inconsistent frame time for frame ${this._frames.length} (${frame.startTime} - ${frame.endTime})`);this._frames.push(frame);if(typeof frame._mainFrameId==="number")
this._frameById[frame._mainFrameId]=frame;},_commitPendingFrame:function()
{this._lastFrame._addTimeForCategories(this._framePendingActivation.timeByCategory);this._lastFrame.paints=this._framePendingActivation.paints;this._lastFrame._mainFrameId=this._framePendingActivation.mainFrameId;this._framePendingActivation=null;},_findRecordRecursively:function(types,record)
{if(types.indexOf(record.type())>=0)
return record;if(!record.children())
return null;for(var i=0;i<record.children().length;++i){var result=this._findRecordRecursively(types,record.children()[i]);if(result)
return result;}
return null;},addTraceEvents:function(target,events,sessionId)
{this._target=target;this._sessionId=sessionId;if(!events.length)
return;if(events[0].startTime<this._minimumRecordTime)
this._minimumRecordTime=events[0].startTime;for(var i=0;i<events.length;++i)
this._addTraceEvent(events[i]);},_addTraceEvent:function(event)
{var eventNames=WebInspector.TimelineModel.RecordType;if(event.name===eventNames.SetLayerTreeId){var sessionId=event.args["sessionId"]||event.args["data"]["sessionId"];if(this._sessionId===sessionId)
this._layerTreeId=event.args["layerTreeId"]||event.args["data"]["layerTreeId"];}else if(event.name===eventNames.TracingStartedInPage){this._mainThread=event.thread;}else if(event.phase===WebInspector.TracingModel.Phase.SnapshotObject&&event.name===eventNames.LayerTreeHostImplSnapshot&&parseInt(event.id,0)===this._layerTreeId){var snapshot=event;this.handleLayerTreeSnapshot(new WebInspector.DeferredTracingLayerTree(snapshot,this._target));}else{this._processCompositorEvents(event);if(event.thread===this._mainThread)
this._addMainThreadTraceEvent(event);else
if(this._lastFrame&&event.selfTime&&!WebInspector.TracingModel.isTopLevelEvent(event))
this._lastFrame._addTimeForCategory(this._categoryMapper(event),event.selfTime);}},_processCompositorEvents:function(event)
{var eventNames=WebInspector.TimelineModel.RecordType;if(event.args["layerTreeId"]!==this._layerTreeId)
return;var timestamp=event.startTime;if(event.name===eventNames.BeginFrame)
this.handleBeginFrame(timestamp);else
if(event.name===eventNames.DrawFrame)
this.handleDrawFrame(timestamp);else
if(event.name===eventNames.ActivateLayerTree)
this.handleActivateLayerTree();else
if(event.name===eventNames.RequestMainThreadFrame)
this.handleRequestMainThreadFrame();else
if(event.name===eventNames.NeedsBeginFrameChanged)
this.handleNeedFrameChanged(timestamp,event.args["data"]&&event.args["data"]["needsBeginFrame"]);},_addMainThreadTraceEvent:function(event)
{var eventNames=WebInspector.TimelineModel.RecordType;var timestamp=event.startTime;var selfTime=event.selfTime||0;if(WebInspector.TracingModel.isTopLevelEvent(event)){this._currentTaskTimeByCategory={};this._lastTaskBeginTime=event.startTime;}
if(!this._framePendingCommit&&WebInspector.TimelineFrameModel._mainFrameMarkers.indexOf(event.name)>=0)
this._framePendingCommit=new WebInspector.PendingFrame(this._lastTaskBeginTime||event.startTime,this._currentTaskTimeByCategory);if(!this._framePendingCommit){this._addTimeForCategory(this._currentTaskTimeByCategory,event);return;}
this._addTimeForCategory(this._framePendingCommit.timeByCategory,event);if(event.name===eventNames.BeginMainThreadFrame&&event.args["data"]&&event.args["data"]["frameId"])
this._framePendingCommit.mainFrameId=event.args["data"]["frameId"];if(event.name===eventNames.Paint&&event.args["data"]["layerId"]&&event.picture&&this._target)
this._framePendingCommit.paints.push(new WebInspector.LayerPaintEvent(event,this._target));if(event.name===eventNames.CompositeLayers&&event.args["layerTreeId"]===this._layerTreeId)
this.handleCompositeLayers();},_addTimeForCategory:function(timeByCategory,event)
{if(!event.selfTime)
return;var categoryName=this._categoryMapper(event);timeByCategory[categoryName]=(timeByCategory[categoryName]||0)+event.selfTime;}};WebInspector.DeferredTracingLayerTree=function(snapshot,target)
{WebInspector.DeferredLayerTree.call(this,target);this._snapshot=snapshot;};WebInspector.DeferredTracingLayerTree.prototype={resolve:function(callback)
{this._snapshot.requestObject(onGotObject.bind(this));function onGotObject(result)
{if(!result)
return;var viewport=result["device_viewport_size"];var tiles=result["active_tiles"];var rootLayer=result["active_tree"]["root_layer"];var layers=result["active_tree"]["layers"];var layerTree=new WebInspector.TracingLayerTree(this._target);layerTree.setViewportSize(viewport);layerTree.setTiles(tiles);layerTree.setLayers(rootLayer,layers,callback.bind(null,layerTree));}},__proto__:WebInspector.DeferredLayerTree.prototype};WebInspector.TimelineFrame=function(startTime,startTimeOffset)
{this.startTime=startTime;this.startTimeOffset=startTimeOffset;this.endTime=this.startTime;this.duration=0;this.timeByCategory={};this.cpuTime=0;this.idle=false;this.layerTree=null;this.paints=[];this._mainFrameId=undefined;};WebInspector.TimelineFrame.prototype={hasWarnings:function()
{var longFrameDurationThresholdMs=22;return!this.idle&&this.duration>longFrameDurationThresholdMs;},_setEndTime:function(endTime)
{this.endTime=endTime;this.duration=this.endTime-this.startTime;},_setLayerTree:function(layerTree)
{this.layerTree=layerTree;},_addTimeForCategories:function(timeByCategory)
{for(var category in timeByCategory)
this._addTimeForCategory(category,timeByCategory[category]);},_addTimeForCategory:function(category,time)
{this.timeByCategory[category]=(this.timeByCategory[category]||0)+time;this.cpuTime+=time;}};WebInspector.LayerPaintEvent=function(event,target)
{this._event=event;this._target=target;};WebInspector.LayerPaintEvent.prototype={layerId:function()
{return this._event.args["data"]["layerId"];},event:function()
{return this._event;},loadPicture:function(callback)
{this._event.picture.requestObject(onGotObject);function onGotObject(result)
{if(!result||!result["skp64"]){callback(null,null);return;}
var rect=result["params"]&&result["params"]["layer_rect"];callback(rect,result["skp64"]);}},loadSnapshot:function(callback)
{this.loadPicture(onGotPicture.bind(this));function onGotPicture(rect,picture)
{if(!rect||!picture||!this._target){callback(null,null);return;}
WebInspector.PaintProfilerSnapshot.load(this._target,picture,callback.bind(null,rect));}}};WebInspector.PendingFrame=function(triggerTime,timeByCategory)
{this.timeByCategory=timeByCategory;this.paints=[];this.mainFrameId=undefined;this.triggerTime=triggerTime;};},{}],128:[function(require,module,exports){WebInspector.TimelineIRModel=function()
{this.reset();};WebInspector.TimelineIRModel.Phases={Idle:"Idle",Response:"Response",Scroll:"Scroll",Fling:"Fling",Drag:"Drag",Animation:"Animation",Uncategorized:"Uncategorized"};WebInspector.TimelineIRModel.InputEvents={Char:"Char",Click:"GestureClick",ContextMenu:"ContextMenu",FlingCancel:"GestureFlingCancel",FlingStart:"GestureFlingStart",ImplSideFling:WebInspector.TimelineModel.RecordType.ImplSideFling,KeyDown:"KeyDown",KeyDownRaw:"RawKeyDown",KeyUp:"KeyUp",LatencyScrollUpdate:"ScrollUpdate",MouseDown:"MouseDown",MouseMove:"MouseMove",MouseUp:"MouseUp",MouseWheel:"MouseWheel",PinchBegin:"GesturePinchBegin",PinchEnd:"GesturePinchEnd",PinchUpdate:"GesturePinchUpdate",ScrollBegin:"GestureScrollBegin",ScrollEnd:"GestureScrollEnd",ScrollUpdate:"GestureScrollUpdate",ScrollUpdateRenderer:"ScrollUpdate",ShowPress:"GestureShowPress",Tap:"GestureTap",TapCancel:"GestureTapCancel",TapDown:"GestureTapDown",TouchCancel:"TouchCancel",TouchEnd:"TouchEnd",TouchMove:"TouchMove",TouchStart:"TouchStart"};WebInspector.TimelineIRModel._mergeThresholdsMs={animation:1,mouse:40};WebInspector.TimelineIRModel._eventIRPhase=Symbol("eventIRPhase");WebInspector.TimelineIRModel.phaseForEvent=function(event)
{return event[WebInspector.TimelineIRModel._eventIRPhase];};WebInspector.TimelineIRModel.prototype={populate:function(inputLatencies,animations)
{var eventTypes=WebInspector.TimelineIRModel.InputEvents;var phases=WebInspector.TimelineIRModel.Phases;this.reset();if(!inputLatencies)
return;this._processInputLatencies(inputLatencies);if(animations)
this._processAnimations(animations);var range=new WebInspector.SegmentedRange();range.appendRange(this._drags);range.appendRange(this._cssAnimations);range.appendRange(this._scrolls);range.appendRange(this._responses);this._segments=range.segments();},_processInputLatencies:function(events)
{var eventTypes=WebInspector.TimelineIRModel.InputEvents;var phases=WebInspector.TimelineIRModel.Phases;var thresholdsMs=WebInspector.TimelineIRModel._mergeThresholdsMs;var scrollStart;var flingStart;var touchStart;var firstTouchMove;var mouseWheel;var mouseDown;var mouseMove;for(var i=0;i<events.length;++i){var event=events[i];if(i>0&&events[i].startTime<events[i-1].startTime)
console.assert(false,"Unordered input events");var type=this._inputEventType(event.name);switch(type){case eventTypes.ScrollBegin:this._scrolls.append(this._segmentForEvent(event,phases.Scroll));scrollStart=event;break;case eventTypes.ScrollEnd:if(scrollStart)
this._scrolls.append(this._segmentForEventRange(scrollStart,event,phases.Scroll));else
this._scrolls.append(this._segmentForEvent(event,phases.Scroll));scrollStart=null;break;case eventTypes.ScrollUpdate:touchStart=null;this._scrolls.append(this._segmentForEvent(event,phases.Scroll));break;case eventTypes.FlingStart:if(flingStart){WebInspector.console.error(WebInspector.UIString("Two flings at the same time? %s vs %s",flingStart.startTime,event.startTime));break;}
flingStart=event;break;case eventTypes.FlingCancel:if(!flingStart)
break;this._scrolls.append(this._segmentForEventRange(flingStart,event,phases.Fling));flingStart=null;break;case eventTypes.ImplSideFling:this._scrolls.append(this._segmentForEvent(event,phases.Fling));break;case eventTypes.ShowPress:case eventTypes.Tap:case eventTypes.KeyDown:case eventTypes.KeyDownRaw:case eventTypes.KeyUp:case eventTypes.Char:case eventTypes.Click:case eventTypes.ContextMenu:this._responses.append(this._segmentForEvent(event,phases.Response));break;case eventTypes.TouchStart:if(touchStart){WebInspector.console.error(WebInspector.UIString("Two touches at the same time? %s vs %s",touchStart.startTime,event.startTime));break;}
touchStart=event;event.steps[0][WebInspector.TimelineIRModel._eventIRPhase]=phases.Response;firstTouchMove=null;break;case eventTypes.TouchCancel:touchStart=null;break;case eventTypes.TouchMove:if(firstTouchMove){this._drags.append(this._segmentForEvent(event,phases.Drag));}else if(touchStart){firstTouchMove=event;this._responses.append(this._segmentForEventRange(touchStart,event,phases.Response));}
break;case eventTypes.TouchEnd:touchStart=null;break;case eventTypes.MouseDown:mouseDown=event;mouseMove=null;break;case eventTypes.MouseMove:if(mouseDown&&!mouseMove&&mouseDown.startTime+thresholdsMs.mouse>event.startTime){this._responses.append(this._segmentForEvent(mouseDown,phases.Response));this._responses.append(this._segmentForEvent(event,phases.Response));}else if(mouseDown){this._drags.append(this._segmentForEvent(event,phases.Drag));}
mouseMove=event;break;case eventTypes.MouseUp:this._responses.append(this._segmentForEvent(event,phases.Response));mouseDown=null;break;case eventTypes.MouseWheel:if(mouseWheel&&canMerge(thresholdsMs.mouse,mouseWheel,event))
this._scrolls.append(this._segmentForEventRange(mouseWheel,event,phases.Scroll));else
this._scrolls.append(this._segmentForEvent(event,phases.Scroll));mouseWheel=event;break;}}
function canMerge(threshold,first,second)
{return first.endTime<second.startTime&&second.startTime<first.endTime+threshold;}},_processAnimations:function(events)
{for(var i=0;i<events.length;++i)
this._cssAnimations.append(this._segmentForEvent(events[i],WebInspector.TimelineIRModel.Phases.Animation));},_segmentForEvent:function(event,phase)
{this._setPhaseForEvent(event,phase);return new WebInspector.Segment(event.startTime,event.endTime,phase);},_segmentForEventRange:function(startEvent,endEvent,phase)
{this._setPhaseForEvent(startEvent,phase);this._setPhaseForEvent(endEvent,phase);return new WebInspector.Segment(startEvent.startTime,endEvent.endTime,phase);},_setPhaseForEvent:function(asyncEvent,phase)
{asyncEvent.steps[0][WebInspector.TimelineIRModel._eventIRPhase]=phase;},interactionRecords:function()
{return this._segments;},reset:function()
{var thresholdsMs=WebInspector.TimelineIRModel._mergeThresholdsMs;this._segments=[];this._drags=new WebInspector.SegmentedRange(merge.bind(null,thresholdsMs.mouse));this._cssAnimations=new WebInspector.SegmentedRange(merge.bind(null,thresholdsMs.animation));this._responses=new WebInspector.SegmentedRange(merge.bind(null,0));this._scrolls=new WebInspector.SegmentedRange(merge.bind(null,thresholdsMs.animation));function merge(threshold,first,second)
{return first.end+threshold>=second.begin&&first.data===second.data?first:null;}},_inputEventType:function(eventName)
{var prefix="InputLatency::";if(!eventName.startsWith(prefix)){if(eventName===WebInspector.TimelineIRModel.InputEvents.ImplSideFling)
return eventName;console.error("Unrecognized input latency event: "+eventName);return null;}
return eventName.substr(prefix.length);}};},{}],129:[function(require,module,exports){WebInspector.TimelineJSProfileProcessor={};WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile=function(jsProfileModel,thread)
{var idleNode=jsProfileModel.idleNode;var programNode=jsProfileModel.programNode;var gcNode=jsProfileModel.gcNode;var samples=jsProfileModel.samples;var timestamps=jsProfileModel.timestamps;var jsEvents=[];var nodeToStackMap=new Map();nodeToStackMap.set(programNode,[]);for(var i=0;i<samples.length;++i){var node=jsProfileModel.nodeByIndex(i);if(!node){console.error(`Node with unknown id ${samples[i]} at index ${i}`);continue;}
if(node===gcNode||node===idleNode)
continue;var callFrames=nodeToStackMap.get(node);if(!callFrames){callFrames=new Array(node.depth+1);nodeToStackMap.set(node,callFrames);for(var j=0;node.parent;node=node.parent)
callFrames[j++]=node;}
var jsSampleEvent=new WebInspector.TracingModel.Event(WebInspector.TracingModel.DevToolsTimelineEventCategory,WebInspector.TimelineModel.RecordType.JSSample,WebInspector.TracingModel.Phase.Instant,timestamps[i],thread);jsSampleEvent.args["data"]={stackTrace:callFrames};jsEvents.push(jsSampleEvent);}
return jsEvents;};WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents=function(events)
{function equalFrames(frame1,frame2)
{return frame1.scriptId===frame2.scriptId&&frame1.functionName===frame2.functionName;}
function eventEndTime(e)
{return e.endTime||e.startTime;}
function isJSInvocationEvent(e)
{switch(e.name){case WebInspector.TimelineModel.RecordType.RunMicrotasks:case WebInspector.TimelineModel.RecordType.FunctionCall:case WebInspector.TimelineModel.RecordType.EvaluateScript:return true;}
return false;}
var jsFrameEvents=[];var jsFramesStack=[];var lockedJsStackDepth=[];var ordinal=0;var filterNativeFunctions=!WebInspector.moduleSetting("showNativeFunctionsInJSProfile").get();function onStartEvent(e)
{e.ordinal=++ordinal;extractStackTrace(e);lockedJsStackDepth.push(jsFramesStack.length);}
function onInstantEvent(e,parent)
{e.ordinal=++ordinal;if(parent&&isJSInvocationEvent(parent))
extractStackTrace(e);}
function onEndEvent(e)
{truncateJSStack(lockedJsStackDepth.pop(),e.endTime);}
function truncateJSStack(depth,time)
{if(lockedJsStackDepth.length){var lockedDepth=lockedJsStackDepth.peekLast();if(depth<lockedDepth){console.error("Child stack is shallower ("+depth+") than the parent stack ("+lockedDepth+") at "+time);depth=lockedDepth;}}
if(jsFramesStack.length<depth){console.error("Trying to truncate higher than the current stack size at "+time);depth=jsFramesStack.length;}
for(var k=0;k<jsFramesStack.length;++k)
jsFramesStack[k].setEndTime(time);jsFramesStack.length=depth;}
function filterStackFrames(stack)
{for(var i=0,j=0;i<stack.length;++i){var url=stack[i].url;if(url&&url.startsWith("native "))
continue;stack[j++]=stack[i];}
stack.length=j;}
function extractStackTrace(e)
{var recordTypes=WebInspector.TimelineModel.RecordType;var callFrames;if(e.name===recordTypes.JSSample){var eventData=e.args["data"]||e.args["beginData"];callFrames=eventData&&eventData["stackTrace"];}else{callFrames=jsFramesStack.map(frameEvent=>frameEvent.args["data"]).reverse();}
if(filterNativeFunctions)
filterStackFrames(callFrames);var endTime=eventEndTime(e);var numFrames=callFrames.length;var minFrames=Math.min(numFrames,jsFramesStack.length);var i;for(i=lockedJsStackDepth.peekLast()||0;i<minFrames;++i){var newFrame=callFrames[numFrames-1-i];var oldFrame=jsFramesStack[i].args["data"];if(!equalFrames(newFrame,oldFrame))
break;jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime,endTime));}
truncateJSStack(i,e.startTime);for(;i<numFrames;++i){var frame=callFrames[numFrames-1-i];var jsFrameEvent=new WebInspector.TracingModel.Event(WebInspector.TracingModel.DevToolsTimelineEventCategory,recordTypes.JSFrame,WebInspector.TracingModel.Phase.Complete,e.startTime,e.thread);jsFrameEvent.ordinal=e.ordinal;jsFrameEvent.addArgs({data:frame});jsFrameEvent.setEndTime(endTime);jsFramesStack.push(jsFrameEvent);jsFrameEvents.push(jsFrameEvent);}}
function findFirstTopLevelEvent(events)
{for(var i=0;i<events.length;++i){if(WebInspector.TracingModel.isTopLevelEvent(events[i]))
return events[i];}
return null;}
var firstTopLevelEvent=findFirstTopLevelEvent(events);if(firstTopLevelEvent)
WebInspector.TimelineModel.forEachEvent(events,onStartEvent,onEndEvent,onInstantEvent,firstTopLevelEvent.startTime);return jsFrameEvents;};WebInspector.TimelineJSProfileProcessor.CodeMap=function()
{this._banks=new Map();};WebInspector.TimelineJSProfileProcessor.CodeMap.Entry=function(address,size,callFrame)
{this.address=address;this.size=size;this.callFrame=callFrame;};WebInspector.TimelineJSProfileProcessor.CodeMap.comparator=function(address,entry)
{return address-entry.address;};WebInspector.TimelineJSProfileProcessor.CodeMap.prototype={addEntry:function(addressHex,size,callFrame)
{var entry=new WebInspector.TimelineJSProfileProcessor.CodeMap.Entry(this._getAddress(addressHex),size,callFrame);this._addEntry(addressHex,entry);},moveEntry:function(oldAddressHex,newAddressHex,size)
{var entry=this._getBank(oldAddressHex).removeEntry(this._getAddress(oldAddressHex));if(!entry){console.error("Entry at address "+oldAddressHex+" not found");return;}
entry.address=this._getAddress(newAddressHex);entry.size=size;this._addEntry(newAddressHex,entry);},lookupEntry:function(addressHex)
{return this._getBank(addressHex).lookupEntry(this._getAddress(addressHex));},_addEntry:function(addressHex,entry)
{this._getBank(addressHex).addEntry(entry);},_getBank:function(addressHex)
{addressHex=addressHex.slice(2);var bankSizeHexDigits=13;var maxHexDigits=16;var bankName=addressHex.slice(-maxHexDigits,-bankSizeHexDigits);var bank=this._banks.get(bankName);if(!bank){bank=new WebInspector.TimelineJSProfileProcessor.CodeMap.Bank();this._banks.set(bankName,bank);}
return bank;},_getAddress:function(addressHex)
{var bankSizeHexDigits=13;addressHex=addressHex.slice(2);return parseInt(addressHex.slice(-bankSizeHexDigits),16);}};WebInspector.TimelineJSProfileProcessor.CodeMap.Bank=function()
{this._entries=[];};WebInspector.TimelineJSProfileProcessor.CodeMap.Bank.prototype={removeEntry:function(address)
{var index=this._entries.lowerBound(address,WebInspector.TimelineJSProfileProcessor.CodeMap.comparator);var entry=this._entries[index];if(!entry||entry.address!==address)
return null;this._entries.splice(index,1);return entry;},lookupEntry:function(address)
{var index=this._entries.upperBound(address,WebInspector.TimelineJSProfileProcessor.CodeMap.comparator)-1;var entry=this._entries[index];return entry&&address<entry.address+entry.size?entry.callFrame:null;},addEntry:function(newEntry)
{var endAddress=newEntry.address+newEntry.size;var lastIndex=this._entries.lowerBound(endAddress,WebInspector.TimelineJSProfileProcessor.CodeMap.comparator);var index;for(index=lastIndex-1;index>=0;--index){var entry=this._entries[index];var entryEndAddress=entry.address+entry.size;if(entryEndAddress<=newEntry.address)
break;}
++index;this._entries.splice(index,lastIndex-index,newEntry);}};WebInspector.TimelineJSProfileProcessor._buildCallFrame=function(name,scriptId)
{function createFrame(functionName,url,scriptId,line,column,isNative)
{return{"functionName":functionName,"url":url||"","scriptId":scriptId||"0","lineNumber":line||0,"columnNumber":column||0,"isNative":isNative||false};}
var rePrefix=/^(\w*:)?[*~]?(.*)$/m;var tokens=rePrefix.exec(name);var prefix=tokens[1];var body=tokens[2];var rawName;var rawUrl;if(prefix==="Script:"){rawName="";rawUrl=body;}else{var spacePos=body.lastIndexOf(" ");rawName=spacePos!==-1?body.substr(0,spacePos):body;rawUrl=spacePos!==-1?body.substr(spacePos+1):"";}
var nativeSuffix=" native";var isNative=rawName.endsWith(nativeSuffix);var functionName=isNative?rawName.slice(0,-nativeSuffix.length):rawName;var urlData=WebInspector.ParsedURL.splitLineAndColumn(rawUrl);var url=urlData.url||"";var line=urlData.lineNumber||0;var column=urlData.columnNumber||0;return createFrame(functionName,url,String(scriptId),line,column,isNative);};WebInspector.TimelineJSProfileProcessor.processRawV8Samples=function(events)
{var missingAddesses=new Set();function convertRawFrame(address)
{var entry=codeMap.lookupEntry(address);if(entry)
return entry.isNative?null:entry;if(!missingAddesses.has(address)){missingAddesses.add(address);console.error("Address "+address+" has missing code entry");}
return null;}
var recordTypes=WebInspector.TimelineModel.RecordType;var samples=[];var codeMap=new WebInspector.TimelineJSProfileProcessor.CodeMap();for(var i=0;i<events.length;++i){var e=events[i];var data=e.args["data"];switch(e.name){case recordTypes.JitCodeAdded:var frame=WebInspector.TimelineJSProfileProcessor._buildCallFrame(data["name"],data["script_id"]);codeMap.addEntry(data["code_start"],data["code_len"],frame);break;case recordTypes.JitCodeMoved:codeMap.moveEntry(data["code_start"],data["new_code_start"],data["code_len"]);break;case recordTypes.V8Sample:var rawStack=data["stack"];if(data["vm_state"]==="js"&&!rawStack.length)
break;var stack=rawStack.map(convertRawFrame);stack.remove(null);var sampleEvent=new WebInspector.TracingModel.Event(WebInspector.TracingModel.DevToolsTimelineEventCategory,WebInspector.TimelineModel.RecordType.JSSample,WebInspector.TracingModel.Phase.Instant,e.startTime,e.thread);sampleEvent.ordinal=e.ordinal;sampleEvent.args={"data":{"stackTrace":stack}};samples.push(sampleEvent);break;}}
return samples;};},{}],130:[function(require,module,exports){WebInspector.TimelineModel=function(eventFilter)
{this._eventFilter=eventFilter;this.reset();};WebInspector.TimelineModel.RecordType={Task:"Task",Program:"Program",EventDispatch:"EventDispatch",GPUTask:"GPUTask",Animation:"Animation",RequestMainThreadFrame:"RequestMainThreadFrame",BeginFrame:"BeginFrame",NeedsBeginFrameChanged:"NeedsBeginFrameChanged",BeginMainThreadFrame:"BeginMainThreadFrame",ActivateLayerTree:"ActivateLayerTree",DrawFrame:"DrawFrame",HitTest:"HitTest",ScheduleStyleRecalculation:"ScheduleStyleRecalculation",RecalculateStyles:"RecalculateStyles",UpdateLayoutTree:"UpdateLayoutTree",InvalidateLayout:"InvalidateLayout",Layout:"Layout",UpdateLayer:"UpdateLayer",UpdateLayerTree:"UpdateLayerTree",PaintSetup:"PaintSetup",Paint:"Paint",PaintImage:"PaintImage",Rasterize:"Rasterize",RasterTask:"RasterTask",ScrollLayer:"ScrollLayer",CompositeLayers:"CompositeLayers",ScheduleStyleInvalidationTracking:"ScheduleStyleInvalidationTracking",StyleRecalcInvalidationTracking:"StyleRecalcInvalidationTracking",StyleInvalidatorInvalidationTracking:"StyleInvalidatorInvalidationTracking",LayoutInvalidationTracking:"LayoutInvalidationTracking",LayerInvalidationTracking:"LayerInvalidationTracking",PaintInvalidationTracking:"PaintInvalidationTracking",ScrollInvalidationTracking:"ScrollInvalidationTracking",ParseHTML:"ParseHTML",ParseAuthorStyleSheet:"ParseAuthorStyleSheet",TimerInstall:"TimerInstall",TimerRemove:"TimerRemove",TimerFire:"TimerFire",XHRReadyStateChange:"XHRReadyStateChange",XHRLoad:"XHRLoad",CompileScript:"v8.compile",EvaluateScript:"EvaluateScript",CommitLoad:"CommitLoad",MarkLoad:"MarkLoad",MarkDOMContent:"MarkDOMContent",MarkFirstPaint:"MarkFirstPaint",TimeStamp:"TimeStamp",ConsoleTime:"ConsoleTime",UserTiming:"UserTiming",ResourceSendRequest:"ResourceSendRequest",ResourceReceiveResponse:"ResourceReceiveResponse",ResourceReceivedData:"ResourceReceivedData",ResourceFinish:"ResourceFinish",RunMicrotasks:"RunMicrotasks",FunctionCall:"FunctionCall",GCEvent:"GCEvent",MajorGC:"MajorGC",MinorGC:"MinorGC",JSFrame:"JSFrame",JSSample:"JSSample",V8Sample:"V8Sample",JitCodeAdded:"JitCodeAdded",JitCodeMoved:"JitCodeMoved",ParseScriptOnBackground:"v8.parseOnBackground",UpdateCounters:"UpdateCounters",RequestAnimationFrame:"RequestAnimationFrame",CancelAnimationFrame:"CancelAnimationFrame",FireAnimationFrame:"FireAnimationFrame",RequestIdleCallback:"RequestIdleCallback",CancelIdleCallback:"CancelIdleCallback",FireIdleCallback:"FireIdleCallback",WebSocketCreate:"WebSocketCreate",WebSocketSendHandshakeRequest:"WebSocketSendHandshakeRequest",WebSocketReceiveHandshakeResponse:"WebSocketReceiveHandshakeResponse",WebSocketDestroy:"WebSocketDestroy",EmbedderCallback:"EmbedderCallback",SetLayerTreeId:"SetLayerTreeId",TracingStartedInPage:"TracingStartedInPage",TracingSessionIdForWorker:"TracingSessionIdForWorker",DecodeImage:"Decode Image",ResizeImage:"Resize Image",DrawLazyPixelRef:"Draw LazyPixelRef",DecodeLazyPixelRef:"Decode LazyPixelRef",LazyPixelRef:"LazyPixelRef",LayerTreeHostImplSnapshot:"cc::LayerTreeHostImpl",PictureSnapshot:"cc::Picture",DisplayItemListSnapshot:"cc::DisplayItemList",LatencyInfo:"LatencyInfo",LatencyInfoFlow:"LatencyInfo.Flow",InputLatencyMouseMove:"InputLatency::MouseMove",InputLatencyMouseWheel:"InputLatency::MouseWheel",ImplSideFling:"InputHandlerProxy::HandleGestureFling::started",GCIdleLazySweep:"ThreadState::performIdleLazySweep",GCCompleteSweep:"ThreadState::completeSweep",GCCollectGarbage:"BlinkGCMarking",CpuProfile:"CpuProfile"};WebInspector.TimelineModel.Category={Console:"blink.console",UserTiming:"blink.user_timing",LatencyInfo:"latencyInfo"};WebInspector.TimelineModel.WarningType={ForcedStyle:"ForcedStyle",ForcedLayout:"ForcedLayout",IdleDeadlineExceeded:"IdleDeadlineExceeded",V8Deopt:"V8Deopt"};WebInspector.TimelineModel.MainThreadName="main";WebInspector.TimelineModel.WorkerThreadName="DedicatedWorker Thread";WebInspector.TimelineModel.RendererMainThreadName="CrRendererMain";WebInspector.TimelineModel.AsyncEventGroup={animation:Symbol("animation"),console:Symbol("console"),userTiming:Symbol("userTiming"),input:Symbol("input")};WebInspector.TimelineModel.forEachEvent=function(events,onStartEvent,onEndEvent,onInstantEvent,startTime,endTime)
{startTime=startTime||0;endTime=endTime||Infinity;var stack=[];for(var i=0;i<events.length;++i){var e=events[i];if((e.endTime||e.startTime)<startTime)
continue;if(e.startTime>=endTime)
break;if(WebInspector.TracingModel.isAsyncPhase(e.phase)||WebInspector.TracingModel.isFlowPhase(e.phase))
continue;while(stack.length&&stack.peekLast().endTime<=e.startTime)
onEndEvent(stack.pop());if(e.duration){onStartEvent(e);stack.push(e);}else{onInstantEvent&&onInstantEvent(e,stack.peekLast()||null);}}
while(stack.length)
onEndEvent(stack.pop());};WebInspector.TimelineModel.DevToolsMetadataEvent={TracingStartedInBrowser:"TracingStartedInBrowser",TracingStartedInPage:"TracingStartedInPage",TracingSessionIdForWorker:"TracingSessionIdForWorker"};WebInspector.TimelineModel.VirtualThread=function(name)
{this.name=name;this.events=[];this.asyncEventsByGroup=new Map();};WebInspector.TimelineModel.VirtualThread.prototype={isWorker:function()
{return this.name===WebInspector.TimelineModel.WorkerThreadName;}};WebInspector.TimelineModel.Record=function(traceEvent)
{this._event=traceEvent;this._children=[];};WebInspector.TimelineModel.Record._compareStartTime=function(a,b)
{return a.startTime()<=b.startTime()?-1:1;};WebInspector.TimelineModel.Record.prototype={target:function()
{var threadName=this._event.thread.name();return threadName===WebInspector.TimelineModel.RendererMainThreadName?WebInspector.targetManager.targets()[0]||null:null;},children:function()
{return this._children;},startTime:function()
{return this._event.startTime;},endTime:function()
{return this._event.endTime||this._event.startTime;},thread:function()
{if(this._event.thread.name()===WebInspector.TimelineModel.RendererMainThreadName)
return WebInspector.TimelineModel.MainThreadName;return this._event.thread.name();},type:function()
{return WebInspector.TimelineModel._eventType(this._event);},getUserObject:function(key)
{if(key==="TimelineUIUtils::preview-element")
return this._event.previewElement;throw new Error("Unexpected key: "+key);},setUserObject:function(key,value)
{if(key!=="TimelineUIUtils::preview-element")
throw new Error("Unexpected key: "+key);this._event.previewElement=value;},traceEvent:function()
{return this._event;},_addChild:function(child)
{this._children.push(child);child.parent=this;}};WebInspector.TimelineModel.MetadataEvents;WebInspector.TimelineModel._eventType=function(event)
{if(event.hasCategory(WebInspector.TimelineModel.Category.Console))
return WebInspector.TimelineModel.RecordType.ConsoleTime;if(event.hasCategory(WebInspector.TimelineModel.Category.UserTiming))
return WebInspector.TimelineModel.RecordType.UserTiming;if(event.hasCategory(WebInspector.TimelineModel.Category.LatencyInfo))
return WebInspector.TimelineModel.RecordType.LatencyInfo;return event.name;};WebInspector.TimelineModel.prototype={forAllRecords:function(preOrderCallback,postOrderCallback)
{function processRecords(records,depth)
{for(var i=0;i<records.length;++i){var record=records[i];if(preOrderCallback&&preOrderCallback(record,depth))
return true;if(processRecords(record.children(),depth+1))
return true;if(postOrderCallback&&postOrderCallback(record,depth))
return true;}
return false;}
return processRecords(this._records,0);},forAllFilteredRecords:function(filters,callback)
{function processRecord(record,depth)
{var visible=WebInspector.TimelineModel.isVisible(filters,record.traceEvent());if(visible&&callback(record,depth))
return true;for(var i=0;i<record.children().length;++i){if(processRecord.call(this,record.children()[i],visible?depth+1:depth))
return true;}
return false;}
for(var i=0;i<this._records.length;++i)
processRecord.call(this,this._records[i],0);},records:function()
{return this._records;},cpuProfiles:function()
{return this._cpuProfiles;},sessionId:function()
{return this._sessionId;},targetByEvent:function(event)
{var workerId=this._workerIdByThread.get(event.thread);var mainTarget=WebInspector.targetManager.mainTarget();return workerId?mainTarget.workerManager.targetByWorkerId(workerId):mainTarget;},setEvents:function(tracingModel,produceTraceStartedInPage)
{this.reset();this._resetProcessingState();this._minimumRecordTime=tracingModel.minimumRecordTime();this._maximumRecordTime=tracingModel.maximumRecordTime();var metadataEvents=this._processMetadataEvents(tracingModel,!!produceTraceStartedInPage);if(Runtime.experiments.isEnabled("timelineShowAllProcesses")){var lastPageMetaEvent=metadataEvents.page.peekLast();for(var process of tracingModel.sortedProcesses()){for(var thread of process.sortedThreads())
this._processThreadEvents(0,Infinity,thread,thread===lastPageMetaEvent.thread);}}else{var startTime=0;for(var i=0,length=metadataEvents.page.length;i<length;i++){var metaEvent=metadataEvents.page[i];var process=metaEvent.thread.process();var endTime=i+1<length?metadataEvents.page[i+1].startTime:Infinity;this._currentPage=metaEvent.args["data"]&&metaEvent.args["data"]["page"];for(var thread of process.sortedThreads()){if(thread.name()===WebInspector.TimelineModel.WorkerThreadName){var workerMetaEvent=metadataEvents.workers.find(e=>e.args["data"]["workerThreadId"]===thread.id());if(!workerMetaEvent)
continue;var workerId=workerMetaEvent.args["data"]["workerId"];if(workerId)
this._workerIdByThread.set(thread,workerId);}
this._processThreadEvents(startTime,endTime,thread,thread===metaEvent.thread);}
startTime=endTime;}}
this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compareStartTime);this._processBrowserEvents(tracingModel);this._buildTimelineRecords();this._buildGPUEvents(tracingModel);this._insertFirstPaintEvent();this._resetProcessingState();},_processMetadataEvents:function(tracingModel,produceTraceStartedInPage)
{var metadataEvents=tracingModel.devToolsMetadataEvents();var pageDevToolsMetadataEvents=[];var workersDevToolsMetadataEvents=[];for(var event of metadataEvents){if(event.name===WebInspector.TimelineModel.DevToolsMetadataEvent.TracingStartedInPage){pageDevToolsMetadataEvents.push(event);}else if(event.name===WebInspector.TimelineModel.DevToolsMetadataEvent.TracingSessionIdForWorker){workersDevToolsMetadataEvents.push(event);}else if(event.name===WebInspector.TimelineModel.DevToolsMetadataEvent.TracingStartedInBrowser){console.assert(!this._mainFrameNodeId,"Multiple sessions in trace");this._mainFrameNodeId=event.args["frameTreeNodeId"];}}
if(!pageDevToolsMetadataEvents.length){var pageMetaEvent=produceTraceStartedInPage?this._makeMockPageMetadataEvent(tracingModel):null;if(!pageMetaEvent){console.error(WebInspector.TimelineModel.DevToolsMetadataEvent.TracingStartedInPage+" event not found.");return{page:[],workers:[]};}
pageDevToolsMetadataEvents.push(pageMetaEvent);}
var sessionId=pageDevToolsMetadataEvents[0].args["sessionId"]||pageDevToolsMetadataEvents[0].args["data"]["sessionId"];this._sessionId=sessionId;var mismatchingIds=new Set();function checkSessionId(event)
{var args=event.args;if(args["data"])
args=args["data"];var id=args["sessionId"];if(id===sessionId)
return true;mismatchingIds.add(id);return false;}
var result={page:pageDevToolsMetadataEvents.filter(checkSessionId).sort(WebInspector.TracingModel.Event.compareStartTime),workers:workersDevToolsMetadataEvents.filter(checkSessionId).sort(WebInspector.TracingModel.Event.compareStartTime)};if(mismatchingIds.size)
WebInspector.console.error("Timeline recording was started in more than one page simultaneously. Session id mismatch: "+this._sessionId+" and "+mismatchingIds.valuesArray()+".");return result;},_makeMockPageMetadataEvent:function(tracingModel)
{var rendererMainThreadName=WebInspector.TimelineModel.RendererMainThreadName;var process=tracingModel.sortedProcesses().filter(function(p){return p.threadByName(rendererMainThreadName);})[0];var thread=process&&process.threadByName(rendererMainThreadName);if(!thread)
return null;var pageMetaEvent=new WebInspector.TracingModel.Event(WebInspector.TracingModel.DevToolsMetadataEventCategory,WebInspector.TimelineModel.DevToolsMetadataEvent.TracingStartedInPage,WebInspector.TracingModel.Phase.Metadata,tracingModel.minimumRecordTime(),thread);pageMetaEvent.addArgs({"data":{"sessionId":"mockSessionId"}});return pageMetaEvent;},_insertFirstPaintEvent:function()
{if(!this._firstCompositeLayers)
return;var recordTypes=WebInspector.TimelineModel.RecordType;var i=this._inspectedTargetEvents.lowerBound(this._firstCompositeLayers,WebInspector.TracingModel.Event.compareStartTime);for(;i<this._inspectedTargetEvents.length&&this._inspectedTargetEvents[i].name!==recordTypes.DrawFrame;++i){}
if(i>=this._inspectedTargetEvents.length)
return;var drawFrameEvent=this._inspectedTargetEvents[i];var firstPaintEvent=new WebInspector.TracingModel.Event(drawFrameEvent.categoriesString,recordTypes.MarkFirstPaint,WebInspector.TracingModel.Phase.Instant,drawFrameEvent.startTime,drawFrameEvent.thread);this._mainThreadEvents.splice(this._mainThreadEvents.lowerBound(firstPaintEvent,WebInspector.TracingModel.Event.compareStartTime),0,firstPaintEvent);var firstPaintRecord=new WebInspector.TimelineModel.Record(firstPaintEvent);this._eventDividerRecords.splice(this._eventDividerRecords.lowerBound(firstPaintRecord,WebInspector.TimelineModel.Record._compareStartTime),0,firstPaintRecord);},_processBrowserEvents:function(tracingModel)
{var browserMain=WebInspector.TracingModel.browserMainThread(tracingModel);if(!browserMain)
return;browserMain.events().forEach(this._processBrowserEvent,this);var asyncEventsByGroup=new Map();this._processAsyncEvents(asyncEventsByGroup,browserMain.asyncEvents());this._mergeAsyncEvents(this._mainThreadAsyncEventsByGroup,asyncEventsByGroup);},_buildTimelineRecords:function()
{var topLevelRecords=this._buildTimelineRecordsForThread(this.mainThreadEvents());for(var i=0;i<topLevelRecords.length;i++){var record=topLevelRecords[i];if(WebInspector.TracingModel.isTopLevelEvent(record.traceEvent()))
this._mainThreadTasks.push(record);}
function processVirtualThreadEvents(virtualThread)
{var threadRecords=this._buildTimelineRecordsForThread(virtualThread.events);topLevelRecords=topLevelRecords.mergeOrdered(threadRecords,WebInspector.TimelineModel.Record._compareStartTime);}
this.virtualThreads().forEach(processVirtualThreadEvents.bind(this));this._records=topLevelRecords;},_buildGPUEvents:function(tracingModel)
{var thread=tracingModel.threadByName("GPU Process","CrGpuMain");if(!thread)
return;var gpuEventName=WebInspector.TimelineModel.RecordType.GPUTask;this._gpuEvents=thread.events().filter(event=>event.name===gpuEventName);},_buildTimelineRecordsForThread:function(threadEvents)
{var recordStack=[];var topLevelRecords=[];for(var i=0,size=threadEvents.length;i<size;++i){var event=threadEvents[i];for(var top=recordStack.peekLast();top&&top._event.endTime<=event.startTime;top=recordStack.peekLast())
recordStack.pop();if(event.phase===WebInspector.TracingModel.Phase.AsyncEnd||event.phase===WebInspector.TracingModel.Phase.NestableAsyncEnd)
continue;var parentRecord=recordStack.peekLast();if(WebInspector.TracingModel.isAsyncBeginPhase(event.phase)&&parentRecord&&event.endTime>parentRecord._event.endTime)
continue;var record=new WebInspector.TimelineModel.Record(event);if(WebInspector.TimelineModel.isMarkerEvent(event))
this._eventDividerRecords.push(record);if(!this._eventFilter.accept(event)&&!WebInspector.TracingModel.isTopLevelEvent(event))
continue;if(parentRecord)
parentRecord._addChild(record);else
topLevelRecords.push(record);if(event.endTime)
recordStack.push(record);}
return topLevelRecords;},_resetProcessingState:function()
{this._asyncEventTracker=new WebInspector.TimelineAsyncEventTracker();this._invalidationTracker=new WebInspector.InvalidationTracker();this._layoutInvalidate={};this._lastScheduleStyleRecalculation={};this._paintImageEventByPixelRefId={};this._lastPaintForLayer={};this._lastRecalculateStylesEvent=null;this._currentScriptEvent=null;this._eventStack=[];this._hadCommitLoad=false;this._firstCompositeLayers=null;this._knownInputEvents=new Set();this._currentPage=null;},_processThreadEvents:function(startTime,endTime,thread,isMainThread)
{var events=thread.events();var asyncEvents=thread.asyncEvents();var jsSamples;if(Runtime.experiments.isEnabled("timelineTracingJSProfile")){jsSamples=WebInspector.TimelineJSProfileProcessor.processRawV8Samples(events);}else{var cpuProfileEvent=events.peekLast();if(cpuProfileEvent&&cpuProfileEvent.name===WebInspector.TimelineModel.RecordType.CpuProfile){var cpuProfile=cpuProfileEvent.args["data"]["cpuProfile"];if(cpuProfile){var jsProfileModel=new WebInspector.CPUProfileDataModel(cpuProfile);this._cpuProfiles.push(jsProfileModel);jsSamples=WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile(jsProfileModel,thread);}}}
if(jsSamples&&jsSamples.length)
events=events.mergeOrdered(jsSamples,WebInspector.TracingModel.Event.orderedCompareStartTime);if(jsSamples||events.some(function(e){return e.name===WebInspector.TimelineModel.RecordType.JSSample;})){var jsFrameEvents=WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents(events);if(jsFrameEvents&&jsFrameEvents.length)
events=jsFrameEvents.mergeOrdered(events,WebInspector.TracingModel.Event.orderedCompareStartTime);}
var threadEvents;var threadAsyncEventsByGroup;if(isMainThread){threadEvents=this._mainThreadEvents;threadAsyncEventsByGroup=this._mainThreadAsyncEventsByGroup;}else{var virtualThread=new WebInspector.TimelineModel.VirtualThread(thread.name());this._virtualThreads.push(virtualThread);threadEvents=virtualThread.events;threadAsyncEventsByGroup=virtualThread.asyncEventsByGroup;}
this._eventStack=[];var i=events.lowerBound(startTime,function(time,event){return time-event.startTime;});var length=events.length;for(;i<length;i++){var event=events[i];if(endTime&&event.startTime>=endTime)
break;if(!this._processEvent(event))
continue;threadEvents.push(event);this._inspectedTargetEvents.push(event);}
this._processAsyncEvents(threadAsyncEventsByGroup,asyncEvents,startTime,endTime);if(thread.name()==="Compositor"){this._mergeAsyncEvents(this._mainThreadAsyncEventsByGroup,threadAsyncEventsByGroup);threadAsyncEventsByGroup.clear();}},_processAsyncEvents:function(asyncEventsByGroup,asyncEvents,startTime,endTime)
{var i=startTime?asyncEvents.lowerBound(startTime,function(time,asyncEvent){return time-asyncEvent.startTime;}):0;for(;i<asyncEvents.length;++i){var asyncEvent=asyncEvents[i];if(endTime&&asyncEvent.startTime>=endTime)
break;var asyncGroup=this._processAsyncEvent(asyncEvent);if(!asyncGroup)
continue;var groupAsyncEvents=asyncEventsByGroup.get(asyncGroup);if(!groupAsyncEvents){groupAsyncEvents=[];asyncEventsByGroup.set(asyncGroup,groupAsyncEvents);}
groupAsyncEvents.push(asyncEvent);}},_processEvent:function(event)
{var eventStack=this._eventStack;while(eventStack.length&&eventStack.peekLast().endTime<=event.startTime)
eventStack.pop();var recordTypes=WebInspector.TimelineModel.RecordType;if(this._currentScriptEvent&&event.startTime>this._currentScriptEvent.endTime)
this._currentScriptEvent=null;var eventData=event.args["data"]||event.args["beginData"]||{};if(eventData["stackTrace"])
event.stackTrace=eventData["stackTrace"];if(event.stackTrace&&event.name!==recordTypes.JSSample){for(var i=0;i<event.stackTrace.length;++i){--event.stackTrace[i].lineNumber;--event.stackTrace[i].columnNumber;}}
if(eventStack.length&&eventStack.peekLast().name===recordTypes.EventDispatch)
eventStack.peekLast().hasChildren=true;this._asyncEventTracker.processEvent(event);if(event.initiator&&event.initiator.url)
event.url=event.initiator.url;switch(event.name){case recordTypes.ResourceSendRequest:case recordTypes.WebSocketCreate:event.url=eventData["url"];event.initiator=eventStack.peekLast()||null;break;case recordTypes.ScheduleStyleRecalculation:this._lastScheduleStyleRecalculation[eventData["frame"]]=event;break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:this._invalidationTracker.didRecalcStyle(event);if(event.args["beginData"])
event.initiator=this._lastScheduleStyleRecalculation[event.args["beginData"]["frame"]];this._lastRecalculateStylesEvent=event;if(this._currentScriptEvent)
event.warning=WebInspector.TimelineModel.WarningType.ForcedStyle;break;case recordTypes.ScheduleStyleInvalidationTracking:case recordTypes.StyleRecalcInvalidationTracking:case recordTypes.StyleInvalidatorInvalidationTracking:case recordTypes.LayoutInvalidationTracking:case recordTypes.LayerInvalidationTracking:case recordTypes.PaintInvalidationTracking:case recordTypes.ScrollInvalidationTracking:this._invalidationTracker.addInvalidation(new WebInspector.InvalidationTrackingEvent(event));break;case recordTypes.InvalidateLayout:var layoutInitator=event;var frameId=eventData["frame"];if(!this._layoutInvalidate[frameId]&&this._lastRecalculateStylesEvent&&this._lastRecalculateStylesEvent.endTime>event.startTime)
layoutInitator=this._lastRecalculateStylesEvent.initiator;this._layoutInvalidate[frameId]=layoutInitator;break;case recordTypes.Layout:this._invalidationTracker.didLayout(event);var frameId=event.args["beginData"]["frame"];event.initiator=this._layoutInvalidate[frameId];if(event.args["endData"]){event.backendNodeId=event.args["endData"]["rootNode"];event.highlightQuad=event.args["endData"]["root"];}
this._layoutInvalidate[frameId]=null;if(this._currentScriptEvent)
event.warning=WebInspector.TimelineModel.WarningType.ForcedLayout;break;case recordTypes.FunctionCall:if(typeof eventData["scriptName"]==="string")
eventData["url"]=eventData["scriptName"];if(typeof eventData["scriptLine"]==="number")
eventData["lineNumber"]=eventData["scriptLine"];case recordTypes.EvaluateScript:case recordTypes.CompileScript:if(typeof eventData["lineNumber"]==="number")
--eventData["lineNumber"];if(typeof eventData["columnNumber"]==="number")
--eventData["columnNumber"];if(!this._currentScriptEvent)
this._currentScriptEvent=event;break;case recordTypes.SetLayerTreeId:this._inspectedTargetLayerTreeId=event.args["layerTreeId"]||event.args["data"]["layerTreeId"];break;case recordTypes.Paint:this._invalidationTracker.didPaint(event);event.highlightQuad=eventData["clip"];event.backendNodeId=eventData["nodeId"];if(!eventData["layerId"])
break;var layerId=eventData["layerId"];this._lastPaintForLayer[layerId]=event;break;case recordTypes.DisplayItemListSnapshot:case recordTypes.PictureSnapshot:var layerUpdateEvent=this._findAncestorEvent(recordTypes.UpdateLayer);if(!layerUpdateEvent||layerUpdateEvent.args["layerTreeId"]!==this._inspectedTargetLayerTreeId)
break;var paintEvent=this._lastPaintForLayer[layerUpdateEvent.args["layerId"]];if(paintEvent)
paintEvent.picture=event;break;case recordTypes.ScrollLayer:event.backendNodeId=eventData["nodeId"];break;case recordTypes.PaintImage:event.backendNodeId=eventData["nodeId"];event.url=eventData["url"];break;case recordTypes.DecodeImage:case recordTypes.ResizeImage:var paintImageEvent=this._findAncestorEvent(recordTypes.PaintImage);if(!paintImageEvent){var decodeLazyPixelRefEvent=this._findAncestorEvent(recordTypes.DecodeLazyPixelRef);paintImageEvent=decodeLazyPixelRefEvent&&this._paintImageEventByPixelRefId[decodeLazyPixelRefEvent.args["LazyPixelRef"]];}
if(!paintImageEvent)
break;event.backendNodeId=paintImageEvent.backendNodeId;event.url=paintImageEvent.url;break;case recordTypes.DrawLazyPixelRef:var paintImageEvent=this._findAncestorEvent(recordTypes.PaintImage);if(!paintImageEvent)
break;this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]]=paintImageEvent;event.backendNodeId=paintImageEvent.backendNodeId;event.url=paintImageEvent.url;break;case recordTypes.MarkDOMContent:case recordTypes.MarkLoad:var page=eventData["page"];if(page&&page!==this._currentPage)
return false;break;case recordTypes.CommitLoad:var page=eventData["page"];if(page&&page!==this._currentPage)
return false;if(!eventData["isMainFrame"])
break;this._hadCommitLoad=true;this._firstCompositeLayers=null;break;case recordTypes.CompositeLayers:if(!this._firstCompositeLayers&&this._hadCommitLoad)
this._firstCompositeLayers=event;break;case recordTypes.FireIdleCallback:if(event.duration>eventData["allottedMilliseconds"]){event.warning=WebInspector.TimelineModel.WarningType.IdleDeadlineExceeded;}
break;}
if(WebInspector.TracingModel.isAsyncPhase(event.phase))
return true;var duration=event.duration;if(!duration)
return true;if(eventStack.length){var parent=eventStack.peekLast();parent.selfTime-=duration;if(parent.selfTime<0){var epsilon=1e-3;if(parent.selfTime<-epsilon)
console.error("Children are longer than parent at "+event.startTime+" ("+(event.startTime-this.minimumRecordTime()).toFixed(3)+") by "+parent.selfTime.toFixed(3));parent.selfTime=0;}}
event.selfTime=duration;eventStack.push(event);return true;},_processBrowserEvent:function(event)
{if(event.name!==WebInspector.TimelineModel.RecordType.LatencyInfoFlow)
return;var frameId=event.args["frameTreeNodeId"];if(typeof frameId==="number"&&frameId===this._mainFrameNodeId)
this._knownInputEvents.add(event.bind_id);},_processAsyncEvent:function(asyncEvent)
{var groups=WebInspector.TimelineModel.AsyncEventGroup;if(asyncEvent.hasCategory(WebInspector.TimelineModel.Category.Console))
return groups.console;if(asyncEvent.hasCategory(WebInspector.TimelineModel.Category.UserTiming))
return groups.userTiming;if(asyncEvent.name===WebInspector.TimelineModel.RecordType.Animation)
return groups.animation;if(asyncEvent.hasCategory(WebInspector.TimelineModel.Category.LatencyInfo)||asyncEvent.name===WebInspector.TimelineModel.RecordType.ImplSideFling){var lastStep=asyncEvent.steps.peekLast();if(lastStep.phase!==WebInspector.TracingModel.Phase.AsyncEnd)
return null;var data=lastStep.args["data"];asyncEvent.causedFrame=!!(data&&data["INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT"]);if(asyncEvent.hasCategory(WebInspector.TimelineModel.Category.LatencyInfo)){if(!this._knownInputEvents.has(lastStep.id))
return null;if(asyncEvent.name===WebInspector.TimelineModel.RecordType.InputLatencyMouseMove&&!asyncEvent.causedFrame)
return null;var rendererMain=data["INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT"];if(rendererMain){var time=rendererMain["time"]/1000;asyncEvent.steps[0].timeWaitingForMainThread=time-asyncEvent.steps[0].startTime;}}
return groups.input;}
return null;},_findAncestorEvent:function(name)
{for(var i=this._eventStack.length-1;i>=0;--i){var event=this._eventStack[i];if(event.name===name)
return event;}
return null;},_mergeAsyncEvents:function(target,source)
{for(var group of source.keys()){var events=target.get(group)||[];events=events.mergeOrdered(source.get(group)||[],WebInspector.TracingModel.Event.compareStartAndEndTime);target.set(group,events);}},reset:function()
{this._virtualThreads=[];this._mainThreadEvents=[];this._mainThreadAsyncEventsByGroup=new Map();this._inspectedTargetEvents=[];this._records=[];this._mainThreadTasks=[];this._gpuEvents=[];this._eventDividerRecords=[];this._sessionId=null;this._mainFrameNodeId=null;this._cpuProfiles=[];this._workerIdByThread=new WeakMap();this._minimumRecordTime=0;this._maximumRecordTime=0;},minimumRecordTime:function()
{return this._minimumRecordTime;},maximumRecordTime:function()
{return this._maximumRecordTime;},inspectedTargetEvents:function()
{return this._inspectedTargetEvents;},mainThreadEvents:function()
{return this._mainThreadEvents;},_setMainThreadEvents:function(events)
{this._mainThreadEvents=events;},mainThreadAsyncEvents:function()
{return this._mainThreadAsyncEventsByGroup;},virtualThreads:function()
{return this._virtualThreads;},isEmpty:function()
{return this.minimumRecordTime()===0&&this.maximumRecordTime()===0;},mainThreadTasks:function()
{return this._mainThreadTasks;},gpuEvents:function()
{return this._gpuEvents;},eventDividerRecords:function()
{return this._eventDividerRecords;},networkRequests:function()
{var requests=new Map();var requestsList=[];var zeroStartRequestsList=[];var types=WebInspector.TimelineModel.RecordType;var resourceTypes=new Set([types.ResourceSendRequest,types.ResourceReceiveResponse,types.ResourceReceivedData,types.ResourceFinish]);var events=this.mainThreadEvents();for(var i=0;i<events.length;++i){var e=events[i];if(!resourceTypes.has(e.name))
continue;var id=e.args["data"]["requestId"];var request=requests.get(id);if(request){request.addEvent(e);}else{request=new WebInspector.TimelineModel.NetworkRequest(e);requests.set(id,request);if(request.startTime)
requestsList.push(request);else
zeroStartRequestsList.push(request);}}
return zeroStartRequestsList.concat(requestsList);}};WebInspector.TimelineModel.isVisible=function(filters,event)
{for(var i=0;i<filters.length;++i){if(!filters[i].accept(event))
return false;}
return true;};WebInspector.TimelineModel.isMarkerEvent=function(event)
{var recordTypes=WebInspector.TimelineModel.RecordType;switch(event.name){case recordTypes.TimeStamp:case recordTypes.MarkFirstPaint:return true;case recordTypes.MarkDOMContent:case recordTypes.MarkLoad:return event.args["data"]["isMainFrame"];default:return false;}};WebInspector.TimelineModel.NetworkRequest=function(event)
{this.startTime=event.name===WebInspector.TimelineModel.RecordType.ResourceSendRequest?event.startTime:0;this.endTime=Infinity;this.children=[];this.addEvent(event);};WebInspector.TimelineModel.NetworkRequest.prototype={addEvent:function(event)
{this.children.push(event);var recordType=WebInspector.TimelineModel.RecordType;this.startTime=Math.min(this.startTime,event.startTime);var eventData=event.args["data"];if(eventData["mimeType"])
this.mimeType=eventData["mimeType"];if("priority"in eventData)
this.priority=eventData["priority"];if(event.name===recordType.ResourceFinish)
this.endTime=event.startTime;if(!this.responseTime&&(event.name===recordType.ResourceReceiveResponse||event.name===recordType.ResourceReceivedData))
this.responseTime=event.startTime;if(!this.url)
this.url=eventData["url"];if(!this.requestMethod)
this.requestMethod=eventData["requestMethod"];}};WebInspector.TimelineModel.Filter=function()
{};WebInspector.TimelineModel.Filter.prototype={accept:function(event)
{return true;}};WebInspector.TimelineVisibleEventsFilter=function(visibleTypes)
{WebInspector.TimelineModel.Filter.call(this);this._visibleTypes=new Set(visibleTypes);};WebInspector.TimelineVisibleEventsFilter.prototype={accept:function(event)
{return this._visibleTypes.has(WebInspector.TimelineModel._eventType(event));},__proto__:WebInspector.TimelineModel.Filter.prototype};WebInspector.ExclusiveNameFilter=function(excludeNames)
{WebInspector.TimelineModel.Filter.call(this);this._excludeNames=new Set(excludeNames);};WebInspector.ExclusiveNameFilter.prototype={accept:function(event)
{return!this._excludeNames.has(event.name);},__proto__:WebInspector.TimelineModel.Filter.prototype};WebInspector.ExcludeTopLevelFilter=function()
{WebInspector.TimelineModel.Filter.call(this);};WebInspector.ExcludeTopLevelFilter.prototype={accept:function(event)
{return!WebInspector.TracingModel.isTopLevelEvent(event);},__proto__:WebInspector.TimelineModel.Filter.prototype};WebInspector.InvalidationTrackingEvent=function(event)
{this.type=event.name;this.startTime=event.startTime;this._tracingEvent=event;var eventData=event.args["data"];this.frame=eventData["frame"];this.nodeId=eventData["nodeId"];this.nodeName=eventData["nodeName"];this.paintId=eventData["paintId"];this.invalidationSet=eventData["invalidationSet"];this.invalidatedSelectorId=eventData["invalidatedSelectorId"];this.changedId=eventData["changedId"];this.changedClass=eventData["changedClass"];this.changedAttribute=eventData["changedAttribute"];this.changedPseudo=eventData["changedPseudo"];this.selectorPart=eventData["selectorPart"];this.extraData=eventData["extraData"];this.invalidationList=eventData["invalidationList"];this.cause={reason:eventData["reason"],stackTrace:eventData["stackTrace"]};if(!this.cause.reason&&this.cause.stackTrace&&this.type===WebInspector.TimelineModel.RecordType.LayoutInvalidationTracking)
this.cause.reason="Layout forced";};WebInspector.InvalidationCause;WebInspector.InvalidationTracker=function()
{this._initializePerFrameState();};WebInspector.InvalidationTracker.prototype={addInvalidation:function(invalidation)
{this._startNewFrameIfNeeded();if(!invalidation.nodeId&&!invalidation.paintId){console.error("Invalidation lacks node information.");console.error(invalidation);return;}
var recordTypes=WebInspector.TimelineModel.RecordType;if(invalidation.type===recordTypes.PaintInvalidationTracking&&invalidation.nodeId){var invalidations=this._invalidationsByNodeId[invalidation.nodeId]||[];for(var i=0;i<invalidations.length;++i)
invalidations[i].paintId=invalidation.paintId;return;}
if(invalidation.type===recordTypes.StyleRecalcInvalidationTracking&&invalidation.cause.reason==="StyleInvalidator")
return;var styleRecalcInvalidation=invalidation.type===recordTypes.ScheduleStyleInvalidationTracking||invalidation.type===recordTypes.StyleInvalidatorInvalidationTracking||invalidation.type===recordTypes.StyleRecalcInvalidationTracking;if(styleRecalcInvalidation){var duringRecalcStyle=invalidation.startTime&&this._lastRecalcStyle&&invalidation.startTime>=this._lastRecalcStyle.startTime&&invalidation.startTime<=this._lastRecalcStyle.endTime;if(duringRecalcStyle)
this._associateWithLastRecalcStyleEvent(invalidation);}
if(this._invalidations[invalidation.type])
this._invalidations[invalidation.type].push(invalidation);else
this._invalidations[invalidation.type]=[invalidation];if(invalidation.nodeId){if(this._invalidationsByNodeId[invalidation.nodeId])
this._invalidationsByNodeId[invalidation.nodeId].push(invalidation);else
this._invalidationsByNodeId[invalidation.nodeId]=[invalidation];}},didRecalcStyle:function(recalcStyleEvent)
{this._lastRecalcStyle=recalcStyleEvent;var types=[WebInspector.TimelineModel.RecordType.ScheduleStyleInvalidationTracking,WebInspector.TimelineModel.RecordType.StyleInvalidatorInvalidationTracking,WebInspector.TimelineModel.RecordType.StyleRecalcInvalidationTracking];for(var invalidation of this._invalidationsOfTypes(types))
this._associateWithLastRecalcStyleEvent(invalidation);},_associateWithLastRecalcStyleEvent:function(invalidation)
{if(invalidation.linkedRecalcStyleEvent)
return;var recordTypes=WebInspector.TimelineModel.RecordType;var recalcStyleFrameId=this._lastRecalcStyle.args["beginData"]["frame"];if(invalidation.type===recordTypes.StyleInvalidatorInvalidationTracking){this._addSyntheticStyleRecalcInvalidations(this._lastRecalcStyle,recalcStyleFrameId,invalidation);}else if(invalidation.type===recordTypes.ScheduleStyleInvalidationTracking){}else{this._addInvalidationToEvent(this._lastRecalcStyle,recalcStyleFrameId,invalidation);}
invalidation.linkedRecalcStyleEvent=true;},_addSyntheticStyleRecalcInvalidations:function(event,frameId,styleInvalidatorInvalidation)
{if(!styleInvalidatorInvalidation.invalidationList){this._addSyntheticStyleRecalcInvalidation(styleInvalidatorInvalidation._tracingEvent,styleInvalidatorInvalidation);return;}
if(!styleInvalidatorInvalidation.nodeId){console.error("Invalidation lacks node information.");console.error(invalidation);return;}
for(var i=0;i<styleInvalidatorInvalidation.invalidationList.length;i++){var setId=styleInvalidatorInvalidation.invalidationList[i]["id"];var lastScheduleStyleRecalculation;var nodeInvalidations=this._invalidationsByNodeId[styleInvalidatorInvalidation.nodeId]||[];for(var j=0;j<nodeInvalidations.length;j++){var invalidation=nodeInvalidations[j];if(invalidation.frame!==frameId||invalidation.invalidationSet!==setId||invalidation.type!==WebInspector.TimelineModel.RecordType.ScheduleStyleInvalidationTracking)
continue;lastScheduleStyleRecalculation=invalidation;}
if(!lastScheduleStyleRecalculation){console.error("Failed to lookup the event that scheduled a style invalidator invalidation.");continue;}
this._addSyntheticStyleRecalcInvalidation(lastScheduleStyleRecalculation._tracingEvent,styleInvalidatorInvalidation);}},_addSyntheticStyleRecalcInvalidation:function(baseEvent,styleInvalidatorInvalidation)
{var invalidation=new WebInspector.InvalidationTrackingEvent(baseEvent);invalidation.type=WebInspector.TimelineModel.RecordType.StyleRecalcInvalidationTracking;invalidation.synthetic=true;if(styleInvalidatorInvalidation.cause.reason)
invalidation.cause.reason=styleInvalidatorInvalidation.cause.reason;if(styleInvalidatorInvalidation.selectorPart)
invalidation.selectorPart=styleInvalidatorInvalidation.selectorPart;this.addInvalidation(invalidation);if(!invalidation.linkedRecalcStyleEvent)
this._associateWithLastRecalcStyleEvent(invalidation);},didLayout:function(layoutEvent)
{var layoutFrameId=layoutEvent.args["beginData"]["frame"];for(var invalidation of this._invalidationsOfTypes([WebInspector.TimelineModel.RecordType.LayoutInvalidationTracking])){if(invalidation.linkedLayoutEvent)
continue;this._addInvalidationToEvent(layoutEvent,layoutFrameId,invalidation);invalidation.linkedLayoutEvent=true;}},didPaint:function(paintEvent)
{this._didPaint=true;var layerId=paintEvent.args["data"]["layerId"];if(layerId)
this._lastPaintWithLayer=paintEvent;if(!this._lastPaintWithLayer)
return;var effectivePaintId=this._lastPaintWithLayer.args["data"]["nodeId"];var paintFrameId=paintEvent.args["data"]["frame"];var types=[WebInspector.TimelineModel.RecordType.StyleRecalcInvalidationTracking,WebInspector.TimelineModel.RecordType.LayoutInvalidationTracking,WebInspector.TimelineModel.RecordType.PaintInvalidationTracking,WebInspector.TimelineModel.RecordType.ScrollInvalidationTracking];for(var invalidation of this._invalidationsOfTypes(types)){if(invalidation.paintId===effectivePaintId)
this._addInvalidationToEvent(paintEvent,paintFrameId,invalidation);}},_addInvalidationToEvent:function(event,eventFrameId,invalidation)
{if(eventFrameId!==invalidation.frame)
return;if(!event.invalidationTrackingEvents)
event.invalidationTrackingEvents=[invalidation];else
event.invalidationTrackingEvents.push(invalidation);},_invalidationsOfTypes:function(types)
{var invalidations=this._invalidations;if(!types)
types=Object.keys(invalidations);function*generator()
{for(var i=0;i<types.length;++i){var invalidationList=invalidations[types[i]]||[];for(var j=0;j<invalidationList.length;++j)
yield invalidationList[j];}}
return generator();},_startNewFrameIfNeeded:function()
{if(!this._didPaint)
return;this._initializePerFrameState();},_initializePerFrameState:function()
{this._invalidations={};this._invalidationsByNodeId={};this._lastRecalcStyle=undefined;this._lastPaintWithLayer=undefined;this._didPaint=false;}};WebInspector.TimelineAsyncEventTracker=function()
{WebInspector.TimelineAsyncEventTracker._initialize();this._initiatorByType=new Map();for(var initiator of WebInspector.TimelineAsyncEventTracker._asyncEvents.keys())
this._initiatorByType.set(initiator,new Map());};WebInspector.TimelineAsyncEventTracker._initialize=function()
{if(WebInspector.TimelineAsyncEventTracker._asyncEvents)
return;var events=new Map();var type=WebInspector.TimelineModel.RecordType;events.set(type.TimerInstall,{causes:[type.TimerFire],joinBy:"timerId"});events.set(type.ResourceSendRequest,{causes:[type.ResourceReceiveResponse,type.ResourceReceivedData,type.ResourceFinish],joinBy:"requestId"});events.set(type.RequestAnimationFrame,{causes:[type.FireAnimationFrame],joinBy:"id"});events.set(type.RequestIdleCallback,{causes:[type.FireIdleCallback],joinBy:"id"});events.set(type.WebSocketCreate,{causes:[type.WebSocketSendHandshakeRequest,type.WebSocketReceiveHandshakeResponse,type.WebSocketDestroy],joinBy:"identifier"});WebInspector.TimelineAsyncEventTracker._asyncEvents=events;WebInspector.TimelineAsyncEventTracker._typeToInitiator=new Map();for(var entry of events){var types=entry[1].causes;for(type of types)
WebInspector.TimelineAsyncEventTracker._typeToInitiator.set(type,entry[0]);}};WebInspector.TimelineAsyncEventTracker.prototype={processEvent:function(event)
{var initiatorType=WebInspector.TimelineAsyncEventTracker._typeToInitiator.get(event.name);var isInitiator=!initiatorType;if(!initiatorType)
initiatorType=event.name;var initiatorInfo=WebInspector.TimelineAsyncEventTracker._asyncEvents.get(initiatorType);if(!initiatorInfo)
return;var id=event.args["data"][initiatorInfo.joinBy];if(!id)
return;var initiatorMap=this._initiatorByType.get(initiatorType);if(isInitiator)
initiatorMap.set(id,event);else
event.initiator=initiatorMap.get(id)||null;}};},{}],131:[function(require,module,exports){WebInspector.TimelineProfileTree={};WebInspector.TimelineProfileTree.Node=function()
{this.totalTime;this.selfTime;this.id;this.event;this.children;this.parent;this._isGroupNode=false;};WebInspector.TimelineProfileTree.Node.prototype={isGroupNode:function()
{return this._isGroupNode;}};WebInspector.TimelineProfileTree.buildTopDown=function(events,filters,startTime,endTime,eventIdCallback)
{var initialTime=1e7;var root=new WebInspector.TimelineProfileTree.Node();root.totalTime=initialTime;root.selfTime=initialTime;root.children=new Map();var parent=root;function onStartEvent(e)
{if(!WebInspector.TimelineModel.isVisible(filters,e))
return;var time=e.endTime?Math.min(endTime,e.endTime)-Math.max(startTime,e.startTime):0;var id=eventIdCallback?eventIdCallback(e):Symbol("uniqueEventId");if(!parent.children)
parent.children=new Map();var node=parent.children.get(id);if(node){node.selfTime+=time;node.totalTime+=time;}else{node=new WebInspector.TimelineProfileTree.Node();node.totalTime=time;node.selfTime=time;node.parent=parent;node.id=id;node.event=e;parent.children.set(id,node);}
parent.selfTime-=time;if(parent.selfTime<0){console.log("Error: Negative self of "+parent.selfTime,e);parent.selfTime=0;}
if(e.endTime)
parent=node;}
function onEndEvent(e)
{if(!WebInspector.TimelineModel.isVisible(filters,e))
return;parent=parent.parent;}
var instantEventCallback=eventIdCallback?undefined:onStartEvent;WebInspector.TimelineModel.forEachEvent(events,onStartEvent,onEndEvent,instantEventCallback,startTime,endTime);root.totalTime-=root.selfTime;root.selfTime=0;return root;};WebInspector.TimelineProfileTree.buildBottomUp=function(topDownTree,groupingCallback)
{var buRoot=new WebInspector.TimelineProfileTree.Node();buRoot.selfTime=0;buRoot.totalTime=0;buRoot.children=new Map();var nodesOnStack=new Set();if(topDownTree.children)
topDownTree.children.forEach(processNode);buRoot.totalTime=topDownTree.totalTime;function processNode(tdNode)
{var buParent=groupingCallback&&groupingCallback(tdNode)||buRoot;if(buParent!==buRoot){buRoot.children.set(buParent.id,buParent);buParent.parent=buRoot;}
appendNode(tdNode,buParent);var hadNode=nodesOnStack.has(tdNode.id);if(!hadNode)
nodesOnStack.add(tdNode.id);if(tdNode.children)
tdNode.children.forEach(processNode);if(!hadNode)
nodesOnStack.delete(tdNode.id);}
function appendNode(tdNode,buParent)
{var selfTime=tdNode.selfTime;var totalTime=tdNode.totalTime;buParent.selfTime+=selfTime;buParent.totalTime+=selfTime;while(tdNode.parent){if(!buParent.children)
buParent.children=new Map();var id=tdNode.id;var buNode=buParent.children.get(id);if(!buNode){buNode=new WebInspector.TimelineProfileTree.Node();buNode.selfTime=selfTime;buNode.totalTime=totalTime;buNode.event=tdNode.event;buNode.id=id;buNode.parent=buParent;buParent.children.set(id,buNode);}else{buNode.selfTime+=selfTime;if(!nodesOnStack.has(id))
buNode.totalTime+=totalTime;}
tdNode=tdNode.parent;buParent=buNode;}}
var rootChildren=buRoot.children;for(var item of rootChildren.entries()){if(item[1].selfTime===0)
rootChildren.delete(item[0]);}
return buRoot;};WebInspector.TimelineProfileTree.eventURL=function(event)
{var data=event.args["data"]||event.args["beginData"];if(data&&data["url"])
return data["url"];var frame=WebInspector.TimelineProfileTree.eventStackFrame(event);while(frame){var url=frame["url"];if(url)
return url;frame=frame.parent;}
return null;};WebInspector.TimelineProfileTree.eventStackFrame=function(event)
{if(event.name===WebInspector.TimelineModel.RecordType.JSFrame)
return event.args["data"]||null;var topFrame=event.stackTrace&&event.stackTrace[0];if(topFrame)
return topFrame;var initiator=event.initiator;return initiator&&initiator.stackTrace&&initiator.stackTrace[0]||null;};WebInspector.TimelineAggregator=function(titleMapper,categoryMapper)
{this._titleMapper=titleMapper;this._categoryMapper=categoryMapper;this._groupNodes=new Map();};WebInspector.TimelineAggregator.GroupBy={None:"None",EventName:"EventName",Category:"Category",Domain:"Domain",Subdomain:"Subdomain",URL:"URL"};WebInspector.TimelineAggregator.eventId=function(event)
{if(event.name===WebInspector.TimelineModel.RecordType.JSFrame){var data=event.args["data"];return"f:"+data["functionName"]+"@"+(data["scriptId"]||data["url"]||"");}
return event.name+":@"+WebInspector.TimelineProfileTree.eventURL(event);};WebInspector.TimelineAggregator._extensionInternalPrefix="extensions::";WebInspector.TimelineAggregator._groupNodeFlag=Symbol("groupNode");WebInspector.TimelineAggregator.isExtensionInternalURL=function(url)
{return url.startsWith(WebInspector.TimelineAggregator._extensionInternalPrefix);};WebInspector.TimelineAggregator.prototype={groupFunction:function(groupBy)
{var idMapper=this._nodeToGroupIdFunction(groupBy);return idMapper&&this._nodeToGroupNode.bind(this,idMapper);},performGrouping:function(root,groupBy)
{var nodeMapper=this.groupFunction(groupBy);if(!nodeMapper)
return root;for(var node of root.children.values()){var groupNode=nodeMapper(node);groupNode.parent=root;groupNode.selfTime+=node.selfTime;groupNode.totalTime+=node.totalTime;groupNode.children.set(node.id,node);node.parent=root;}
root.children=this._groupNodes;return root;},_nodeToGroupIdFunction:function(groupBy)
{function groupByURL(node)
{return WebInspector.TimelineProfileTree.eventURL(node.event)||"";}
function groupByDomain(groupSubdomains,node)
{var url=WebInspector.TimelineProfileTree.eventURL(node.event)||"";if(WebInspector.TimelineAggregator.isExtensionInternalURL(url))
return WebInspector.TimelineAggregator._extensionInternalPrefix;var parsedURL=url.asParsedURL();if(!parsedURL)
return"";if(parsedURL.scheme==="chrome-extension")
return parsedURL.scheme+"://"+parsedURL.host;if(!groupSubdomains)
return parsedURL.host;if(/^[.0-9]+$/.test(parsedURL.host))
return parsedURL.host;var domainMatch=/([^.]*\.)?[^.]*$/.exec(parsedURL.host);return domainMatch&&domainMatch[0]||"";}
switch(groupBy){case WebInspector.TimelineAggregator.GroupBy.None:return null;case WebInspector.TimelineAggregator.GroupBy.EventName:return node=>node.event?this._titleMapper(node.event):"";case WebInspector.TimelineAggregator.GroupBy.Category:return node=>node.event?this._categoryMapper(node.event):"";case WebInspector.TimelineAggregator.GroupBy.Subdomain:return groupByDomain.bind(null,false);case WebInspector.TimelineAggregator.GroupBy.Domain:return groupByDomain.bind(null,true);case WebInspector.TimelineAggregator.GroupBy.URL:return groupByURL;default:return null;}},_buildGroupNode:function(id,event)
{var groupNode=new WebInspector.TimelineProfileTree.Node();groupNode.id=id;groupNode.selfTime=0;groupNode.totalTime=0;groupNode.children=new Map();groupNode.event=event;groupNode._isGroupNode=true;this._groupNodes.set(id,groupNode);return groupNode;},_nodeToGroupNode:function(nodeToGroupId,node)
{var id=nodeToGroupId(node);return this._groupNodes.get(id)||this._buildGroupNode(id,node.event);}};},{}],132:[function(require,module,exports){WebInspector.SortableDataGrid=function(columnsArray,editCallback,deleteCallback,refreshCallback,contextMenuCallback)
{WebInspector.ViewportDataGrid.call(this,columnsArray,editCallback,deleteCallback,refreshCallback,contextMenuCallback);this._sortingFunction=WebInspector.SortableDataGrid.TrivialComparator;this.setRootNode(new WebInspector.SortableDataGridNode());};WebInspector.SortableDataGrid.NodeComparator;WebInspector.SortableDataGrid.TrivialComparator=function(a,b)
{return 0;};WebInspector.SortableDataGrid.NumericComparator=function(columnIdentifier,a,b)
{var aValue=a.data[columnIdentifier];var bValue=b.data[columnIdentifier];var aNumber=Number(aValue instanceof Node?aValue.textContent:aValue);var bNumber=Number(bValue instanceof Node?bValue.textContent:bValue);return aNumber<bNumber?-1:aNumber>bNumber?1:0;};WebInspector.SortableDataGrid.StringComparator=function(columnIdentifier,a,b)
{var aValue=a.data[columnIdentifier];var bValue=b.data[columnIdentifier];var aString=aValue instanceof Node?aValue.textContent:String(aValue);var bString=bValue instanceof Node?bValue.textContent:String(bValue);return aString<bString?-1:aString>bString?1:0;};WebInspector.SortableDataGrid.Comparator=function(comparator,reverseMode,a,b)
{return reverseMode?comparator(b,a):comparator(a,b);};WebInspector.SortableDataGrid.create=function(columnNames,values)
{var numColumns=columnNames.length;if(!numColumns)
return null;var columns=[];for(var i=0;i<columnNames.length;++i)
columns.push({title:columnNames[i],width:columnNames[i].length,sortable:true});var nodes=[];for(var i=0;i<values.length/numColumns;++i){var data={};for(var j=0;j<columnNames.length;++j)
data[j]=values[numColumns*i+j];var node=new WebInspector.SortableDataGridNode(data);node.selectable=false;nodes.push(node);}
var dataGrid=new WebInspector.SortableDataGrid(columns);var length=nodes.length;var rootNode=dataGrid.rootNode();for(var i=0;i<length;++i)
rootNode.appendChild(nodes[i]);dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged,sortDataGrid);function sortDataGrid()
{var nodes=dataGrid.rootNode().children;var sortColumnIdentifier=dataGrid.sortColumnIdentifier();if(!sortColumnIdentifier)
return;var columnIsNumeric=true;for(var i=0;i<nodes.length;i++){var value=nodes[i].data[sortColumnIdentifier];if(isNaN(value instanceof Node?value.textContent:value)){columnIsNumeric=false;break;}}
var comparator=columnIsNumeric?WebInspector.SortableDataGrid.NumericComparator:WebInspector.SortableDataGrid.StringComparator;dataGrid.sortNodes(comparator.bind(null,sortColumnIdentifier),!dataGrid.isSortOrderAscending());}
return dataGrid;};WebInspector.SortableDataGrid.prototype={insertChild:function(node)
{var root=this.rootNode();root.insertChildOrdered(node);},sortNodes:function(comparator,reverseMode)
{this._sortingFunction=WebInspector.SortableDataGrid.Comparator.bind(null,comparator,reverseMode);this._rootNode._sortChildren(reverseMode);this.scheduleUpdateStructure();},__proto__:WebInspector.ViewportDataGrid.prototype};WebInspector.SortableDataGridNode=function(data,hasChildren)
{WebInspector.ViewportDataGridNode.call(this,data,hasChildren);};WebInspector.SortableDataGridNode.prototype={insertChildOrdered:function(node)
{this.insertChild(node,this.children.upperBound(node,this.dataGrid._sortingFunction));},_sortChildren:function()
{this.children.sort(this.dataGrid._sortingFunction);for(var i=0;i<this.children.length;++i)
this.children[i].recalculateSiblings(i);for(var child of this.children)
child._sortChildren();},__proto__:WebInspector.ViewportDataGridNode.prototype};},{}],133:[function(require,module,exports){(function(process){exports=module.exports=require('./debug');exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage='undefined'!=typeof chrome&&'undefined'!=typeof chrome.storage?chrome.storage.local:localstorage();exports.colors=['lightseagreen','forestgreen','goldenrod','dodgerblue','darkorchid','crimson'];function useColors(){if(typeof window!=='undefined'&&window.process&&window.process.type==='renderer'){return true;}
return typeof document!=='undefined'&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=='undefined'&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=='undefined'&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=='undefined'&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);}
exports.formatters.j=function(v){try{return JSON.stringify(v);}catch(err){return'[UnexpectedJSONParseError]: '+err.message;}};function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?'%c':'')+
this.namespace+(useColors?' %c':' ')+
args[0]+(useColors?'%c ':' ')+'+'+exports.humanize(this.diff);if(!useColors)return;var c='color: '+this.color;args.splice(1,0,c,'color: inherit');var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,function(match){if('%%'===match)return;index++;if('%c'===match){lastC=index;}});args.splice(lastC,0,c);}
function log(){return'object'===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments);}
function save(namespaces){try{if(null==namespaces){exports.storage.removeItem('debug');}else{exports.storage.debug=namespaces;}}catch(e){}}
function load(){var r;try{r=exports.storage.debug;}catch(e){}
if(!r&&typeof process!=='undefined'&&'env'in process){r=process.env.DEBUG;}
return r;}
exports.enable(load());function localstorage(){try{return window.localStorage;}catch(e){}}}).call(this,require('_process'));},{"./debug":134,"_process":77}],134:[function(require,module,exports){exports=module.exports=createDebug.debug=createDebug['default']=createDebug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.humanize=require('ms');exports.names=[];exports.skips=[];exports.formatters={};var prevTime;function selectColor(namespace){var hash=0,i;for(i in namespace){hash=(hash<<5)-hash+namespace.charCodeAt(i);hash|=0;}
return exports.colors[Math.abs(hash)%exports.colors.length];}
function createDebug(namespace){function debug(){if(!debug.enabled)return;var self=debug;var curr=+new Date();var ms=curr-(prevTime||curr);self.diff=ms;self.prev=prevTime;self.curr=curr;prevTime=curr;var args=new Array(arguments.length);for(var i=0;i<args.length;i++){args[i]=arguments[i];}
args[0]=exports.coerce(args[0]);if('string'!==typeof args[0]){args.unshift('%O');}
var index=0;args[0]=args[0].replace(/%([a-zA-Z%])/g,function(match,format){if(match==='%%')return match;index++;var formatter=exports.formatters[format];if('function'===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--;}
return match;});exports.formatArgs.call(self,args);var logFn=debug.log||exports.log||console.log.bind(console);logFn.apply(self,args);}
debug.namespace=namespace;debug.enabled=exports.enabled(namespace);debug.useColors=exports.useColors();debug.color=selectColor(namespace);if('function'===typeof exports.init){exports.init(debug);}
return debug;}
function enable(namespaces){exports.save(namespaces);exports.names=[];exports.skips=[];var split=(typeof namespaces==='string'?namespaces:'').split(/[\s,]+/);var len=split.length;for(var i=0;i<len;i++){if(!split[i])continue;namespaces=split[i].replace(/\*/g,'.*?');if(namespaces[0]==='-'){exports.skips.push(new RegExp('^'+namespaces.substr(1)+'$'));}else{exports.names.push(new RegExp('^'+namespaces+'$'));}}}
function disable(){exports.enable('');}
function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;i++){if(exports.skips[i].test(name)){return false;}}
for(i=0,len=exports.names.length;i<len;i++){if(exports.names[i].test(name)){return true;}}
return false;}
function coerce(val){if(val instanceof Error)return val.stack||val.message;return val;}},{"ms":146}],135:[function(require,module,exports){module.exports=function(WebInspector){function TimelineModelTreeView(model){this._rootNode=model;}
TimelineModelTreeView.prototype.sortingChanged=function(sortItem,sortOrder){if(!sortItem)
return;var sortFunction;switch(sortItem){case'startTime':sortFunction=compareStartTime;break;case'self':sortFunction=compareNumericField.bind(null,'selfTime');break;case'total':sortFunction=compareNumericField.bind(null,'totalTime');break;case'activity':sortFunction=compareName;break;default:console.assert(false,'Unknown sort field: '+sortItem);return;}
return this.sortNodes(sortFunction,sortOrder!=='asc');function compareNumericField(field,a,b){var nodeA=a[1];var nodeB=b[1];return nodeA[field]-nodeB[field];}
function compareStartTime(a,b){var nodeA=a[1];var nodeB=b[1];return nodeA.event.startTime-nodeB.event.startTime;}
function compareName(a,b){var nodeA=a[1];var nodeB=b[1];var nameA=WebInspector.TimelineTreeView.eventNameForSorting(nodeA.event);var nameB=WebInspector.TimelineTreeView.eventNameForSorting(nodeB.event);return nameA.localeCompare(nameB);}};TimelineModelTreeView.prototype.sortNodes=function(comparator,reverseMode){this._sortingFunction=WebInspector.SortableDataGrid.Comparator.bind(null,comparator,reverseMode);sortChildren(this._rootNode,this._sortingFunction,reverseMode);};function sortChildren(parent,sortingFunction){if(!parent.children)return;parent.children=new Map([...parent.children.entries()].sort(sortingFunction));for(var i=0;i<parent.children.length;++i)
recalculateSiblings(parent.children[i],i);for(var child of parent.children.values())
sortChildren(child,sortingFunction);}
function recalculateSiblings(node,myIndex){if(!node.parent)
return;var previousChild=node.parent.children[myIndex-1]||null;if(previousChild)
previousChild.nextSibling=node;node.previousSibling=previousChild;var nextChild=node.parent.children[myIndex+1]||null;if(nextChild)
nextChild.previousSibling=node;node.nextSibling=nextChild;}
return TimelineModelTreeView;};},{}],136:[function(require,module,exports){(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==='object'&&typeof module==='object')
module.exports=factory();else
if(typeof define==='function'&&define.amd)
define([],factory);else
if(typeof exports==='object')
exports["esprima"]=factory();else
root["esprima"]=factory();})(this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])
return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports;}
__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0);}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var comment_handler_1=__webpack_require__(1);var jsx_parser_1=__webpack_require__(3);var parser_1=__webpack_require__(8);var tokenizer_1=__webpack_require__(15);function parse(code,options,delegate){var commentHandler=null;var proxyDelegate=function(node,metadata){if(delegate){delegate(node,metadata);}
if(commentHandler){commentHandler.visit(node,metadata);}};var parserDelegate=typeof delegate==='function'?proxyDelegate:null;var collectComment=false;if(options){collectComment=typeof options.comment==='boolean'&&options.comment;var attachComment=typeof options.attachComment==='boolean'&&options.attachComment;if(collectComment||attachComment){commentHandler=new comment_handler_1.CommentHandler();commentHandler.attach=attachComment;options.comment=true;parserDelegate=proxyDelegate;}}
var isModule=false;if(options&&typeof options.sourceType==='string'){isModule=options.sourceType==='module';}
var parser;if(options&&typeof options.jsx==='boolean'&&options.jsx){parser=new jsx_parser_1.JSXParser(code,options,parserDelegate);}else
{parser=new parser_1.Parser(code,options,parserDelegate);}
var program=isModule?parser.parseModule():parser.parseScript();var ast=program;if(collectComment&&commentHandler){ast.comments=commentHandler.comments;}
if(parser.config.tokens){ast.tokens=parser.tokens;}
if(parser.config.tolerant){ast.errors=parser.errorHandler.errors;}
return ast;}
exports.parse=parse;function parseModule(code,options,delegate){var parsingOptions=options||{};parsingOptions.sourceType='module';return parse(code,parsingOptions,delegate);}
exports.parseModule=parseModule;function parseScript(code,options,delegate){var parsingOptions=options||{};parsingOptions.sourceType='script';return parse(code,parsingOptions,delegate);}
exports.parseScript=parseScript;function tokenize(code,options,delegate){var tokenizer=new tokenizer_1.Tokenizer(code,options);var tokens;tokens=[];try{while(true){var token=tokenizer.getNextToken();if(!token){break;}
if(delegate){token=delegate(token);}
tokens.push(token);}}
catch(e){tokenizer.errorHandler.tolerate(e);}
if(tokenizer.errorHandler.tolerant){tokens.errors=tokenizer.errors();}
return tokens;}
exports.tokenize=tokenize;var syntax_1=__webpack_require__(2);exports.Syntax=syntax_1.Syntax;exports.version='4.0.0';},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var syntax_1=__webpack_require__(2);var CommentHandler=function(){function CommentHandler(){this.attach=false;this.comments=[];this.stack=[];this.leading=[];this.trailing=[];}
CommentHandler.prototype.insertInnerComments=function(node,metadata){if(node.type===syntax_1.Syntax.BlockStatement&&node.body.length===0){var innerComments=[];for(var i=this.leading.length-1;i>=0;--i){var entry=this.leading[i];if(metadata.end.offset>=entry.start){innerComments.unshift(entry.comment);this.leading.splice(i,1);this.trailing.splice(i,1);}}
if(innerComments.length){node.innerComments=innerComments;}}};CommentHandler.prototype.findTrailingComments=function(metadata){var trailingComments=[];if(this.trailing.length>0){for(var i=this.trailing.length-1;i>=0;--i){var entry_1=this.trailing[i];if(entry_1.start>=metadata.end.offset){trailingComments.unshift(entry_1.comment);}}
this.trailing.length=0;return trailingComments;}
var entry=this.stack[this.stack.length-1];if(entry&&entry.node.trailingComments){var firstComment=entry.node.trailingComments[0];if(firstComment&&firstComment.range[0]>=metadata.end.offset){trailingComments=entry.node.trailingComments;delete entry.node.trailingComments;}}
return trailingComments;};CommentHandler.prototype.findLeadingComments=function(metadata){var leadingComments=[];var target;while(this.stack.length>0){var entry=this.stack[this.stack.length-1];if(entry&&entry.start>=metadata.start.offset){target=entry.node;this.stack.pop();}else
{break;}}
if(target){var count=target.leadingComments?target.leadingComments.length:0;for(var i=count-1;i>=0;--i){var comment=target.leadingComments[i];if(comment.range[1]<=metadata.start.offset){leadingComments.unshift(comment);target.leadingComments.splice(i,1);}}
if(target.leadingComments&&target.leadingComments.length===0){delete target.leadingComments;}
return leadingComments;}
for(var i=this.leading.length-1;i>=0;--i){var entry=this.leading[i];if(entry.start<=metadata.start.offset){leadingComments.unshift(entry.comment);this.leading.splice(i,1);}}
return leadingComments;};CommentHandler.prototype.visitNode=function(node,metadata){if(node.type===syntax_1.Syntax.Program&&node.body.length>0){return;}
this.insertInnerComments(node,metadata);var trailingComments=this.findTrailingComments(metadata);var leadingComments=this.findLeadingComments(metadata);if(leadingComments.length>0){node.leadingComments=leadingComments;}
if(trailingComments.length>0){node.trailingComments=trailingComments;}
this.stack.push({node:node,start:metadata.start.offset});};CommentHandler.prototype.visitComment=function(node,metadata){var type=node.type[0]==='L'?'Line':'Block';var comment={type:type,value:node.value};if(node.range){comment.range=node.range;}
if(node.loc){comment.loc=node.loc;}
this.comments.push(comment);if(this.attach){var entry={comment:{type:type,value:node.value,range:[metadata.start.offset,metadata.end.offset]},start:metadata.start.offset};if(node.loc){entry.comment.loc=node.loc;}
node.type=type;this.leading.push(entry);this.trailing.push(entry);}};CommentHandler.prototype.visit=function(node,metadata){if(node.type==='LineComment'){this.visitComment(node,metadata);}else
if(node.type==='BlockComment'){this.visitComment(node,metadata);}else
if(this.attach){this.visitNode(node,metadata);}};return CommentHandler;}();exports.CommentHandler=CommentHandler;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Syntax={AssignmentExpression:'AssignmentExpression',AssignmentPattern:'AssignmentPattern',ArrayExpression:'ArrayExpression',ArrayPattern:'ArrayPattern',ArrowFunctionExpression:'ArrowFunctionExpression',AwaitExpression:'AwaitExpression',BlockStatement:'BlockStatement',BinaryExpression:'BinaryExpression',BreakStatement:'BreakStatement',CallExpression:'CallExpression',CatchClause:'CatchClause',ClassBody:'ClassBody',ClassDeclaration:'ClassDeclaration',ClassExpression:'ClassExpression',ConditionalExpression:'ConditionalExpression',ContinueStatement:'ContinueStatement',DoWhileStatement:'DoWhileStatement',DebuggerStatement:'DebuggerStatement',EmptyStatement:'EmptyStatement',ExportAllDeclaration:'ExportAllDeclaration',ExportDefaultDeclaration:'ExportDefaultDeclaration',ExportNamedDeclaration:'ExportNamedDeclaration',ExportSpecifier:'ExportSpecifier',ExpressionStatement:'ExpressionStatement',ForStatement:'ForStatement',ForOfStatement:'ForOfStatement',ForInStatement:'ForInStatement',FunctionDeclaration:'FunctionDeclaration',FunctionExpression:'FunctionExpression',Identifier:'Identifier',IfStatement:'IfStatement',ImportDeclaration:'ImportDeclaration',ImportDefaultSpecifier:'ImportDefaultSpecifier',ImportNamespaceSpecifier:'ImportNamespaceSpecifier',ImportSpecifier:'ImportSpecifier',Literal:'Literal',LabeledStatement:'LabeledStatement',LogicalExpression:'LogicalExpression',MemberExpression:'MemberExpression',MetaProperty:'MetaProperty',MethodDefinition:'MethodDefinition',NewExpression:'NewExpression',ObjectExpression:'ObjectExpression',ObjectPattern:'ObjectPattern',Program:'Program',Property:'Property',RestElement:'RestElement',ReturnStatement:'ReturnStatement',SequenceExpression:'SequenceExpression',SpreadElement:'SpreadElement',Super:'Super',SwitchCase:'SwitchCase',SwitchStatement:'SwitchStatement',TaggedTemplateExpression:'TaggedTemplateExpression',TemplateElement:'TemplateElement',TemplateLiteral:'TemplateLiteral',ThisExpression:'ThisExpression',ThrowStatement:'ThrowStatement',TryStatement:'TryStatement',UnaryExpression:'UnaryExpression',UpdateExpression:'UpdateExpression',VariableDeclaration:'VariableDeclaration',VariableDeclarator:'VariableDeclarator',WhileStatement:'WhileStatement',WithStatement:'WithStatement',YieldExpression:'YieldExpression'};},function(module,exports,__webpack_require__){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b;}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p];};return function(d,b){extendStatics(d,b);function __(){this.constructor=d;}
d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __());};}();Object.defineProperty(exports,"__esModule",{value:true});var character_1=__webpack_require__(4);var JSXNode=__webpack_require__(5);var jsx_syntax_1=__webpack_require__(6);var Node=__webpack_require__(7);var parser_1=__webpack_require__(8);var token_1=__webpack_require__(13);var xhtml_entities_1=__webpack_require__(14);token_1.TokenName[100]='JSXIdentifier';token_1.TokenName[101]='JSXText';function getQualifiedElementName(elementName){var qualifiedName;switch(elementName.type){case jsx_syntax_1.JSXSyntax.JSXIdentifier:var id=elementName;qualifiedName=id.name;break;case jsx_syntax_1.JSXSyntax.JSXNamespacedName:var ns=elementName;qualifiedName=getQualifiedElementName(ns.namespace)+':'+
getQualifiedElementName(ns.name);break;case jsx_syntax_1.JSXSyntax.JSXMemberExpression:var expr=elementName;qualifiedName=getQualifiedElementName(expr.object)+'.'+
getQualifiedElementName(expr.property);break;default:break;}
return qualifiedName;}
var JSXParser=function(_super){__extends(JSXParser,_super);function JSXParser(code,options,delegate){return _super.call(this,code,options,delegate)||this;}
JSXParser.prototype.parsePrimaryExpression=function(){return this.match('<')?this.parseJSXRoot():_super.prototype.parsePrimaryExpression.call(this);};JSXParser.prototype.startJSX=function(){this.scanner.index=this.startMarker.index;this.scanner.lineNumber=this.startMarker.line;this.scanner.lineStart=this.startMarker.index-this.startMarker.column;};JSXParser.prototype.finishJSX=function(){this.nextToken();};JSXParser.prototype.reenterJSX=function(){this.startJSX();this.expectJSX('}');if(this.config.tokens){this.tokens.pop();}};JSXParser.prototype.createJSXNode=function(){this.collectComments();return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart};};JSXParser.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart};};JSXParser.prototype.scanXHTMLEntity=function(quote){var result='&';var valid=true;var terminated=false;var numeric=false;var hex=false;while(!this.scanner.eof()&&valid&&!terminated){var ch=this.scanner.source[this.scanner.index];if(ch===quote){break;}
terminated=ch===';';result+=ch;++this.scanner.index;if(!terminated){switch(result.length){case 2:numeric=ch==='#';break;case 3:if(numeric){hex=ch==='x';valid=hex||character_1.Character.isDecimalDigit(ch.charCodeAt(0));numeric=numeric&&!hex;}
break;default:valid=valid&&!(numeric&&!character_1.Character.isDecimalDigit(ch.charCodeAt(0)));valid=valid&&!(hex&&!character_1.Character.isHexDigit(ch.charCodeAt(0)));break;}}}
if(valid&&terminated&&result.length>2){var str=result.substr(1,result.length-2);if(numeric&&str.length>1){result=String.fromCharCode(parseInt(str.substr(1),10));}else
if(hex&&str.length>2){result=String.fromCharCode(parseInt('0'+str.substr(1),16));}else
if(!numeric&&!hex&&xhtml_entities_1.XHTMLEntities[str]){result=xhtml_entities_1.XHTMLEntities[str];}}
return result;};JSXParser.prototype.lexJSX=function(){var cp=this.scanner.source.charCodeAt(this.scanner.index);if(cp===60||cp===62||cp===47||cp===58||cp===61||cp===123||cp===125){var value=this.scanner.source[this.scanner.index++];return{type:7,value:value,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index};}
if(cp===34||cp===39){var start=this.scanner.index;var quote=this.scanner.source[this.scanner.index++];var str='';while(!this.scanner.eof()){var ch=this.scanner.source[this.scanner.index++];if(ch===quote){break;}else
if(ch==='&'){str+=this.scanXHTMLEntity(quote);}else
{str+=ch;}}
return{type:8,value:str,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index};}
if(cp===46){var n1=this.scanner.source.charCodeAt(this.scanner.index+1);var n2=this.scanner.source.charCodeAt(this.scanner.index+2);var value=n1===46&&n2===46?'...':'.';var start=this.scanner.index;this.scanner.index+=value.length;return{type:7,value:value,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index};}
if(cp===96){return{type:10,value:'',lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};}
if(character_1.Character.isIdentifierStart(cp)&&cp!==92){var start=this.scanner.index;++this.scanner.index;while(!this.scanner.eof()){var ch=this.scanner.source.charCodeAt(this.scanner.index);if(character_1.Character.isIdentifierPart(ch)&&ch!==92){++this.scanner.index;}else
if(ch===45){++this.scanner.index;}else
{break;}}
var id=this.scanner.source.slice(start,this.scanner.index);return{type:100,value:id,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index};}
return this.scanner.lex();};JSXParser.prototype.nextJSXToken=function(){this.collectComments();this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var token=this.lexJSX();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;if(this.config.tokens){this.tokens.push(this.convertToken(token));}
return token;};JSXParser.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var start=this.scanner.index;var text='';while(!this.scanner.eof()){var ch=this.scanner.source[this.scanner.index];if(ch==='{'||ch==='<'){break;}
++this.scanner.index;text+=ch;if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){++this.scanner.lineNumber;if(ch==='\r'&&this.scanner.source[this.scanner.index]==='\n'){++this.scanner.index;}
this.scanner.lineStart=this.scanner.index;}}
this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var token={type:101,value:text,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index};if(text.length>0&&this.config.tokens){this.tokens.push(this.convertToken(token));}
return token;};JSXParser.prototype.peekJSXToken=function(){var state=this.scanner.saveState();this.scanner.scanComments();var next=this.lexJSX();this.scanner.restoreState(state);return next;};JSXParser.prototype.expectJSX=function(value){var token=this.nextJSXToken();if(token.type!==7||token.value!==value){this.throwUnexpectedToken(token);}};JSXParser.prototype.matchJSX=function(value){var next=this.peekJSXToken();return next.type===7&&next.value===value;};JSXParser.prototype.parseJSXIdentifier=function(){var node=this.createJSXNode();var token=this.nextJSXToken();if(token.type!==100){this.throwUnexpectedToken(token);}
return this.finalize(node,new JSXNode.JSXIdentifier(token.value));};JSXParser.prototype.parseJSXElementName=function(){var node=this.createJSXNode();var elementName=this.parseJSXIdentifier();if(this.matchJSX(':')){var namespace=elementName;this.expectJSX(':');var name_1=this.parseJSXIdentifier();elementName=this.finalize(node,new JSXNode.JSXNamespacedName(namespace,name_1));}else
if(this.matchJSX('.')){while(this.matchJSX('.')){var object=elementName;this.expectJSX('.');var property=this.parseJSXIdentifier();elementName=this.finalize(node,new JSXNode.JSXMemberExpression(object,property));}}
return elementName;};JSXParser.prototype.parseJSXAttributeName=function(){var node=this.createJSXNode();var attributeName;var identifier=this.parseJSXIdentifier();if(this.matchJSX(':')){var namespace=identifier;this.expectJSX(':');var name_2=this.parseJSXIdentifier();attributeName=this.finalize(node,new JSXNode.JSXNamespacedName(namespace,name_2));}else
{attributeName=identifier;}
return attributeName;};JSXParser.prototype.parseJSXStringLiteralAttribute=function(){var node=this.createJSXNode();var token=this.nextJSXToken();if(token.type!==8){this.throwUnexpectedToken(token);}
var raw=this.getTokenRaw(token);return this.finalize(node,new Node.Literal(token.value,raw));};JSXParser.prototype.parseJSXExpressionAttribute=function(){var node=this.createJSXNode();this.expectJSX('{');this.finishJSX();if(this.match('}')){this.tolerateError('JSX attributes must only be assigned a non-empty expression');}
var expression=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(node,new JSXNode.JSXExpressionContainer(expression));};JSXParser.prototype.parseJSXAttributeValue=function(){return this.matchJSX('{')?this.parseJSXExpressionAttribute():this.matchJSX('<')?this.parseJSXElement():this.parseJSXStringLiteralAttribute();};JSXParser.prototype.parseJSXNameValueAttribute=function(){var node=this.createJSXNode();var name=this.parseJSXAttributeName();var value=null;if(this.matchJSX('=')){this.expectJSX('=');value=this.parseJSXAttributeValue();}
return this.finalize(node,new JSXNode.JSXAttribute(name,value));};JSXParser.prototype.parseJSXSpreadAttribute=function(){var node=this.createJSXNode();this.expectJSX('{');this.expectJSX('...');this.finishJSX();var argument=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(node,new JSXNode.JSXSpreadAttribute(argument));};JSXParser.prototype.parseJSXAttributes=function(){var attributes=[];while(!this.matchJSX('/')&&!this.matchJSX('>')){var attribute=this.matchJSX('{')?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();attributes.push(attribute);}
return attributes;};JSXParser.prototype.parseJSXOpeningElement=function(){var node=this.createJSXNode();this.expectJSX('<');var name=this.parseJSXElementName();var attributes=this.parseJSXAttributes();var selfClosing=this.matchJSX('/');if(selfClosing){this.expectJSX('/');}
this.expectJSX('>');return this.finalize(node,new JSXNode.JSXOpeningElement(name,selfClosing,attributes));};JSXParser.prototype.parseJSXBoundaryElement=function(){var node=this.createJSXNode();this.expectJSX('<');if(this.matchJSX('/')){this.expectJSX('/');var name_3=this.parseJSXElementName();this.expectJSX('>');return this.finalize(node,new JSXNode.JSXClosingElement(name_3));}
var name=this.parseJSXElementName();var attributes=this.parseJSXAttributes();var selfClosing=this.matchJSX('/');if(selfClosing){this.expectJSX('/');}
this.expectJSX('>');return this.finalize(node,new JSXNode.JSXOpeningElement(name,selfClosing,attributes));};JSXParser.prototype.parseJSXEmptyExpression=function(){var node=this.createJSXChildNode();this.collectComments();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;return this.finalize(node,new JSXNode.JSXEmptyExpression());};JSXParser.prototype.parseJSXExpressionContainer=function(){var node=this.createJSXNode();this.expectJSX('{');var expression;if(this.matchJSX('}')){expression=this.parseJSXEmptyExpression();this.expectJSX('}');}else
{this.finishJSX();expression=this.parseAssignmentExpression();this.reenterJSX();}
return this.finalize(node,new JSXNode.JSXExpressionContainer(expression));};JSXParser.prototype.parseJSXChildren=function(){var children=[];while(!this.scanner.eof()){var node=this.createJSXChildNode();var token=this.nextJSXText();if(token.start<token.end){var raw=this.getTokenRaw(token);var child=this.finalize(node,new JSXNode.JSXText(token.value,raw));children.push(child);}
if(this.scanner.source[this.scanner.index]==='{'){var container=this.parseJSXExpressionContainer();children.push(container);}else
{break;}}
return children;};JSXParser.prototype.parseComplexJSXElement=function(el){var stack=[];while(!this.scanner.eof()){el.children=el.children.concat(this.parseJSXChildren());var node=this.createJSXChildNode();var element=this.parseJSXBoundaryElement();if(element.type===jsx_syntax_1.JSXSyntax.JSXOpeningElement){var opening=element;if(opening.selfClosing){var child=this.finalize(node,new JSXNode.JSXElement(opening,[],null));el.children.push(child);}else
{stack.push(el);el={node:node,opening:opening,closing:null,children:[]};}}
if(element.type===jsx_syntax_1.JSXSyntax.JSXClosingElement){el.closing=element;var open_1=getQualifiedElementName(el.opening.name);var close_1=getQualifiedElementName(el.closing.name);if(open_1!==close_1){this.tolerateError('Expected corresponding JSX closing tag for %0',open_1);}
if(stack.length>0){var child=this.finalize(el.node,new JSXNode.JSXElement(el.opening,el.children,el.closing));el=stack[stack.length-1];el.children.push(child);stack.pop();}else
{break;}}}
return el;};JSXParser.prototype.parseJSXElement=function(){var node=this.createJSXNode();var opening=this.parseJSXOpeningElement();var children=[];var closing=null;if(!opening.selfClosing){var el=this.parseComplexJSXElement({node:node,opening:opening,closing:closing,children:children});children=el.children;closing=el.closing;}
return this.finalize(node,new JSXNode.JSXElement(opening,children,closing));};JSXParser.prototype.parseJSXRoot=function(){if(this.config.tokens){this.tokens.pop();}
this.startJSX();var element=this.parseJSXElement();this.finishJSX();return element;};JSXParser.prototype.isStartOfExpression=function(){return _super.prototype.isStartOfExpression.call(this)||this.match('<');};return JSXParser;}(parser_1.Parser);exports.JSXParser=JSXParser;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Regex={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};exports.Character={fromCodePoint:function(cp){return cp<0x10000?String.fromCharCode(cp):String.fromCharCode(0xD800+(cp-0x10000>>10))+
String.fromCharCode(0xDC00+(cp-0x10000&1023));},isWhiteSpace:function(cp){return cp===0x20||cp===0x09||cp===0x0B||cp===0x0C||cp===0xA0||cp>=0x1680&&[0x1680,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007,0x2008,0x2009,0x200A,0x202F,0x205F,0x3000,0xFEFF].indexOf(cp)>=0;},isLineTerminator:function(cp){return cp===0x0A||cp===0x0D||cp===0x2028||cp===0x2029;},isIdentifierStart:function(cp){return cp===0x24||cp===0x5F||cp>=0x41&&cp<=0x5A||cp>=0x61&&cp<=0x7A||cp===0x5C||cp>=0x80&&Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp));},isIdentifierPart:function(cp){return cp===0x24||cp===0x5F||cp>=0x41&&cp<=0x5A||cp>=0x61&&cp<=0x7A||cp>=0x30&&cp<=0x39||cp===0x5C||cp>=0x80&&Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp));},isDecimalDigit:function(cp){return cp>=0x30&&cp<=0x39;},isHexDigit:function(cp){return cp>=0x30&&cp<=0x39||cp>=0x41&&cp<=0x46||cp>=0x61&&cp<=0x66;},isOctalDigit:function(cp){return cp>=0x30&&cp<=0x37;}};},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var jsx_syntax_1=__webpack_require__(6);var JSXClosingElement=function(){function JSXClosingElement(name){this.type=jsx_syntax_1.JSXSyntax.JSXClosingElement;this.name=name;}
return JSXClosingElement;}();exports.JSXClosingElement=JSXClosingElement;var JSXElement=function(){function JSXElement(openingElement,children,closingElement){this.type=jsx_syntax_1.JSXSyntax.JSXElement;this.openingElement=openingElement;this.children=children;this.closingElement=closingElement;}
return JSXElement;}();exports.JSXElement=JSXElement;var JSXEmptyExpression=function(){function JSXEmptyExpression(){this.type=jsx_syntax_1.JSXSyntax.JSXEmptyExpression;}
return JSXEmptyExpression;}();exports.JSXEmptyExpression=JSXEmptyExpression;var JSXExpressionContainer=function(){function JSXExpressionContainer(expression){this.type=jsx_syntax_1.JSXSyntax.JSXExpressionContainer;this.expression=expression;}
return JSXExpressionContainer;}();exports.JSXExpressionContainer=JSXExpressionContainer;var JSXIdentifier=function(){function JSXIdentifier(name){this.type=jsx_syntax_1.JSXSyntax.JSXIdentifier;this.name=name;}
return JSXIdentifier;}();exports.JSXIdentifier=JSXIdentifier;var JSXMemberExpression=function(){function JSXMemberExpression(object,property){this.type=jsx_syntax_1.JSXSyntax.JSXMemberExpression;this.object=object;this.property=property;}
return JSXMemberExpression;}();exports.JSXMemberExpression=JSXMemberExpression;var JSXAttribute=function(){function JSXAttribute(name,value){this.type=jsx_syntax_1.JSXSyntax.JSXAttribute;this.name=name;this.value=value;}
return JSXAttribute;}();exports.JSXAttribute=JSXAttribute;var JSXNamespacedName=function(){function JSXNamespacedName(namespace,name){this.type=jsx_syntax_1.JSXSyntax.JSXNamespacedName;this.namespace=namespace;this.name=name;}
return JSXNamespacedName;}();exports.JSXNamespacedName=JSXNamespacedName;var JSXOpeningElement=function(){function JSXOpeningElement(name,selfClosing,attributes){this.type=jsx_syntax_1.JSXSyntax.JSXOpeningElement;this.name=name;this.selfClosing=selfClosing;this.attributes=attributes;}
return JSXOpeningElement;}();exports.JSXOpeningElement=JSXOpeningElement;var JSXSpreadAttribute=function(){function JSXSpreadAttribute(argument){this.type=jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;this.argument=argument;}
return JSXSpreadAttribute;}();exports.JSXSpreadAttribute=JSXSpreadAttribute;var JSXText=function(){function JSXText(value,raw){this.type=jsx_syntax_1.JSXSyntax.JSXText;this.value=value;this.raw=raw;}
return JSXText;}();exports.JSXText=JSXText;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.JSXSyntax={JSXAttribute:'JSXAttribute',JSXClosingElement:'JSXClosingElement',JSXElement:'JSXElement',JSXEmptyExpression:'JSXEmptyExpression',JSXExpressionContainer:'JSXExpressionContainer',JSXIdentifier:'JSXIdentifier',JSXMemberExpression:'JSXMemberExpression',JSXNamespacedName:'JSXNamespacedName',JSXOpeningElement:'JSXOpeningElement',JSXSpreadAttribute:'JSXSpreadAttribute',JSXText:'JSXText'};},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var syntax_1=__webpack_require__(2);var ArrayExpression=function(){function ArrayExpression(elements){this.type=syntax_1.Syntax.ArrayExpression;this.elements=elements;}
return ArrayExpression;}();exports.ArrayExpression=ArrayExpression;var ArrayPattern=function(){function ArrayPattern(elements){this.type=syntax_1.Syntax.ArrayPattern;this.elements=elements;}
return ArrayPattern;}();exports.ArrayPattern=ArrayPattern;var ArrowFunctionExpression=function(){function ArrowFunctionExpression(params,body,expression){this.type=syntax_1.Syntax.ArrowFunctionExpression;this.id=null;this.params=params;this.body=body;this.generator=false;this.expression=expression;this.async=false;}
return ArrowFunctionExpression;}();exports.ArrowFunctionExpression=ArrowFunctionExpression;var AssignmentExpression=function(){function AssignmentExpression(operator,left,right){this.type=syntax_1.Syntax.AssignmentExpression;this.operator=operator;this.left=left;this.right=right;}
return AssignmentExpression;}();exports.AssignmentExpression=AssignmentExpression;var AssignmentPattern=function(){function AssignmentPattern(left,right){this.type=syntax_1.Syntax.AssignmentPattern;this.left=left;this.right=right;}
return AssignmentPattern;}();exports.AssignmentPattern=AssignmentPattern;var AsyncArrowFunctionExpression=function(){function AsyncArrowFunctionExpression(params,body,expression){this.type=syntax_1.Syntax.ArrowFunctionExpression;this.id=null;this.params=params;this.body=body;this.generator=false;this.expression=expression;this.async=true;}
return AsyncArrowFunctionExpression;}();exports.AsyncArrowFunctionExpression=AsyncArrowFunctionExpression;var AsyncFunctionDeclaration=function(){function AsyncFunctionDeclaration(id,params,body){this.type=syntax_1.Syntax.FunctionDeclaration;this.id=id;this.params=params;this.body=body;this.generator=false;this.expression=false;this.async=true;}
return AsyncFunctionDeclaration;}();exports.AsyncFunctionDeclaration=AsyncFunctionDeclaration;var AsyncFunctionExpression=function(){function AsyncFunctionExpression(id,params,body){this.type=syntax_1.Syntax.FunctionExpression;this.id=id;this.params=params;this.body=body;this.generator=false;this.expression=false;this.async=true;}
return AsyncFunctionExpression;}();exports.AsyncFunctionExpression=AsyncFunctionExpression;var AwaitExpression=function(){function AwaitExpression(argument){this.type=syntax_1.Syntax.AwaitExpression;this.argument=argument;}
return AwaitExpression;}();exports.AwaitExpression=AwaitExpression;var BinaryExpression=function(){function BinaryExpression(operator,left,right){var logical=operator==='||'||operator==='&&';this.type=logical?syntax_1.Syntax.LogicalExpression:syntax_1.Syntax.BinaryExpression;this.operator=operator;this.left=left;this.right=right;}
return BinaryExpression;}();exports.BinaryExpression=BinaryExpression;var BlockStatement=function(){function BlockStatement(body){this.type=syntax_1.Syntax.BlockStatement;this.body=body;}
return BlockStatement;}();exports.BlockStatement=BlockStatement;var BreakStatement=function(){function BreakStatement(label){this.type=syntax_1.Syntax.BreakStatement;this.label=label;}
return BreakStatement;}();exports.BreakStatement=BreakStatement;var CallExpression=function(){function CallExpression(callee,args){this.type=syntax_1.Syntax.CallExpression;this.callee=callee;this.arguments=args;}
return CallExpression;}();exports.CallExpression=CallExpression;var CatchClause=function(){function CatchClause(param,body){this.type=syntax_1.Syntax.CatchClause;this.param=param;this.body=body;}
return CatchClause;}();exports.CatchClause=CatchClause;var ClassBody=function(){function ClassBody(body){this.type=syntax_1.Syntax.ClassBody;this.body=body;}
return ClassBody;}();exports.ClassBody=ClassBody;var ClassDeclaration=function(){function ClassDeclaration(id,superClass,body){this.type=syntax_1.Syntax.ClassDeclaration;this.id=id;this.superClass=superClass;this.body=body;}
return ClassDeclaration;}();exports.ClassDeclaration=ClassDeclaration;var ClassExpression=function(){function ClassExpression(id,superClass,body){this.type=syntax_1.Syntax.ClassExpression;this.id=id;this.superClass=superClass;this.body=body;}
return ClassExpression;}();exports.ClassExpression=ClassExpression;var ComputedMemberExpression=function(){function ComputedMemberExpression(object,property){this.type=syntax_1.Syntax.MemberExpression;this.computed=true;this.object=object;this.property=property;}
return ComputedMemberExpression;}();exports.ComputedMemberExpression=ComputedMemberExpression;var ConditionalExpression=function(){function ConditionalExpression(test,consequent,alternate){this.type=syntax_1.Syntax.ConditionalExpression;this.test=test;this.consequent=consequent;this.alternate=alternate;}
return ConditionalExpression;}();exports.ConditionalExpression=ConditionalExpression;var ContinueStatement=function(){function ContinueStatement(label){this.type=syntax_1.Syntax.ContinueStatement;this.label=label;}
return ContinueStatement;}();exports.ContinueStatement=ContinueStatement;var DebuggerStatement=function(){function DebuggerStatement(){this.type=syntax_1.Syntax.DebuggerStatement;}
return DebuggerStatement;}();exports.DebuggerStatement=DebuggerStatement;var Directive=function(){function Directive(expression,directive){this.type=syntax_1.Syntax.ExpressionStatement;this.expression=expression;this.directive=directive;}
return Directive;}();exports.Directive=Directive;var DoWhileStatement=function(){function DoWhileStatement(body,test){this.type=syntax_1.Syntax.DoWhileStatement;this.body=body;this.test=test;}
return DoWhileStatement;}();exports.DoWhileStatement=DoWhileStatement;var EmptyStatement=function(){function EmptyStatement(){this.type=syntax_1.Syntax.EmptyStatement;}
return EmptyStatement;}();exports.EmptyStatement=EmptyStatement;var ExportAllDeclaration=function(){function ExportAllDeclaration(source){this.type=syntax_1.Syntax.ExportAllDeclaration;this.source=source;}
return ExportAllDeclaration;}();exports.ExportAllDeclaration=ExportAllDeclaration;var ExportDefaultDeclaration=function(){function ExportDefaultDeclaration(declaration){this.type=syntax_1.Syntax.ExportDefaultDeclaration;this.declaration=declaration;}
return ExportDefaultDeclaration;}();exports.ExportDefaultDeclaration=ExportDefaultDeclaration;var ExportNamedDeclaration=function(){function ExportNamedDeclaration(declaration,specifiers,source){this.type=syntax_1.Syntax.ExportNamedDeclaration;this.declaration=declaration;this.specifiers=specifiers;this.source=source;}
return ExportNamedDeclaration;}();exports.ExportNamedDeclaration=ExportNamedDeclaration;var ExportSpecifier=function(){function ExportSpecifier(local,exported){this.type=syntax_1.Syntax.ExportSpecifier;this.exported=exported;this.local=local;}
return ExportSpecifier;}();exports.ExportSpecifier=ExportSpecifier;var ExpressionStatement=function(){function ExpressionStatement(expression){this.type=syntax_1.Syntax.ExpressionStatement;this.expression=expression;}
return ExpressionStatement;}();exports.ExpressionStatement=ExpressionStatement;var ForInStatement=function(){function ForInStatement(left,right,body){this.type=syntax_1.Syntax.ForInStatement;this.left=left;this.right=right;this.body=body;this.each=false;}
return ForInStatement;}();exports.ForInStatement=ForInStatement;var ForOfStatement=function(){function ForOfStatement(left,right,body){this.type=syntax_1.Syntax.ForOfStatement;this.left=left;this.right=right;this.body=body;}
return ForOfStatement;}();exports.ForOfStatement=ForOfStatement;var ForStatement=function(){function ForStatement(init,test,update,body){this.type=syntax_1.Syntax.ForStatement;this.init=init;this.test=test;this.update=update;this.body=body;}
return ForStatement;}();exports.ForStatement=ForStatement;var FunctionDeclaration=function(){function FunctionDeclaration(id,params,body,generator){this.type=syntax_1.Syntax.FunctionDeclaration;this.id=id;this.params=params;this.body=body;this.generator=generator;this.expression=false;this.async=false;}
return FunctionDeclaration;}();exports.FunctionDeclaration=FunctionDeclaration;var FunctionExpression=function(){function FunctionExpression(id,params,body,generator){this.type=syntax_1.Syntax.FunctionExpression;this.id=id;this.params=params;this.body=body;this.generator=generator;this.expression=false;this.async=false;}
return FunctionExpression;}();exports.FunctionExpression=FunctionExpression;var Identifier=function(){function Identifier(name){this.type=syntax_1.Syntax.Identifier;this.name=name;}
return Identifier;}();exports.Identifier=Identifier;var IfStatement=function(){function IfStatement(test,consequent,alternate){this.type=syntax_1.Syntax.IfStatement;this.test=test;this.consequent=consequent;this.alternate=alternate;}
return IfStatement;}();exports.IfStatement=IfStatement;var ImportDeclaration=function(){function ImportDeclaration(specifiers,source){this.type=syntax_1.Syntax.ImportDeclaration;this.specifiers=specifiers;this.source=source;}
return ImportDeclaration;}();exports.ImportDeclaration=ImportDeclaration;var ImportDefaultSpecifier=function(){function ImportDefaultSpecifier(local){this.type=syntax_1.Syntax.ImportDefaultSpecifier;this.local=local;}
return ImportDefaultSpecifier;}();exports.ImportDefaultSpecifier=ImportDefaultSpecifier;var ImportNamespaceSpecifier=function(){function ImportNamespaceSpecifier(local){this.type=syntax_1.Syntax.ImportNamespaceSpecifier;this.local=local;}
return ImportNamespaceSpecifier;}();exports.ImportNamespaceSpecifier=ImportNamespaceSpecifier;var ImportSpecifier=function(){function ImportSpecifier(local,imported){this.type=syntax_1.Syntax.ImportSpecifier;this.local=local;this.imported=imported;}
return ImportSpecifier;}();exports.ImportSpecifier=ImportSpecifier;var LabeledStatement=function(){function LabeledStatement(label,body){this.type=syntax_1.Syntax.LabeledStatement;this.label=label;this.body=body;}
return LabeledStatement;}();exports.LabeledStatement=LabeledStatement;var Literal=function(){function Literal(value,raw){this.type=syntax_1.Syntax.Literal;this.value=value;this.raw=raw;}
return Literal;}();exports.Literal=Literal;var MetaProperty=function(){function MetaProperty(meta,property){this.type=syntax_1.Syntax.MetaProperty;this.meta=meta;this.property=property;}
return MetaProperty;}();exports.MetaProperty=MetaProperty;var MethodDefinition=function(){function MethodDefinition(key,computed,value,kind,isStatic){this.type=syntax_1.Syntax.MethodDefinition;this.key=key;this.computed=computed;this.value=value;this.kind=kind;this.static=isStatic;}
return MethodDefinition;}();exports.MethodDefinition=MethodDefinition;var Module=function(){function Module(body){this.type=syntax_1.Syntax.Program;this.body=body;this.sourceType='module';}
return Module;}();exports.Module=Module;var NewExpression=function(){function NewExpression(callee,args){this.type=syntax_1.Syntax.NewExpression;this.callee=callee;this.arguments=args;}
return NewExpression;}();exports.NewExpression=NewExpression;var ObjectExpression=function(){function ObjectExpression(properties){this.type=syntax_1.Syntax.ObjectExpression;this.properties=properties;}
return ObjectExpression;}();exports.ObjectExpression=ObjectExpression;var ObjectPattern=function(){function ObjectPattern(properties){this.type=syntax_1.Syntax.ObjectPattern;this.properties=properties;}
return ObjectPattern;}();exports.ObjectPattern=ObjectPattern;var Property=function(){function Property(kind,key,computed,value,method,shorthand){this.type=syntax_1.Syntax.Property;this.key=key;this.computed=computed;this.value=value;this.kind=kind;this.method=method;this.shorthand=shorthand;}
return Property;}();exports.Property=Property;var RegexLiteral=function(){function RegexLiteral(value,raw,pattern,flags){this.type=syntax_1.Syntax.Literal;this.value=value;this.raw=raw;this.regex={pattern:pattern,flags:flags};}
return RegexLiteral;}();exports.RegexLiteral=RegexLiteral;var RestElement=function(){function RestElement(argument){this.type=syntax_1.Syntax.RestElement;this.argument=argument;}
return RestElement;}();exports.RestElement=RestElement;var ReturnStatement=function(){function ReturnStatement(argument){this.type=syntax_1.Syntax.ReturnStatement;this.argument=argument;}
return ReturnStatement;}();exports.ReturnStatement=ReturnStatement;var Script=function(){function Script(body){this.type=syntax_1.Syntax.Program;this.body=body;this.sourceType='script';}
return Script;}();exports.Script=Script;var SequenceExpression=function(){function SequenceExpression(expressions){this.type=syntax_1.Syntax.SequenceExpression;this.expressions=expressions;}
return SequenceExpression;}();exports.SequenceExpression=SequenceExpression;var SpreadElement=function(){function SpreadElement(argument){this.type=syntax_1.Syntax.SpreadElement;this.argument=argument;}
return SpreadElement;}();exports.SpreadElement=SpreadElement;var StaticMemberExpression=function(){function StaticMemberExpression(object,property){this.type=syntax_1.Syntax.MemberExpression;this.computed=false;this.object=object;this.property=property;}
return StaticMemberExpression;}();exports.StaticMemberExpression=StaticMemberExpression;var Super=function(){function Super(){this.type=syntax_1.Syntax.Super;}
return Super;}();exports.Super=Super;var SwitchCase=function(){function SwitchCase(test,consequent){this.type=syntax_1.Syntax.SwitchCase;this.test=test;this.consequent=consequent;}
return SwitchCase;}();exports.SwitchCase=SwitchCase;var SwitchStatement=function(){function SwitchStatement(discriminant,cases){this.type=syntax_1.Syntax.SwitchStatement;this.discriminant=discriminant;this.cases=cases;}
return SwitchStatement;}();exports.SwitchStatement=SwitchStatement;var TaggedTemplateExpression=function(){function TaggedTemplateExpression(tag,quasi){this.type=syntax_1.Syntax.TaggedTemplateExpression;this.tag=tag;this.quasi=quasi;}
return TaggedTemplateExpression;}();exports.TaggedTemplateExpression=TaggedTemplateExpression;var TemplateElement=function(){function TemplateElement(value,tail){this.type=syntax_1.Syntax.TemplateElement;this.value=value;this.tail=tail;}
return TemplateElement;}();exports.TemplateElement=TemplateElement;var TemplateLiteral=function(){function TemplateLiteral(quasis,expressions){this.type=syntax_1.Syntax.TemplateLiteral;this.quasis=quasis;this.expressions=expressions;}
return TemplateLiteral;}();exports.TemplateLiteral=TemplateLiteral;var ThisExpression=function(){function ThisExpression(){this.type=syntax_1.Syntax.ThisExpression;}
return ThisExpression;}();exports.ThisExpression=ThisExpression;var ThrowStatement=function(){function ThrowStatement(argument){this.type=syntax_1.Syntax.ThrowStatement;this.argument=argument;}
return ThrowStatement;}();exports.ThrowStatement=ThrowStatement;var TryStatement=function(){function TryStatement(block,handler,finalizer){this.type=syntax_1.Syntax.TryStatement;this.block=block;this.handler=handler;this.finalizer=finalizer;}
return TryStatement;}();exports.TryStatement=TryStatement;var UnaryExpression=function(){function UnaryExpression(operator,argument){this.type=syntax_1.Syntax.UnaryExpression;this.operator=operator;this.argument=argument;this.prefix=true;}
return UnaryExpression;}();exports.UnaryExpression=UnaryExpression;var UpdateExpression=function(){function UpdateExpression(operator,argument,prefix){this.type=syntax_1.Syntax.UpdateExpression;this.operator=operator;this.argument=argument;this.prefix=prefix;}
return UpdateExpression;}();exports.UpdateExpression=UpdateExpression;var VariableDeclaration=function(){function VariableDeclaration(declarations,kind){this.type=syntax_1.Syntax.VariableDeclaration;this.declarations=declarations;this.kind=kind;}
return VariableDeclaration;}();exports.VariableDeclaration=VariableDeclaration;var VariableDeclarator=function(){function VariableDeclarator(id,init){this.type=syntax_1.Syntax.VariableDeclarator;this.id=id;this.init=init;}
return VariableDeclarator;}();exports.VariableDeclarator=VariableDeclarator;var WhileStatement=function(){function WhileStatement(test,body){this.type=syntax_1.Syntax.WhileStatement;this.test=test;this.body=body;}
return WhileStatement;}();exports.WhileStatement=WhileStatement;var WithStatement=function(){function WithStatement(object,body){this.type=syntax_1.Syntax.WithStatement;this.object=object;this.body=body;}
return WithStatement;}();exports.WithStatement=WithStatement;var YieldExpression=function(){function YieldExpression(argument,delegate){this.type=syntax_1.Syntax.YieldExpression;this.argument=argument;this.delegate=delegate;}
return YieldExpression;}();exports.YieldExpression=YieldExpression;},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var assert_1=__webpack_require__(9);var error_handler_1=__webpack_require__(10);var messages_1=__webpack_require__(11);var Node=__webpack_require__(7);var scanner_1=__webpack_require__(12);var syntax_1=__webpack_require__(2);var token_1=__webpack_require__(13);var ArrowParameterPlaceHolder='ArrowParameterPlaceHolder';var Parser=function(){function Parser(code,options,delegate){if(options===void 0){options={};}
this.config={range:typeof options.range==='boolean'&&options.range,loc:typeof options.loc==='boolean'&&options.loc,source:null,tokens:typeof options.tokens==='boolean'&&options.tokens,comment:typeof options.comment==='boolean'&&options.comment,tolerant:typeof options.tolerant==='boolean'&&options.tolerant};if(this.config.loc&&options.source&&options.source!==null){this.config.source=String(options.source);}
this.delegate=delegate;this.errorHandler=new error_handler_1.ErrorHandler();this.errorHandler.tolerant=this.config.tolerant;this.scanner=new scanner_1.Scanner(code,this.errorHandler);this.scanner.trackComment=this.config.comment;this.operatorPrecedence={')':0,';':0,',':0,'=':0,']':0,'||':1,'&&':2,'|':3,'^':4,'&':5,'==':6,'!=':6,'===':6,'!==':6,'<':7,'>':7,'<=':7,'>=':7,'<<':8,'>>':8,'>>>':8,'+':9,'-':9,'*':11,'/':11,'%':11};this.lookahead={type:2,value:'',lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0};this.hasLineTerminator=false;this.context={isModule:false,await:false,allowIn:true,allowStrictDirective:true,allowYield:true,firstCoverInitializedNameError:null,isAssignmentTarget:false,isBindingElement:false,inFunctionBody:false,inIteration:false,inSwitch:false,labelSet:{},strict:false};this.tokens=[];this.startMarker={index:0,line:this.scanner.lineNumber,column:0};this.lastMarker={index:0,line:this.scanner.lineNumber,column:0};this.nextToken();this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart};}
Parser.prototype.throwError=function(messageFormat){var values=[];for(var _i=1;_i<arguments.length;_i++){values[_i-1]=arguments[_i];}
var args=Array.prototype.slice.call(arguments,1);var msg=messageFormat.replace(/%(\d)/g,function(whole,idx){assert_1.assert(idx<args.length,'Message reference must be in range');return args[idx];});var index=this.lastMarker.index;var line=this.lastMarker.line;var column=this.lastMarker.column+1;throw this.errorHandler.createError(index,line,column,msg);};Parser.prototype.tolerateError=function(messageFormat){var values=[];for(var _i=1;_i<arguments.length;_i++){values[_i-1]=arguments[_i];}
var args=Array.prototype.slice.call(arguments,1);var msg=messageFormat.replace(/%(\d)/g,function(whole,idx){assert_1.assert(idx<args.length,'Message reference must be in range');return args[idx];});var index=this.lastMarker.index;var line=this.scanner.lineNumber;var column=this.lastMarker.column+1;this.errorHandler.tolerateError(index,line,column,msg);};Parser.prototype.unexpectedTokenError=function(token,message){var msg=message||messages_1.Messages.UnexpectedToken;var value;if(token){if(!message){msg=token.type===2?messages_1.Messages.UnexpectedEOS:token.type===3?messages_1.Messages.UnexpectedIdentifier:token.type===6?messages_1.Messages.UnexpectedNumber:token.type===8?messages_1.Messages.UnexpectedString:token.type===10?messages_1.Messages.UnexpectedTemplate:messages_1.Messages.UnexpectedToken;if(token.type===4){if(this.scanner.isFutureReservedWord(token.value)){msg=messages_1.Messages.UnexpectedReserved;}else
if(this.context.strict&&this.scanner.isStrictModeReservedWord(token.value)){msg=messages_1.Messages.StrictReservedWord;}}}
value=token.value;}else
{value='ILLEGAL';}
msg=msg.replace('%0',value);if(token&&typeof token.lineNumber==='number'){var index=token.start;var line=token.lineNumber;var lastMarkerLineStart=this.lastMarker.index-this.lastMarker.column;var column=token.start-lastMarkerLineStart+1;return this.errorHandler.createError(index,line,column,msg);}else
{var index=this.lastMarker.index;var line=this.lastMarker.line;var column=this.lastMarker.column+1;return this.errorHandler.createError(index,line,column,msg);}};Parser.prototype.throwUnexpectedToken=function(token,message){throw this.unexpectedTokenError(token,message);};Parser.prototype.tolerateUnexpectedToken=function(token,message){this.errorHandler.tolerate(this.unexpectedTokenError(token,message));};Parser.prototype.collectComments=function(){if(!this.config.comment){this.scanner.scanComments();}else
{var comments=this.scanner.scanComments();if(comments.length>0&&this.delegate){for(var i=0;i<comments.length;++i){var e=comments[i];var node=void 0;node={type:e.multiLine?'BlockComment':'LineComment',value:this.scanner.source.slice(e.slice[0],e.slice[1])};if(this.config.range){node.range=e.range;}
if(this.config.loc){node.loc=e.loc;}
var metadata={start:{line:e.loc.start.line,column:e.loc.start.column,offset:e.range[0]},end:{line:e.loc.end.line,column:e.loc.end.column,offset:e.range[1]}};this.delegate(node,metadata);}}}};Parser.prototype.getTokenRaw=function(token){return this.scanner.source.slice(token.start,token.end);};Parser.prototype.convertToken=function(token){var t={type:token_1.TokenName[token.type],value:this.getTokenRaw(token)};if(this.config.range){t.range=[token.start,token.end];}
if(this.config.loc){t.loc={start:{line:this.startMarker.line,column:this.startMarker.column},end:{line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};}
if(token.type===9){var pattern=token.pattern;var flags=token.flags;t.regex={pattern:pattern,flags:flags};}
return t;};Parser.prototype.nextToken=function(){var token=this.lookahead;this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;this.collectComments();if(this.scanner.index!==this.startMarker.index){this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;}
var next=this.scanner.lex();this.hasLineTerminator=token.lineNumber!==next.lineNumber;if(next&&this.context.strict&&next.type===3){if(this.scanner.isStrictModeReservedWord(next.value)){next.type=4;}}
this.lookahead=next;if(this.config.tokens&&next.type!==2){this.tokens.push(this.convertToken(next));}
return token;};Parser.prototype.nextRegexToken=function(){this.collectComments();var token=this.scanner.scanRegExp();if(this.config.tokens){this.tokens.pop();this.tokens.push(this.convertToken(token));}
this.lookahead=token;this.nextToken();return token;};Parser.prototype.createNode=function(){return{index:this.startMarker.index,line:this.startMarker.line,column:this.startMarker.column};};Parser.prototype.startNode=function(token){return{index:token.start,line:token.lineNumber,column:token.start-token.lineStart};};Parser.prototype.finalize=function(marker,node){if(this.config.range){node.range=[marker.index,this.lastMarker.index];}
if(this.config.loc){node.loc={start:{line:marker.line,column:marker.column},end:{line:this.lastMarker.line,column:this.lastMarker.column}};if(this.config.source){node.loc.source=this.config.source;}}
if(this.delegate){var metadata={start:{line:marker.line,column:marker.column,offset:marker.index},end:{line:this.lastMarker.line,column:this.lastMarker.column,offset:this.lastMarker.index}};this.delegate(node,metadata);}
return node;};Parser.prototype.expect=function(value){var token=this.nextToken();if(token.type!==7||token.value!==value){this.throwUnexpectedToken(token);}};Parser.prototype.expectCommaSeparator=function(){if(this.config.tolerant){var token=this.lookahead;if(token.type===7&&token.value===','){this.nextToken();}else
if(token.type===7&&token.value===';'){this.nextToken();this.tolerateUnexpectedToken(token);}else
{this.tolerateUnexpectedToken(token,messages_1.Messages.UnexpectedToken);}}else
{this.expect(',');}};Parser.prototype.expectKeyword=function(keyword){var token=this.nextToken();if(token.type!==4||token.value!==keyword){this.throwUnexpectedToken(token);}};Parser.prototype.match=function(value){return this.lookahead.type===7&&this.lookahead.value===value;};Parser.prototype.matchKeyword=function(keyword){return this.lookahead.type===4&&this.lookahead.value===keyword;};Parser.prototype.matchContextualKeyword=function(keyword){return this.lookahead.type===3&&this.lookahead.value===keyword;};Parser.prototype.matchAssign=function(){if(this.lookahead.type!==7){return false;}
var op=this.lookahead.value;return op==='='||op==='*='||op==='**='||op==='/='||op==='%='||op==='+='||op==='-='||op==='<<='||op==='>>='||op==='>>>='||op==='&='||op==='^='||op==='|=';};Parser.prototype.isolateCoverGrammar=function(parseFunction){var previousIsBindingElement=this.context.isBindingElement;var previousIsAssignmentTarget=this.context.isAssignmentTarget;var previousFirstCoverInitializedNameError=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var result=parseFunction.call(this);if(this.context.firstCoverInitializedNameError!==null){this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);}
this.context.isBindingElement=previousIsBindingElement;this.context.isAssignmentTarget=previousIsAssignmentTarget;this.context.firstCoverInitializedNameError=previousFirstCoverInitializedNameError;return result;};Parser.prototype.inheritCoverGrammar=function(parseFunction){var previousIsBindingElement=this.context.isBindingElement;var previousIsAssignmentTarget=this.context.isAssignmentTarget;var previousFirstCoverInitializedNameError=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var result=parseFunction.call(this);this.context.isBindingElement=this.context.isBindingElement&&previousIsBindingElement;this.context.isAssignmentTarget=this.context.isAssignmentTarget&&previousIsAssignmentTarget;this.context.firstCoverInitializedNameError=previousFirstCoverInitializedNameError||this.context.firstCoverInitializedNameError;return result;};Parser.prototype.consumeSemicolon=function(){if(this.match(';')){this.nextToken();}else
if(!this.hasLineTerminator){if(this.lookahead.type!==2&&!this.match('}')){this.throwUnexpectedToken(this.lookahead);}
this.lastMarker.index=this.startMarker.index;this.lastMarker.line=this.startMarker.line;this.lastMarker.column=this.startMarker.column;}};Parser.prototype.parsePrimaryExpression=function(){var node=this.createNode();var expr;var token,raw;switch(this.lookahead.type){case 3:if((this.context.isModule||this.context.await)&&this.lookahead.value==='await'){this.tolerateUnexpectedToken(this.lookahead);}
expr=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(node,new Node.Identifier(this.nextToken().value));break;case 6:case 8:if(this.context.strict&&this.lookahead.octal){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.StrictOctalLiteral);}
this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(token.value,raw));break;case 1:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(token.value==='true',raw));break;case 5:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(null,raw));break;case 10:expr=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case'(':this.context.isBindingElement=false;expr=this.inheritCoverGrammar(this.parseGroupExpression);break;case'[':expr=this.inheritCoverGrammar(this.parseArrayInitializer);break;case'{':expr=this.inheritCoverGrammar(this.parseObjectInitializer);break;case'/':case'/=':this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.scanner.index=this.startMarker.index;token=this.nextRegexToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.RegexLiteral(token.regex,raw,token.pattern,token.flags));break;default:expr=this.throwUnexpectedToken(this.nextToken());}
break;case 4:if(!this.context.strict&&this.context.allowYield&&this.matchKeyword('yield')){expr=this.parseIdentifierName();}else
if(!this.context.strict&&this.matchKeyword('let')){expr=this.finalize(node,new Node.Identifier(this.nextToken().value));}else
{this.context.isAssignmentTarget=false;this.context.isBindingElement=false;if(this.matchKeyword('function')){expr=this.parseFunctionExpression();}else
if(this.matchKeyword('this')){this.nextToken();expr=this.finalize(node,new Node.ThisExpression());}else
if(this.matchKeyword('class')){expr=this.parseClassExpression();}else
{expr=this.throwUnexpectedToken(this.nextToken());}}
break;default:expr=this.throwUnexpectedToken(this.nextToken());}
return expr;};Parser.prototype.parseSpreadElement=function(){var node=this.createNode();this.expect('...');var arg=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(node,new Node.SpreadElement(arg));};Parser.prototype.parseArrayInitializer=function(){var node=this.createNode();var elements=[];this.expect('[');while(!this.match(']')){if(this.match(',')){this.nextToken();elements.push(null);}else
if(this.match('...')){var element=this.parseSpreadElement();if(!this.match(']')){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.expect(',');}
elements.push(element);}else
{elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));if(!this.match(']')){this.expect(',');}}}
this.expect(']');return this.finalize(node,new Node.ArrayExpression(elements));};Parser.prototype.parsePropertyMethod=function(params){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=params.simple;var body=this.isolateCoverGrammar(this.parseFunctionSourceElements);if(this.context.strict&&params.firstRestricted){this.tolerateUnexpectedToken(params.firstRestricted,params.message);}
if(this.context.strict&&params.stricted){this.tolerateUnexpectedToken(params.stricted,params.message);}
this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;return body;};Parser.prototype.parsePropertyMethodFunction=function(){var isGenerator=false;var node=this.createNode();var previousAllowYield=this.context.allowYield;this.context.allowYield=false;var params=this.parseFormalParameters();var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,params.params,method,isGenerator));};Parser.prototype.parsePropertyMethodAsyncFunction=function(){var node=this.createNode();var previousAllowYield=this.context.allowYield;var previousAwait=this.context.await;this.context.allowYield=false;this.context.await=true;var params=this.parseFormalParameters();var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;this.context.await=previousAwait;return this.finalize(node,new Node.AsyncFunctionExpression(null,params.params,method));};Parser.prototype.parseObjectPropertyKey=function(){var node=this.createNode();var token=this.nextToken();var key;switch(token.type){case 8:case 6:if(this.context.strict&&token.octal){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictOctalLiteral);}
var raw=this.getTokenRaw(token);key=this.finalize(node,new Node.Literal(token.value,raw));break;case 3:case 1:case 5:case 4:key=this.finalize(node,new Node.Identifier(token.value));break;case 7:if(token.value==='['){key=this.isolateCoverGrammar(this.parseAssignmentExpression);this.expect(']');}else
{key=this.throwUnexpectedToken(token);}
break;default:key=this.throwUnexpectedToken(token);}
return key;};Parser.prototype.isPropertyKey=function(key,value){return key.type===syntax_1.Syntax.Identifier&&key.name===value||key.type===syntax_1.Syntax.Literal&&key.value===value;};Parser.prototype.parseObjectProperty=function(hasProto){var node=this.createNode();var token=this.lookahead;var kind;var key=null;var value=null;var computed=false;var method=false;var shorthand=false;var isAsync=false;if(token.type===3){var id=token.value;this.nextToken();computed=this.match('[');isAsync=!this.hasLineTerminator&&id==='async'&&!this.match(':')&&!this.match('(')&&!this.match('*');key=isAsync?this.parseObjectPropertyKey():this.finalize(node,new Node.Identifier(id));}else
if(this.match('*')){this.nextToken();}else
{computed=this.match('[');key=this.parseObjectPropertyKey();}
var lookaheadPropertyKey=this.qualifiedPropertyName(this.lookahead);if(token.type===3&&!isAsync&&token.value==='get'&&lookaheadPropertyKey){kind='get';computed=this.match('[');key=this.parseObjectPropertyKey();this.context.allowYield=false;value=this.parseGetterMethod();}else
if(token.type===3&&!isAsync&&token.value==='set'&&lookaheadPropertyKey){kind='set';computed=this.match('[');key=this.parseObjectPropertyKey();value=this.parseSetterMethod();}else
if(token.type===7&&token.value==='*'&&lookaheadPropertyKey){kind='init';computed=this.match('[');key=this.parseObjectPropertyKey();value=this.parseGeneratorMethod();method=true;}else
{if(!key){this.throwUnexpectedToken(this.lookahead);}
kind='init';if(this.match(':')&&!isAsync){if(!computed&&this.isPropertyKey(key,'__proto__')){if(hasProto.value){this.tolerateError(messages_1.Messages.DuplicateProtoProperty);}
hasProto.value=true;}
this.nextToken();value=this.inheritCoverGrammar(this.parseAssignmentExpression);}else
if(this.match('(')){value=isAsync?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();method=true;}else
if(token.type===3){var id=this.finalize(node,new Node.Identifier(token.value));if(this.match('=')){this.context.firstCoverInitializedNameError=this.lookahead;this.nextToken();shorthand=true;var init=this.isolateCoverGrammar(this.parseAssignmentExpression);value=this.finalize(node,new Node.AssignmentPattern(id,init));}else
{shorthand=true;value=id;}}else
{this.throwUnexpectedToken(this.nextToken());}}
return this.finalize(node,new Node.Property(kind,key,computed,value,method,shorthand));};Parser.prototype.parseObjectInitializer=function(){var node=this.createNode();this.expect('{');var properties=[];var hasProto={value:false};while(!this.match('}')){properties.push(this.parseObjectProperty(hasProto));if(!this.match('}')){this.expectCommaSeparator();}}
this.expect('}');return this.finalize(node,new Node.ObjectExpression(properties));};Parser.prototype.parseTemplateHead=function(){assert_1.assert(this.lookahead.head,'Template literal must start with a template head');var node=this.createNode();var token=this.nextToken();var raw=token.value;var cooked=token.cooked;return this.finalize(node,new Node.TemplateElement({raw:raw,cooked:cooked},token.tail));};Parser.prototype.parseTemplateElement=function(){if(this.lookahead.type!==10){this.throwUnexpectedToken();}
var node=this.createNode();var token=this.nextToken();var raw=token.value;var cooked=token.cooked;return this.finalize(node,new Node.TemplateElement({raw:raw,cooked:cooked},token.tail));};Parser.prototype.parseTemplateLiteral=function(){var node=this.createNode();var expressions=[];var quasis=[];var quasi=this.parseTemplateHead();quasis.push(quasi);while(!quasi.tail){expressions.push(this.parseExpression());quasi=this.parseTemplateElement();quasis.push(quasi);}
return this.finalize(node,new Node.TemplateLiteral(quasis,expressions));};Parser.prototype.reinterpretExpressionAsPattern=function(expr){switch(expr.type){case syntax_1.Syntax.Identifier:case syntax_1.Syntax.MemberExpression:case syntax_1.Syntax.RestElement:case syntax_1.Syntax.AssignmentPattern:break;case syntax_1.Syntax.SpreadElement:expr.type=syntax_1.Syntax.RestElement;this.reinterpretExpressionAsPattern(expr.argument);break;case syntax_1.Syntax.ArrayExpression:expr.type=syntax_1.Syntax.ArrayPattern;for(var i=0;i<expr.elements.length;i++){if(expr.elements[i]!==null){this.reinterpretExpressionAsPattern(expr.elements[i]);}}
break;case syntax_1.Syntax.ObjectExpression:expr.type=syntax_1.Syntax.ObjectPattern;for(var i=0;i<expr.properties.length;i++){this.reinterpretExpressionAsPattern(expr.properties[i].value);}
break;case syntax_1.Syntax.AssignmentExpression:expr.type=syntax_1.Syntax.AssignmentPattern;delete expr.operator;this.reinterpretExpressionAsPattern(expr.left);break;default:break;}};Parser.prototype.parseGroupExpression=function(){var expr;this.expect('(');if(this.match(')')){this.nextToken();if(!this.match('=>')){this.expect('=>');}
expr={type:ArrowParameterPlaceHolder,params:[],async:false};}else
{var startToken=this.lookahead;var params=[];if(this.match('...')){expr=this.parseRestElement(params);this.expect(')');if(!this.match('=>')){this.expect('=>');}
expr={type:ArrowParameterPlaceHolder,params:[expr],async:false};}else
{var arrow=false;this.context.isBindingElement=true;expr=this.inheritCoverGrammar(this.parseAssignmentExpression);if(this.match(',')){var expressions=[];this.context.isAssignmentTarget=false;expressions.push(expr);while(this.lookahead.type!==2){if(!this.match(',')){break;}
this.nextToken();if(this.match(')')){this.nextToken();for(var i=0;i<expressions.length;i++){this.reinterpretExpressionAsPattern(expressions[i]);}
arrow=true;expr={type:ArrowParameterPlaceHolder,params:expressions,async:false};}else
if(this.match('...')){if(!this.context.isBindingElement){this.throwUnexpectedToken(this.lookahead);}
expressions.push(this.parseRestElement(params));this.expect(')');if(!this.match('=>')){this.expect('=>');}
this.context.isBindingElement=false;for(var i=0;i<expressions.length;i++){this.reinterpretExpressionAsPattern(expressions[i]);}
arrow=true;expr={type:ArrowParameterPlaceHolder,params:expressions,async:false};}else
{expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));}
if(arrow){break;}}
if(!arrow){expr=this.finalize(this.startNode(startToken),new Node.SequenceExpression(expressions));}}
if(!arrow){this.expect(')');if(this.match('=>')){if(expr.type===syntax_1.Syntax.Identifier&&expr.name==='yield'){arrow=true;expr={type:ArrowParameterPlaceHolder,params:[expr],async:false};}
if(!arrow){if(!this.context.isBindingElement){this.throwUnexpectedToken(this.lookahead);}
if(expr.type===syntax_1.Syntax.SequenceExpression){for(var i=0;i<expr.expressions.length;i++){this.reinterpretExpressionAsPattern(expr.expressions[i]);}}else
{this.reinterpretExpressionAsPattern(expr);}
var parameters=expr.type===syntax_1.Syntax.SequenceExpression?expr.expressions:[expr];expr={type:ArrowParameterPlaceHolder,params:parameters,async:false};}}
this.context.isBindingElement=false;}}}
return expr;};Parser.prototype.parseArguments=function(){this.expect('(');var args=[];if(!this.match(')')){while(true){var expr=this.match('...')?this.parseSpreadElement():this.isolateCoverGrammar(this.parseAssignmentExpression);args.push(expr);if(this.match(')')){break;}
this.expectCommaSeparator();if(this.match(')')){break;}}}
this.expect(')');return args;};Parser.prototype.isIdentifierName=function(token){return token.type===3||token.type===4||token.type===1||token.type===5;};Parser.prototype.parseIdentifierName=function(){var node=this.createNode();var token=this.nextToken();if(!this.isIdentifierName(token)){this.throwUnexpectedToken(token);}
return this.finalize(node,new Node.Identifier(token.value));};Parser.prototype.parseNewExpression=function(){var node=this.createNode();var id=this.parseIdentifierName();assert_1.assert(id.name==='new','New expression must start with `new`');var expr;if(this.match('.')){this.nextToken();if(this.lookahead.type===3&&this.context.inFunctionBody&&this.lookahead.value==='target'){var property=this.parseIdentifierName();expr=new Node.MetaProperty(id,property);}else
{this.throwUnexpectedToken(this.lookahead);}}else
{var callee=this.isolateCoverGrammar(this.parseLeftHandSideExpression);var args=this.match('(')?this.parseArguments():[];expr=new Node.NewExpression(callee,args);this.context.isAssignmentTarget=false;this.context.isBindingElement=false;}
return this.finalize(node,expr);};Parser.prototype.parseAsyncArgument=function(){var arg=this.parseAssignmentExpression();this.context.firstCoverInitializedNameError=null;return arg;};Parser.prototype.parseAsyncArguments=function(){this.expect('(');var args=[];if(!this.match(')')){while(true){var expr=this.match('...')?this.parseSpreadElement():this.isolateCoverGrammar(this.parseAsyncArgument);args.push(expr);if(this.match(')')){break;}
this.expectCommaSeparator();if(this.match(')')){break;}}}
this.expect(')');return args;};Parser.prototype.parseLeftHandSideExpressionAllowCall=function(){var startToken=this.lookahead;var maybeAsync=this.matchContextualKeyword('async');var previousAllowIn=this.context.allowIn;this.context.allowIn=true;var expr;if(this.matchKeyword('super')&&this.context.inFunctionBody){expr=this.createNode();this.nextToken();expr=this.finalize(expr,new Node.Super());if(!this.match('(')&&!this.match('.')&&!this.match('[')){this.throwUnexpectedToken(this.lookahead);}}else
{expr=this.inheritCoverGrammar(this.matchKeyword('new')?this.parseNewExpression:this.parsePrimaryExpression);}
while(true){if(this.match('.')){this.context.isBindingElement=false;this.context.isAssignmentTarget=true;this.expect('.');var property=this.parseIdentifierName();expr=this.finalize(this.startNode(startToken),new Node.StaticMemberExpression(expr,property));}else
if(this.match('(')){var asyncArrow=maybeAsync&&startToken.lineNumber===this.lookahead.lineNumber;this.context.isBindingElement=false;this.context.isAssignmentTarget=false;var args=asyncArrow?this.parseAsyncArguments():this.parseArguments();expr=this.finalize(this.startNode(startToken),new Node.CallExpression(expr,args));if(asyncArrow&&this.match('=>')){for(var i=0;i<args.length;++i){this.reinterpretExpressionAsPattern(args[i]);}
expr={type:ArrowParameterPlaceHolder,params:args,async:true};}}else
if(this.match('[')){this.context.isBindingElement=false;this.context.isAssignmentTarget=true;this.expect('[');var property=this.isolateCoverGrammar(this.parseExpression);this.expect(']');expr=this.finalize(this.startNode(startToken),new Node.ComputedMemberExpression(expr,property));}else
if(this.lookahead.type===10&&this.lookahead.head){var quasi=this.parseTemplateLiteral();expr=this.finalize(this.startNode(startToken),new Node.TaggedTemplateExpression(expr,quasi));}else
{break;}}
this.context.allowIn=previousAllowIn;return expr;};Parser.prototype.parseSuper=function(){var node=this.createNode();this.expectKeyword('super');if(!this.match('[')&&!this.match('.')){this.throwUnexpectedToken(this.lookahead);}
return this.finalize(node,new Node.Super());};Parser.prototype.parseLeftHandSideExpression=function(){assert_1.assert(this.context.allowIn,'callee of new expression always allow in keyword.');var node=this.startNode(this.lookahead);var expr=this.matchKeyword('super')&&this.context.inFunctionBody?this.parseSuper():this.inheritCoverGrammar(this.matchKeyword('new')?this.parseNewExpression:this.parsePrimaryExpression);while(true){if(this.match('[')){this.context.isBindingElement=false;this.context.isAssignmentTarget=true;this.expect('[');var property=this.isolateCoverGrammar(this.parseExpression);this.expect(']');expr=this.finalize(node,new Node.ComputedMemberExpression(expr,property));}else
if(this.match('.')){this.context.isBindingElement=false;this.context.isAssignmentTarget=true;this.expect('.');var property=this.parseIdentifierName();expr=this.finalize(node,new Node.StaticMemberExpression(expr,property));}else
if(this.lookahead.type===10&&this.lookahead.head){var quasi=this.parseTemplateLiteral();expr=this.finalize(node,new Node.TaggedTemplateExpression(expr,quasi));}else
{break;}}
return expr;};Parser.prototype.parseUpdateExpression=function(){var expr;var startToken=this.lookahead;if(this.match('++')||this.match('--')){var node=this.startNode(startToken);var token=this.nextToken();expr=this.inheritCoverGrammar(this.parseUnaryExpression);if(this.context.strict&&expr.type===syntax_1.Syntax.Identifier&&this.scanner.isRestrictedWord(expr.name)){this.tolerateError(messages_1.Messages.StrictLHSPrefix);}
if(!this.context.isAssignmentTarget){this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);}
var prefix=true;expr=this.finalize(node,new Node.UpdateExpression(token.value,expr,prefix));this.context.isAssignmentTarget=false;this.context.isBindingElement=false;}else
{expr=this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);if(!this.hasLineTerminator&&this.lookahead.type===7){if(this.match('++')||this.match('--')){if(this.context.strict&&expr.type===syntax_1.Syntax.Identifier&&this.scanner.isRestrictedWord(expr.name)){this.tolerateError(messages_1.Messages.StrictLHSPostfix);}
if(!this.context.isAssignmentTarget){this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);}
this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var operator=this.nextToken().value;var prefix=false;expr=this.finalize(this.startNode(startToken),new Node.UpdateExpression(operator,expr,prefix));}}}
return expr;};Parser.prototype.parseAwaitExpression=function(){var node=this.createNode();this.nextToken();var argument=this.parseUnaryExpression();return this.finalize(node,new Node.AwaitExpression(argument));};Parser.prototype.parseUnaryExpression=function(){var expr;if(this.match('+')||this.match('-')||this.match('~')||this.match('!')||this.matchKeyword('delete')||this.matchKeyword('void')||this.matchKeyword('typeof')){var node=this.startNode(this.lookahead);var token=this.nextToken();expr=this.inheritCoverGrammar(this.parseUnaryExpression);expr=this.finalize(node,new Node.UnaryExpression(token.value,expr));if(this.context.strict&&expr.operator==='delete'&&expr.argument.type===syntax_1.Syntax.Identifier){this.tolerateError(messages_1.Messages.StrictDelete);}
this.context.isAssignmentTarget=false;this.context.isBindingElement=false;}else
if(this.context.await&&this.matchContextualKeyword('await')){expr=this.parseAwaitExpression();}else
{expr=this.parseUpdateExpression();}
return expr;};Parser.prototype.parseExponentiationExpression=function(){var startToken=this.lookahead;var expr=this.inheritCoverGrammar(this.parseUnaryExpression);if(expr.type!==syntax_1.Syntax.UnaryExpression&&this.match('**')){this.nextToken();this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var left=expr;var right=this.isolateCoverGrammar(this.parseExponentiationExpression);expr=this.finalize(this.startNode(startToken),new Node.BinaryExpression('**',left,right));}
return expr;};Parser.prototype.binaryPrecedence=function(token){var op=token.value;var precedence;if(token.type===7){precedence=this.operatorPrecedence[op]||0;}else
if(token.type===4){precedence=op==='instanceof'||this.context.allowIn&&op==='in'?7:0;}else
{precedence=0;}
return precedence;};Parser.prototype.parseBinaryExpression=function(){var startToken=this.lookahead;var expr=this.inheritCoverGrammar(this.parseExponentiationExpression);var token=this.lookahead;var prec=this.binaryPrecedence(token);if(prec>0){this.nextToken();this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var markers=[startToken,this.lookahead];var left=expr;var right=this.isolateCoverGrammar(this.parseExponentiationExpression);var stack=[left,token.value,right];var precedences=[prec];while(true){prec=this.binaryPrecedence(this.lookahead);if(prec<=0){break;}
while(stack.length>2&&prec<=precedences[precedences.length-1]){right=stack.pop();var operator=stack.pop();precedences.pop();left=stack.pop();markers.pop();var node=this.startNode(markers[markers.length-1]);stack.push(this.finalize(node,new Node.BinaryExpression(operator,left,right)));}
stack.push(this.nextToken().value);precedences.push(prec);markers.push(this.lookahead);stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));}
var i=stack.length-1;expr=stack[i];markers.pop();while(i>1){var node=this.startNode(markers.pop());var operator=stack[i-1];expr=this.finalize(node,new Node.BinaryExpression(operator,stack[i-2],expr));i-=2;}}
return expr;};Parser.prototype.parseConditionalExpression=function(){var startToken=this.lookahead;var expr=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match('?')){this.nextToken();var previousAllowIn=this.context.allowIn;this.context.allowIn=true;var consequent=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=previousAllowIn;this.expect(':');var alternate=this.isolateCoverGrammar(this.parseAssignmentExpression);expr=this.finalize(this.startNode(startToken),new Node.ConditionalExpression(expr,consequent,alternate));this.context.isAssignmentTarget=false;this.context.isBindingElement=false;}
return expr;};Parser.prototype.checkPatternParam=function(options,param){switch(param.type){case syntax_1.Syntax.Identifier:this.validateParam(options,param,param.name);break;case syntax_1.Syntax.RestElement:this.checkPatternParam(options,param.argument);break;case syntax_1.Syntax.AssignmentPattern:this.checkPatternParam(options,param.left);break;case syntax_1.Syntax.ArrayPattern:for(var i=0;i<param.elements.length;i++){if(param.elements[i]!==null){this.checkPatternParam(options,param.elements[i]);}}
break;case syntax_1.Syntax.ObjectPattern:for(var i=0;i<param.properties.length;i++){this.checkPatternParam(options,param.properties[i].value);}
break;default:break;}
options.simple=options.simple&&param instanceof Node.Identifier;};Parser.prototype.reinterpretAsCoverFormalsList=function(expr){var params=[expr];var options;var asyncArrow=false;switch(expr.type){case syntax_1.Syntax.Identifier:break;case ArrowParameterPlaceHolder:params=expr.params;asyncArrow=expr.async;break;default:return null;}
options={simple:true,paramSet:{}};for(var i=0;i<params.length;++i){var param=params[i];if(param.type===syntax_1.Syntax.AssignmentPattern){if(param.right.type===syntax_1.Syntax.YieldExpression){if(param.right.argument){this.throwUnexpectedToken(this.lookahead);}
param.right.type=syntax_1.Syntax.Identifier;param.right.name='yield';delete param.right.argument;delete param.right.delegate;}}else
if(asyncArrow&&param.type===syntax_1.Syntax.Identifier&&param.name==='await'){this.throwUnexpectedToken(this.lookahead);}
this.checkPatternParam(options,param);params[i]=param;}
if(this.context.strict||!this.context.allowYield){for(var i=0;i<params.length;++i){var param=params[i];if(param.type===syntax_1.Syntax.YieldExpression){this.throwUnexpectedToken(this.lookahead);}}}
if(options.message===messages_1.Messages.StrictParamDupe){var token=this.context.strict?options.stricted:options.firstRestricted;this.throwUnexpectedToken(token,options.message);}
return{simple:options.simple,params:params,stricted:options.stricted,firstRestricted:options.firstRestricted,message:options.message};};Parser.prototype.parseAssignmentExpression=function(){var expr;if(!this.context.allowYield&&this.matchKeyword('yield')){expr=this.parseYieldExpression();}else
{var startToken=this.lookahead;var token=startToken;expr=this.parseConditionalExpression();if(token.type===3&&token.lineNumber===this.lookahead.lineNumber&&token.value==='async'){if(this.lookahead.type===3||this.matchKeyword('yield')){var arg=this.parsePrimaryExpression();this.reinterpretExpressionAsPattern(arg);expr={type:ArrowParameterPlaceHolder,params:[arg],async:true};}}
if(expr.type===ArrowParameterPlaceHolder||this.match('=>')){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var isAsync=expr.async;var list=this.reinterpretAsCoverFormalsList(expr);if(list){if(this.hasLineTerminator){this.tolerateUnexpectedToken(this.lookahead);}
this.context.firstCoverInitializedNameError=null;var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=list.simple;var previousAllowYield=this.context.allowYield;var previousAwait=this.context.await;this.context.allowYield=true;this.context.await=isAsync;var node=this.startNode(startToken);this.expect('=>');var body=void 0;if(this.match('{')){var previousAllowIn=this.context.allowIn;this.context.allowIn=true;body=this.parseFunctionSourceElements();this.context.allowIn=previousAllowIn;}else
{body=this.isolateCoverGrammar(this.parseAssignmentExpression);}
var expression=body.type!==syntax_1.Syntax.BlockStatement;if(this.context.strict&&list.firstRestricted){this.throwUnexpectedToken(list.firstRestricted,list.message);}
if(this.context.strict&&list.stricted){this.tolerateUnexpectedToken(list.stricted,list.message);}
expr=isAsync?this.finalize(node,new Node.AsyncArrowFunctionExpression(list.params,body,expression)):this.finalize(node,new Node.ArrowFunctionExpression(list.params,body,expression));this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;this.context.allowYield=previousAllowYield;this.context.await=previousAwait;}}else
{if(this.matchAssign()){if(!this.context.isAssignmentTarget){this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);}
if(this.context.strict&&expr.type===syntax_1.Syntax.Identifier){var id=expr;if(this.scanner.isRestrictedWord(id.name)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictLHSAssignment);}
if(this.scanner.isStrictModeReservedWord(id.name)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord);}}
if(!this.match('=')){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;}else
{this.reinterpretExpressionAsPattern(expr);}
token=this.nextToken();var operator=token.value;var right=this.isolateCoverGrammar(this.parseAssignmentExpression);expr=this.finalize(this.startNode(startToken),new Node.AssignmentExpression(operator,expr,right));this.context.firstCoverInitializedNameError=null;}}}
return expr;};Parser.prototype.parseExpression=function(){var startToken=this.lookahead;var expr=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(',')){var expressions=[];expressions.push(expr);while(this.lookahead.type!==2){if(!this.match(',')){break;}
this.nextToken();expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));}
expr=this.finalize(this.startNode(startToken),new Node.SequenceExpression(expressions));}
return expr;};Parser.prototype.parseStatementListItem=function(){var statement;this.context.isAssignmentTarget=true;this.context.isBindingElement=true;if(this.lookahead.type===4){switch(this.lookahead.value){case'export':if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.IllegalExportDeclaration);}
statement=this.parseExportDeclaration();break;case'import':if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.IllegalImportDeclaration);}
statement=this.parseImportDeclaration();break;case'const':statement=this.parseLexicalDeclaration({inFor:false});break;case'function':statement=this.parseFunctionDeclaration();break;case'class':statement=this.parseClassDeclaration();break;case'let':statement=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:false}):this.parseStatement();break;default:statement=this.parseStatement();break;}}else
{statement=this.parseStatement();}
return statement;};Parser.prototype.parseBlock=function(){var node=this.createNode();this.expect('{');var block=[];while(true){if(this.match('}')){break;}
block.push(this.parseStatementListItem());}
this.expect('}');return this.finalize(node,new Node.BlockStatement(block));};Parser.prototype.parseLexicalBinding=function(kind,options){var node=this.createNode();var params=[];var id=this.parsePattern(params,kind);if(this.context.strict&&id.type===syntax_1.Syntax.Identifier){if(this.scanner.isRestrictedWord(id.name)){this.tolerateError(messages_1.Messages.StrictVarName);}}
var init=null;if(kind==='const'){if(!this.matchKeyword('in')&&!this.matchContextualKeyword('of')){if(this.match('=')){this.nextToken();init=this.isolateCoverGrammar(this.parseAssignmentExpression);}else
{this.throwError(messages_1.Messages.DeclarationMissingInitializer,'const');}}}else
if(!options.inFor&&id.type!==syntax_1.Syntax.Identifier||this.match('=')){this.expect('=');init=this.isolateCoverGrammar(this.parseAssignmentExpression);}
return this.finalize(node,new Node.VariableDeclarator(id,init));};Parser.prototype.parseBindingList=function(kind,options){var list=[this.parseLexicalBinding(kind,options)];while(this.match(',')){this.nextToken();list.push(this.parseLexicalBinding(kind,options));}
return list;};Parser.prototype.isLexicalDeclaration=function(){var state=this.scanner.saveState();this.scanner.scanComments();var next=this.scanner.lex();this.scanner.restoreState(state);return next.type===3||next.type===7&&next.value==='['||next.type===7&&next.value==='{'||next.type===4&&next.value==='let'||next.type===4&&next.value==='yield';};Parser.prototype.parseLexicalDeclaration=function(options){var node=this.createNode();var kind=this.nextToken().value;assert_1.assert(kind==='let'||kind==='const','Lexical declaration must be either let or const');var declarations=this.parseBindingList(kind,options);this.consumeSemicolon();return this.finalize(node,new Node.VariableDeclaration(declarations,kind));};Parser.prototype.parseBindingRestElement=function(params,kind){var node=this.createNode();this.expect('...');var arg=this.parsePattern(params,kind);return this.finalize(node,new Node.RestElement(arg));};Parser.prototype.parseArrayPattern=function(params,kind){var node=this.createNode();this.expect('[');var elements=[];while(!this.match(']')){if(this.match(',')){this.nextToken();elements.push(null);}else
{if(this.match('...')){elements.push(this.parseBindingRestElement(params,kind));break;}else
{elements.push(this.parsePatternWithDefault(params,kind));}
if(!this.match(']')){this.expect(',');}}}
this.expect(']');return this.finalize(node,new Node.ArrayPattern(elements));};Parser.prototype.parsePropertyPattern=function(params,kind){var node=this.createNode();var computed=false;var shorthand=false;var method=false;var key;var value;if(this.lookahead.type===3){var keyToken=this.lookahead;key=this.parseVariableIdentifier();var init=this.finalize(node,new Node.Identifier(keyToken.value));if(this.match('=')){params.push(keyToken);shorthand=true;this.nextToken();var expr=this.parseAssignmentExpression();value=this.finalize(this.startNode(keyToken),new Node.AssignmentPattern(init,expr));}else
if(!this.match(':')){params.push(keyToken);shorthand=true;value=init;}else
{this.expect(':');value=this.parsePatternWithDefault(params,kind);}}else
{computed=this.match('[');key=this.parseObjectPropertyKey();this.expect(':');value=this.parsePatternWithDefault(params,kind);}
return this.finalize(node,new Node.Property('init',key,computed,value,method,shorthand));};Parser.prototype.parseObjectPattern=function(params,kind){var node=this.createNode();var properties=[];this.expect('{');while(!this.match('}')){properties.push(this.parsePropertyPattern(params,kind));if(!this.match('}')){this.expect(',');}}
this.expect('}');return this.finalize(node,new Node.ObjectPattern(properties));};Parser.prototype.parsePattern=function(params,kind){var pattern;if(this.match('[')){pattern=this.parseArrayPattern(params,kind);}else
if(this.match('{')){pattern=this.parseObjectPattern(params,kind);}else
{if(this.matchKeyword('let')&&(kind==='const'||kind==='let')){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.LetInLexicalBinding);}
params.push(this.lookahead);pattern=this.parseVariableIdentifier(kind);}
return pattern;};Parser.prototype.parsePatternWithDefault=function(params,kind){var startToken=this.lookahead;var pattern=this.parsePattern(params,kind);if(this.match('=')){this.nextToken();var previousAllowYield=this.context.allowYield;this.context.allowYield=true;var right=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=previousAllowYield;pattern=this.finalize(this.startNode(startToken),new Node.AssignmentPattern(pattern,right));}
return pattern;};Parser.prototype.parseVariableIdentifier=function(kind){var node=this.createNode();var token=this.nextToken();if(token.type===4&&token.value==='yield'){if(this.context.strict){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord);}else
if(!this.context.allowYield){this.throwUnexpectedToken(token);}}else
if(token.type!==3){if(this.context.strict&&token.type===4&&this.scanner.isStrictModeReservedWord(token.value)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord);}else
{if(this.context.strict||token.value!=='let'||kind!=='var'){this.throwUnexpectedToken(token);}}}else
if((this.context.isModule||this.context.await)&&token.type===3&&token.value==='await'){this.tolerateUnexpectedToken(token);}
return this.finalize(node,new Node.Identifier(token.value));};Parser.prototype.parseVariableDeclaration=function(options){var node=this.createNode();var params=[];var id=this.parsePattern(params,'var');if(this.context.strict&&id.type===syntax_1.Syntax.Identifier){if(this.scanner.isRestrictedWord(id.name)){this.tolerateError(messages_1.Messages.StrictVarName);}}
var init=null;if(this.match('=')){this.nextToken();init=this.isolateCoverGrammar(this.parseAssignmentExpression);}else
if(id.type!==syntax_1.Syntax.Identifier&&!options.inFor){this.expect('=');}
return this.finalize(node,new Node.VariableDeclarator(id,init));};Parser.prototype.parseVariableDeclarationList=function(options){var opt={inFor:options.inFor};var list=[];list.push(this.parseVariableDeclaration(opt));while(this.match(',')){this.nextToken();list.push(this.parseVariableDeclaration(opt));}
return list;};Parser.prototype.parseVariableStatement=function(){var node=this.createNode();this.expectKeyword('var');var declarations=this.parseVariableDeclarationList({inFor:false});this.consumeSemicolon();return this.finalize(node,new Node.VariableDeclaration(declarations,'var'));};Parser.prototype.parseEmptyStatement=function(){var node=this.createNode();this.expect(';');return this.finalize(node,new Node.EmptyStatement());};Parser.prototype.parseExpressionStatement=function(){var node=this.createNode();var expr=this.parseExpression();this.consumeSemicolon();return this.finalize(node,new Node.ExpressionStatement(expr));};Parser.prototype.parseIfClause=function(){if(this.context.strict&&this.matchKeyword('function')){this.tolerateError(messages_1.Messages.StrictFunction);}
return this.parseStatement();};Parser.prototype.parseIfStatement=function(){var node=this.createNode();var consequent;var alternate=null;this.expectKeyword('if');this.expect('(');var test=this.parseExpression();if(!this.match(')')&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());consequent=this.finalize(this.createNode(),new Node.EmptyStatement());}else
{this.expect(')');consequent=this.parseIfClause();if(this.matchKeyword('else')){this.nextToken();alternate=this.parseIfClause();}}
return this.finalize(node,new Node.IfStatement(test,consequent,alternate));};Parser.prototype.parseDoWhileStatement=function(){var node=this.createNode();this.expectKeyword('do');var previousInIteration=this.context.inIteration;this.context.inIteration=true;var body=this.parseStatement();this.context.inIteration=previousInIteration;this.expectKeyword('while');this.expect('(');var test=this.parseExpression();if(!this.match(')')&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());}else
{this.expect(')');if(this.match(';')){this.nextToken();}}
return this.finalize(node,new Node.DoWhileStatement(body,test));};Parser.prototype.parseWhileStatement=function(){var node=this.createNode();var body;this.expectKeyword('while');this.expect('(');var test=this.parseExpression();if(!this.match(')')&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement());}else
{this.expect(')');var previousInIteration=this.context.inIteration;this.context.inIteration=true;body=this.parseStatement();this.context.inIteration=previousInIteration;}
return this.finalize(node,new Node.WhileStatement(test,body));};Parser.prototype.parseForStatement=function(){var init=null;var test=null;var update=null;var forIn=true;var left,right;var node=this.createNode();this.expectKeyword('for');this.expect('(');if(this.match(';')){this.nextToken();}else
{if(this.matchKeyword('var')){init=this.createNode();this.nextToken();var previousAllowIn=this.context.allowIn;this.context.allowIn=false;var declarations=this.parseVariableDeclarationList({inFor:true});this.context.allowIn=previousAllowIn;if(declarations.length===1&&this.matchKeyword('in')){var decl=declarations[0];if(decl.init&&(decl.id.type===syntax_1.Syntax.ArrayPattern||decl.id.type===syntax_1.Syntax.ObjectPattern||this.context.strict)){this.tolerateError(messages_1.Messages.ForInOfLoopInitializer,'for-in');}
init=this.finalize(init,new Node.VariableDeclaration(declarations,'var'));this.nextToken();left=init;right=this.parseExpression();init=null;}else
if(declarations.length===1&&declarations[0].init===null&&this.matchContextualKeyword('of')){init=this.finalize(init,new Node.VariableDeclaration(declarations,'var'));this.nextToken();left=init;right=this.parseAssignmentExpression();init=null;forIn=false;}else
{init=this.finalize(init,new Node.VariableDeclaration(declarations,'var'));this.expect(';');}}else
if(this.matchKeyword('const')||this.matchKeyword('let')){init=this.createNode();var kind=this.nextToken().value;if(!this.context.strict&&this.lookahead.value==='in'){init=this.finalize(init,new Node.Identifier(kind));this.nextToken();left=init;right=this.parseExpression();init=null;}else
{var previousAllowIn=this.context.allowIn;this.context.allowIn=false;var declarations=this.parseBindingList(kind,{inFor:true});this.context.allowIn=previousAllowIn;if(declarations.length===1&&declarations[0].init===null&&this.matchKeyword('in')){init=this.finalize(init,new Node.VariableDeclaration(declarations,kind));this.nextToken();left=init;right=this.parseExpression();init=null;}else
if(declarations.length===1&&declarations[0].init===null&&this.matchContextualKeyword('of')){init=this.finalize(init,new Node.VariableDeclaration(declarations,kind));this.nextToken();left=init;right=this.parseAssignmentExpression();init=null;forIn=false;}else
{this.consumeSemicolon();init=this.finalize(init,new Node.VariableDeclaration(declarations,kind));}}}else
{var initStartToken=this.lookahead;var previousAllowIn=this.context.allowIn;this.context.allowIn=false;init=this.inheritCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=previousAllowIn;if(this.matchKeyword('in')){if(!this.context.isAssignmentTarget||init.type===syntax_1.Syntax.AssignmentExpression){this.tolerateError(messages_1.Messages.InvalidLHSInForIn);}
this.nextToken();this.reinterpretExpressionAsPattern(init);left=init;right=this.parseExpression();init=null;}else
if(this.matchContextualKeyword('of')){if(!this.context.isAssignmentTarget||init.type===syntax_1.Syntax.AssignmentExpression){this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);}
this.nextToken();this.reinterpretExpressionAsPattern(init);left=init;right=this.parseAssignmentExpression();init=null;forIn=false;}else
{if(this.match(',')){var initSeq=[init];while(this.match(',')){this.nextToken();initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));}
init=this.finalize(this.startNode(initStartToken),new Node.SequenceExpression(initSeq));}
this.expect(';');}}}
if(typeof left==='undefined'){if(!this.match(';')){test=this.parseExpression();}
this.expect(';');if(!this.match(')')){update=this.parseExpression();}}
var body;if(!this.match(')')&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement());}else
{this.expect(')');var previousInIteration=this.context.inIteration;this.context.inIteration=true;body=this.isolateCoverGrammar(this.parseStatement);this.context.inIteration=previousInIteration;}
return typeof left==='undefined'?this.finalize(node,new Node.ForStatement(init,test,update,body)):forIn?this.finalize(node,new Node.ForInStatement(left,right,body)):this.finalize(node,new Node.ForOfStatement(left,right,body));};Parser.prototype.parseContinueStatement=function(){var node=this.createNode();this.expectKeyword('continue');var label=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var id=this.parseVariableIdentifier();label=id;var key='$'+id.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.UnknownLabel,id.name);}}
this.consumeSemicolon();if(label===null&&!this.context.inIteration){this.throwError(messages_1.Messages.IllegalContinue);}
return this.finalize(node,new Node.ContinueStatement(label));};Parser.prototype.parseBreakStatement=function(){var node=this.createNode();this.expectKeyword('break');var label=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var id=this.parseVariableIdentifier();var key='$'+id.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.UnknownLabel,id.name);}
label=id;}
this.consumeSemicolon();if(label===null&&!this.context.inIteration&&!this.context.inSwitch){this.throwError(messages_1.Messages.IllegalBreak);}
return this.finalize(node,new Node.BreakStatement(label));};Parser.prototype.parseReturnStatement=function(){if(!this.context.inFunctionBody){this.tolerateError(messages_1.Messages.IllegalReturn);}
var node=this.createNode();this.expectKeyword('return');var hasArgument=!this.match(';')&&!this.match('}')&&!this.hasLineTerminator&&this.lookahead.type!==2;var argument=hasArgument?this.parseExpression():null;this.consumeSemicolon();return this.finalize(node,new Node.ReturnStatement(argument));};Parser.prototype.parseWithStatement=function(){if(this.context.strict){this.tolerateError(messages_1.Messages.StrictModeWith);}
var node=this.createNode();var body;this.expectKeyword('with');this.expect('(');var object=this.parseExpression();if(!this.match(')')&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement());}else
{this.expect(')');body=this.parseStatement();}
return this.finalize(node,new Node.WithStatement(object,body));};Parser.prototype.parseSwitchCase=function(){var node=this.createNode();var test;if(this.matchKeyword('default')){this.nextToken();test=null;}else
{this.expectKeyword('case');test=this.parseExpression();}
this.expect(':');var consequent=[];while(true){if(this.match('}')||this.matchKeyword('default')||this.matchKeyword('case')){break;}
consequent.push(this.parseStatementListItem());}
return this.finalize(node,new Node.SwitchCase(test,consequent));};Parser.prototype.parseSwitchStatement=function(){var node=this.createNode();this.expectKeyword('switch');this.expect('(');var discriminant=this.parseExpression();this.expect(')');var previousInSwitch=this.context.inSwitch;this.context.inSwitch=true;var cases=[];var defaultFound=false;this.expect('{');while(true){if(this.match('}')){break;}
var clause=this.parseSwitchCase();if(clause.test===null){if(defaultFound){this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);}
defaultFound=true;}
cases.push(clause);}
this.expect('}');this.context.inSwitch=previousInSwitch;return this.finalize(node,new Node.SwitchStatement(discriminant,cases));};Parser.prototype.parseLabelledStatement=function(){var node=this.createNode();var expr=this.parseExpression();var statement;if(expr.type===syntax_1.Syntax.Identifier&&this.match(':')){this.nextToken();var id=expr;var key='$'+id.name;if(Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.Redeclaration,'Label',id.name);}
this.context.labelSet[key]=true;var body=void 0;if(this.matchKeyword('class')){this.tolerateUnexpectedToken(this.lookahead);body=this.parseClassDeclaration();}else
if(this.matchKeyword('function')){var token=this.lookahead;var declaration=this.parseFunctionDeclaration();if(this.context.strict){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictFunction);}else
if(declaration.generator){this.tolerateUnexpectedToken(token,messages_1.Messages.GeneratorInLegacyContext);}
body=declaration;}else
{body=this.parseStatement();}
delete this.context.labelSet[key];statement=new Node.LabeledStatement(id,body);}else
{this.consumeSemicolon();statement=new Node.ExpressionStatement(expr);}
return this.finalize(node,statement);};Parser.prototype.parseThrowStatement=function(){var node=this.createNode();this.expectKeyword('throw');if(this.hasLineTerminator){this.throwError(messages_1.Messages.NewlineAfterThrow);}
var argument=this.parseExpression();this.consumeSemicolon();return this.finalize(node,new Node.ThrowStatement(argument));};Parser.prototype.parseCatchClause=function(){var node=this.createNode();this.expectKeyword('catch');this.expect('(');if(this.match(')')){this.throwUnexpectedToken(this.lookahead);}
var params=[];var param=this.parsePattern(params);var paramMap={};for(var i=0;i<params.length;i++){var key='$'+params[i].value;if(Object.prototype.hasOwnProperty.call(paramMap,key)){this.tolerateError(messages_1.Messages.DuplicateBinding,params[i].value);}
paramMap[key]=true;}
if(this.context.strict&&param.type===syntax_1.Syntax.Identifier){if(this.scanner.isRestrictedWord(param.name)){this.tolerateError(messages_1.Messages.StrictCatchVariable);}}
this.expect(')');var body=this.parseBlock();return this.finalize(node,new Node.CatchClause(param,body));};Parser.prototype.parseFinallyClause=function(){this.expectKeyword('finally');return this.parseBlock();};Parser.prototype.parseTryStatement=function(){var node=this.createNode();this.expectKeyword('try');var block=this.parseBlock();var handler=this.matchKeyword('catch')?this.parseCatchClause():null;var finalizer=this.matchKeyword('finally')?this.parseFinallyClause():null;if(!handler&&!finalizer){this.throwError(messages_1.Messages.NoCatchOrFinally);}
return this.finalize(node,new Node.TryStatement(block,handler,finalizer));};Parser.prototype.parseDebuggerStatement=function(){var node=this.createNode();this.expectKeyword('debugger');this.consumeSemicolon();return this.finalize(node,new Node.DebuggerStatement());};Parser.prototype.parseStatement=function(){var statement;switch(this.lookahead.type){case 1:case 5:case 6:case 8:case 10:case 9:statement=this.parseExpressionStatement();break;case 7:var value=this.lookahead.value;if(value==='{'){statement=this.parseBlock();}else
if(value==='('){statement=this.parseExpressionStatement();}else
if(value===';'){statement=this.parseEmptyStatement();}else
{statement=this.parseExpressionStatement();}
break;case 3:statement=this.matchAsyncFunction()?this.parseFunctionDeclaration():this.parseLabelledStatement();break;case 4:switch(this.lookahead.value){case'break':statement=this.parseBreakStatement();break;case'continue':statement=this.parseContinueStatement();break;case'debugger':statement=this.parseDebuggerStatement();break;case'do':statement=this.parseDoWhileStatement();break;case'for':statement=this.parseForStatement();break;case'function':statement=this.parseFunctionDeclaration();break;case'if':statement=this.parseIfStatement();break;case'return':statement=this.parseReturnStatement();break;case'switch':statement=this.parseSwitchStatement();break;case'throw':statement=this.parseThrowStatement();break;case'try':statement=this.parseTryStatement();break;case'var':statement=this.parseVariableStatement();break;case'while':statement=this.parseWhileStatement();break;case'with':statement=this.parseWithStatement();break;default:statement=this.parseExpressionStatement();break;}
break;default:statement=this.throwUnexpectedToken(this.lookahead);}
return statement;};Parser.prototype.parseFunctionSourceElements=function(){var node=this.createNode();this.expect('{');var body=this.parseDirectivePrologues();var previousLabelSet=this.context.labelSet;var previousInIteration=this.context.inIteration;var previousInSwitch=this.context.inSwitch;var previousInFunctionBody=this.context.inFunctionBody;this.context.labelSet={};this.context.inIteration=false;this.context.inSwitch=false;this.context.inFunctionBody=true;while(this.lookahead.type!==2){if(this.match('}')){break;}
body.push(this.parseStatementListItem());}
this.expect('}');this.context.labelSet=previousLabelSet;this.context.inIteration=previousInIteration;this.context.inSwitch=previousInSwitch;this.context.inFunctionBody=previousInFunctionBody;return this.finalize(node,new Node.BlockStatement(body));};Parser.prototype.validateParam=function(options,param,name){var key='$'+name;if(this.context.strict){if(this.scanner.isRestrictedWord(name)){options.stricted=param;options.message=messages_1.Messages.StrictParamName;}
if(Object.prototype.hasOwnProperty.call(options.paramSet,key)){options.stricted=param;options.message=messages_1.Messages.StrictParamDupe;}}else
if(!options.firstRestricted){if(this.scanner.isRestrictedWord(name)){options.firstRestricted=param;options.message=messages_1.Messages.StrictParamName;}else
if(this.scanner.isStrictModeReservedWord(name)){options.firstRestricted=param;options.message=messages_1.Messages.StrictReservedWord;}else
if(Object.prototype.hasOwnProperty.call(options.paramSet,key)){options.stricted=param;options.message=messages_1.Messages.StrictParamDupe;}}
if(typeof Object.defineProperty==='function'){Object.defineProperty(options.paramSet,key,{value:true,enumerable:true,writable:true,configurable:true});}else
{options.paramSet[key]=true;}};Parser.prototype.parseRestElement=function(params){var node=this.createNode();this.expect('...');var arg=this.parsePattern(params);if(this.match('=')){this.throwError(messages_1.Messages.DefaultRestParameter);}
if(!this.match(')')){this.throwError(messages_1.Messages.ParameterAfterRestParameter);}
return this.finalize(node,new Node.RestElement(arg));};Parser.prototype.parseFormalParameter=function(options){var params=[];var param=this.match('...')?this.parseRestElement(params):this.parsePatternWithDefault(params);for(var i=0;i<params.length;i++){this.validateParam(options,params[i],params[i].value);}
options.simple=options.simple&&param instanceof Node.Identifier;options.params.push(param);};Parser.prototype.parseFormalParameters=function(firstRestricted){var options;options={simple:true,params:[],firstRestricted:firstRestricted};this.expect('(');if(!this.match(')')){options.paramSet={};while(this.lookahead.type!==2){this.parseFormalParameter(options);if(this.match(')')){break;}
this.expect(',');if(this.match(')')){break;}}}
this.expect(')');return{simple:options.simple,params:options.params,stricted:options.stricted,firstRestricted:options.firstRestricted,message:options.message};};Parser.prototype.matchAsyncFunction=function(){var match=this.matchContextualKeyword('async');if(match){var state=this.scanner.saveState();this.scanner.scanComments();var next=this.scanner.lex();this.scanner.restoreState(state);match=state.lineNumber===next.lineNumber&&next.type===4&&next.value==='function';}
return match;};Parser.prototype.parseFunctionDeclaration=function(identifierIsOptional){var node=this.createNode();var isAsync=this.matchContextualKeyword('async');if(isAsync){this.nextToken();}
this.expectKeyword('function');var isGenerator=isAsync?false:this.match('*');if(isGenerator){this.nextToken();}
var message;var id=null;var firstRestricted=null;if(!identifierIsOptional||!this.match('(')){var token=this.lookahead;id=this.parseVariableIdentifier();if(this.context.strict){if(this.scanner.isRestrictedWord(token.value)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictFunctionName);}}else
{if(this.scanner.isRestrictedWord(token.value)){firstRestricted=token;message=messages_1.Messages.StrictFunctionName;}else
if(this.scanner.isStrictModeReservedWord(token.value)){firstRestricted=token;message=messages_1.Messages.StrictReservedWord;}}}
var previousAllowAwait=this.context.await;var previousAllowYield=this.context.allowYield;this.context.await=isAsync;this.context.allowYield=!isGenerator;var formalParameters=this.parseFormalParameters(firstRestricted);var params=formalParameters.params;var stricted=formalParameters.stricted;firstRestricted=formalParameters.firstRestricted;if(formalParameters.message){message=formalParameters.message;}
var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=formalParameters.simple;var body=this.parseFunctionSourceElements();if(this.context.strict&&firstRestricted){this.throwUnexpectedToken(firstRestricted,message);}
if(this.context.strict&&stricted){this.tolerateUnexpectedToken(stricted,message);}
this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;this.context.await=previousAllowAwait;this.context.allowYield=previousAllowYield;return isAsync?this.finalize(node,new Node.AsyncFunctionDeclaration(id,params,body)):this.finalize(node,new Node.FunctionDeclaration(id,params,body,isGenerator));};Parser.prototype.parseFunctionExpression=function(){var node=this.createNode();var isAsync=this.matchContextualKeyword('async');if(isAsync){this.nextToken();}
this.expectKeyword('function');var isGenerator=isAsync?false:this.match('*');if(isGenerator){this.nextToken();}
var message;var id=null;var firstRestricted;var previousAllowAwait=this.context.await;var previousAllowYield=this.context.allowYield;this.context.await=isAsync;this.context.allowYield=!isGenerator;if(!this.match('(')){var token=this.lookahead;id=!this.context.strict&&!isGenerator&&this.matchKeyword('yield')?this.parseIdentifierName():this.parseVariableIdentifier();if(this.context.strict){if(this.scanner.isRestrictedWord(token.value)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictFunctionName);}}else
{if(this.scanner.isRestrictedWord(token.value)){firstRestricted=token;message=messages_1.Messages.StrictFunctionName;}else
if(this.scanner.isStrictModeReservedWord(token.value)){firstRestricted=token;message=messages_1.Messages.StrictReservedWord;}}}
var formalParameters=this.parseFormalParameters(firstRestricted);var params=formalParameters.params;var stricted=formalParameters.stricted;firstRestricted=formalParameters.firstRestricted;if(formalParameters.message){message=formalParameters.message;}
var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=formalParameters.simple;var body=this.parseFunctionSourceElements();if(this.context.strict&&firstRestricted){this.throwUnexpectedToken(firstRestricted,message);}
if(this.context.strict&&stricted){this.tolerateUnexpectedToken(stricted,message);}
this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;this.context.await=previousAllowAwait;this.context.allowYield=previousAllowYield;return isAsync?this.finalize(node,new Node.AsyncFunctionExpression(id,params,body)):this.finalize(node,new Node.FunctionExpression(id,params,body,isGenerator));};Parser.prototype.parseDirective=function(){var token=this.lookahead;var node=this.createNode();var expr=this.parseExpression();var directive=expr.type===syntax_1.Syntax.Literal?this.getTokenRaw(token).slice(1,-1):null;this.consumeSemicolon();return this.finalize(node,directive?new Node.Directive(expr,directive):new Node.ExpressionStatement(expr));};Parser.prototype.parseDirectivePrologues=function(){var firstRestricted=null;var body=[];while(true){var token=this.lookahead;if(token.type!==8){break;}
var statement=this.parseDirective();body.push(statement);var directive=statement.directive;if(typeof directive!=='string'){break;}
if(directive==='use strict'){this.context.strict=true;if(firstRestricted){this.tolerateUnexpectedToken(firstRestricted,messages_1.Messages.StrictOctalLiteral);}
if(!this.context.allowStrictDirective){this.tolerateUnexpectedToken(token,messages_1.Messages.IllegalLanguageModeDirective);}}else
{if(!firstRestricted&&token.octal){firstRestricted=token;}}}
return body;};Parser.prototype.qualifiedPropertyName=function(token){switch(token.type){case 3:case 8:case 1:case 5:case 6:case 4:return true;case 7:return token.value==='[';default:break;}
return false;};Parser.prototype.parseGetterMethod=function(){var node=this.createNode();var isGenerator=false;var previousAllowYield=this.context.allowYield;this.context.allowYield=false;var formalParameters=this.parseFormalParameters();if(formalParameters.params.length>0){this.tolerateError(messages_1.Messages.BadGetterArity);}
var method=this.parsePropertyMethod(formalParameters);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,formalParameters.params,method,isGenerator));};Parser.prototype.parseSetterMethod=function(){var node=this.createNode();var isGenerator=false;var previousAllowYield=this.context.allowYield;this.context.allowYield=false;var formalParameters=this.parseFormalParameters();if(formalParameters.params.length!==1){this.tolerateError(messages_1.Messages.BadSetterArity);}else
if(formalParameters.params[0]instanceof Node.RestElement){this.tolerateError(messages_1.Messages.BadSetterRestParameter);}
var method=this.parsePropertyMethod(formalParameters);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,formalParameters.params,method,isGenerator));};Parser.prototype.parseGeneratorMethod=function(){var node=this.createNode();var isGenerator=true;var previousAllowYield=this.context.allowYield;this.context.allowYield=true;var params=this.parseFormalParameters();this.context.allowYield=false;var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,params.params,method,isGenerator));};Parser.prototype.isStartOfExpression=function(){var start=true;var value=this.lookahead.value;switch(this.lookahead.type){case 7:start=value==='['||value==='('||value==='{'||value==='+'||value==='-'||value==='!'||value==='~'||value==='++'||value==='--'||value==='/'||value==='/=';break;case 4:start=value==='class'||value==='delete'||value==='function'||value==='let'||value==='new'||value==='super'||value==='this'||value==='typeof'||value==='void'||value==='yield';break;default:break;}
return start;};Parser.prototype.parseYieldExpression=function(){var node=this.createNode();this.expectKeyword('yield');var argument=null;var delegate=false;if(!this.hasLineTerminator){var previousAllowYield=this.context.allowYield;this.context.allowYield=false;delegate=this.match('*');if(delegate){this.nextToken();argument=this.parseAssignmentExpression();}else
if(this.isStartOfExpression()){argument=this.parseAssignmentExpression();}
this.context.allowYield=previousAllowYield;}
return this.finalize(node,new Node.YieldExpression(argument,delegate));};Parser.prototype.parseClassElement=function(hasConstructor){var token=this.lookahead;var node=this.createNode();var kind='';var key=null;var value=null;var computed=false;var method=false;var isStatic=false;var isAsync=false;if(this.match('*')){this.nextToken();}else
{computed=this.match('[');key=this.parseObjectPropertyKey();var id=key;if(id.name==='static'&&(this.qualifiedPropertyName(this.lookahead)||this.match('*'))){token=this.lookahead;isStatic=true;computed=this.match('[');if(this.match('*')){this.nextToken();}else
{key=this.parseObjectPropertyKey();}}
if(token.type===3&&!this.hasLineTerminator&&token.value==='async'){var punctuator=this.lookahead.value;if(punctuator!==':'&&punctuator!=='('&&punctuator!=='*'){isAsync=true;token=this.lookahead;key=this.parseObjectPropertyKey();if(token.type===3){if(token.value==='get'||token.value==='set'){this.tolerateUnexpectedToken(token);}else
if(token.value==='constructor'){this.tolerateUnexpectedToken(token,messages_1.Messages.ConstructorIsAsync);}}}}}
var lookaheadPropertyKey=this.qualifiedPropertyName(this.lookahead);if(token.type===3){if(token.value==='get'&&lookaheadPropertyKey){kind='get';computed=this.match('[');key=this.parseObjectPropertyKey();this.context.allowYield=false;value=this.parseGetterMethod();}else
if(token.value==='set'&&lookaheadPropertyKey){kind='set';computed=this.match('[');key=this.parseObjectPropertyKey();value=this.parseSetterMethod();}}else
if(token.type===7&&token.value==='*'&&lookaheadPropertyKey){kind='init';computed=this.match('[');key=this.parseObjectPropertyKey();value=this.parseGeneratorMethod();method=true;}
if(!kind&&key&&this.match('(')){kind='init';value=isAsync?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();method=true;}
if(!kind){this.throwUnexpectedToken(this.lookahead);}
if(kind==='init'){kind='method';}
if(!computed){if(isStatic&&this.isPropertyKey(key,'prototype')){this.throwUnexpectedToken(token,messages_1.Messages.StaticPrototype);}
if(!isStatic&&this.isPropertyKey(key,'constructor')){if(kind!=='method'||!method||value&&value.generator){this.throwUnexpectedToken(token,messages_1.Messages.ConstructorSpecialMethod);}
if(hasConstructor.value){this.throwUnexpectedToken(token,messages_1.Messages.DuplicateConstructor);}else
{hasConstructor.value=true;}
kind='constructor';}}
return this.finalize(node,new Node.MethodDefinition(key,computed,value,kind,isStatic));};Parser.prototype.parseClassElementList=function(){var body=[];var hasConstructor={value:false};this.expect('{');while(!this.match('}')){if(this.match(';')){this.nextToken();}else
{body.push(this.parseClassElement(hasConstructor));}}
this.expect('}');return body;};Parser.prototype.parseClassBody=function(){var node=this.createNode();var elementList=this.parseClassElementList();return this.finalize(node,new Node.ClassBody(elementList));};Parser.prototype.parseClassDeclaration=function(identifierIsOptional){var node=this.createNode();var previousStrict=this.context.strict;this.context.strict=true;this.expectKeyword('class');var id=identifierIsOptional&&this.lookahead.type!==3?null:this.parseVariableIdentifier();var superClass=null;if(this.matchKeyword('extends')){this.nextToken();superClass=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);}
var classBody=this.parseClassBody();this.context.strict=previousStrict;return this.finalize(node,new Node.ClassDeclaration(id,superClass,classBody));};Parser.prototype.parseClassExpression=function(){var node=this.createNode();var previousStrict=this.context.strict;this.context.strict=true;this.expectKeyword('class');var id=this.lookahead.type===3?this.parseVariableIdentifier():null;var superClass=null;if(this.matchKeyword('extends')){this.nextToken();superClass=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);}
var classBody=this.parseClassBody();this.context.strict=previousStrict;return this.finalize(node,new Node.ClassExpression(id,superClass,classBody));};Parser.prototype.parseModule=function(){this.context.strict=true;this.context.isModule=true;var node=this.createNode();var body=this.parseDirectivePrologues();while(this.lookahead.type!==2){body.push(this.parseStatementListItem());}
return this.finalize(node,new Node.Module(body));};Parser.prototype.parseScript=function(){var node=this.createNode();var body=this.parseDirectivePrologues();while(this.lookahead.type!==2){body.push(this.parseStatementListItem());}
return this.finalize(node,new Node.Script(body));};Parser.prototype.parseModuleSpecifier=function(){var node=this.createNode();if(this.lookahead.type!==8){this.throwError(messages_1.Messages.InvalidModuleSpecifier);}
var token=this.nextToken();var raw=this.getTokenRaw(token);return this.finalize(node,new Node.Literal(token.value,raw));};Parser.prototype.parseImportSpecifier=function(){var node=this.createNode();var imported;var local;if(this.lookahead.type===3){imported=this.parseVariableIdentifier();local=imported;if(this.matchContextualKeyword('as')){this.nextToken();local=this.parseVariableIdentifier();}}else
{imported=this.parseIdentifierName();local=imported;if(this.matchContextualKeyword('as')){this.nextToken();local=this.parseVariableIdentifier();}else
{this.throwUnexpectedToken(this.nextToken());}}
return this.finalize(node,new Node.ImportSpecifier(local,imported));};Parser.prototype.parseNamedImports=function(){this.expect('{');var specifiers=[];while(!this.match('}')){specifiers.push(this.parseImportSpecifier());if(!this.match('}')){this.expect(',');}}
this.expect('}');return specifiers;};Parser.prototype.parseImportDefaultSpecifier=function(){var node=this.createNode();var local=this.parseIdentifierName();return this.finalize(node,new Node.ImportDefaultSpecifier(local));};Parser.prototype.parseImportNamespaceSpecifier=function(){var node=this.createNode();this.expect('*');if(!this.matchContextualKeyword('as')){this.throwError(messages_1.Messages.NoAsAfterImportNamespace);}
this.nextToken();var local=this.parseIdentifierName();return this.finalize(node,new Node.ImportNamespaceSpecifier(local));};Parser.prototype.parseImportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(messages_1.Messages.IllegalImportDeclaration);}
var node=this.createNode();this.expectKeyword('import');var src;var specifiers=[];if(this.lookahead.type===8){src=this.parseModuleSpecifier();}else
{if(this.match('{')){specifiers=specifiers.concat(this.parseNamedImports());}else
if(this.match('*')){specifiers.push(this.parseImportNamespaceSpecifier());}else
if(this.isIdentifierName(this.lookahead)&&!this.matchKeyword('default')){specifiers.push(this.parseImportDefaultSpecifier());if(this.match(',')){this.nextToken();if(this.match('*')){specifiers.push(this.parseImportNamespaceSpecifier());}else
if(this.match('{')){specifiers=specifiers.concat(this.parseNamedImports());}else
{this.throwUnexpectedToken(this.lookahead);}}}else
{this.throwUnexpectedToken(this.nextToken());}
if(!this.matchContextualKeyword('from')){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value);}
this.nextToken();src=this.parseModuleSpecifier();}
this.consumeSemicolon();return this.finalize(node,new Node.ImportDeclaration(specifiers,src));};Parser.prototype.parseExportSpecifier=function(){var node=this.createNode();var local=this.parseIdentifierName();var exported=local;if(this.matchContextualKeyword('as')){this.nextToken();exported=this.parseIdentifierName();}
return this.finalize(node,new Node.ExportSpecifier(local,exported));};Parser.prototype.parseExportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(messages_1.Messages.IllegalExportDeclaration);}
var node=this.createNode();this.expectKeyword('export');var exportDeclaration;if(this.matchKeyword('default')){this.nextToken();if(this.matchKeyword('function')){var declaration=this.parseFunctionDeclaration(true);exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration));}else
if(this.matchKeyword('class')){var declaration=this.parseClassDeclaration(true);exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration));}else
if(this.matchContextualKeyword('async')){var declaration=this.matchAsyncFunction()?this.parseFunctionDeclaration(true):this.parseAssignmentExpression();exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration));}else
{if(this.matchContextualKeyword('from')){this.throwError(messages_1.Messages.UnexpectedToken,this.lookahead.value);}
var declaration=this.match('{')?this.parseObjectInitializer():this.match('[')?this.parseArrayInitializer():this.parseAssignmentExpression();this.consumeSemicolon();exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration));}}else
if(this.match('*')){this.nextToken();if(!this.matchContextualKeyword('from')){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value);}
this.nextToken();var src=this.parseModuleSpecifier();this.consumeSemicolon();exportDeclaration=this.finalize(node,new Node.ExportAllDeclaration(src));}else
if(this.lookahead.type===4){var declaration=void 0;switch(this.lookahead.value){case'let':case'const':declaration=this.parseLexicalDeclaration({inFor:false});break;case'var':case'class':case'function':declaration=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead);}
exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(declaration,[],null));}else
if(this.matchAsyncFunction()){var declaration=this.parseFunctionDeclaration();exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(declaration,[],null));}else
{var specifiers=[];var source=null;var isExportFromIdentifier=false;this.expect('{');while(!this.match('}')){isExportFromIdentifier=isExportFromIdentifier||this.matchKeyword('default');specifiers.push(this.parseExportSpecifier());if(!this.match('}')){this.expect(',');}}
this.expect('}');if(this.matchContextualKeyword('from')){this.nextToken();source=this.parseModuleSpecifier();this.consumeSemicolon();}else
if(isExportFromIdentifier){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value);}else
{this.consumeSemicolon();}
exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(null,specifiers,source));}
return exportDeclaration;};return Parser;}();exports.Parser=Parser;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function assert(condition,message){if(!condition){throw new Error('ASSERT: '+message);}}
exports.assert=assert;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var ErrorHandler=function(){function ErrorHandler(){this.errors=[];this.tolerant=false;}
ErrorHandler.prototype.recordError=function(error){this.errors.push(error);};ErrorHandler.prototype.tolerate=function(error){if(this.tolerant){this.recordError(error);}else
{throw error;}};ErrorHandler.prototype.constructError=function(msg,column){var error=new Error(msg);try{throw error;}
catch(base){if(Object.create&&Object.defineProperty){error=Object.create(base);Object.defineProperty(error,'column',{value:column});}}
return error;};ErrorHandler.prototype.createError=function(index,line,col,description){var msg='Line '+line+': '+description;var error=this.constructError(msg,col);error.index=index;error.lineNumber=line;error.description=description;return error;};ErrorHandler.prototype.throwError=function(index,line,col,description){throw this.createError(index,line,col,description);};ErrorHandler.prototype.tolerateError=function(index,line,col,description){var error=this.createError(index,line,col,description);if(this.tolerant){this.recordError(error);}else
{throw error;}};return ErrorHandler;}();exports.ErrorHandler=ErrorHandler;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Messages={BadGetterArity:'Getter must not have any formal parameters',BadSetterArity:'Setter must have exactly one formal parameter',BadSetterRestParameter:'Setter function argument must not be a rest parameter',ConstructorIsAsync:'Class constructor may not be an async method',ConstructorSpecialMethod:'Class constructor may not be an accessor',DeclarationMissingInitializer:'Missing initializer in %0 declaration',DefaultRestParameter:'Unexpected token =',DuplicateBinding:'Duplicate binding %0',DuplicateConstructor:'A class may only have one constructor',DuplicateProtoProperty:'Duplicate __proto__ fields are not allowed in object literals',ForInOfLoopInitializer:'%0 loop variable declaration may not have an initializer',GeneratorInLegacyContext:'Generator declarations are not allowed in legacy contexts',IllegalBreak:'Illegal break statement',IllegalContinue:'Illegal continue statement',IllegalExportDeclaration:'Unexpected token',IllegalImportDeclaration:'Unexpected token',IllegalLanguageModeDirective:'Illegal \'use strict\' directive in function with non-simple parameter list',IllegalReturn:'Illegal return statement',InvalidEscapedReservedWord:'Keyword must not contain escaped characters',InvalidHexEscapeSequence:'Invalid hexadecimal escape sequence',InvalidLHSInAssignment:'Invalid left-hand side in assignment',InvalidLHSInForIn:'Invalid left-hand side in for-in',InvalidLHSInForLoop:'Invalid left-hand side in for-loop',InvalidModuleSpecifier:'Unexpected token',InvalidRegExp:'Invalid regular expression',LetInLexicalBinding:'let is disallowed as a lexically bound name',MissingFromClause:'Unexpected token',MultipleDefaultsInSwitch:'More than one default clause in switch statement',NewlineAfterThrow:'Illegal newline after throw',NoAsAfterImportNamespace:'Unexpected token',NoCatchOrFinally:'Missing catch or finally after try',ParameterAfterRestParameter:'Rest parameter must be last formal parameter',Redeclaration:'%0 \'%1\' has already been declared',StaticPrototype:'Classes may not have static property named prototype',StrictCatchVariable:'Catch variable may not be eval or arguments in strict mode',StrictDelete:'Delete of an unqualified identifier in strict mode.',StrictFunction:'In strict mode code, functions can only be declared at top level or inside a block',StrictFunctionName:'Function name may not be eval or arguments in strict mode',StrictLHSAssignment:'Assignment to eval or arguments is not allowed in strict mode',StrictLHSPostfix:'Postfix increment/decrement may not have eval or arguments operand in strict mode',StrictLHSPrefix:'Prefix increment/decrement may not have eval or arguments operand in strict mode',StrictModeWith:'Strict mode code may not include a with statement',StrictOctalLiteral:'Octal literals are not allowed in strict mode.',StrictParamDupe:'Strict mode function may not have duplicate parameter names',StrictParamName:'Parameter name eval or arguments is not allowed in strict mode',StrictReservedWord:'Use of future reserved word in strict mode',StrictVarName:'Variable name may not be eval or arguments in strict mode',TemplateOctalLiteral:'Octal literals are not allowed in template strings.',UnexpectedEOS:'Unexpected end of input',UnexpectedIdentifier:'Unexpected identifier',UnexpectedNumber:'Unexpected number',UnexpectedReserved:'Unexpected reserved word',UnexpectedString:'Unexpected string',UnexpectedTemplate:'Unexpected quasi %0',UnexpectedToken:'Unexpected token %0',UnexpectedTokenIllegal:'Unexpected token ILLEGAL',UnknownLabel:'Undefined label \'%0\'',UnterminatedRegExp:'Invalid regular expression: missing /'};},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var assert_1=__webpack_require__(9);var character_1=__webpack_require__(4);var messages_1=__webpack_require__(11);function hexValue(ch){return'0123456789abcdef'.indexOf(ch.toLowerCase());}
function octalValue(ch){return'01234567'.indexOf(ch);}
var Scanner=function(){function Scanner(code,handler){this.source=code;this.errorHandler=handler;this.trackComment=false;this.length=code.length;this.index=0;this.lineNumber=code.length>0?1:0;this.lineStart=0;this.curlyStack=[];}
Scanner.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart};};Scanner.prototype.restoreState=function(state){this.index=state.index;this.lineNumber=state.lineNumber;this.lineStart=state.lineStart;};Scanner.prototype.eof=function(){return this.index>=this.length;};Scanner.prototype.throwUnexpectedToken=function(message){if(message===void 0){message=messages_1.Messages.UnexpectedTokenIllegal;}
return this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,message);};Scanner.prototype.tolerateUnexpectedToken=function(message){if(message===void 0){message=messages_1.Messages.UnexpectedTokenIllegal;}
this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,message);};Scanner.prototype.skipSingleLineComment=function(offset){var comments=[];var start,loc;if(this.trackComment){comments=[];start=this.index-offset;loc={start:{line:this.lineNumber,column:this.index-this.lineStart-offset},end:{}};}
while(!this.eof()){var ch=this.source.charCodeAt(this.index);++this.index;if(character_1.Character.isLineTerminator(ch)){if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart-1};var entry={multiLine:false,slice:[start+offset,this.index-1],range:[start,this.index-1],loc:loc};comments.push(entry);}
if(ch===13&&this.source.charCodeAt(this.index)===10){++this.index;}
++this.lineNumber;this.lineStart=this.index;return comments;}}
if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:false,slice:[start+offset,this.index],range:[start,this.index],loc:loc};comments.push(entry);}
return comments;};Scanner.prototype.skipMultiLineComment=function(){var comments=[];var start,loc;if(this.trackComment){comments=[];start=this.index-2;loc={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}};}
while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(character_1.Character.isLineTerminator(ch)){if(ch===0x0D&&this.source.charCodeAt(this.index+1)===0x0A){++this.index;}
++this.lineNumber;++this.index;this.lineStart=this.index;}else
if(ch===0x2A){if(this.source.charCodeAt(this.index+1)===0x2F){this.index+=2;if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:true,slice:[start+2,this.index-2],range:[start,this.index],loc:loc};comments.push(entry);}
return comments;}
++this.index;}else
{++this.index;}}
if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:true,slice:[start+2,this.index],range:[start,this.index],loc:loc};comments.push(entry);}
this.tolerateUnexpectedToken();return comments;};Scanner.prototype.scanComments=function(){var comments;if(this.trackComment){comments=[];}
var start=this.index===0;while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(character_1.Character.isWhiteSpace(ch)){++this.index;}else
if(character_1.Character.isLineTerminator(ch)){++this.index;if(ch===0x0D&&this.source.charCodeAt(this.index)===0x0A){++this.index;}
++this.lineNumber;this.lineStart=this.index;start=true;}else
if(ch===0x2F){ch=this.source.charCodeAt(this.index+1);if(ch===0x2F){this.index+=2;var comment=this.skipSingleLineComment(2);if(this.trackComment){comments=comments.concat(comment);}
start=true;}else
if(ch===0x2A){this.index+=2;var comment=this.skipMultiLineComment();if(this.trackComment){comments=comments.concat(comment);}}else
{break;}}else
if(start&&ch===0x2D){if(this.source.charCodeAt(this.index+1)===0x2D&&this.source.charCodeAt(this.index+2)===0x3E){this.index+=3;var comment=this.skipSingleLineComment(3);if(this.trackComment){comments=comments.concat(comment);}}else
{break;}}else
if(ch===0x3C){if(this.source.slice(this.index+1,this.index+4)==='!--'){this.index+=4;var comment=this.skipSingleLineComment(4);if(this.trackComment){comments=comments.concat(comment);}}else
{break;}}else
{break;}}
return comments;};Scanner.prototype.isFutureReservedWord=function(id){switch(id){case'enum':case'export':case'import':case'super':return true;default:return false;}};Scanner.prototype.isStrictModeReservedWord=function(id){switch(id){case'implements':case'interface':case'package':case'private':case'protected':case'public':case'static':case'yield':case'let':return true;default:return false;}};Scanner.prototype.isRestrictedWord=function(id){return id==='eval'||id==='arguments';};Scanner.prototype.isKeyword=function(id){switch(id.length){case 2:return id==='if'||id==='in'||id==='do';case 3:return id==='var'||id==='for'||id==='new'||id==='try'||id==='let';case 4:return id==='this'||id==='else'||id==='case'||id==='void'||id==='with'||id==='enum';case 5:return id==='while'||id==='break'||id==='catch'||id==='throw'||id==='const'||id==='yield'||id==='class'||id==='super';case 6:return id==='return'||id==='typeof'||id==='delete'||id==='switch'||id==='export'||id==='import';case 7:return id==='default'||id==='finally'||id==='extends';case 8:return id==='function'||id==='continue'||id==='debugger';case 10:return id==='instanceof';default:return false;}};Scanner.prototype.codePointAt=function(i){var cp=this.source.charCodeAt(i);if(cp>=0xD800&&cp<=0xDBFF){var second=this.source.charCodeAt(i+1);if(second>=0xDC00&&second<=0xDFFF){var first=cp;cp=(first-0xD800)*0x400+second-0xDC00+0x10000;}}
return cp;};Scanner.prototype.scanHexEscape=function(prefix){var len=prefix==='u'?4:2;var code=0;for(var i=0;i<len;++i){if(!this.eof()&&character_1.Character.isHexDigit(this.source.charCodeAt(this.index))){code=code*16+hexValue(this.source[this.index++]);}else
{return null;}}
return String.fromCharCode(code);};Scanner.prototype.scanUnicodeCodePointEscape=function(){var ch=this.source[this.index];var code=0;if(ch==='}'){this.throwUnexpectedToken();}
while(!this.eof()){ch=this.source[this.index++];if(!character_1.Character.isHexDigit(ch.charCodeAt(0))){break;}
code=code*16+hexValue(ch);}
if(code>0x10FFFF||ch!=='}'){this.throwUnexpectedToken();}
return character_1.Character.fromCodePoint(code);};Scanner.prototype.getIdentifier=function(){var start=this.index++;while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(ch===0x5C){this.index=start;return this.getComplexIdentifier();}else
if(ch>=0xD800&&ch<0xDFFF){this.index=start;return this.getComplexIdentifier();}
if(character_1.Character.isIdentifierPart(ch)){++this.index;}else
{break;}}
return this.source.slice(start,this.index);};Scanner.prototype.getComplexIdentifier=function(){var cp=this.codePointAt(this.index);var id=character_1.Character.fromCodePoint(cp);this.index+=id.length;var ch;if(cp===0x5C){if(this.source.charCodeAt(this.index)!==0x75){this.throwUnexpectedToken();}
++this.index;if(this.source[this.index]==='{'){++this.index;ch=this.scanUnicodeCodePointEscape();}else
{ch=this.scanHexEscape('u');if(ch===null||ch==='\\'||!character_1.Character.isIdentifierStart(ch.charCodeAt(0))){this.throwUnexpectedToken();}}
id=ch;}
while(!this.eof()){cp=this.codePointAt(this.index);if(!character_1.Character.isIdentifierPart(cp)){break;}
ch=character_1.Character.fromCodePoint(cp);id+=ch;this.index+=ch.length;if(cp===0x5C){id=id.substr(0,id.length-1);if(this.source.charCodeAt(this.index)!==0x75){this.throwUnexpectedToken();}
++this.index;if(this.source[this.index]==='{'){++this.index;ch=this.scanUnicodeCodePointEscape();}else
{ch=this.scanHexEscape('u');if(ch===null||ch==='\\'||!character_1.Character.isIdentifierPart(ch.charCodeAt(0))){this.throwUnexpectedToken();}}
id+=ch;}}
return id;};Scanner.prototype.octalToDecimal=function(ch){var octal=ch!=='0';var code=octalValue(ch);if(!this.eof()&&character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){octal=true;code=code*8+octalValue(this.source[this.index++]);if('0123'.indexOf(ch)>=0&&!this.eof()&&character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){code=code*8+octalValue(this.source[this.index++]);}}
return{code:code,octal:octal};};Scanner.prototype.scanIdentifier=function(){var type;var start=this.index;var id=this.source.charCodeAt(start)===0x5C?this.getComplexIdentifier():this.getIdentifier();if(id.length===1){type=3;}else
if(this.isKeyword(id)){type=4;}else
if(id==='null'){type=5;}else
if(id==='true'||id==='false'){type=1;}else
{type=3;}
if(type!==3&&start+id.length!==this.index){var restore=this.index;this.index=start;this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);this.index=restore;}
return{type:type,value:id,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanPunctuator=function(){var start=this.index;var str=this.source[this.index];switch(str){case'(':case'{':if(str==='{'){this.curlyStack.push('{');}
++this.index;break;case'.':++this.index;if(this.source[this.index]==='.'&&this.source[this.index+1]==='.'){this.index+=2;str='...';}
break;case'}':++this.index;this.curlyStack.pop();break;case')':case';':case',':case'[':case']':case':':case'?':case'~':++this.index;break;default:str=this.source.substr(this.index,4);if(str==='>>>='){this.index+=4;}else
{str=str.substr(0,3);if(str==='==='||str==='!=='||str==='>>>'||str==='<<='||str==='>>='||str==='**='){this.index+=3;}else
{str=str.substr(0,2);if(str==='&&'||str==='||'||str==='=='||str==='!='||str==='+='||str==='-='||str==='*='||str==='/='||str==='++'||str==='--'||str==='<<'||str==='>>'||str==='&='||str==='|='||str==='^='||str==='%='||str==='<='||str==='>='||str==='=>'||str==='**'){this.index+=2;}else
{str=this.source[this.index];if('<>=!+-*%&|^/'.indexOf(str)>=0){++this.index;}}}}}
if(this.index===start){this.throwUnexpectedToken();}
return{type:7,value:str,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanHexLiteral=function(start){var num='';while(!this.eof()){if(!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))){break;}
num+=this.source[this.index++];}
if(num.length===0){this.throwUnexpectedToken();}
if(character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))){this.throwUnexpectedToken();}
return{type:6,value:parseInt('0x'+num,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanBinaryLiteral=function(start){var num='';var ch;while(!this.eof()){ch=this.source[this.index];if(ch!=='0'&&ch!=='1'){break;}
num+=this.source[this.index++];}
if(num.length===0){this.throwUnexpectedToken();}
if(!this.eof()){ch=this.source.charCodeAt(this.index);if(character_1.Character.isIdentifierStart(ch)||character_1.Character.isDecimalDigit(ch)){this.throwUnexpectedToken();}}
return{type:6,value:parseInt(num,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanOctalLiteral=function(prefix,start){var num='';var octal=false;if(character_1.Character.isOctalDigit(prefix.charCodeAt(0))){octal=true;num='0'+this.source[this.index++];}else
{++this.index;}
while(!this.eof()){if(!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){break;}
num+=this.source[this.index++];}
if(!octal&&num.length===0){this.throwUnexpectedToken();}
if(character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))||character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){this.throwUnexpectedToken();}
return{type:6,value:parseInt(num,8),octal:octal,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.isImplicitOctalLiteral=function(){for(var i=this.index+1;i<this.length;++i){var ch=this.source[i];if(ch==='8'||ch==='9'){return false;}
if(!character_1.Character.isOctalDigit(ch.charCodeAt(0))){return true;}}
return true;};Scanner.prototype.scanNumericLiteral=function(){var start=this.index;var ch=this.source[start];assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0))||ch==='.','Numeric literal must start with a decimal digit or a decimal point');var num='';if(ch!=='.'){num=this.source[this.index++];ch=this.source[this.index];if(num==='0'){if(ch==='x'||ch==='X'){++this.index;return this.scanHexLiteral(start);}
if(ch==='b'||ch==='B'){++this.index;return this.scanBinaryLiteral(start);}
if(ch==='o'||ch==='O'){return this.scanOctalLiteral(ch,start);}
if(ch&&character_1.Character.isOctalDigit(ch.charCodeAt(0))){if(this.isImplicitOctalLiteral()){return this.scanOctalLiteral(ch,start);}}}
while(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){num+=this.source[this.index++];}
ch=this.source[this.index];}
if(ch==='.'){num+=this.source[this.index++];while(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){num+=this.source[this.index++];}
ch=this.source[this.index];}
if(ch==='e'||ch==='E'){num+=this.source[this.index++];ch=this.source[this.index];if(ch==='+'||ch==='-'){num+=this.source[this.index++];}
if(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){while(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){num+=this.source[this.index++];}}else
{this.throwUnexpectedToken();}}
if(character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))){this.throwUnexpectedToken();}
return{type:6,value:parseFloat(num),lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanStringLiteral=function(){var start=this.index;var quote=this.source[start];assert_1.assert(quote==='\''||quote==='"','String literal must starts with a quote');++this.index;var octal=false;var str='';while(!this.eof()){var ch=this.source[this.index++];if(ch===quote){quote='';break;}else
if(ch==='\\'){ch=this.source[this.index++];if(!ch||!character_1.Character.isLineTerminator(ch.charCodeAt(0))){switch(ch){case'u':if(this.source[this.index]==='{'){++this.index;str+=this.scanUnicodeCodePointEscape();}else
{var unescaped_1=this.scanHexEscape(ch);if(unescaped_1===null){this.throwUnexpectedToken();}
str+=unescaped_1;}
break;case'x':var unescaped=this.scanHexEscape(ch);if(unescaped===null){this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);}
str+=unescaped;break;case'n':str+='\n';break;case'r':str+='\r';break;case't':str+='\t';break;case'b':str+='\b';break;case'f':str+='\f';break;case'v':str+='\x0B';break;case'8':case'9':str+=ch;this.tolerateUnexpectedToken();break;default:if(ch&&character_1.Character.isOctalDigit(ch.charCodeAt(0))){var octToDec=this.octalToDecimal(ch);octal=octToDec.octal||octal;str+=String.fromCharCode(octToDec.code);}else
{str+=ch;}
break;}}else
{++this.lineNumber;if(ch==='\r'&&this.source[this.index]==='\n'){++this.index;}
this.lineStart=this.index;}}else
if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){break;}else
{str+=ch;}}
if(quote!==''){this.index=start;this.throwUnexpectedToken();}
return{type:8,value:str,octal:octal,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.scanTemplate=function(){var cooked='';var terminated=false;var start=this.index;var head=this.source[start]==='`';var tail=false;var rawOffset=2;++this.index;while(!this.eof()){var ch=this.source[this.index++];if(ch==='`'){rawOffset=1;tail=true;terminated=true;break;}else
if(ch==='$'){if(this.source[this.index]==='{'){this.curlyStack.push('${');++this.index;terminated=true;break;}
cooked+=ch;}else
if(ch==='\\'){ch=this.source[this.index++];if(!character_1.Character.isLineTerminator(ch.charCodeAt(0))){switch(ch){case'n':cooked+='\n';break;case'r':cooked+='\r';break;case't':cooked+='\t';break;case'u':if(this.source[this.index]==='{'){++this.index;cooked+=this.scanUnicodeCodePointEscape();}else
{var restore=this.index;var unescaped_2=this.scanHexEscape(ch);if(unescaped_2!==null){cooked+=unescaped_2;}else
{this.index=restore;cooked+=ch;}}
break;case'x':var unescaped=this.scanHexEscape(ch);if(unescaped===null){this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);}
cooked+=unescaped;break;case'b':cooked+='\b';break;case'f':cooked+='\f';break;case'v':cooked+='\v';break;default:if(ch==='0'){if(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);}
cooked+='\0';}else
if(character_1.Character.isOctalDigit(ch.charCodeAt(0))){this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);}else
{cooked+=ch;}
break;}}else
{++this.lineNumber;if(ch==='\r'&&this.source[this.index]==='\n'){++this.index;}
this.lineStart=this.index;}}else
if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){++this.lineNumber;if(ch==='\r'&&this.source[this.index]==='\n'){++this.index;}
this.lineStart=this.index;cooked+='\n';}else
{cooked+=ch;}}
if(!terminated){this.throwUnexpectedToken();}
if(!head){this.curlyStack.pop();}
return{type:10,value:this.source.slice(start+1,this.index-rawOffset),cooked:cooked,head:head,tail:tail,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.testRegExp=function(pattern,flags){var astralSubstitute='\uFFFF';var tmp=pattern;var self=this;if(flags.indexOf('u')>=0){tmp=tmp.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function($0,$1,$2){var codePoint=parseInt($1||$2,16);if(codePoint>0x10FFFF){self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);}
if(codePoint<=0xFFFF){return String.fromCharCode(codePoint);}
return astralSubstitute;}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,astralSubstitute);}
try{RegExp(tmp);}
catch(e){this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);}
try{return new RegExp(pattern,flags);}
catch(exception){return null;}};Scanner.prototype.scanRegExpBody=function(){var ch=this.source[this.index];assert_1.assert(ch==='/','Regular expression literal must start with a slash');var str=this.source[this.index++];var classMarker=false;var terminated=false;while(!this.eof()){ch=this.source[this.index++];str+=ch;if(ch==='\\'){ch=this.source[this.index++];if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);}
str+=ch;}else
if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);}else
if(classMarker){if(ch===']'){classMarker=false;}}else
{if(ch==='/'){terminated=true;break;}else
if(ch==='['){classMarker=true;}}}
if(!terminated){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);}
return str.substr(1,str.length-2);};Scanner.prototype.scanRegExpFlags=function(){var str='';var flags='';while(!this.eof()){var ch=this.source[this.index];if(!character_1.Character.isIdentifierPart(ch.charCodeAt(0))){break;}
++this.index;if(ch==='\\'&&!this.eof()){ch=this.source[this.index];if(ch==='u'){++this.index;var restore=this.index;var char=this.scanHexEscape('u');if(char!==null){flags+=char;for(str+='\\u';restore<this.index;++restore){str+=this.source[restore];}}else
{this.index=restore;flags+='u';str+='\\u';}
this.tolerateUnexpectedToken();}else
{str+='\\';this.tolerateUnexpectedToken();}}else
{flags+=ch;str+=ch;}}
return flags;};Scanner.prototype.scanRegExp=function(){var start=this.index;var pattern=this.scanRegExpBody();var flags=this.scanRegExpFlags();var value=this.testRegExp(pattern,flags);return{type:9,value:'',pattern:pattern,flags:flags,regex:value,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index};};Scanner.prototype.lex=function(){if(this.eof()){return{type:2,value:'',lineNumber:this.lineNumber,lineStart:this.lineStart,start:this.index,end:this.index};}
var cp=this.source.charCodeAt(this.index);if(character_1.Character.isIdentifierStart(cp)){return this.scanIdentifier();}
if(cp===0x28||cp===0x29||cp===0x3B){return this.scanPunctuator();}
if(cp===0x27||cp===0x22){return this.scanStringLiteral();}
if(cp===0x2E){if(character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index+1))){return this.scanNumericLiteral();}
return this.scanPunctuator();}
if(character_1.Character.isDecimalDigit(cp)){return this.scanNumericLiteral();}
if(cp===0x60||cp===0x7D&&this.curlyStack[this.curlyStack.length-1]==='${'){return this.scanTemplate();}
if(cp>=0xD800&&cp<0xDFFF){if(character_1.Character.isIdentifierStart(this.codePointAt(this.index))){return this.scanIdentifier();}}
return this.scanPunctuator();};return Scanner;}();exports.Scanner=Scanner;},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TokenName={};exports.TokenName[1]='Boolean';exports.TokenName[2]='<end>';exports.TokenName[3]='Identifier';exports.TokenName[4]='Keyword';exports.TokenName[5]='Null';exports.TokenName[6]='Numeric';exports.TokenName[7]='Punctuator';exports.TokenName[8]='String';exports.TokenName[9]='RegularExpression';exports.TokenName[10]='Template';},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.XHTMLEntities={quot:'\u0022',amp:'\u0026',apos:'\u0027',gt:'\u003E',nbsp:'\u00A0',iexcl:'\u00A1',cent:'\u00A2',pound:'\u00A3',curren:'\u00A4',yen:'\u00A5',brvbar:'\u00A6',sect:'\u00A7',uml:'\u00A8',copy:'\u00A9',ordf:'\u00AA',laquo:'\u00AB',not:'\u00AC',shy:'\u00AD',reg:'\u00AE',macr:'\u00AF',deg:'\u00B0',plusmn:'\u00B1',sup2:'\u00B2',sup3:'\u00B3',acute:'\u00B4',micro:'\u00B5',para:'\u00B6',middot:'\u00B7',cedil:'\u00B8',sup1:'\u00B9',ordm:'\u00BA',raquo:'\u00BB',frac14:'\u00BC',frac12:'\u00BD',frac34:'\u00BE',iquest:'\u00BF',Agrave:'\u00C0',Aacute:'\u00C1',Acirc:'\u00C2',Atilde:'\u00C3',Auml:'\u00C4',Aring:'\u00C5',AElig:'\u00C6',Ccedil:'\u00C7',Egrave:'\u00C8',Eacute:'\u00C9',Ecirc:'\u00CA',Euml:'\u00CB',Igrave:'\u00CC',Iacute:'\u00CD',Icirc:'\u00CE',Iuml:'\u00CF',ETH:'\u00D0',Ntilde:'\u00D1',Ograve:'\u00D2',Oacute:'\u00D3',Ocirc:'\u00D4',Otilde:'\u00D5',Ouml:'\u00D6',times:'\u00D7',Oslash:'\u00D8',Ugrave:'\u00D9',Uacute:'\u00DA',Ucirc:'\u00DB',Uuml:'\u00DC',Yacute:'\u00DD',THORN:'\u00DE',szlig:'\u00DF',agrave:'\u00E0',aacute:'\u00E1',acirc:'\u00E2',atilde:'\u00E3',auml:'\u00E4',aring:'\u00E5',aelig:'\u00E6',ccedil:'\u00E7',egrave:'\u00E8',eacute:'\u00E9',ecirc:'\u00EA',euml:'\u00EB',igrave:'\u00EC',iacute:'\u00ED',icirc:'\u00EE',iuml:'\u00EF',eth:'\u00F0',ntilde:'\u00F1',ograve:'\u00F2',oacute:'\u00F3',ocirc:'\u00F4',otilde:'\u00F5',ouml:'\u00F6',divide:'\u00F7',oslash:'\u00F8',ugrave:'\u00F9',uacute:'\u00FA',ucirc:'\u00FB',uuml:'\u00FC',yacute:'\u00FD',thorn:'\u00FE',yuml:'\u00FF',OElig:'\u0152',oelig:'\u0153',Scaron:'\u0160',scaron:'\u0161',Yuml:'\u0178',fnof:'\u0192',circ:'\u02C6',tilde:'\u02DC',Alpha:'\u0391',Beta:'\u0392',Gamma:'\u0393',Delta:'\u0394',Epsilon:'\u0395',Zeta:'\u0396',Eta:'\u0397',Theta:'\u0398',Iota:'\u0399',Kappa:'\u039A',Lambda:'\u039B',Mu:'\u039C',Nu:'\u039D',Xi:'\u039E',Omicron:'\u039F',Pi:'\u03A0',Rho:'\u03A1',Sigma:'\u03A3',Tau:'\u03A4',Upsilon:'\u03A5',Phi:'\u03A6',Chi:'\u03A7',Psi:'\u03A8',Omega:'\u03A9',alpha:'\u03B1',beta:'\u03B2',gamma:'\u03B3',delta:'\u03B4',epsilon:'\u03B5',zeta:'\u03B6',eta:'\u03B7',theta:'\u03B8',iota:'\u03B9',kappa:'\u03BA',lambda:'\u03BB',mu:'\u03BC',nu:'\u03BD',xi:'\u03BE',omicron:'\u03BF',pi:'\u03C0',rho:'\u03C1',sigmaf:'\u03C2',sigma:'\u03C3',tau:'\u03C4',upsilon:'\u03C5',phi:'\u03C6',chi:'\u03C7',psi:'\u03C8',omega:'\u03C9',thetasym:'\u03D1',upsih:'\u03D2',piv:'\u03D6',ensp:'\u2002',emsp:'\u2003',thinsp:'\u2009',zwnj:'\u200C',zwj:'\u200D',lrm:'\u200E',rlm:'\u200F',ndash:'\u2013',mdash:'\u2014',lsquo:'\u2018',rsquo:'\u2019',sbquo:'\u201A',ldquo:'\u201C',rdquo:'\u201D',bdquo:'\u201E',dagger:'\u2020',Dagger:'\u2021',bull:'\u2022',hellip:'\u2026',permil:'\u2030',prime:'\u2032',Prime:'\u2033',lsaquo:'\u2039',rsaquo:'\u203A',oline:'\u203E',frasl:'\u2044',euro:'\u20AC',image:'\u2111',weierp:'\u2118',real:'\u211C',trade:'\u2122',alefsym:'\u2135',larr:'\u2190',uarr:'\u2191',rarr:'\u2192',darr:'\u2193',harr:'\u2194',crarr:'\u21B5',lArr:'\u21D0',uArr:'\u21D1',rArr:'\u21D2',dArr:'\u21D3',hArr:'\u21D4',forall:'\u2200',part:'\u2202',exist:'\u2203',empty:'\u2205',nabla:'\u2207',isin:'\u2208',notin:'\u2209',ni:'\u220B',prod:'\u220F',sum:'\u2211',minus:'\u2212',lowast:'\u2217',radic:'\u221A',prop:'\u221D',infin:'\u221E',ang:'\u2220',and:'\u2227',or:'\u2228',cap:'\u2229',cup:'\u222A',int:'\u222B',there4:'\u2234',sim:'\u223C',cong:'\u2245',asymp:'\u2248',ne:'\u2260',equiv:'\u2261',le:'\u2264',ge:'\u2265',sub:'\u2282',sup:'\u2283',nsub:'\u2284',sube:'\u2286',supe:'\u2287',oplus:'\u2295',otimes:'\u2297',perp:'\u22A5',sdot:'\u22C5',lceil:'\u2308',rceil:'\u2309',lfloor:'\u230A',rfloor:'\u230B',loz:'\u25CA',spades:'\u2660',clubs:'\u2663',hearts:'\u2665',diams:'\u2666',lang:'\u27E8',rang:'\u27E9'};},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var error_handler_1=__webpack_require__(10);var scanner_1=__webpack_require__(12);var token_1=__webpack_require__(13);var Reader=function(){function Reader(){this.values=[];this.curly=this.paren=-1;}
Reader.prototype.beforeFunctionExpression=function(t){return['(','{','[','in','typeof','instanceof','new','return','case','delete','throw','void','=','+=','-=','*=','**=','/=','%=','<<=','>>=','>>>=','&=','|=','^=',',','+','-','*','**','/','%','++','--','<<','>>','>>>','&','|','^','!','~','&&','||','?',':','===','==','>=','<=','<','>','!=','!=='].indexOf(t)>=0;};Reader.prototype.isRegexStart=function(){var previous=this.values[this.values.length-1];var regex=previous!==null;switch(previous){case'this':case']':regex=false;break;case')':var keyword=this.values[this.paren-1];regex=keyword==='if'||keyword==='while'||keyword==='for'||keyword==='with';break;case'}':regex=false;if(this.values[this.curly-3]==='function'){var check=this.values[this.curly-4];regex=check?!this.beforeFunctionExpression(check):false;}else
if(this.values[this.curly-4]==='function'){var check=this.values[this.curly-5];regex=check?!this.beforeFunctionExpression(check):true;}
break;default:break;}
return regex;};Reader.prototype.push=function(token){if(token.type===7||token.type===4){if(token.value==='{'){this.curly=this.values.length;}else
if(token.value==='('){this.paren=this.values.length;}
this.values.push(token.value);}else
{this.values.push(null);}};return Reader;}();var Tokenizer=function(){function Tokenizer(code,config){this.errorHandler=new error_handler_1.ErrorHandler();this.errorHandler.tolerant=config?typeof config.tolerant==='boolean'&&config.tolerant:false;this.scanner=new scanner_1.Scanner(code,this.errorHandler);this.scanner.trackComment=config?typeof config.comment==='boolean'&&config.comment:false;this.trackRange=config?typeof config.range==='boolean'&&config.range:false;this.trackLoc=config?typeof config.loc==='boolean'&&config.loc:false;this.buffer=[];this.reader=new Reader();}
Tokenizer.prototype.errors=function(){return this.errorHandler.errors;};Tokenizer.prototype.getNextToken=function(){if(this.buffer.length===0){var comments=this.scanner.scanComments();if(this.scanner.trackComment){for(var i=0;i<comments.length;++i){var e=comments[i];var value=this.scanner.source.slice(e.slice[0],e.slice[1]);var comment={type:e.multiLine?'BlockComment':'LineComment',value:value};if(this.trackRange){comment.range=e.range;}
if(this.trackLoc){comment.loc=e.loc;}
this.buffer.push(comment);}}
if(!this.scanner.eof()){var loc=void 0;if(this.trackLoc){loc={start:{line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart},end:{}};}
var startRegex=this.scanner.source[this.scanner.index]==='/'&&this.reader.isRegexStart();var token=startRegex?this.scanner.scanRegExp():this.scanner.lex();this.reader.push(token);var entry={type:token_1.TokenName[token.type],value:this.scanner.source.slice(token.start,token.end)};if(this.trackRange){entry.range=[token.start,token.end];}
if(this.trackLoc){loc.end={line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart};entry.loc=loc;}
if(token.type===9){var pattern=token.pattern;var flags=token.flags;entry.regex={pattern:pattern,flags:flags};}
this.buffer.push(entry);}}
return this.buffer.shift();};return Tokenizer;}();exports.Tokenizer=Tokenizer;}]);});;},{}],137:[function(require,module,exports){(function(Buffer){var querystring=require('querystring');var trim=require('./trim');function Link(value){if(!(this instanceof Link)){return new Link(value);}
this.refs=[];}
Link.pattern=/(?:\<([^\>]+)\>)((\s*;\s*([a-z\*]+)=(("[^"]+")|('[^']+')|([^\,\;]+)))*)(\s*,\s*|$)/gi;Link.attrPattern=/([a-z\*]+)=(?:(?:"([^"]+)")|(?:'([^']+)')|([^\,\;]+))/gi;Link.isCompatibleEncoding=function(value){return/^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i.test(value);};Link.formatExtendedAttribute=function(attr,data){var encoding=(data.encoding||'utf-8').toUpperCase();var language=data.language||'en';var encodedValue='';if(Buffer.isBuffer(data.value)&&Link.isCompatibleEncoding(encoding)){encodedValue=data.value.toString(encoding);}else if(Buffer.isBuffer(data.value)){encodedValue=data.value.toString('hex').replace(/[0-9a-f]{2}/gi,'%$1');}else{encodedValue=querystring.escape(data.value);}
return attr+'='+encoding+'\''+
language+'\''+encodedValue;};Link.formatAttribute=function(attr,value){if(/\*$/.test(attr)||typeof value!=='string')
return Link.formatExtendedAttribute(attr,value);var needsQuotes=/[^a-z]/i.test(value);if(needsQuotes){value=querystring.escape(value).replace(/%20/g,' ').replace(/%2C/g,',').replace(/%3B/g,';');value='"'+value+'"';}
return attr+'='+value;};Link.parseExtendedValue=function(value){var parts=/([^']+)?(?:'([^']+)')?(.+)/.exec(value);return{language:parts[2].toLowerCase(),encoding:Link.isCompatibleEncoding(parts[1])?null:parts[1].toLowerCase(),value:Link.isCompatibleEncoding(parts[1])?querystring.unescape(parts[3]):parts[3]};};Link.setAttr=function(link,attr,value){if(attr==='rel'&&link[attr]!=null)
return link;if(Array.isArray(link[attr])){link[attr].push(value);}else if(link[attr]!=null){link[attr]=[link[attr],value];}else{link[attr]=value;}
return link;};Link.parseParams=function(link,uri){var kvs={};var params=/(.+)\?(.+)/gi.exec(uri);if(!params){return link;}
params=params[2].split('&');for(var i=0;i<params.length;i++){var param=params[i].split('=');kvs[param[0]]=param[1];}
Link.setAttr(link,'params',kvs);return link;};Link.parseAttrs=function(link,parts){var match=null;var attr='';var value='';var attrs='';var uriAttrs=/<(.*)>;\s*(.*)/gi.exec(parts);if(uriAttrs){attrs=uriAttrs[2];link=Link.parseParams(link,uriAttrs[1]);}
while(match=Link.attrPattern.exec(attrs)){attr=match[1].toLowerCase();value=match[4]||match[3]||match[2];if(/\*$/.test(attr)){Link.setAttr(link,attr,Link.parseExtendedValue(value));}else if(/%/.test(value)){Link.setAttr(link,attr,querystring.unescape(value));}else{Link.setAttr(link,attr,value);}}
return link;};Link.parse=function(value){return new Link().parse(value);};Link.prototype={constructor:Link,rel:function(value){var links=[];for(var i=0;i<this.refs.length;i++){if(this.refs[i].rel===value){links.push(this.refs[i]);}}
return links;},get:function(attr,value){attr=attr.toLowerCase();var links=[];for(var i=0;i<this.refs.length;i++){if(this.refs[i][attr]===value){links.push(this.refs[i]);}}
return links;},set:function(link){this.refs.push(link);return this;},has:function(attr,value){return this.get(attr,value)!=null;},parse:function(value){value=trim(value).replace(/\r?\n[\x20\x09]+/g,'');var match=null;while(match=Link.pattern.exec(value)){var link=Link.parseAttrs({uri:match[1]},match[0]);this.refs.push(link);}
return this;},toString:function(){var refs=[];var link='';var ref=null;for(var i=0;i<this.refs.length;i++){ref=this.refs[i];link=Object.keys(this.refs[i]).reduce(function(link,attr){if(attr==='uri')return link;return link+'; '+Link.formatAttribute(attr,ref[attr]);},'<'+ref.uri+'>');refs.push(link);}
return refs.join(', ');}};module.exports=Link;}).call(this,{"isBuffer":require("../../../lighthouse-extension/node_modules/is-buffer/index.js")});},{"../../../lighthouse-extension/node_modules/is-buffer/index.js":65,"./trim":138,"querystring":80}],138:[function(require,module,exports){module.exports=function trim(value){return value.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,'');};},{}],139:[function(require,module,exports){var ImageSSIM;(function(ImageSSIM){'use strict';(function(Channels){Channels[Channels["Grey"]=1]="Grey";Channels[Channels["GreyAlpha"]=2]="GreyAlpha";Channels[Channels["RGB"]=3]="RGB";Channels[Channels["RGBAlpha"]=4]="RGBAlpha";})(ImageSSIM.Channels||(ImageSSIM.Channels={}));var Channels=ImageSSIM.Channels;function compare(image1,image2,windowSize,K1,K2,luminance,bitsPerComponent){if(windowSize===void 0){windowSize=8;}
if(K1===void 0){K1=0.01;}
if(K2===void 0){K2=0.03;}
if(luminance===void 0){luminance=true;}
if(bitsPerComponent===void 0){bitsPerComponent=8;}
if(image1.width!==image2.width||image1.height!==image2.height){throw new Error('Images have different sizes!');}
var L=(1<<bitsPerComponent)-1;var c1=Math.pow(K1*L,2),c2=Math.pow(K2*L,2),numWindows=0,mssim=0.0;var mcs=0.0;function iteration(lumaValues1,lumaValues2,averageLumaValue1,averageLumaValue2){var sigxy,sigsqx,sigsqy;sigxy=sigsqx=sigsqy=0.0;for(var i=0;i<lumaValues1.length;i++){sigsqx+=Math.pow(lumaValues1[i]-averageLumaValue1,2);sigsqy+=Math.pow(lumaValues2[i]-averageLumaValue2,2);sigxy+=(lumaValues1[i]-averageLumaValue1)*(lumaValues2[i]-averageLumaValue2);}
var numPixelsInWin=lumaValues1.length-1;sigsqx/=numPixelsInWin;sigsqy/=numPixelsInWin;sigxy/=numPixelsInWin;var numerator=(2*averageLumaValue1*averageLumaValue2+c1)*(2*sigxy+c2);var denominator=(Math.pow(averageLumaValue1,2)+Math.pow(averageLumaValue2,2)+c1)*(sigsqx+sigsqy+c2);mssim+=numerator/denominator;mcs+=(2*sigxy+c2)/(sigsqx+sigsqy+c2);numWindows++;}
Internals._iterate(image1,image2,windowSize,luminance,iteration);return{ssim:mssim/numWindows,mcs:mcs/numWindows};}
ImageSSIM.compare=compare;var Internals;(function(Internals){function _iterate(image1,image2,windowSize,luminance,callback){var width=image1.width,height=image1.height;for(var y=0;y<height;y+=windowSize){for(var x=0;x<width;x+=windowSize){var windowWidth=Math.min(windowSize,width-x),windowHeight=Math.min(windowSize,height-y);var lumaValues1=_lumaValuesForWindow(image1,x,y,windowWidth,windowHeight,luminance),lumaValues2=_lumaValuesForWindow(image2,x,y,windowWidth,windowHeight,luminance),averageLuma1=_averageLuma(lumaValues1),averageLuma2=_averageLuma(lumaValues2);callback(lumaValues1,lumaValues2,averageLuma1,averageLuma2);}}}
Internals._iterate=_iterate;function _lumaValuesForWindow(image,x,y,width,height,luminance){var array=image.data,lumaValues=new Float32Array(new ArrayBuffer(width*height*4)),counter=0;var maxj=y+height;for(var j=y;j<maxj;j++){var offset=j*image.width;var i=(offset+x)*image.channels;var maxi=(offset+x+width)*image.channels;switch(image.channels){case 1:while(i<maxi){lumaValues[counter++]=array[i++];}
break;case 2:while(i<maxi){lumaValues[counter++]=array[i++]*(array[i++]/255);}
break;case 3:if(luminance){while(i<maxi){lumaValues[counter++]=array[i++]*0.212655+array[i++]*0.715158+array[i++]*0.072187;}}else
{while(i<maxi){lumaValues[counter++]=array[i++]+array[i++]+array[i++];}}
break;case 4:if(luminance){while(i<maxi){lumaValues[counter++]=(array[i++]*0.212655+array[i++]*0.715158+array[i++]*0.072187)*(array[i++]/255);}}else
{while(i<maxi){lumaValues[counter++]=(array[i++]+array[i++]+array[i++])*(array[i++]/255);}}
break;}}
return lumaValues;}
function _averageLuma(lumaValues){var sumLuma=0.0;for(var i=0;i<lumaValues.length;i++){sumLuma+=lumaValues[i];}
return sumLuma/lumaValues.length;}})(Internals||(Internals={}));})(ImageSSIM||(ImageSSIM={}));module.exports=ImageSSIM;},{}],140:[function(require,module,exports){var encode=require('./lib/encoder'),decode=require('./lib/decoder');module.exports={encode:encode,decode:decode};},{"./lib/decoder":141,"./lib/encoder":142}],141:[function(require,module,exports){(function(Buffer){var JpegImage=function jpegImage(){"use strict";var dctZigZag=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]);var dctCos1=4017;var dctSin1=799;var dctCos3=3406;var dctSin3=2276;var dctCos6=1567;var dctSin6=3784;var dctSqrt2=5793;var dctSqrt1d2=2896;function constructor(){}
function buildHuffmanTable(codeLengths,values){var k=0,code=[],i,j,length=16;while(length>0&&!codeLengths[length-1])
length--;code.push({children:[],index:0});var p=code[0],q;for(i=0;i<length;i++){for(j=0;j<codeLengths[i];j++){p=code.pop();p.children[p.index]=values[k];while(p.index>0){p=code.pop();}
p.index++;code.push(p);while(code.length<=i){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q;}
k++;}
if(i+1<length){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q;}}
return code[0].children;}
function decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successivePrev,successive){var precision=frame.precision;var samplesPerLine=frame.samplesPerLine;var scanLines=frame.scanLines;var mcusPerLine=frame.mcusPerLine;var progressive=frame.progressive;var maxH=frame.maxH,maxV=frame.maxV;var startOffset=offset,bitsData=0,bitsCount=0;function readBit(){if(bitsCount>0){bitsCount--;return bitsData>>bitsCount&1;}
bitsData=data[offset++];if(bitsData==0xFF){var nextByte=data[offset++];if(nextByte){throw"unexpected marker: "+(bitsData<<8|nextByte).toString(16);}}
bitsCount=7;return bitsData>>>7;}
function decodeHuffman(tree){var node=tree,bit;while((bit=readBit())!==null){node=node[bit];if(typeof node==='number')
return node;if(typeof node!=='object')
throw"invalid huffman sequence";}
return null;}
function receive(length){var n=0;while(length>0){var bit=readBit();if(bit===null)return;n=n<<1|bit;length--;}
return n;}
function receiveAndExtend(length){var n=receive(length);if(n>=1<<length-1)
return n;return n+(-1<<length)+1;}
function decodeBaseline(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:receiveAndExtend(t);zz[0]=component.pred+=diff;var k=1;while(k<64){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15)
break;k+=16;continue;}
k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s);k++;}}
function decodeDCFirst(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:receiveAndExtend(t)<<successive;zz[0]=component.pred+=diff;}
function decodeDCSuccessive(component,zz){zz[0]|=readBit()<<successive;}
var eobrun=0;function decodeACFirst(component,zz){if(eobrun>0){eobrun--;return;}
var k=spectralStart,e=spectralEnd;while(k<=e){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r)-1;break;}
k+=16;continue;}
k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s)*(1<<successive);k++;}}
var successiveACState=0,successiveACNextValue;function decodeACSuccessive(component,zz){var k=spectralStart,e=spectralEnd,r=0;while(k<=e){var z=dctZigZag[k];switch(successiveACState){case 0:var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r);successiveACState=4;}else{r=16;successiveACState=1;}}else{if(s!==1)
throw"invalid ACn encoding";successiveACNextValue=receiveAndExtend(s);successiveACState=r?2:3;}
continue;case 1:case 2:if(zz[z])
zz[z]+=readBit()<<successive;else
{r--;if(r===0)
successiveACState=successiveACState==2?3:0;}
break;case 3:if(zz[z])
zz[z]+=readBit()<<successive;else
{zz[z]=successiveACNextValue<<successive;successiveACState=0;}
break;case 4:if(zz[z])
zz[z]+=readBit()<<successive;break;}
k++;}
if(successiveACState===4){eobrun--;if(eobrun===0)
successiveACState=0;}}
function decodeMcu(component,decode,mcu,row,col){var mcuRow=mcu/mcusPerLine|0;var mcuCol=mcu%mcusPerLine;var blockRow=mcuRow*component.v+row;var blockCol=mcuCol*component.h+col;decode(component,component.blocks[blockRow][blockCol]);}
function decodeBlock(component,decode,mcu){var blockRow=mcu/component.blocksPerLine|0;var blockCol=mcu%component.blocksPerLine;decode(component,component.blocks[blockRow][blockCol]);}
var componentsLength=components.length;var component,i,j,k,n;var decodeFn;if(progressive){if(spectralStart===0)
decodeFn=successivePrev===0?decodeDCFirst:decodeDCSuccessive;else
decodeFn=successivePrev===0?decodeACFirst:decodeACSuccessive;}else{decodeFn=decodeBaseline;}
var mcu=0,marker;var mcuExpected;if(componentsLength==1){mcuExpected=components[0].blocksPerLine*components[0].blocksPerColumn;}else{mcuExpected=mcusPerLine*frame.mcusPerColumn;}
if(!resetInterval)resetInterval=mcuExpected;var h,v;while(mcu<mcuExpected){for(i=0;i<componentsLength;i++)
components[i].pred=0;eobrun=0;if(componentsLength==1){component=components[0];for(n=0;n<resetInterval;n++){decodeBlock(component,decodeFn,mcu);mcu++;}}else{for(n=0;n<resetInterval;n++){for(i=0;i<componentsLength;i++){component=components[i];h=component.h;v=component.v;for(j=0;j<v;j++){for(k=0;k<h;k++){decodeMcu(component,decodeFn,mcu,j,k);}}}
mcu++;if(mcu===mcuExpected)break;}}
bitsCount=0;marker=data[offset]<<8|data[offset+1];if(marker<0xFF00){throw"marker was not found";}
if(marker>=0xFFD0&&marker<=0xFFD7){offset+=2;}else
break;}
return offset-startOffset;}
function buildComponentData(frame,component){var lines=[];var blocksPerLine=component.blocksPerLine;var blocksPerColumn=component.blocksPerColumn;var samplesPerLine=blocksPerLine<<3;var R=new Int32Array(64),r=new Uint8Array(64);function quantizeAndInverse(zz,dataOut,dataIn){var qt=component.quantizationTable;var v0,v1,v2,v3,v4,v5,v6,v7,t;var p=dataIn;var i;for(i=0;i<64;i++)
p[i]=zz[i]*qt[i];for(i=0;i<8;++i){var row=8*i;if(p[1+row]==0&&p[2+row]==0&&p[3+row]==0&&p[4+row]==0&&p[5+row]==0&&p[6+row]==0&&p[7+row]==0){t=dctSqrt2*p[0+row]+512>>10;p[0+row]=t;p[1+row]=t;p[2+row]=t;p[3+row]=t;p[4+row]=t;p[5+row]=t;p[6+row]=t;p[7+row]=t;continue;}
v0=dctSqrt2*p[0+row]+128>>8;v1=dctSqrt2*p[4+row]+128>>8;v2=p[2+row];v3=p[6+row];v4=dctSqrt1d2*(p[1+row]-p[7+row])+128>>8;v7=dctSqrt1d2*(p[1+row]+p[7+row])+128>>8;v5=p[3+row]<<4;v6=p[5+row]<<4;t=v0-v1+1>>1;v0=v0+v1+1>>1;v1=t;t=v2*dctSin6+v3*dctCos6+128>>8;v2=v2*dctCos6-v3*dctSin6+128>>8;v3=t;t=v4-v6+1>>1;v4=v4+v6+1>>1;v6=t;t=v7+v5+1>>1;v5=v7-v5+1>>1;v7=t;t=v0-v3+1>>1;v0=v0+v3+1>>1;v3=t;t=v1-v2+1>>1;v1=v1+v2+1>>1;v2=t;t=v4*dctSin3+v7*dctCos3+2048>>12;v4=v4*dctCos3-v7*dctSin3+2048>>12;v7=t;t=v5*dctSin1+v6*dctCos1+2048>>12;v5=v5*dctCos1-v6*dctSin1+2048>>12;v6=t;p[0+row]=v0+v7;p[7+row]=v0-v7;p[1+row]=v1+v6;p[6+row]=v1-v6;p[2+row]=v2+v5;p[5+row]=v2-v5;p[3+row]=v3+v4;p[4+row]=v3-v4;}
for(i=0;i<8;++i){var col=i;if(p[1*8+col]==0&&p[2*8+col]==0&&p[3*8+col]==0&&p[4*8+col]==0&&p[5*8+col]==0&&p[6*8+col]==0&&p[7*8+col]==0){t=dctSqrt2*dataIn[i+0]+8192>>14;p[0*8+col]=t;p[1*8+col]=t;p[2*8+col]=t;p[3*8+col]=t;p[4*8+col]=t;p[5*8+col]=t;p[6*8+col]=t;p[7*8+col]=t;continue;}
v0=dctSqrt2*p[0*8+col]+2048>>12;v1=dctSqrt2*p[4*8+col]+2048>>12;v2=p[2*8+col];v3=p[6*8+col];v4=dctSqrt1d2*(p[1*8+col]-p[7*8+col])+2048>>12;v7=dctSqrt1d2*(p[1*8+col]+p[7*8+col])+2048>>12;v5=p[3*8+col];v6=p[5*8+col];t=v0-v1+1>>1;v0=v0+v1+1>>1;v1=t;t=v2*dctSin6+v3*dctCos6+2048>>12;v2=v2*dctCos6-v3*dctSin6+2048>>12;v3=t;t=v4-v6+1>>1;v4=v4+v6+1>>1;v6=t;t=v7+v5+1>>1;v5=v7-v5+1>>1;v7=t;t=v0-v3+1>>1;v0=v0+v3+1>>1;v3=t;t=v1-v2+1>>1;v1=v1+v2+1>>1;v2=t;t=v4*dctSin3+v7*dctCos3+2048>>12;v4=v4*dctCos3-v7*dctSin3+2048>>12;v7=t;t=v5*dctSin1+v6*dctCos1+2048>>12;v5=v5*dctCos1-v6*dctSin1+2048>>12;v6=t;p[0*8+col]=v0+v7;p[7*8+col]=v0-v7;p[1*8+col]=v1+v6;p[6*8+col]=v1-v6;p[2*8+col]=v2+v5;p[5*8+col]=v2-v5;p[3*8+col]=v3+v4;p[4*8+col]=v3-v4;}
for(i=0;i<64;++i){var sample=128+(p[i]+8>>4);dataOut[i]=sample<0?0:sample>0xFF?0xFF:sample;}}
var i,j;for(var blockRow=0;blockRow<blocksPerColumn;blockRow++){var scanLine=blockRow<<3;for(i=0;i<8;i++)
lines.push(new Uint8Array(samplesPerLine));for(var blockCol=0;blockCol<blocksPerLine;blockCol++){quantizeAndInverse(component.blocks[blockRow][blockCol],r,R);var offset=0,sample=blockCol<<3;for(j=0;j<8;j++){var line=lines[scanLine+j];for(i=0;i<8;i++)
line[sample+i]=r[offset++];}}}
return lines;}
function clampTo8bit(a){return a<0?0:a>255?255:a;}
constructor.prototype={load:function load(path){var xhr=new XMLHttpRequest();xhr.open("GET",path,true);xhr.responseType="arraybuffer";xhr.onload=function(){var data=new Uint8Array(xhr.response||xhr.mozResponseArrayBuffer);this.parse(data);if(this.onload)
this.onload();}.bind(this);xhr.send(null);},parse:function parse(data){var offset=0,length=data.length;function readUint16(){var value=data[offset]<<8|data[offset+1];offset+=2;return value;}
function readDataBlock(){var length=readUint16();var array=data.subarray(offset,offset+length-2);offset+=array.length;return array;}
function prepareComponents(frame){var maxH=0,maxV=0;var component,componentId;for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];if(maxH<component.h)maxH=component.h;if(maxV<component.v)maxV=component.v;}}
var mcusPerLine=Math.ceil(frame.samplesPerLine/8/maxH);var mcusPerColumn=Math.ceil(frame.scanLines/8/maxV);for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];var blocksPerLine=Math.ceil(Math.ceil(frame.samplesPerLine/8)*component.h/maxH);var blocksPerColumn=Math.ceil(Math.ceil(frame.scanLines/8)*component.v/maxV);var blocksPerLineForMcu=mcusPerLine*component.h;var blocksPerColumnForMcu=mcusPerColumn*component.v;var blocks=[];for(var i=0;i<blocksPerColumnForMcu;i++){var row=[];for(var j=0;j<blocksPerLineForMcu;j++)
row.push(new Int32Array(64));blocks.push(row);}
component.blocksPerLine=blocksPerLine;component.blocksPerColumn=blocksPerColumn;component.blocks=blocks;}}
frame.maxH=maxH;frame.maxV=maxV;frame.mcusPerLine=mcusPerLine;frame.mcusPerColumn=mcusPerColumn;}
var jfif=null;var adobe=null;var pixels=null;var frame,resetInterval;var quantizationTables=[],frames=[];var huffmanTablesAC=[],huffmanTablesDC=[];var fileMarker=readUint16();if(fileMarker!=0xFFD8){throw"SOI not found";}
fileMarker=readUint16();while(fileMarker!=0xFFD9){var i,j,l;switch(fileMarker){case 0xFF00:break;case 0xFFE0:case 0xFFE1:case 0xFFE2:case 0xFFE3:case 0xFFE4:case 0xFFE5:case 0xFFE6:case 0xFFE7:case 0xFFE8:case 0xFFE9:case 0xFFEA:case 0xFFEB:case 0xFFEC:case 0xFFED:case 0xFFEE:case 0xFFEF:case 0xFFFE:var appData=readDataBlock();if(fileMarker===0xFFE0){if(appData[0]===0x4A&&appData[1]===0x46&&appData[2]===0x49&&appData[3]===0x46&&appData[4]===0){jfif={version:{major:appData[5],minor:appData[6]},densityUnits:appData[7],xDensity:appData[8]<<8|appData[9],yDensity:appData[10]<<8|appData[11],thumbWidth:appData[12],thumbHeight:appData[13],thumbData:appData.subarray(14,14+3*appData[12]*appData[13])};}}
if(fileMarker===0xFFEE){if(appData[0]===0x41&&appData[1]===0x64&&appData[2]===0x6F&&appData[3]===0x62&&appData[4]===0x65&&appData[5]===0){adobe={version:appData[6],flags0:appData[7]<<8|appData[8],flags1:appData[9]<<8|appData[10],transformCode:appData[11]};}}
break;case 0xFFDB:var quantizationTablesLength=readUint16();var quantizationTablesEnd=quantizationTablesLength+offset-2;while(offset<quantizationTablesEnd){var quantizationTableSpec=data[offset++];var tableData=new Int32Array(64);if(quantizationTableSpec>>4===0){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=data[offset++];}}else if(quantizationTableSpec>>4===1){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=readUint16();}}else
throw"DQT: invalid table spec";quantizationTables[quantizationTableSpec&15]=tableData;}
break;case 0xFFC0:case 0xFFC1:case 0xFFC2:readUint16();frame={};frame.extended=fileMarker===0xFFC1;frame.progressive=fileMarker===0xFFC2;frame.precision=data[offset++];frame.scanLines=readUint16();frame.samplesPerLine=readUint16();frame.components={};frame.componentsOrder=[];var componentsCount=data[offset++],componentId;var maxH=0,maxV=0;for(i=0;i<componentsCount;i++){componentId=data[offset];var h=data[offset+1]>>4;var v=data[offset+1]&15;var qId=data[offset+2];frame.componentsOrder.push(componentId);frame.components[componentId]={h:h,v:v,quantizationIdx:qId};offset+=3;}
prepareComponents(frame);frames.push(frame);break;case 0xFFC4:var huffmanLength=readUint16();for(i=2;i<huffmanLength;){var huffmanTableSpec=data[offset++];var codeLengths=new Uint8Array(16);var codeLengthSum=0;for(j=0;j<16;j++,offset++)
codeLengthSum+=codeLengths[j]=data[offset];var huffmanValues=new Uint8Array(codeLengthSum);for(j=0;j<codeLengthSum;j++,offset++)
huffmanValues[j]=data[offset];i+=17+codeLengthSum;(huffmanTableSpec>>4===0?huffmanTablesDC:huffmanTablesAC)[huffmanTableSpec&15]=buildHuffmanTable(codeLengths,huffmanValues);}
break;case 0xFFDD:readUint16();resetInterval=readUint16();break;case 0xFFDA:var scanLength=readUint16();var selectorsCount=data[offset++];var components=[],component;for(i=0;i<selectorsCount;i++){component=frame.components[data[offset++]];var tableSpec=data[offset++];component.huffmanTableDC=huffmanTablesDC[tableSpec>>4];component.huffmanTableAC=huffmanTablesAC[tableSpec&15];components.push(component);}
var spectralStart=data[offset++];var spectralEnd=data[offset++];var successiveApproximation=data[offset++];var processed=decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successiveApproximation>>4,successiveApproximation&15);offset+=processed;break;default:if(data[offset-3]==0xFF&&data[offset-2]>=0xC0&&data[offset-2]<=0xFE){offset-=3;break;}
throw"unknown JPEG marker "+fileMarker.toString(16);}
fileMarker=readUint16();}
if(frames.length!=1)
throw"only single frame JPEGs supported";for(var i=0;i<frames.length;i++){var cp=frames[i].components;for(var j in cp){cp[j].quantizationTable=quantizationTables[cp[j].quantizationIdx];delete cp[j].quantizationIdx;}}
this.width=frame.samplesPerLine;this.height=frame.scanLines;this.jfif=jfif;this.adobe=adobe;this.components=[];for(var i=0;i<frame.componentsOrder.length;i++){var component=frame.components[frame.componentsOrder[i]];this.components.push({lines:buildComponentData(frame,component),scaleX:component.h/frame.maxH,scaleY:component.v/frame.maxV});}},getData:function getData(width,height){var scaleX=this.width/width,scaleY=this.height/height;var component1,component2,component3,component4;var component1Line,component2Line,component3Line,component4Line;var x,y;var offset=0;var Y,Cb,Cr,K,C,M,Ye,R,G,B;var colorTransform;var dataLength=width*height*this.components.length;var data=new Uint8Array(dataLength);switch(this.components.length){case 1:component1=this.components[0];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];for(x=0;x<width;x++){Y=component1Line[0|x*component1.scaleX*scaleX];data[offset++]=Y;}}
break;case 2:component1=this.components[0];component2=this.components[1];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];for(x=0;x<width;x++){Y=component1Line[0|x*component1.scaleX*scaleX];data[offset++]=Y;Y=component2Line[0|x*component2.scaleX*scaleX];data[offset++]=Y;}}
break;case 3:colorTransform=true;if(this.adobe&&this.adobe.transformCode)
colorTransform=true;else
if(typeof this.colorTransform!=='undefined')
colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];component3Line=component3.lines[0|y*component3.scaleY*scaleY];for(x=0;x<width;x++){if(!colorTransform){R=component1Line[0|x*component1.scaleX*scaleX];G=component2Line[0|x*component2.scaleX*scaleX];B=component3Line[0|x*component3.scaleX*scaleX];}else{Y=component1Line[0|x*component1.scaleX*scaleX];Cb=component2Line[0|x*component2.scaleX*scaleX];Cr=component3Line[0|x*component3.scaleX*scaleX];R=clampTo8bit(Y+1.402*(Cr-128));G=clampTo8bit(Y-0.3441363*(Cb-128)-0.71413636*(Cr-128));B=clampTo8bit(Y+1.772*(Cb-128));}
data[offset++]=R;data[offset++]=G;data[offset++]=B;}}
break;case 4:if(!this.adobe)
throw'Unsupported color mode (4 components)';colorTransform=false;if(this.adobe&&this.adobe.transformCode)
colorTransform=true;else
if(typeof this.colorTransform!=='undefined')
colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];component4=this.components[3];for(y=0;y<height;y++){component1Line=component1.lines[0|y*component1.scaleY*scaleY];component2Line=component2.lines[0|y*component2.scaleY*scaleY];component3Line=component3.lines[0|y*component3.scaleY*scaleY];component4Line=component4.lines[0|y*component4.scaleY*scaleY];for(x=0;x<width;x++){if(!colorTransform){C=component1Line[0|x*component1.scaleX*scaleX];M=component2Line[0|x*component2.scaleX*scaleX];Ye=component3Line[0|x*component3.scaleX*scaleX];K=component4Line[0|x*component4.scaleX*scaleX];}else{Y=component1Line[0|x*component1.scaleX*scaleX];Cb=component2Line[0|x*component2.scaleX*scaleX];Cr=component3Line[0|x*component3.scaleX*scaleX];K=component4Line[0|x*component4.scaleX*scaleX];C=255-clampTo8bit(Y+1.402*(Cr-128));M=255-clampTo8bit(Y-0.3441363*(Cb-128)-0.71413636*(Cr-128));Ye=255-clampTo8bit(Y+1.772*(Cb-128));}
data[offset++]=255-C;data[offset++]=255-M;data[offset++]=255-Ye;data[offset++]=255-K;}}
break;default:throw'Unsupported color mode';}
return data;},copyToImageData:function copyToImageData(imageData){var width=imageData.width,height=imageData.height;var imageDataArray=imageData.data;var data=this.getData(width,height);var i=0,j=0,x,y;var Y,K,C,M,R,G,B;switch(this.components.length){case 1:for(y=0;y<height;y++){for(x=0;x<width;x++){Y=data[i++];imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=255;}}
break;case 3:for(y=0;y<height;y++){for(x=0;x<width;x++){R=data[i++];G=data[i++];B=data[i++];imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255;}}
break;case 4:for(y=0;y<height;y++){for(x=0;x<width;x++){C=data[i++];M=data[i++];Y=data[i++];K=data[i++];R=255-clampTo8bit(C*(1-K/255)+K);G=255-clampTo8bit(M*(1-K/255)+K);B=255-clampTo8bit(Y*(1-K/255)+K);imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255;}}
break;default:throw'Unsupported color mode';}}};return constructor;}();module.exports=decode;function decode(jpegData){var arr=new Uint8Array(jpegData);var decoder=new JpegImage();decoder.parse(arr);var image={width:decoder.width,height:decoder.height,data:new Buffer(decoder.width*decoder.height*4)};decoder.copyToImageData(image);return image;}}).call(this,require("buffer").Buffer);},{"buffer":60}],142:[function(require,module,exports){(function(Buffer){var btoa=btoa||function(buf){return new Buffer(buf).toString('base64');};function JPEGEncoder(quality){var self=this;var fround=Math.round;var ffloor=Math.floor;var YTable=new Array(64);var UVTable=new Array(64);var fdtbl_Y=new Array(64);var fdtbl_UV=new Array(64);var YDC_HT;var UVDC_HT;var YAC_HT;var UVAC_HT;var bitcode=new Array(65535);var category=new Array(65535);var outputfDCTQuant=new Array(64);var DU=new Array(64);var byteout=[];var bytenew=0;var bytepos=7;var YDU=new Array(64);var UDU=new Array(64);var VDU=new Array(64);var clt=new Array(256);var RGB_YUV_TABLE=new Array(2048);var currentQuality;var ZigZag=[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];var std_dc_luminance_nrcodes=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];var std_dc_luminance_values=[0,1,2,3,4,5,6,7,8,9,10,11];var std_ac_luminance_nrcodes=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];var std_ac_luminance_values=[0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa];var std_dc_chrominance_nrcodes=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];var std_dc_chrominance_values=[0,1,2,3,4,5,6,7,8,9,10,11];var std_ac_chrominance_nrcodes=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];var std_ac_chrominance_values=[0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa];function initQuantTables(sf){var YQT=[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];for(var i=0;i<64;i++){var t=ffloor((YQT[i]*sf+50)/100);if(t<1){t=1;}else if(t>255){t=255;}
YTable[ZigZag[i]]=t;}
var UVQT=[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];for(var j=0;j<64;j++){var u=ffloor((UVQT[j]*sf+50)/100);if(u<1){u=1;}else if(u>255){u=255;}
UVTable[ZigZag[j]]=u;}
var aasf=[1.0,1.387039845,1.306562965,1.175875602,1.0,0.785694958,0.541196100,0.275899379];var k=0;for(var row=0;row<8;row++)
{for(var col=0;col<8;col++)
{fdtbl_Y[k]=1.0/(YTable[ZigZag[k]]*aasf[row]*aasf[col]*8.0);fdtbl_UV[k]=1.0/(UVTable[ZigZag[k]]*aasf[row]*aasf[col]*8.0);k++;}}}
function computeHuffmanTbl(nrcodes,std_table){var codevalue=0;var pos_in_table=0;var HT=new Array();for(var k=1;k<=16;k++){for(var j=1;j<=nrcodes[k];j++){HT[std_table[pos_in_table]]=[];HT[std_table[pos_in_table]][0]=codevalue;HT[std_table[pos_in_table]][1]=k;pos_in_table++;codevalue++;}
codevalue*=2;}
return HT;}
function initHuffmanTbl()
{YDC_HT=computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);UVDC_HT=computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);YAC_HT=computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);UVAC_HT=computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);}
function initCategoryNumber()
{var nrlower=1;var nrupper=2;for(var cat=1;cat<=15;cat++){for(var nr=nrlower;nr<nrupper;nr++){category[32767+nr]=cat;bitcode[32767+nr]=[];bitcode[32767+nr][1]=cat;bitcode[32767+nr][0]=nr;}
for(var nrneg=-(nrupper-1);nrneg<=-nrlower;nrneg++){category[32767+nrneg]=cat;bitcode[32767+nrneg]=[];bitcode[32767+nrneg][1]=cat;bitcode[32767+nrneg][0]=nrupper-1+nrneg;}
nrlower<<=1;nrupper<<=1;}}
function initRGBYUVTable(){for(var i=0;i<256;i++){RGB_YUV_TABLE[i]=19595*i;RGB_YUV_TABLE[i+256>>0]=38470*i;RGB_YUV_TABLE[i+512>>0]=7471*i+0x8000;RGB_YUV_TABLE[i+768>>0]=-11059*i;RGB_YUV_TABLE[i+1024>>0]=-21709*i;RGB_YUV_TABLE[i+1280>>0]=32768*i+0x807FFF;RGB_YUV_TABLE[i+1536>>0]=-27439*i;RGB_YUV_TABLE[i+1792>>0]=-5329*i;}}
function writeBits(bs)
{var value=bs[0];var posval=bs[1]-1;while(posval>=0){if(value&1<<posval){bytenew|=1<<bytepos;}
posval--;bytepos--;if(bytepos<0){if(bytenew==0xFF){writeByte(0xFF);writeByte(0);}else
{writeByte(bytenew);}
bytepos=7;bytenew=0;}}}
function writeByte(value)
{byteout.push(value);}
function writeWord(value)
{writeByte(value>>8&0xFF);writeByte(value&0xFF);}
function fDCTQuant(data,fdtbl)
{var d0,d1,d2,d3,d4,d5,d6,d7;var dataOff=0;var i;const I8=8;const I64=64;for(i=0;i<I8;++i)
{d0=data[dataOff];d1=data[dataOff+1];d2=data[dataOff+2];d3=data[dataOff+3];d4=data[dataOff+4];d5=data[dataOff+5];d6=data[dataOff+6];d7=data[dataOff+7];var tmp0=d0+d7;var tmp7=d0-d7;var tmp1=d1+d6;var tmp6=d1-d6;var tmp2=d2+d5;var tmp5=d2-d5;var tmp3=d3+d4;var tmp4=d3-d4;var tmp10=tmp0+tmp3;var tmp13=tmp0-tmp3;var tmp11=tmp1+tmp2;var tmp12=tmp1-tmp2;data[dataOff]=tmp10+tmp11;data[dataOff+4]=tmp10-tmp11;var z1=(tmp12+tmp13)*0.707106781;data[dataOff+2]=tmp13+z1;data[dataOff+6]=tmp13-z1;tmp10=tmp4+tmp5;tmp11=tmp5+tmp6;tmp12=tmp6+tmp7;var z5=(tmp10-tmp12)*0.382683433;var z2=0.541196100*tmp10+z5;var z4=1.306562965*tmp12+z5;var z3=tmp11*0.707106781;var z11=tmp7+z3;var z13=tmp7-z3;data[dataOff+5]=z13+z2;data[dataOff+3]=z13-z2;data[dataOff+1]=z11+z4;data[dataOff+7]=z11-z4;dataOff+=8;}
dataOff=0;for(i=0;i<I8;++i)
{d0=data[dataOff];d1=data[dataOff+8];d2=data[dataOff+16];d3=data[dataOff+24];d4=data[dataOff+32];d5=data[dataOff+40];d6=data[dataOff+48];d7=data[dataOff+56];var tmp0p2=d0+d7;var tmp7p2=d0-d7;var tmp1p2=d1+d6;var tmp6p2=d1-d6;var tmp2p2=d2+d5;var tmp5p2=d2-d5;var tmp3p2=d3+d4;var tmp4p2=d3-d4;var tmp10p2=tmp0p2+tmp3p2;var tmp13p2=tmp0p2-tmp3p2;var tmp11p2=tmp1p2+tmp2p2;var tmp12p2=tmp1p2-tmp2p2;data[dataOff]=tmp10p2+tmp11p2;data[dataOff+32]=tmp10p2-tmp11p2;var z1p2=(tmp12p2+tmp13p2)*0.707106781;data[dataOff+16]=tmp13p2+z1p2;data[dataOff+48]=tmp13p2-z1p2;tmp10p2=tmp4p2+tmp5p2;tmp11p2=tmp5p2+tmp6p2;tmp12p2=tmp6p2+tmp7p2;var z5p2=(tmp10p2-tmp12p2)*0.382683433;var z2p2=0.541196100*tmp10p2+z5p2;var z4p2=1.306562965*tmp12p2+z5p2;var z3p2=tmp11p2*0.707106781;var z11p2=tmp7p2+z3p2;var z13p2=tmp7p2-z3p2;data[dataOff+40]=z13p2+z2p2;data[dataOff+24]=z13p2-z2p2;data[dataOff+8]=z11p2+z4p2;data[dataOff+56]=z11p2-z4p2;dataOff++;}
var fDCTQuant;for(i=0;i<I64;++i)
{fDCTQuant=data[i]*fdtbl[i];outputfDCTQuant[i]=fDCTQuant>0.0?fDCTQuant+0.5|0:fDCTQuant-0.5|0;}
return outputfDCTQuant;}
function writeAPP0()
{writeWord(0xFFE0);writeWord(16);writeByte(0x4A);writeByte(0x46);writeByte(0x49);writeByte(0x46);writeByte(0);writeByte(1);writeByte(1);writeByte(0);writeWord(1);writeWord(1);writeByte(0);writeByte(0);}
function writeSOF0(width,height)
{writeWord(0xFFC0);writeWord(17);writeByte(8);writeWord(height);writeWord(width);writeByte(3);writeByte(1);writeByte(0x11);writeByte(0);writeByte(2);writeByte(0x11);writeByte(1);writeByte(3);writeByte(0x11);writeByte(1);}
function writeDQT()
{writeWord(0xFFDB);writeWord(132);writeByte(0);for(var i=0;i<64;i++){writeByte(YTable[i]);}
writeByte(1);for(var j=0;j<64;j++){writeByte(UVTable[j]);}}
function writeDHT()
{writeWord(0xFFC4);writeWord(0x01A2);writeByte(0);for(var i=0;i<16;i++){writeByte(std_dc_luminance_nrcodes[i+1]);}
for(var j=0;j<=11;j++){writeByte(std_dc_luminance_values[j]);}
writeByte(0x10);for(var k=0;k<16;k++){writeByte(std_ac_luminance_nrcodes[k+1]);}
for(var l=0;l<=161;l++){writeByte(std_ac_luminance_values[l]);}
writeByte(1);for(var m=0;m<16;m++){writeByte(std_dc_chrominance_nrcodes[m+1]);}
for(var n=0;n<=11;n++){writeByte(std_dc_chrominance_values[n]);}
writeByte(0x11);for(var o=0;o<16;o++){writeByte(std_ac_chrominance_nrcodes[o+1]);}
for(var p=0;p<=161;p++){writeByte(std_ac_chrominance_values[p]);}}
function writeSOS()
{writeWord(0xFFDA);writeWord(12);writeByte(3);writeByte(1);writeByte(0);writeByte(2);writeByte(0x11);writeByte(3);writeByte(0x11);writeByte(0);writeByte(0x3f);writeByte(0);}
function processDU(CDU,fdtbl,DC,HTDC,HTAC){var EOB=HTAC[0x00];var M16zeroes=HTAC[0xF0];var pos;const I16=16;const I63=63;const I64=64;var DU_DCT=fDCTQuant(CDU,fdtbl);for(var j=0;j<I64;++j){DU[ZigZag[j]]=DU_DCT[j];}
var Diff=DU[0]-DC;DC=DU[0];if(Diff==0){writeBits(HTDC[0]);}else{pos=32767+Diff;writeBits(HTDC[category[pos]]);writeBits(bitcode[pos]);}
var end0pos=63;for(;end0pos>0&&DU[end0pos]==0;end0pos--){};if(end0pos==0){writeBits(EOB);return DC;}
var i=1;var lng;while(i<=end0pos){var startpos=i;for(;DU[i]==0&&i<=end0pos;++i){}
var nrzeroes=i-startpos;if(nrzeroes>=I16){lng=nrzeroes>>4;for(var nrmarker=1;nrmarker<=lng;++nrmarker)
writeBits(M16zeroes);nrzeroes=nrzeroes&0xF;}
pos=32767+DU[i];writeBits(HTAC[(nrzeroes<<4)+category[pos]]);writeBits(bitcode[pos]);i++;}
if(end0pos!=I63){writeBits(EOB);}
return DC;}
function initCharLookupTable(){var sfcc=String.fromCharCode;for(var i=0;i<256;i++){clt[i]=sfcc(i);}}
this.encode=function(image,quality)
{var time_start=new Date().getTime();if(quality)setQuality(quality);byteout=new Array();bytenew=0;bytepos=7;writeWord(0xFFD8);writeAPP0();writeDQT();writeSOF0(image.width,image.height);writeDHT();writeSOS();var DCY=0;var DCU=0;var DCV=0;bytenew=0;bytepos=7;this.encode.displayName="_encode_";var imageData=image.data;var width=image.width;var height=image.height;var quadWidth=width*4;var tripleWidth=width*3;var x,y=0;var r,g,b;var start,p,col,row,pos;while(y<height){x=0;while(x<quadWidth){start=quadWidth*y+x;p=start;col=-1;row=0;for(pos=0;pos<64;pos++){row=pos>>3;col=(pos&7)*4;p=start+row*quadWidth+col;if(y+row>=height){p-=quadWidth*(y+1+row-height);}
if(x+col>=quadWidth){p-=x+col-quadWidth+4;}
r=imageData[p++];g=imageData[p++];b=imageData[p++];YDU[pos]=(RGB_YUV_TABLE[r]+RGB_YUV_TABLE[g+256>>0]+RGB_YUV_TABLE[b+512>>0]>>16)-128;UDU[pos]=(RGB_YUV_TABLE[r+768>>0]+RGB_YUV_TABLE[g+1024>>0]+RGB_YUV_TABLE[b+1280>>0]>>16)-128;VDU[pos]=(RGB_YUV_TABLE[r+1280>>0]+RGB_YUV_TABLE[g+1536>>0]+RGB_YUV_TABLE[b+1792>>0]>>16)-128;}
DCY=processDU(YDU,fdtbl_Y,DCY,YDC_HT,YAC_HT);DCU=processDU(UDU,fdtbl_UV,DCU,UVDC_HT,UVAC_HT);DCV=processDU(VDU,fdtbl_UV,DCV,UVDC_HT,UVAC_HT);x+=32;}
y+=8;}
if(bytepos>=0){var fillbits=[];fillbits[1]=bytepos+1;fillbits[0]=(1<<bytepos+1)-1;writeBits(fillbits);}
writeWord(0xFFD9);return new Buffer(byteout);var jpegDataUri='data:image/jpeg;base64,'+btoa(byteout.join(''));byteout=[];var duration=new Date().getTime()-time_start;return jpegDataUri;};function setQuality(quality){if(quality<=0){quality=1;}
if(quality>100){quality=100;}
if(currentQuality==quality)return;var sf=0;if(quality<50){sf=Math.floor(5000/quality);}else{sf=Math.floor(200-quality*2);}
initQuantTables(sf);currentQuality=quality;}
function init(){var time_start=new Date().getTime();if(!quality)quality=50;initCharLookupTable();initHuffmanTbl();initCategoryNumber();initRGBYUVTable();setQuality(quality);var duration=new Date().getTime()-time_start;}
init();};module.exports=encode;function encode(imgData,qu){if(typeof qu==='undefined')qu=50;var encoder=new JPEGEncoder(qu);var data=encoder.encode(imgData,qu);return{data:data,width:imgData.width,height:imgData.height};}
function getImageDataFromImage(idOrElement){var theImg=typeof idOrElement=='string'?document.getElementById(idOrElement):idOrElement;var cvs=document.createElement('canvas');cvs.width=theImg.width;cvs.height=theImg.height;var ctx=cvs.getContext("2d");ctx.drawImage(theImg,0,0);return ctx.getImageData(0,0,cvs.width,cvs.height);}}).call(this,require("buffer").Buffer);},{"buffer":60}],143:[function(require,module,exports){(function(process){'use strict';const debug=require('debug');const EventEmitter=require('events').EventEmitter;const isWindows=process.platform==='win32';const isBrowser=process.browser;const colors={red:isBrowser?'crimson':1,yellow:isBrowser?'gold':3,cyan:isBrowser?'darkturquoise':6,green:isBrowser?'forestgreen':2,blue:isBrowser?'steelblue':4,magenta:isBrowser?'palevioletred':5};debug.colors=[colors.cyan,colors.green,colors.blue,colors.magenta];class Emitter extends EventEmitter{issueStatus(title,argsArray){if(title==='status'||title==='statusEnd'){this.emit(title,[title,...argsArray]);}}
issueWarning(title,argsArray){this.emit('warning',[title,...argsArray]);}}
const loggersByTitle={};const loggingBufferColumns=25;class Log{static _logToStdErr(title,argsArray){const log=Log.loggerfn(title);log(...argsArray);}
static loggerfn(title){let log=loggersByTitle[title];if(!log){log=debug(title);loggersByTitle[title]=log;if(title.endsWith('error')){log.color=colors.red;}else if(title.endsWith('warn')){log.color=colors.yellow;}}
return log;}
static setLevel(level){switch(level){case'silent':debug.enable('-*');break;case'verbose':debug.enable('*');break;case'error':debug.enable('-*, *:error');break;default:debug.enable('*, -*:verbose');}}
static formatProtocol(prefix,data,level){const columns=!process||process.browser?Infinity:process.stdout.columns;const method=data.method||'?????';const maxLength=columns-method.length-prefix.length-loggingBufferColumns;const snippet=data.params&&method!=='IO.read'?JSON.stringify(data.params).substr(0,maxLength):'';Log._logToStdErr(`${prefix}:${level||''}`,[method,snippet]);}
static log(title,...args){Log.events.issueStatus(title,args);return Log._logToStdErr(title,args);}
static warn(title,...args){Log.events.issueWarning(title,args);return Log._logToStdErr(`${title}:warn`,args);}
static error(title,...args){return Log._logToStdErr(`${title}:error`,args);}
static verbose(title,...args){Log.events.issueStatus(title,args);return Log._logToStdErr(`${title}:verbose`,args);}
static greenify(str){return`${Log.green}${str}${Log.reset}`;}
static redify(str){return`${Log.red}${str}${Log.reset}`;}
static get green(){return'\x1B[32m';}
static get red(){return'\x1B[31m';}
static get yellow(){return'\x1b[33m';}
static get purple(){return'\x1b[95m';}
static get reset(){return'\x1B[0m';}
static get bold(){return'\x1b[1m';}
static get dim(){return'\x1b[2m';}
static get tick(){return isWindows?'\u221A':'✓';}
static get cross(){return isWindows?'\u00D7':'✘';}
static get whiteSmallSquare(){return isWindows?'\u0387':'▫';}
static get heavyHorizontal(){return isWindows?'\u2500':'━';}
static get heavyVertical(){return isWindows?'\u2502 ':'┃ ';}
static get heavyUpAndRight(){return isWindows?'\u2514':'┗';}
static get heavyVerticalAndRight(){return isWindows?'\u251C':'┣';}
static get heavyDownAndHorizontal(){return isWindows?'\u252C':'┳';}
static get doubleLightHorizontal(){return'──';}}
Log.events=new Emitter();module.exports=Log;}).call(this,require('_process'));},{"_process":77,"debug":133,"events":62}],144:[function(require,module,exports){(function(global){var LARGE_ARRAY_SIZE=200;var HASH_UNDEFINED='__lodash_hash_undefined__';var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;var MAX_SAFE_INTEGER=9007199254740991;var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;var reIsHostCtor=/^\[object .+?Constructor\]$/;var reIsUint=/^(?:0|[1-9]\d*)$/;var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;var freeGlobal=typeof global=='object'&&global&&global.Object===Object&&global;var freeSelf=typeof self=='object'&&self&&self.Object===Object&&self;var root=freeGlobal||freeSelf||Function('return this')();var freeExports=typeof exports=='object'&&exports&&!exports.nodeType&&exports;var freeModule=freeExports&&typeof module=='object'&&module&&!module.nodeType&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var freeProcess=moduleExports&&freeGlobal.process;var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}
return result;}
function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}
return array;}
function arraySome(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(predicate(array[index],index,array)){return true;}}
return false;}
function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}
return result;}
function baseUnary(func){return function(value){return func(value);};}
function cacheHas(cache,key){return cache.has(key);}
function getValue(object,key){return object==null?undefined:object[key];}
function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}
function overArg(func,transform){return function(arg){return func(transform(arg));};}
function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}
var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;var coreJsData=root['__core-js_shared__'];var funcToString=funcProto.toString;var hasOwnProperty=objectProto.hasOwnProperty;var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();var nativeObjectToString=objectProto.toString;var reIsNative=RegExp('^'+
funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');var Buffer=moduleExports?root.Buffer:undefined,Symbol=root.Symbol,Uint8Array=root.Uint8Array,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,symToStringTag=Symbol?Symbol.toStringTag:undefined;var nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeKeys=overArg(Object.keys,Object);var DataView=getNative(root,'DataView'),Map=getNative(root,'Map'),Promise=getNative(root,'Promise'),Set=getNative(root,'Set'),WeakMap=getNative(root,'WeakMap'),nativeCreate=getNative(Object,'create');var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);var symbolProto=Symbol?Symbol.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined;function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}
function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}
function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}
function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}
return hasOwnProperty.call(data,key)?data[key]:undefined;}
function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}
function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}
Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}
function listCacheClear(){this.__data__=[];this.size=0;}
function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}
var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}
--this.size;return true;}
function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}
function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}
function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}
return this;}
ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}
function mapCacheClear(){this.size=0;this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}
function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}
function mapCacheGet(key){return getMapData(this,key).get(key);}
function mapCacheHas(key){return getMapData(this,key).has(key);}
function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}
MapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}
function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}
function setCacheHas(value){return this.__data__.has(value);}
SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}
function stackClear(){this.__data__=new ListCache();this.size=0;}
function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}
function stackGet(key){return this.__data__.get(key);}
function stackHas(key){return this.__data__.has(key);}
function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}
data=this.__data__=new MapCache(pairs);}
data.set(key,value);this.size=data.size;return this;}
Stack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(key=='length'||isBuff&&(key=='offset'||key=='parent')||isType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||isIndex(key,length))))
{result.push(key);}}
return result;}
function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}
return-1;}
function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}
function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}
return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}
function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}
function baseIsEqual(value,other,bitmask,customizer,stack){if(value===other){return true;}
if(value==null||other==null||!isObjectLike(value)&&!isObjectLike(other)){return value!==value&&other!==other;}
return baseIsEqualDeep(value,other,bitmask,customizer,baseIsEqual,stack);}
function baseIsEqualDeep(object,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=objIsArr?arrayTag:getTag(object),othTag=othIsArr?arrayTag:getTag(other);objTag=objTag==argsTag?objectTag:objTag;othTag=othTag==argsTag?objectTag:othTag;var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&isBuffer(object)){if(!isBuffer(other)){return false;}
objIsArr=true;objIsObj=false;}
if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,bitmask,customizer,equalFunc,stack):equalByTag(object,other,objTag,bitmask,customizer,equalFunc,stack);}
if(!(bitmask&COMPARE_PARTIAL_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack);}}
if(!isSameTag){return false;}
stack||(stack=new Stack());return equalObjects(object,other,bitmask,customizer,equalFunc,stack);}
function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}
var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}
function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}
function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}
var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}
return result;}
function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}
var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}
var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);while(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}
if(compared!==undefined){if(compared){continue;}
result=false;break;}
if(seen){if(!arraySome(other,function(othValue,othIndex){if(!cacheHas(seen,othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){return seen.push(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack)))
{result=false;break;}}
stack['delete'](array);stack['delete'](other);return result;}
function equalByTag(object,other,tag,bitmask,customizer,equalFunc,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}
object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}
return true;case boolTag:case dateTag:case numberTag:return eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:return object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}
var stacked=stack.get(object);if(stacked){return stacked==other;}
bitmask|=COMPARE_UNORDERED_FLAG;stack.set(object,other);var result=equalArrays(convert(object),convert(other),bitmask,customizer,equalFunc,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}
return false;}
function equalObjects(object,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,objProps=getAllKeys(object),objLength=objProps.length,othProps=getAllKeys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}
var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}
var stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}
var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}
if(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared))
{result=false;break;}
skipCtor||(skipCtor=key=='constructor');}
if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}
stack['delete'](object);stack['delete'](other);return result;}
function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}
function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}
function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}
function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}
var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}
return result;}
var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}
object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};var getTag=baseGetTag;if(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}
return result;};}
function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=='number'||reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}
function isKeyable(value){var type=typeof value;return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}
function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}
function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}
function objectToString(value){return nativeObjectToString.call(value);}
function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}
try{return func+'';}catch(e){}}
return'';}
function eq(value,other){return value===other||value!==value&&other!==other;}
var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};var isArray=Array.isArray;function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}
var isBuffer=nativeIsBuffer||stubFalse;function isEqual(value,other){return baseIsEqual(value,other);}
function isFunction(value){if(!isObject(value)){return false;}
var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}
function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}
function isObject(value){var type=typeof value;return value!=null&&(type=='object'||type=='function');}
function isObjectLike(value){return value!=null&&typeof value=='object';}
var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}
function stubArray(){return[];}
function stubFalse(){return false;}
module.exports=isEqual;}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{});},{}],145:[function(require,module,exports){exports.getRenderingDataFromViewport=function(viewportProperties,uaDeviceWidth,uaDeviceHeight,uaMaxZoom,uaMinZoom){var vw=uaDeviceWidth/100;var vh=uaDeviceHeight/100;var maxZoom=null;var minZoom=null;var zoom=null;var minWidth=null;var minHeight=null;var maxWidth=null;var maxHeight=null;var width=null,height=null;var initialWidth=uaDeviceWidth;var initialHeight=uaDeviceHeight;var userZoom="zoom";if(viewportProperties["maximum-scale"]!==undefined){maxZoom=translateZoomProperty(viewportProperties["maximum-scale"]);}
if(viewportProperties["minimum-scale"]!==undefined){minZoom=translateZoomProperty(viewportProperties["minimum-scale"]);}
if(viewportProperties["initial-scale"]!==undefined){zoom=translateZoomProperty(viewportProperties["initial-scale"]);}
if(minZoom!==null&&maxZoom===null){minZoom=min(uaMaxZoom,translateZoomProperty(viewportProperties["minimum-scale"]));}
if(viewportProperties["width"]!==undefined){minWidth="extend-to-zoom";maxWidth=translateLengthProperty(viewportProperties["width"],vw,vh);}
if(viewportProperties["height"]!==undefined){minHeight="extend-to-zoom";maxHeight=translateLengthProperty(viewportProperties["height"],vw,vh);}
if(viewportProperties["user-scalable"]!==undefined){userZoom=viewportProperties["user-scalable"];if(typeof userZoom==="number"){if(userZoom>=1||userZoom<=-1){userZoom="zoom";}else{userZoom="fixed";}}else{switch(userZoom){case"yes":case"device-width":case"device-height":userZoom="zoom";break;case"no":default:userZoom="fixed";break;}}}
if(zoom!==null&&(viewportProperties["width"]===undefined||width===undefined)){if(viewportProperties["height"]!==undefined){minWidth=null;maxWidth=null;}else{minWidth="extend-to-zoom";maxWidth="extend-to-zoom";}}
if(minZoom!==null&&maxZoom!==null){maxZoom=max(minZoom,maxZoom);}
if(zoom!==null){zoom=clamp(zoom,minZoom,maxZoom);}
var extendZoom=zoom===null&&maxZoom===null?null:min(zoom,maxZoom);var extendWidth,extendHeight;if(extendZoom===null){if(maxWidth==="extend-to-zoom"){maxWidth=null;}
if(maxHeight==="extend-to-zoom"){maxHeight=null;}
if(minWidth==="extend-to-zoom"){minWidth=maxWidth;}
if(minHeight==="extend-to-zoom"){minHeight=maxHeight;}}else{extendWidth=initialWidth/extendZoom;extendHeight=initialHeight/extendZoom;if(maxWidth==="extend-to-zoom"){maxWidth=extendWidth;}
if(maxHeight==="extend-to-zoom"){maxHeight=extendHeight;}
if(minWidth==="extend-to-zoom"){minWidth=max(extendWidth,maxWidth);}
if(minHeight==="extend-to-zoom"){minHeight=max(extendHeight,maxHeight);}}
if(minWidth!==null||maxWidth!==null){width=max(minWidth,min(maxWidth,initialWidth));}
if(minHeight!==null||maxHeight!==null){height=max(minHeight,min(maxHeight,initialHeight));}
if(width===null){if(height===null){width=initialWidth;}else{if(initialHeight!==0){width=Math.round(height*(initialWidth/initialHeight));}else{width=initialWidth;}}}
if(height===null){if(initialWidth!==0){height=Math.round(width*(initialHeight/initialWidth));}else{height=initialHeight;}}
return{zoom:zoom,width:width,height:height,userZoom:userZoom};};function min(a,b){if(a===null)return b;if(b===null)return a;return Math.min(a,b);}
function max(a,b){if(a===null)return b;if(b===null)return a;return Math.max(a,b);}
function translateLengthProperty(prop,vw,vh){if(typeof prop==="number"){if(prop>=0){return clamp(prop,1,10000);}else{return undefined;}}
if(prop==="device-width"){return 100*vw;}
if(prop==="device-height"){return 100*vh;}
return 1;}
function translateZoomProperty(prop){if(typeof prop==="number"){if(prop>=0){return clamp(prop,0.1,10);}else{return undefined;}}
if(prop==="yes"){return 1;}
if(prop==="device-width"||prop==="device-height"){return 10;}
if(prop==="no"||prop===null){return 0.1;}}
function clamp(value,minv,maxv){return max(min(value,maxv),minv);}
exports.parseMetaViewPortContent=function(S){var parsedContent={validProperties:{},unknownProperties:{},invalidValues:{}};var i=1;while(i<=S.length){while(i<=S.length&&RegExp(' |\x0A|\x09|\0d|,|;|=').test(S[i-1])){i++;}
if(i<=S.length){i=parseProperty(parsedContent,S,i);}}
return parsedContent;};var propertyNames=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit"];function parseProperty(parsedContent,S,i){var start=i;while(i<=S.length&&!RegExp(' |\x0A|\x09|\0d|,|;|=').test(S[i-1])){i++;}
if(i>S.length||RegExp(',|;').test(S[i-1])){return i;}
var propertyName=S.slice(start-1,i-1);while(i<=S.length&&!RegExp(',|;|=').test(S[i-1])){i++;}
if(i>S.length||RegExp(',|;').test(S[i-1])){return i;}
while(i<=S.length&&RegExp(' |\x0A|\x09|\0d|=').test(S[i-1])){i++;}
if(i>S.length||RegExp(',|;').test(S[i-1])){return i;}
start=i;while(i<=S.length&&!RegExp(' |\x0A|\x09|\0d|,|;|=').test(S[i-1])){i++;}
var propertyValue=S.slice(start-1,i-1);setProperty(parsedContent,propertyName,propertyValue);return i;}
function setProperty(parsedContent,name,value){if(propertyNames.indexOf(name)>=0){var number=parseFloat(value);if(!isNaN(number)){parsedContent.validProperties[name]=number;return;}
var string=value.toLowerCase();if(string==="yes"||string==="no"||string==="device-width"||string==="device-height"||name.toLowerCase()==='viewport-fit'&&(string==='auto'||string==='cover')){parsedContent.validProperties[name]=string;return;}
parsedContent.validProperties[name]=null;parsedContent.invalidValues[name]=value;}else{parsedContent.unknownProperties[name]=value;}}
exports.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"]};},{}],146:[function(require,module,exports){var s=1000;var m=s*60;var h=m*60;var d=h*24;var y=d*365.25;module.exports=function(val,options){options=options||{};var type=typeof val;if(type==='string'&&val.length>0){return parse(val);}else if(type==='number'&&isNaN(val)===false){return options.long?fmtLong(val):fmtShort(val);}
throw new Error('val is not a non-empty string or a valid number. val='+
JSON.stringify(val));};function parse(str){str=String(str);if(str.length>100){return;}
var match=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);if(!match){return;}
var n=parseFloat(match[1]);var type=(match[2]||'ms').toLowerCase();switch(type){case'years':case'year':case'yrs':case'yr':case'y':return n*y;case'days':case'day':case'd':return n*d;case'hours':case'hour':case'hrs':case'hr':case'h':return n*h;case'minutes':case'minute':case'mins':case'min':case'm':return n*m;case'seconds':case'second':case'secs':case'sec':case's':return n*s;case'milliseconds':case'millisecond':case'msecs':case'msec':case'ms':return n;default:return undefined;}}
function fmtShort(ms){if(ms>=d){return Math.round(ms/d)+'d';}
if(ms>=h){return Math.round(ms/h)+'h';}
if(ms>=m){return Math.round(ms/m)+'m';}
if(ms>=s){return Math.round(ms/s)+'s';}
return ms+'ms';}
function fmtLong(ms){return plural(ms,d,'day')||plural(ms,h,'hour')||plural(ms,m,'minute')||plural(ms,s,'second')||ms+' ms';}
function plural(ms,n,name){if(ms<n){return;}
if(ms<n*1.5){return Math.floor(ms/n)+' '+name;}
return Math.ceil(ms/n)+' '+name+'s';}},{}],147:[function(require,module,exports){module.exports=function parseCacheControl(field){if(typeof field!=='string'){return null;}
var regex=/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g;var header={};var err=field.replace(regex,function($0,$1,$2,$3){var value=$2||$3;header[$1]=value?value.toLowerCase():true;return'';});if(header['max-age']){try{var maxAge=parseInt(header['max-age'],10);if(isNaN(maxAge)){return null;}
header['max-age']=maxAge;}
catch(err){}}
return err?null:header;};},{}],148:[function(require,module,exports){var URL=require('url').URL;function trimLine(line){if(!line){return null;}
if(Array.isArray(line)){return line.map(trimLine);}
return String(line).trim();}
function removeComments(line){var commentStartIndex=line.indexOf('#');if(commentStartIndex>-1){return line.substr(0,commentStartIndex);}
return line;}
function splitLine(line){var idx=String(line).indexOf(':');if(!line||idx<0){return null;}
return[line.slice(0,idx),line.slice(idx+1)];}
function formatUserAgent(userAgent){var formattedUserAgent=userAgent.toLowerCase();var idx=formattedUserAgent.indexOf('/');if(idx>-1){formattedUserAgent=formattedUserAgent.substr(0,idx);}
return formattedUserAgent.trim();}
function normaliseEncoding(path){try{return urlEncodeToUpper(encodeURI(path).replace(/%25/g,'%'));}catch(e){return path;}}
function urlEncodeToUpper(path){return path.replace(/%[0-9a-fA-F]{2}/g,function(match){return match.toUpperCase();});}
function parsePattern(pattern){var regexSpecialChars=/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g;var wildCardPattern=/\*/g;var endOfLinePattern=/\\\$$/;pattern=normaliseEncoding(pattern);if(pattern.indexOf('*')<0&&pattern.indexOf('$')<0){return pattern;}
pattern=pattern.replace(regexSpecialChars,'\\$&').replace(wildCardPattern,'(?:.*)').replace(endOfLinePattern,'$');return new RegExp(pattern);}
function parseRobots(contents,robots){var newlineRegex=/\r\n|\r|\n/;var lines=contents.split(newlineRegex).map(removeComments).map(splitLine).map(trimLine);var currentUserAgents=[];var isNoneUserAgentState=true;for(var i=0;i<lines.length;i++){var line=lines[i];if(!line||!line[0]){continue;}
switch(line[0].toLowerCase()){case'user-agent':if(isNoneUserAgentState){currentUserAgents.length=0;}
if(line[1]){currentUserAgents.push(formatUserAgent(line[1]));}
break;case'disallow':robots.addRule(currentUserAgents,line[1],false,i+1);break;case'allow':robots.addRule(currentUserAgents,line[1],true,i+1);break;case'crawl-delay':robots.setCrawlDelay(currentUserAgents,line[1]);break;case'sitemap':if(line[1]){robots.addSitemap(line[1]);}
break;case'host':if(line[1]){robots.setPreferredHost(line[1].toLowerCase());}
break;}
isNoneUserAgentState=line[0].toLowerCase()!=='user-agent';}}
function findRule(path,rules){var matchingRule=null;for(var i=0;i<rules.length;i++){var rule=rules[i];if(typeof rule.pattern==='string'){if(path.indexOf(rule.pattern)!==0){continue;}
if(!matchingRule||rule.pattern.length>matchingRule.pattern.length){matchingRule=rule;}}else if(rule.pattern.test(path)){return rule;}}
return matchingRule;}
function parseUrl(url){try{return new URL(url);}catch(e){return null;}}
function Robots(url,contents){this._url=parseUrl(url)||{};this._url.port=this._url.port||80;this._rules={};this._sitemaps=[];this._preferedHost=null;parseRobots(contents||'',this);}
Robots.prototype.addRule=function(userAgents,pattern,allow,lineNumber){var rules=this._rules;userAgents.forEach(function(userAgent){rules[userAgent]=rules[userAgent]||[];if(!pattern){return;}
rules[userAgent].push({pattern:parsePattern(pattern),allow:allow,lineNumber:lineNumber});});};Robots.prototype.setCrawlDelay=function(userAgents,delayStr){var rules=this._rules;var delay=Number(delayStr);userAgents.forEach(function(userAgent){rules[userAgent]=rules[userAgent]||[];if(isNaN(delay)){return;}
rules[userAgent].crawlDelay=delay;});};Robots.prototype.addSitemap=function(url){this._sitemaps.push(url);};Robots.prototype.setPreferredHost=function(url){this._preferedHost=url;};Robots.prototype._getRule=function(url,ua){var parsedUrl=parseUrl(url)||{};var userAgent=formatUserAgent(ua||'*');parsedUrl.port=parsedUrl.port||'80';if(parsedUrl.protocol!==this._url.protocol||parsedUrl.hostname!==this._url.hostname||parsedUrl.port!==this._url.port){return;}
var rules=this._rules[userAgent]||this._rules['*']||[];var path=urlEncodeToUpper(parsedUrl.pathname+parsedUrl.search);var rule=findRule(path,rules);return rule;};Robots.prototype.isAllowed=function(url,ua){var rule=this._getRule(url,ua);if(typeof rule==='undefined'){return;}
return!rule||rule.allow;};Robots.prototype.getMatchingLineNumber=function(url,ua){var rule=this._getRule(url,ua);return rule?rule.lineNumber:-1;};Robots.prototype.isDisallowed=function(url,ua){return!this.isAllowed(url,ua);};Robots.prototype.getCrawlDelay=function(ua){var userAgent=formatUserAgent(ua||'*');return(this._rules[userAgent]||this._rules['*']||{}).crawlDelay;};Robots.prototype.getPreferredHost=function(){return this._preferedHost;};Robots.prototype.getSitemaps=function(){return this._sitemaps.slice(0);};module.exports=Robots;},{"url":"url"}],149:[function(require,module,exports){var Robots=require('./Robots');module.exports=function(url,contents){return new Robots(url,contents);};},{"./Robots":148}],150:[function(require,module,exports){(function(process){exports=module.exports=SemVer;var debug;if(typeof process==='object'&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG))
debug=function(){var args=Array.prototype.slice.call(arguments,0);args.unshift('SEMVER');console.log.apply(console,args);};else
debug=function(){};exports.SEMVER_SPEC_VERSION='2.0.0';var MAX_LENGTH=256;var MAX_SAFE_INTEGER=Number.MAX_SAFE_INTEGER||9007199254740991;var re=exports.re=[];var src=exports.src=[];var R=0;var NUMERICIDENTIFIER=R++;src[NUMERICIDENTIFIER]='0|[1-9]\\d*';var NUMERICIDENTIFIERLOOSE=R++;src[NUMERICIDENTIFIERLOOSE]='[0-9]+';var NONNUMERICIDENTIFIER=R++;src[NONNUMERICIDENTIFIER]='\\d*[a-zA-Z-][a-zA-Z0-9-]*';var MAINVERSION=R++;src[MAINVERSION]='('+src[NUMERICIDENTIFIER]+')\\.'+'('+src[NUMERICIDENTIFIER]+')\\.'+'('+src[NUMERICIDENTIFIER]+')';var MAINVERSIONLOOSE=R++;src[MAINVERSIONLOOSE]='('+src[NUMERICIDENTIFIERLOOSE]+')\\.'+'('+src[NUMERICIDENTIFIERLOOSE]+')\\.'+'('+src[NUMERICIDENTIFIERLOOSE]+')';var PRERELEASEIDENTIFIER=R++;src[PRERELEASEIDENTIFIER]='(?:'+src[NUMERICIDENTIFIER]+'|'+src[NONNUMERICIDENTIFIER]+')';var PRERELEASEIDENTIFIERLOOSE=R++;src[PRERELEASEIDENTIFIERLOOSE]='(?:'+src[NUMERICIDENTIFIERLOOSE]+'|'+src[NONNUMERICIDENTIFIER]+')';var PRERELEASE=R++;src[PRERELEASE]='(?:-('+src[PRERELEASEIDENTIFIER]+'(?:\\.'+src[PRERELEASEIDENTIFIER]+')*))';var PRERELEASELOOSE=R++;src[PRERELEASELOOSE]='(?:-?('+src[PRERELEASEIDENTIFIERLOOSE]+'(?:\\.'+src[PRERELEASEIDENTIFIERLOOSE]+')*))';var BUILDIDENTIFIER=R++;src[BUILDIDENTIFIER]='[0-9A-Za-z-]+';var BUILD=R++;src[BUILD]='(?:\\+('+src[BUILDIDENTIFIER]+'(?:\\.'+src[BUILDIDENTIFIER]+')*))';var FULL=R++;var FULLPLAIN='v?'+src[MAINVERSION]+
src[PRERELEASE]+'?'+
src[BUILD]+'?';src[FULL]='^'+FULLPLAIN+'$';var LOOSEPLAIN='[v=\\s]*'+src[MAINVERSIONLOOSE]+
src[PRERELEASELOOSE]+'?'+
src[BUILD]+'?';var LOOSE=R++;src[LOOSE]='^'+LOOSEPLAIN+'$';var GTLT=R++;src[GTLT]='((?:<|>)?=?)';var XRANGEIDENTIFIERLOOSE=R++;src[XRANGEIDENTIFIERLOOSE]=src[NUMERICIDENTIFIERLOOSE]+'|x|X|\\*';var XRANGEIDENTIFIER=R++;src[XRANGEIDENTIFIER]=src[NUMERICIDENTIFIER]+'|x|X|\\*';var XRANGEPLAIN=R++;src[XRANGEPLAIN]='[v=\\s]*('+src[XRANGEIDENTIFIER]+')'+'(?:\\.('+src[XRANGEIDENTIFIER]+')'+'(?:\\.('+src[XRANGEIDENTIFIER]+')'+'(?:'+src[PRERELEASE]+')?'+
src[BUILD]+'?'+')?)?';var XRANGEPLAINLOOSE=R++;src[XRANGEPLAINLOOSE]='[v=\\s]*('+src[XRANGEIDENTIFIERLOOSE]+')'+'(?:\\.('+src[XRANGEIDENTIFIERLOOSE]+')'+'(?:\\.('+src[XRANGEIDENTIFIERLOOSE]+')'+'(?:'+src[PRERELEASELOOSE]+')?'+
src[BUILD]+'?'+')?)?';var XRANGE=R++;src[XRANGE]='^'+src[GTLT]+'\\s*'+src[XRANGEPLAIN]+'$';var XRANGELOOSE=R++;src[XRANGELOOSE]='^'+src[GTLT]+'\\s*'+src[XRANGEPLAINLOOSE]+'$';var LONETILDE=R++;src[LONETILDE]='(?:~>?)';var TILDETRIM=R++;src[TILDETRIM]='(\\s*)'+src[LONETILDE]+'\\s+';re[TILDETRIM]=new RegExp(src[TILDETRIM],'g');var tildeTrimReplace='$1~';var TILDE=R++;src[TILDE]='^'+src[LONETILDE]+src[XRANGEPLAIN]+'$';var TILDELOOSE=R++;src[TILDELOOSE]='^'+src[LONETILDE]+src[XRANGEPLAINLOOSE]+'$';var LONECARET=R++;src[LONECARET]='(?:\\^)';var CARETTRIM=R++;src[CARETTRIM]='(\\s*)'+src[LONECARET]+'\\s+';re[CARETTRIM]=new RegExp(src[CARETTRIM],'g');var caretTrimReplace='$1^';var CARET=R++;src[CARET]='^'+src[LONECARET]+src[XRANGEPLAIN]+'$';var CARETLOOSE=R++;src[CARETLOOSE]='^'+src[LONECARET]+src[XRANGEPLAINLOOSE]+'$';var COMPARATORLOOSE=R++;src[COMPARATORLOOSE]='^'+src[GTLT]+'\\s*('+LOOSEPLAIN+')$|^$';var COMPARATOR=R++;src[COMPARATOR]='^'+src[GTLT]+'\\s*('+FULLPLAIN+')$|^$';var COMPARATORTRIM=R++;src[COMPARATORTRIM]='(\\s*)'+src[GTLT]+'\\s*('+LOOSEPLAIN+'|'+src[XRANGEPLAIN]+')';re[COMPARATORTRIM]=new RegExp(src[COMPARATORTRIM],'g');var comparatorTrimReplace='$1$2$3';var HYPHENRANGE=R++;src[HYPHENRANGE]='^\\s*('+src[XRANGEPLAIN]+')'+'\\s+-\\s+'+'('+src[XRANGEPLAIN]+')'+'\\s*$';var HYPHENRANGELOOSE=R++;src[HYPHENRANGELOOSE]='^\\s*('+src[XRANGEPLAINLOOSE]+')'+'\\s+-\\s+'+'('+src[XRANGEPLAINLOOSE]+')'+'\\s*$';var STAR=R++;src[STAR]='(<|>)?=?\\s*\\*';for(var i=0;i<R;i++){debug(i,src[i]);if(!re[i])
re[i]=new RegExp(src[i]);}
exports.parse=parse;function parse(version,loose){if(version instanceof SemVer)
return version;if(typeof version!=='string')
return null;if(version.length>MAX_LENGTH)
return null;var r=loose?re[LOOSE]:re[FULL];if(!r.test(version))
return null;try{return new SemVer(version,loose);}catch(er){return null;}}
exports.valid=valid;function valid(version,loose){var v=parse(version,loose);return v?v.version:null;}
exports.clean=clean;function clean(version,loose){var s=parse(version.trim().replace(/^[=v]+/,''),loose);return s?s.version:null;}
exports.SemVer=SemVer;function SemVer(version,loose){if(version instanceof SemVer){if(version.loose===loose)
return version;else
version=version.version;}else if(typeof version!=='string'){throw new TypeError('Invalid Version: '+version);}
if(version.length>MAX_LENGTH)
throw new TypeError('version is longer than '+MAX_LENGTH+' characters');if(!(this instanceof SemVer))
return new SemVer(version,loose);debug('SemVer',version,loose);this.loose=loose;var m=version.trim().match(loose?re[LOOSE]:re[FULL]);if(!m)
throw new TypeError('Invalid Version: '+version);this.raw=version;this.major=+m[1];this.minor=+m[2];this.patch=+m[3];if(this.major>MAX_SAFE_INTEGER||this.major<0)
throw new TypeError('Invalid major version');if(this.minor>MAX_SAFE_INTEGER||this.minor<0)
throw new TypeError('Invalid minor version');if(this.patch>MAX_SAFE_INTEGER||this.patch<0)
throw new TypeError('Invalid patch version');if(!m[4])
this.prerelease=[];else
this.prerelease=m[4].split('.').map(function(id){if(/^[0-9]+$/.test(id)){var num=+id;if(num>=0&&num<MAX_SAFE_INTEGER)
return num;}
return id;});this.build=m[5]?m[5].split('.'):[];this.format();}
SemVer.prototype.format=function(){this.version=this.major+'.'+this.minor+'.'+this.patch;if(this.prerelease.length)
this.version+='-'+this.prerelease.join('.');return this.version;};SemVer.prototype.toString=function(){return this.version;};SemVer.prototype.compare=function(other){debug('SemVer.compare',this.version,this.loose,other);if(!(other instanceof SemVer))
other=new SemVer(other,this.loose);return this.compareMain(other)||this.comparePre(other);};SemVer.prototype.compareMain=function(other){if(!(other instanceof SemVer))
other=new SemVer(other,this.loose);return compareIdentifiers(this.major,other.major)||compareIdentifiers(this.minor,other.minor)||compareIdentifiers(this.patch,other.patch);};SemVer.prototype.comparePre=function(other){if(!(other instanceof SemVer))
other=new SemVer(other,this.loose);if(this.prerelease.length&&!other.prerelease.length)
return-1;else
if(!this.prerelease.length&&other.prerelease.length)
return 1;else
if(!this.prerelease.length&&!other.prerelease.length)
return 0;var i=0;do{var a=this.prerelease[i];var b=other.prerelease[i];debug('prerelease compare',i,a,b);if(a===undefined&&b===undefined)
return 0;else
if(b===undefined)
return 1;else
if(a===undefined)
return-1;else
if(a===b)
continue;else
return compareIdentifiers(a,b);}while(++i);};SemVer.prototype.inc=function(release,identifier){switch(release){case'premajor':this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc('pre',identifier);break;case'preminor':this.prerelease.length=0;this.patch=0;this.minor++;this.inc('pre',identifier);break;case'prepatch':this.prerelease.length=0;this.inc('patch',identifier);this.inc('pre',identifier);break;case'prerelease':if(this.prerelease.length===0)
this.inc('patch',identifier);this.inc('pre',identifier);break;case'major':if(this.minor!==0||this.patch!==0||this.prerelease.length===0)
this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case'minor':if(this.patch!==0||this.prerelease.length===0)
this.minor++;this.patch=0;this.prerelease=[];break;case'patch':if(this.prerelease.length===0)
this.patch++;this.prerelease=[];break;case'pre':if(this.prerelease.length===0)
this.prerelease=[0];else
{var i=this.prerelease.length;while(--i>=0){if(typeof this.prerelease[i]==='number'){this.prerelease[i]++;i=-2;}}
if(i===-1)
this.prerelease.push(0);}
if(identifier){if(this.prerelease[0]===identifier){if(isNaN(this.prerelease[1]))
this.prerelease=[identifier,0];}else
this.prerelease=[identifier,0];}
break;default:throw new Error('invalid increment argument: '+release);}
this.format();this.raw=this.version;return this;};exports.inc=inc;function inc(version,release,loose,identifier){if(typeof loose==='string'){identifier=loose;loose=undefined;}
try{return new SemVer(version,loose).inc(release,identifier).version;}catch(er){return null;}}
exports.diff=diff;function diff(version1,version2){if(eq(version1,version2)){return null;}else{var v1=parse(version1);var v2=parse(version2);if(v1.prerelease.length||v2.prerelease.length){for(var key in v1){if(key==='major'||key==='minor'||key==='patch'){if(v1[key]!==v2[key]){return'pre'+key;}}}
return'prerelease';}
for(var key in v1){if(key==='major'||key==='minor'||key==='patch'){if(v1[key]!==v2[key]){return key;}}}}}
exports.compareIdentifiers=compareIdentifiers;var numeric=/^[0-9]+$/;function compareIdentifiers(a,b){var anum=numeric.test(a);var bnum=numeric.test(b);if(anum&&bnum){a=+a;b=+b;}
return anum&&!bnum?-1:bnum&&!anum?1:a<b?-1:a>b?1:0;}
exports.rcompareIdentifiers=rcompareIdentifiers;function rcompareIdentifiers(a,b){return compareIdentifiers(b,a);}
exports.major=major;function major(a,loose){return new SemVer(a,loose).major;}
exports.minor=minor;function minor(a,loose){return new SemVer(a,loose).minor;}
exports.patch=patch;function patch(a,loose){return new SemVer(a,loose).patch;}
exports.compare=compare;function compare(a,b,loose){return new SemVer(a,loose).compare(b);}
exports.compareLoose=compareLoose;function compareLoose(a,b){return compare(a,b,true);}
exports.rcompare=rcompare;function rcompare(a,b,loose){return compare(b,a,loose);}
exports.sort=sort;function sort(list,loose){return list.sort(function(a,b){return exports.compare(a,b,loose);});}
exports.rsort=rsort;function rsort(list,loose){return list.sort(function(a,b){return exports.rcompare(a,b,loose);});}
exports.gt=gt;function gt(a,b,loose){return compare(a,b,loose)>0;}
exports.lt=lt;function lt(a,b,loose){return compare(a,b,loose)<0;}
exports.eq=eq;function eq(a,b,loose){return compare(a,b,loose)===0;}
exports.neq=neq;function neq(a,b,loose){return compare(a,b,loose)!==0;}
exports.gte=gte;function gte(a,b,loose){return compare(a,b,loose)>=0;}
exports.lte=lte;function lte(a,b,loose){return compare(a,b,loose)<=0;}
exports.cmp=cmp;function cmp(a,op,b,loose){var ret;switch(op){case'===':if(typeof a==='object')a=a.version;if(typeof b==='object')b=b.version;ret=a===b;break;case'!==':if(typeof a==='object')a=a.version;if(typeof b==='object')b=b.version;ret=a!==b;break;case'':case'=':case'==':ret=eq(a,b,loose);break;case'!=':ret=neq(a,b,loose);break;case'>':ret=gt(a,b,loose);break;case'>=':ret=gte(a,b,loose);break;case'<':ret=lt(a,b,loose);break;case'<=':ret=lte(a,b,loose);break;default:throw new TypeError('Invalid operator: '+op);}
return ret;}
exports.Comparator=Comparator;function Comparator(comp,loose){if(comp instanceof Comparator){if(comp.loose===loose)
return comp;else
comp=comp.value;}
if(!(this instanceof Comparator))
return new Comparator(comp,loose);debug('comparator',comp,loose);this.loose=loose;this.parse(comp);if(this.semver===ANY)
this.value='';else
this.value=this.operator+this.semver.version;debug('comp',this);}
var ANY={};Comparator.prototype.parse=function(comp){var r=this.loose?re[COMPARATORLOOSE]:re[COMPARATOR];var m=comp.match(r);if(!m)
throw new TypeError('Invalid comparator: '+comp);this.operator=m[1];if(this.operator==='=')
this.operator='';if(!m[2])
this.semver=ANY;else
this.semver=new SemVer(m[2],this.loose);};Comparator.prototype.toString=function(){return this.value;};Comparator.prototype.test=function(version){debug('Comparator.test',version,this.loose);if(this.semver===ANY)
return true;if(typeof version==='string')
version=new SemVer(version,this.loose);return cmp(version,this.operator,this.semver,this.loose);};exports.Range=Range;function Range(range,loose){if(range instanceof Range&&range.loose===loose)
return range;if(!(this instanceof Range))
return new Range(range,loose);this.loose=loose;this.raw=range;this.set=range.split(/\s*\|\|\s*/).map(function(range){return this.parseRange(range.trim());},this).filter(function(c){return c.length;});if(!this.set.length){throw new TypeError('Invalid SemVer Range: '+range);}
this.format();}
Range.prototype.format=function(){this.range=this.set.map(function(comps){return comps.join(' ').trim();}).join('||').trim();return this.range;};Range.prototype.toString=function(){return this.range;};Range.prototype.parseRange=function(range){var loose=this.loose;range=range.trim();debug('range',range,loose);var hr=loose?re[HYPHENRANGELOOSE]:re[HYPHENRANGE];range=range.replace(hr,hyphenReplace);debug('hyphen replace',range);range=range.replace(re[COMPARATORTRIM],comparatorTrimReplace);debug('comparator trim',range,re[COMPARATORTRIM]);range=range.replace(re[TILDETRIM],tildeTrimReplace);range=range.replace(re[CARETTRIM],caretTrimReplace);range=range.split(/\s+/).join(' ');var compRe=loose?re[COMPARATORLOOSE]:re[COMPARATOR];var set=range.split(' ').map(function(comp){return parseComparator(comp,loose);}).join(' ').split(/\s+/);if(this.loose){set=set.filter(function(comp){return!!comp.match(compRe);});}
set=set.map(function(comp){return new Comparator(comp,loose);});return set;};exports.toComparators=toComparators;function toComparators(range,loose){return new Range(range,loose).set.map(function(comp){return comp.map(function(c){return c.value;}).join(' ').trim().split(' ');});}
function parseComparator(comp,loose){debug('comp',comp);comp=replaceCarets(comp,loose);debug('caret',comp);comp=replaceTildes(comp,loose);debug('tildes',comp);comp=replaceXRanges(comp,loose);debug('xrange',comp);comp=replaceStars(comp,loose);debug('stars',comp);return comp;}
function isX(id){return!id||id.toLowerCase()==='x'||id==='*';}
function replaceTildes(comp,loose){return comp.trim().split(/\s+/).map(function(comp){return replaceTilde(comp,loose);}).join(' ');}
function replaceTilde(comp,loose){var r=loose?re[TILDELOOSE]:re[TILDE];return comp.replace(r,function(_,M,m,p,pr){debug('tilde',comp,_,M,m,p,pr);var ret;if(isX(M))
ret='';else
if(isX(m))
ret='>='+M+'.0.0 <'+(+M+1)+'.0.0';else
if(isX(p))
ret='>='+M+'.'+m+'.0 <'+M+'.'+(+m+1)+'.0';else
if(pr){debug('replaceTilde pr',pr);if(pr.charAt(0)!=='-')
pr='-'+pr;ret='>='+M+'.'+m+'.'+p+pr+' <'+M+'.'+(+m+1)+'.0';}else
ret='>='+M+'.'+m+'.'+p+' <'+M+'.'+(+m+1)+'.0';debug('tilde return',ret);return ret;});}
function replaceCarets(comp,loose){return comp.trim().split(/\s+/).map(function(comp){return replaceCaret(comp,loose);}).join(' ');}
function replaceCaret(comp,loose){debug('caret',comp,loose);var r=loose?re[CARETLOOSE]:re[CARET];return comp.replace(r,function(_,M,m,p,pr){debug('caret',comp,_,M,m,p,pr);var ret;if(isX(M))
ret='';else
if(isX(m))
ret='>='+M+'.0.0 <'+(+M+1)+'.0.0';else
if(isX(p)){if(M==='0')
ret='>='+M+'.'+m+'.0 <'+M+'.'+(+m+1)+'.0';else
ret='>='+M+'.'+m+'.0 <'+(+M+1)+'.0.0';}else if(pr){debug('replaceCaret pr',pr);if(pr.charAt(0)!=='-')
pr='-'+pr;if(M==='0'){if(m==='0')
ret='>='+M+'.'+m+'.'+p+pr+' <'+M+'.'+m+'.'+(+p+1);else
ret='>='+M+'.'+m+'.'+p+pr+' <'+M+'.'+(+m+1)+'.0';}else
ret='>='+M+'.'+m+'.'+p+pr+' <'+(+M+1)+'.0.0';}else{debug('no pr');if(M==='0'){if(m==='0')
ret='>='+M+'.'+m+'.'+p+' <'+M+'.'+m+'.'+(+p+1);else
ret='>='+M+'.'+m+'.'+p+' <'+M+'.'+(+m+1)+'.0';}else
ret='>='+M+'.'+m+'.'+p+' <'+(+M+1)+'.0.0';}
debug('caret return',ret);return ret;});}
function replaceXRanges(comp,loose){debug('replaceXRanges',comp,loose);return comp.split(/\s+/).map(function(comp){return replaceXRange(comp,loose);}).join(' ');}
function replaceXRange(comp,loose){comp=comp.trim();var r=loose?re[XRANGELOOSE]:re[XRANGE];return comp.replace(r,function(ret,gtlt,M,m,p,pr){debug('xRange',comp,ret,gtlt,M,m,p,pr);var xM=isX(M);var xm=xM||isX(m);var xp=xm||isX(p);var anyX=xp;if(gtlt==='='&&anyX)
gtlt='';if(xM){if(gtlt==='>'||gtlt==='<'){ret='<0.0.0';}else{ret='*';}}else if(gtlt&&anyX){if(xm)
m=0;if(xp)
p=0;if(gtlt==='>'){gtlt='>=';if(xm){M=+M+1;m=0;p=0;}else if(xp){m=+m+1;p=0;}}else if(gtlt==='<='){gtlt='<';if(xm)
M=+M+1;else
m=+m+1;}
ret=gtlt+M+'.'+m+'.'+p;}else if(xm){ret='>='+M+'.0.0 <'+(+M+1)+'.0.0';}else if(xp){ret='>='+M+'.'+m+'.0 <'+M+'.'+(+m+1)+'.0';}
debug('xRange return',ret);return ret;});}
function replaceStars(comp,loose){debug('replaceStars',comp,loose);return comp.trim().replace(re[STAR],'');}
function hyphenReplace($0,from,fM,fm,fp,fpr,fb,to,tM,tm,tp,tpr,tb){if(isX(fM))
from='';else
if(isX(fm))
from='>='+fM+'.0.0';else
if(isX(fp))
from='>='+fM+'.'+fm+'.0';else
from='>='+from;if(isX(tM))
to='';else
if(isX(tm))
to='<'+(+tM+1)+'.0.0';else
if(isX(tp))
to='<'+tM+'.'+(+tm+1)+'.0';else
if(tpr)
to='<='+tM+'.'+tm+'.'+tp+'-'+tpr;else
to='<='+to;return(from+' '+to).trim();}
Range.prototype.test=function(version){if(!version)
return false;if(typeof version==='string')
version=new SemVer(version,this.loose);for(var i=0;i<this.set.length;i++){if(testSet(this.set[i],version))
return true;}
return false;};function testSet(set,version){for(var i=0;i<set.length;i++){if(!set[i].test(version))
return false;}
if(version.prerelease.length){for(var i=0;i<set.length;i++){debug(set[i].semver);if(set[i].semver===ANY)
continue;if(set[i].semver.prerelease.length>0){var allowed=set[i].semver;if(allowed.major===version.major&&allowed.minor===version.minor&&allowed.patch===version.patch)
return true;}}
return false;}
return true;}
exports.satisfies=satisfies;function satisfies(version,range,loose){try{range=new Range(range,loose);}catch(er){return false;}
return range.test(version);}
exports.maxSatisfying=maxSatisfying;function maxSatisfying(versions,range,loose){return versions.filter(function(version){return satisfies(version,range,loose);}).sort(function(a,b){return rcompare(a,b,loose);})[0]||null;}
exports.minSatisfying=minSatisfying;function minSatisfying(versions,range,loose){return versions.filter(function(version){return satisfies(version,range,loose);}).sort(function(a,b){return compare(a,b,loose);})[0]||null;}
exports.validRange=validRange;function validRange(range,loose){try{return new Range(range,loose).range||'*';}catch(er){return null;}}
exports.ltr=ltr;function ltr(version,range,loose){return outside(version,range,'<',loose);}
exports.gtr=gtr;function gtr(version,range,loose){return outside(version,range,'>',loose);}
exports.outside=outside;function outside(version,range,hilo,loose){version=new SemVer(version,loose);range=new Range(range,loose);var gtfn,ltefn,ltfn,comp,ecomp;switch(hilo){case'>':gtfn=gt;ltefn=lte;ltfn=lt;comp='>';ecomp='>=';break;case'<':gtfn=lt;ltefn=gte;ltfn=gt;comp='<';ecomp='<=';break;default:throw new TypeError('Must provide a hilo val of "<" or ">"');}
if(satisfies(version,range,loose)){return false;}
for(var i=0;i<range.set.length;++i){var comparators=range.set[i];var high=null;var low=null;comparators.forEach(function(comparator){if(comparator.semver===ANY){comparator=new Comparator('>=0.0.0');}
high=high||comparator;low=low||comparator;if(gtfn(comparator.semver,high.semver,loose)){high=comparator;}else if(ltfn(comparator.semver,low.semver,loose)){low=comparator;}});if(high.operator===comp||high.operator===ecomp){return false;}
if((!low.operator||low.operator===comp)&&ltefn(version,low.semver)){return false;}else if(low.operator===ecomp&&ltfn(version,low.semver)){return false;}}
return true;}
exports.prerelease=prerelease;function prerelease(version,loose){var parsed=parse(version,loose);return parsed&&parsed.prerelease.length?parsed.prerelease:null;}}).call(this,require('_process'));},{"_process":77}],151:[function(require,module,exports){(function(Buffer){'use strict';const jpeg=require('jpeg-js');function getPixel(x,y,channel,width,buff){return buff[(x+y*width)*4+channel];}
function isWhitePixel(i,j,img){return getPixel(i,j,0,img.width,img.data)>=249&&getPixel(i,j,1,img.width,img.data)>=249&&getPixel(i,j,2,img.width,img.data)>=249;}
function convertPixelsToHistogram(img){const createHistogramArray=function(){const ret=new Array(256);for(let i=0;i<ret.length;i++){ret[i]=0;}
return ret;};const width=img.width;const height=img.height;const histograms=[createHistogramArray(),createHistogramArray(),createHistogramArray()];for(let j=0;j<height;j++){for(let i=0;i<width;i++){if(isWhitePixel(i,j,img)){continue;}
for(let channel=0;channel<histograms.length;channel++){const pixelValue=getPixel(i,j,channel,width,img.data);histograms[channel][pixelValue]++;}}}
return histograms;}
function synthesizeWhiteFrame(frames){const firstImageData=jpeg.decode(frames[0].getImage());const width=firstImageData.width;const height=firstImageData.height;const frameData=new Buffer(width*height*4);let i=0;while(i<frameData.length){frameData[i++]=0xFF;frameData[i++]=0xFF;frameData[i++]=0xFF;frameData[i++]=0xFF;}
var jpegImageData=jpeg.encode({data:frameData,width:width,height:height});return jpegImageData.data;}
const screenshotTraceCategory='disabled-by-default-devtools.screenshot';function extractFramesFromTimeline(timeline,opts){opts=opts||{};let trace;trace=typeof timeline==='string'?fs.readFileSync(timeline,'utf-8'):timeline;try{trace=typeof trace==='string'?JSON.parse(trace):trace;}catch(e){throw new Error('Speedline: Invalid JSON'+e.message);}
let events=trace.traceEvents||trace;events=events.sort((a,b)=>a.ts-b.ts).filter(e=>e.ts!==0);const startTs=(opts.timeOrigin||events[0].ts)/1000;const endTs=events[events.length-1].ts/1000;let lastFrame=null;const rawScreenshots=events.filter(e=>e.cat.includes(screenshotTraceCategory)&&e.ts>=startTs*1000);const uniqueFrames=rawScreenshots.map(function(evt){const base64img=evt.args&&evt.args.snapshot;const timestamp=evt.ts/1000;if(base64img===lastFrame){return null;}
lastFrame=base64img;const imgBuff=new Buffer(base64img,'base64');return frame(imgBuff,timestamp);}).filter(Boolean);if(uniqueFrames.length===0){return Promise.reject(new Error('No screenshots found in trace'));}
const fakeWhiteFrame=frame(synthesizeWhiteFrame(uniqueFrames),startTs);uniqueFrames.unshift(fakeWhiteFrame);const data={startTs,endTs,frames:uniqueFrames};return Promise.resolve(data);}
function frame(imgBuff,ts){let _histogram=null;let _progress=null;let _isProgressInterpolated=null;let _perceptualProgress=null;let _isPerceptualProgressInterpolated=null;let _parsedImage=null;return{getHistogram:function(){if(_histogram){return _histogram;}
const pixels=this.getParsedImage();_histogram=convertPixelsToHistogram(pixels);return _histogram;},getTimeStamp:function(){return ts;},setProgress:function(progress,isInterpolated){_progress=progress;_isProgressInterpolated=Boolean(isInterpolated);},setPerceptualProgress:function(progress,isInterpolated){_perceptualProgress=progress;_isPerceptualProgressInterpolated=Boolean(isInterpolated);},getImage:function(){return imgBuff;},getParsedImage:function(){if(!_parsedImage){_parsedImage=jpeg.decode(imgBuff);}
return _parsedImage;},getProgress:function(){return _progress;},isProgressInterpolated:function(){return _isProgressInterpolated;},getPerceptualProgress:function(){return _perceptualProgress;},isPerceptualProgressInterpolated:function(){return _isPerceptualProgressInterpolated;}};}
module.exports={extractFramesFromTimeline,create:frame};}).call(this,require("buffer").Buffer);},{"buffer":60,"jpeg-js":140}],152:[function(require,module,exports){'use strict';const frame=require('./frame');const speedIndex=require('./speed-index');function calculateValues(frames,data){const indexes=speedIndex.calculateSpeedIndexes(frames,data);const duration=Math.floor(data.endTs-data.startTs);const first=Math.floor(indexes.firstPaintTs-data.startTs);const complete=Math.floor(indexes.visuallyCompleteTs-data.startTs);return{beginning:data.startTs,end:data.endTs,frames,first,complete,duration,speedIndex:indexes.speedIndex,perceptualSpeedIndex:indexes.perceptualSpeedIndex};}
const Include={All:'all',pSI:'perceptualSpeedIndex',SI:'speedIndex'};module.exports=function(timeline,opts){const include=opts&&opts.include||Include.All;if(!Object.keys(Include).some(key=>Include[key]===include)){throw new Error(`Unrecognized include option: ${include}`);}
return frame.extractFramesFromTimeline(timeline,opts).then(function(data){const frames=data.frames;if(include===Include.All||include===Include.SI){speedIndex.calculateVisualProgress(frames,opts);}
if(include===Include.All||include===Include.pSI){speedIndex.calculatePerceptualProgress(frames,opts);}
return calculateValues(frames,data);});};},{"./frame":151,"./speed-index":153}],153:[function(require,module,exports){'use strict';const imageSSIM=require('image-ssim');const fastModeAllowableChangeMax=5;const fastModeAllowableChangeMedian=3;const fastModeAllowableChangeMin=-1;const fastModeConstant=fastModeAllowableChangeMin;const fastModeMultiplier=fastModeAllowableChangeMax-fastModeConstant;const fastModeExponentiationCoefficient=Math.log((fastModeAllowableChangeMedian-fastModeConstant)/fastModeMultiplier);function calculateFastModeAllowableChange(elapsedTime){const elapsedTimeInSeconds=elapsedTime/1000;const allowableChange=fastModeMultiplier*Math.exp(fastModeExponentiationCoefficient*elapsedTimeInSeconds)+fastModeConstant;return allowableChange;}
function calculateFrameProgress(current,initial,target){let total=0;let match=0;const currentHist=current.getHistogram();const initialHist=initial.getHistogram();const targetHist=target.getHistogram();for(let channel=0;channel<3;channel++){for(let pixelVal=0;pixelVal<256;pixelVal++){const currentCount=currentHist[channel][pixelVal];const initialCount=initialHist[channel][pixelVal];const targetCount=targetHist[channel][pixelVal];const currentDiff=Math.abs(currentCount-initialCount);const targetDiff=Math.abs(targetCount-initialCount);match+=Math.min(currentDiff,targetDiff);total+=targetDiff;}}
let progress;if(match===0&&total===0){progress=100;}else{progress=Math.floor(match/total*100);}
return progress;}
function calculateProgressBetweenFrames(frames,lowerBound,upperBound,isFastMode,getProgress,setProgress){if(!isFastMode){frames.forEach(frame=>setProgress(frame,getProgress(frame),false));return;}
const lowerFrame=frames[lowerBound];const upperFrame=frames[upperBound];const elapsedTime=upperFrame.getTimeStamp()-lowerFrame.getTimeStamp();const lowerProgress=getProgress(lowerFrame);const upperProgress=getProgress(upperFrame);setProgress(lowerFrame,lowerProgress,false);setProgress(upperFrame,upperProgress,false);if(Math.abs(lowerProgress-upperProgress)<calculateFastModeAllowableChange(elapsedTime)){for(let i=lowerBound+1;i<upperBound;i++){setProgress(frames[i],lowerProgress,true);}}else if(upperBound-lowerBound>1){const midpoint=Math.floor((lowerBound+upperBound)/2);calculateProgressBetweenFrames(frames,lowerBound,midpoint,isFastMode,getProgress,setProgress);calculateProgressBetweenFrames(frames,midpoint,upperBound,isFastMode,getProgress,setProgress);}}
function calculateVisualProgress(frames,opts){const initial=frames[0];const target=frames[frames.length-1];function getProgress(frame){if(typeof frame.getProgress()==='number'){return frame.getProgress();}
return calculateFrameProgress(frame,initial,target);}
function setProgress(frame,progress,isInterpolated){return frame.setProgress(progress,isInterpolated);}
calculateProgressBetweenFrames(frames,0,frames.length-1,opts&&opts.fastMode,getProgress,setProgress);return frames;}
function calculateFrameSimilarity(frame,target){const defaultImageConfig={channels:4};const frameData=Object.assign(frame.getParsedImage(),defaultImageConfig);const targetData=Object.assign(target.getParsedImage(),defaultImageConfig);const diff=imageSSIM.compare(frameData,targetData);return diff.ssim;}
function calculatePerceptualProgress(frames,opts){const initial=frames[0];const target=frames[frames.length-1];const initialSimilarity=calculateFrameSimilarity(initial,target);function getProgress(frame){if(typeof frame.getPerceptualProgress()==='number'){return frame.getPerceptualProgress();}
const ssim=calculateFrameSimilarity(frame,target);return Math.max(100*(ssim-initialSimilarity)/(1-initialSimilarity),0);}
function setProgress(frame,progress,isInterpolated){return frame.setPerceptualProgress(progress,isInterpolated);}
calculateProgressBetweenFrames(frames,0,frames.length-1,opts&&opts.fastMode,getProgress,setProgress);return frames;}
function calculateSpeedIndexes(frames,data){const hasVisualProgress=typeof frames[0].getProgress()==='number';const hasPerceptualProgress=typeof frames[0].getPerceptualProgress()==='number';const progressToUse=hasVisualProgress?'getProgress':'getPerceptualProgress';const startTs=data.startTs;let visuallyCompleteTs;let firstPaintTs;for(let i=0;i<frames.length&&!firstPaintTs;i++){if(frames[i][progressToUse]()>0){firstPaintTs=frames[i].getTimeStamp();}}
for(let i=0;i<frames.length&&!visuallyCompleteTs;i++){if(frames[i][progressToUse]()>=100){visuallyCompleteTs=frames[i].getTimeStamp();}}
let prevFrameTs=frames[0].getTimeStamp();let prevProgress=frames[0].getProgress();let prevPerceptualProgress=frames[0].getPerceptualProgress();let speedIndex=firstPaintTs-startTs;let perceptualSpeedIndex=firstPaintTs-startTs;frames.forEach(function(frame){if(frame.getTimeStamp()>firstPaintTs){const elapsed=frame.getTimeStamp()-prevFrameTs;speedIndex+=elapsed*(1-prevProgress);perceptualSpeedIndex+=elapsed*(1-prevPerceptualProgress);}
prevFrameTs=frame.getTimeStamp();prevProgress=frame.getProgress()/100;prevPerceptualProgress=frame.getPerceptualProgress()/100;});speedIndex=hasVisualProgress?speedIndex:undefined;perceptualSpeedIndex=hasPerceptualProgress?perceptualSpeedIndex:undefined;return{firstPaintTs,visuallyCompleteTs,speedIndex,perceptualSpeedIndex};}
module.exports={calculateFastModeAllowableChange,calculateFrameSimilarity,calculateVisualProgress,calculatePerceptualProgress,calculateSpeedIndexes};},{"image-ssim":139}],154:[function(require,module,exports){module.exports={"version":"3.0.0-beta.0"};},{}],155:[function(require,module,exports){module.exports={"npm":{"angular":[{"id":"npm:angular:20130621","severity":"medium","semver":{"vulnerable":["<=1.1.5"]}},{"id":"npm:angular:20130622","severity":"medium","semver":{"vulnerable":["<1.2.0 >=1.0.0"]}},{"id":"npm:angular:20130625","severity":"high","semver":{"vulnerable":["<1.1.5"]}},{"id":"npm:angular:20131113","severity":"high","semver":{"vulnerable":["<1.2.2"]}},{"id":"npm:angular:20140608","severity":"low","semver":{"vulnerable":["<1.3.0"]}},{"id":"npm:angular:20140908","severity":"medium","semver":{"vulnerable":["<1.3.0-rc.4"]}},{"id":"npm:angular:20140909","severity":"high","semver":{"vulnerable":["<1.2.24 >=1.2.19"]}},{"id":"npm:angular:20141104","severity":"medium","semver":{"vulnerable":["<1.3.2"]}},{"id":"npm:angular:20150310","severity":"high","semver":{"vulnerable":["<1.5.0-beta.2"]}},{"id":"npm:angular:20150315","severity":"medium","semver":{"vulnerable":["<1.6.1"]}},{"id":"npm:angular:20150807","severity":"high","semver":{"vulnerable":["<1.5.0-beta.0 >=1.0.0"]}},{"id":"npm:angular:20150807-1","severity":"medium","semver":{"vulnerable":["<1.5.0-beta.0 >=1.3.1"]}},{"id":"npm:angular:20150909","severity":"high","semver":{"vulnerable":["<1.5.0-beta.2"]}},{"id":"npm:angular:20151130","severity":"medium","semver":{"vulnerable":["<1.4.10"]}},{"id":"npm:angular:20151205","severity":"medium","semver":{"vulnerable":["<1.5.0-rc.0"]}},{"id":"npm:angular:20160122","severity":"medium","semver":{"vulnerable":["<1.5.0-rc.2 >=1.3.0"]}},{"id":"npm:angular:20160527","severity":"medium","semver":{"vulnerable":["<1.2.30 >=1.0.0"]}},{"id":"npm:angular:20161101","severity":"medium","semver":{"vulnerable":["<1.5.9 >=1.5.0"]}},{"id":"npm:angular:20171018","severity":"medium","semver":{"vulnerable":["<1.6.7"]}},{"id":"npm:angular:20180202","severity":"medium","semver":{"vulnerable":["<1.6.9"]}}],"backbone":[{"id":"npm:backbone:20110701","severity":"medium","semver":{"vulnerable":["<0.5.0"]}},{"id":"npm:backbone:20160523","severity":"medium","semver":{"vulnerable":["<= 0.3.3"]}}],"bootstrap":[{"id":"npm:bootstrap:20120510","severity":"medium","semver":{"vulnerable":["<2.1.0"]}},{"id":"npm:bootstrap:20160627","severity":"medium","semver":{"vulnerable":["<3.4.0 || >=4.0.0-alpha <4.0.0-beta.2"]}}],"dojo":[{"id":"npm:dojo:20090409","severity":"medium","semver":{"vulnerable":["<1.1"]}},{"id":"npm:dojo:20100614","severity":"high","semver":{"vulnerable":[">=0.4 <0.4.4 || >=1.0 <1.0.3 || >=1.1 <1.1.2 || >=1.2 <1.2.4 || >=1.3 <1.3.3 || >=1.4 <1.4.2"]}},{"id":"npm:dojo:20100614-6","severity":"medium","semver":{"vulnerable":["<1.4.2"]}},{"id":"npm:dojo:20160523","severity":"medium","semver":{"vulnerable":["<= 1.0.0"]}}],"foundation-sites":[{"id":"npm:foundation-sites:20120717","severity":"medium","semver":{"vulnerable":["<3.0.6 >=3.0.0"]}},{"id":"npm:foundation-sites:20150619","severity":"medium","semver":{"vulnerable":["<5.5.3"]}},{"id":"npm:foundation-sites:20170802","severity":"medium","semver":{"vulnerable":["<6.0.0"]}}],"handlebars":[{"id":"npm:handlebars:20110425","severity":"medium","semver":{"vulnerable":["<=1.0.0-beta.3"]}},{"id":"npm:handlebars:20151207","severity":"medium","semver":{"vulnerable":["<4.0.0"]}}],"highcharts":[{"id":"npm:highcharts:20180225","severity":"low","semver":{"vulnerable":["<=6.0.7"]}}],"jquery":[{"id":"npm:jquery:20110606","severity":"medium","semver":{"vulnerable":["<1.6.3"]}},{"id":"npm:jquery:20120206","severity":"medium","semver":{"vulnerable":["<1.9.0 >=1.7.1"]}},{"id":"npm:jquery:20140902","severity":"medium","semver":{"vulnerable":["<=1.5.1 >=1.4.2"]}},{"id":"npm:jquery:20150627","severity":"medium","semver":{"vulnerable":["<3.0.0-beta1 >1.12.3 || <1.12.0 >=1.4.0"]}},{"id":"npm:jquery:20160529","severity":"low","semver":{"vulnerable":["=3.0.0-rc.1"]}}],"jquery-mobile":[{"id":"npm:jquery-mobile:20120802","severity":"medium","semver":{"vulnerable":["<1.2.0"]}}],"jquery-ui":[{"id":"npm:jquery-ui:20100903","severity":"medium","semver":{"vulnerable":["<1.10.0"]}},{"id":"npm:jquery-ui:20121127","severity":"medium","semver":{"vulnerable":["<1.10.0"]}},{"id":"npm:jquery-ui:20160721","severity":"high","semver":{"vulnerable":["<=1.11.4"]}}],"knockout":[{"id":"npm:knockout:20130701","severity":"medium","semver":{"vulnerable":["<3.0.0 >=2.1.0-pre"]}},{"id":"npm:knockout:20180213","severity":"medium","semver":{"vulnerable":["<3.5.0-beta"]}}],"lodash":[{"id":"npm:lodash:20180130","severity":"low","semver":{"vulnerable":["<4.17.5"]}}],"moment":[{"id":"npm:moment:20160126","severity":"low","semver":{"vulnerable":["<=2.11.1"]}},{"id":"npm:moment:20161019","severity":"medium","semver":{"vulnerable":["<2.15.2"]}},{"id":"npm:moment:20170905","severity":"low","semver":{"vulnerable":["<2.19.3"]}}],"mustache":[{"id":"npm:mustache:20110814","severity":"medium","semver":{"vulnerable":["< 0.3.1"]}},{"id":"npm:mustache:20151207","severity":"medium","semver":{"vulnerable":["<2.2.1"]}}],"react":[{"id":"npm:react:20131217","severity":"medium","semver":{"vulnerable":[">=0.5.0 <0.5.2 || >=0.4.0 <0.4.2"]}},{"id":"npm:react:20150318","severity":"high","semver":{"vulnerable":["<0.14.0"]}}],"riot":[{"id":"npm:riot:20131114","severity":"medium","semver":{"vulnerable":["<0.9.6"]}}],"socket.io":[{"id":"npm:socket.io:20120323","severity":"medium","semver":{"vulnerable":["<0.9.7"]}},{"id":"npm:socket.io:20120417","severity":"medium","semver":{"vulnerable":["<0.9.6"]}}],"vue":[{"id":"npm:vue:20170401","severity":"medium","semver":{"vulnerable":["<2.3.0-beta.1"]}},{"id":"npm:vue:20170829","severity":"medium","semver":{"vulnerable":["<2.4.3"]}},{"id":"npm:vue:20180222","severity":"low","semver":{"vulnerable":["<=2.5.14"]}}],"yui":[{"id":"npm:yui:20101025","severity":"medium","semver":{"vulnerable":["<2.8.2 >=2.4.0"]}},{"id":"npm:yui:20120428","severity":"medium","semver":{"vulnerable":["<3.5.1 >=3.5.0-PR1"]}},{"id":"npm:yui:20121030","severity":"medium","semver":{"vulnerable":["<3.0.0 >=2.4.0"]}},{"id":"npm:yui:20130515","severity":"medium","semver":{"vulnerable":["<3.10.0 >=3.0.0"]}},{"id":"npm:yui:20130604","severity":"medium","semver":{"vulnerable":[">=3.0.0 <3.10.1 || =3.10.2"]}}]}};},{}],"url":[function(require,module,exports){'use strict';const Util=require('../report/html/renderer/util.js');const URL=typeof self!=='undefined'&&self.URL||require('url').URL;function rewriteChromeInternalUrl(url){if(!url||!url.startsWith('chrome://'))return url;if(url.endsWith('/'))url=url.replace(/\/$/,'');return url.replace(/^chrome:\/\/chrome\//,'chrome://');}
class URLShim extends URL{static isValid(url){try{new URL(url);return true;}catch(e){return false;}}
static hostsMatch(urlA,urlB){try{return new URL(urlA).host===new URL(urlB).host;}catch(e){return false;}}
static originsMatch(urlA,urlB){try{return new URL(urlA).origin===new URL(urlB).origin;}catch(e){return false;}}
static getOrigin(url){try{const urlInfo=new URL(url);return urlInfo.host&&urlInfo.origin||null;}catch(e){return null;}}
static getURLDisplayName(url,options){return Util.getURLDisplayName(new URL(url),options);}
static elideDataURI(url){try{const parsed=new URL(url);return parsed.protocol==='data:'?url.slice(0,100):url;}catch(e){return url;}}
static equalWithExcludedFragments(url1,url2){[url1,url2]=[url1,url2].map(rewriteChromeInternalUrl);try{const urla=new URL(url1);urla.hash='';const urlb=new URL(url2);urlb.hash='';return urla.href===urlb.href;}catch(e){return false;}}}
URLShim.URL=URL;URLShim.URLSearchParams=typeof self!=='undefined'&&self.URLSearchParams||require('url').URLSearchParams;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.';module.exports=URLShim;},{"../report/html/renderer/util.js":48,"url":"url"}]},{},[52]);;class LighthousePort{on(eventName,cb){}
send(message){}
close(){}}
var Audits2Service=class{setNotify(notify){this._notify=notify;}
start(params){if(Runtime.queryParam('isUnderTest'))
this._disableLoggingForTest();self.listenForStatus(message=>{this.statusUpdate(message[1]);});return Promise.resolve().then(_=>self.runLighthouseInWorker(this,params.url,{flags:params.flags},params.categoryIDs)).then(result=>{return result;}).catch(err=>({fatal:true,message:err.message,stack:err.stack,}));}
stop(){this.close();return Promise.resolve();}
dispatchProtocolMessage(params){this._onMessage(params['message']);return Promise.resolve();}
dispose(){return Promise.resolve();}
statusUpdate(message){this._notify('statusUpdate',{message:message});}
send(message){this._notify('sendProtocolMessage',{message:message});}
close(){}
on(eventName,cb){if(eventName==='message')
this._onMessage=cb;if(eventName==='close')
this._onClose=cb;}
_disableLoggingForTest(){console.log=()=>undefined;}};global=self;global.isVinn=true;global.document={};global.document.documentElement={};global.document.documentElement.style={WebkitAppearance:'WebkitAppearance'};;