diff --git a/README.md b/README.md
index d747c99..ba0ac96 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,27 @@
# "Offline-First" TodoMVC Example
+## Progress
+
+- [ ] Feature: Add routing capability
+- [ ] Feature: Add edit capability
+- [ ] Feature: Add all bulk functionality: complete all, delete completed
+- [x] Feature: Add all basic todo functionality: add, complete, delete
+- [x] Get the app to rerender when the PouchDB is updated
+- [x] Get the TodoMVC app to render todos stored within IndexedDB using PouchDB
+- [x] Initialize the application from [this previous TodoMVC application](https://github.com/cerebralideas/todomvc-universal-react-pouchdb)
+
+
## Up and Running
1. Install the dependencies found in the `package.json`
2. Compile the TypeScript to JavaScript
-3. Run the server
```
npm install
npm run build
```
-4. Open `public/index.html` in your browser.
+3. Open `public/index.html` in your browser.
## What's an "offline-first" application?
@@ -92,9 +102,3 @@ _If you have other helpful links to share, or find any of the links above no lon
## How it works
Coming soon ...
-
-## TODO
-
-- [ ] Get the app to rerender when the PouchDB is updated
-- [x] Get the TodoMVC app to render todos stored within IndexedDB using PouchDB
-- [x] Initialize the application from [this previous TodoMVC application](https://github.com/cerebralideas/todomvc-universal-react-pouchdb)
diff --git a/client/actions/index.ts b/client/actions/index.ts
deleted file mode 100644
index 644f7ab..0000000
--- a/client/actions/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { createAction } from 'redux-actions';
-
-export const addTodo = createAction('ADD_TODO', (title): { title: string } => ({ title }));
-export const deleteTodo = createAction('DELETE_TODO', (id): { id: number } => ({ id }));
-export const editTodo = createAction('EDIT_TODO', (id, title): { id: number; title: string } => ({ id, title }));
-export const completeTodo = createAction('COMPLETE_TODO', (id): { id: number } => ({ id }));
-export const completeAll = createAction('COMPLETE_ALL', (): {} => ({}));
-export const clearCompleted = createAction('CLEAR_COMPLETED', (): {} => ({}));
-export const showAll = createAction('SHOW_ALL', (): { filter: string } => ({ filter: 'show_all' }));
-export const showActive = createAction('SHOW_ACTIVE', (): { filter: string } => ({ filter: 'show_active' }));
-export const showCompleted = createAction('SHOW_COMPLETED', (): { filter: string } => ({
- filter: 'show_completed'
-}));
diff --git a/client/components/footer.tsx b/client/components/footer.tsx
index 0ecdb7c..e7d91eb 100644
--- a/client/components/footer.tsx
+++ b/client/components/footer.tsx
@@ -1,9 +1,9 @@
import React from 'react';
-import { AppContext } from '../store/state-mgmt';
-import { completeAll, clearCompleted } from '../events/client-events';
-import { SHOW_ALL, SHOW_COMPLETED, SHOW_ACTIVE } from '../constants/todo-filters';
+import { AppContext } from '../state/state-mgmt';
+import { completeAll, clearCompleted } from '../events';
+import { SHOW_ALL, SHOW_COMPLETED, SHOW_ACTIVE } from '../constants';
-import { State } from '../interfaces';
+import { State, Todo } from '../interfaces';
let FILTER_TITLES = {
[SHOW_ALL]: 'All',
@@ -16,9 +16,10 @@ interface Props {
count?: number;
filter?: string;
active?: number;
+ todos?: Todo[]
}
-function Footer({ filter, count, completed, active }: Props) {
+function Footer({ filter, count, completed, active, todos }: Props) {
if (count) {
function RenderTodoCount() {
@@ -48,7 +49,7 @@ function Footer({ filter, count, completed, active }: Props) {
if (completed > 0) {
return (
);
@@ -93,6 +94,7 @@ export default function () {
count={ count }
completed={ completed }
active={ active }
+ todos={ todos }
/>
);
}}
diff --git a/client/components/header.tsx b/client/components/header.tsx
index 6fdea58..8a3cb4c 100644
--- a/client/components/header.tsx
+++ b/client/components/header.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { AppContext } from '../store/state-mgmt';
+import { AppContext } from '../state/state-mgmt';
import TodoTextInput from './todo-text-input';
import { State } from '../interfaces';
diff --git a/client/components/todo-item.tsx b/client/components/todo-item.tsx
index 9079ed0..4f0d1c3 100644
--- a/client/components/todo-item.tsx
+++ b/client/components/todo-item.tsx
@@ -1,6 +1,6 @@
import React, { useState } from 'react';
import TodoTextInput from './todo-text-input';
-import { deleteTodo, completeTodo } from '../events/client-events';
+import { deleteTodo, completeTodo } from '../events';
import { Todo } from '../interfaces';
@@ -45,16 +45,16 @@ export default function TodoItem ({ todo, filter }: Prop) { // save
diff --git a/client/components/todo-list.tsx b/client/components/todo-list.tsx
index 35e9591..a07b54a 100644
--- a/client/components/todo-list.tsx
+++ b/client/components/todo-list.tsx
@@ -1,9 +1,9 @@
import React from 'react';
-import { AppContext } from '../store/state-mgmt';
+import { AppContext } from '../state/state-mgmt';
import TodoItem from './todo-item';
import ToggleAll from './toggle-all';
import Footer from './footer';
-import { SHOW_ALL, SHOW_COMPLETED, SHOW_ACTIVE } from '../constants/todo-filters';
+import { SHOW_ALL, SHOW_COMPLETED, SHOW_ACTIVE } from '../constants';
import { State } from '../interfaces';
@@ -21,7 +21,7 @@ export function TodoList({ todos, filter }: State) {
{filteredTodos.map(todo => (
-
+
))}
diff --git a/client/components/todo-text-input.tsx b/client/components/todo-text-input.tsx
index f6ace02..f9bcf74 100644
--- a/client/components/todo-text-input.tsx
+++ b/client/components/todo-text-input.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { formSubmission } from '../events/client-events';
+import { formSubmission } from '../events';
import { Todo } from '../interfaces';
@@ -34,7 +34,7 @@ function TodoTextInput({
method='POST'
action={ `/todos?=filter=${filter ? filter : '' }`}
onSubmit={
- (event) => formSubmission(event, todo && todo.id, flipEdit)
+ (event) => formSubmission(event, todo && todo._id, flipEdit)
}>
saveChange(event, todo.id) } />
+ onBlur={ (event) => saveChange(event, todo._id) } />
);
}
diff --git a/client/components/toggle-all.tsx b/client/components/toggle-all.tsx
index 6ad468e..7308848 100644
--- a/client/components/toggle-all.tsx
+++ b/client/components/toggle-all.tsx
@@ -1,15 +1,16 @@
import React from 'react';
-import { AppContext } from '../store/state-mgmt';
-import { completeAll } from '../events/client-events';
+import { AppContext } from '../state/state-mgmt';
+import { completeAll } from '../events';
-import { State } from '../interfaces';
+import { State, Todo } from '../interfaces';
interface Props {
count: number;
completed: number;
+ todos: Todo[]
}
-function ToggleAll({ count, completed }: Props) {
+function ToggleAll({ count, completed, todos }: Props) {
if (count > 0) {
return (
<>
@@ -17,7 +18,7 @@ function ToggleAll({ count, completed }: Props) {
className="toggle-all"
type="checkbox"
checked={ completed === count }
- onChange={ completeAll }/>
+ onChange={ event => completeAll(event, todos) }/>
>
);
@@ -36,7 +37,7 @@ export default function () {
),
0
);
- return
+ return
}}
);
diff --git a/client/constants/todo-filters.ts b/client/constants/index.ts
similarity index 100%
rename from client/constants/todo-filters.ts
rename to client/constants/index.ts
diff --git a/client/events/client-events.ts b/client/events/client-events.ts
deleted file mode 100644
index 68f71cf..0000000
--- a/client/events/client-events.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import superagent from 'superagent';
-import * as actions from '../actions';
-
-/** *******************************
- * Client & Server Sync actions
- */
-export function formSubmission(event, id: number, flipEdit?): void {
- let title: string =
- event.currentTarget.id === 'todoForm'
- ? event.currentTarget.elements.todoInput.value
- : event.currentTarget.value;
-
- event.preventDefault();
-
- // If adding an empty todo, just return out.
- if (!id && !title) {
- return;
- } else if (id && title.length) {
- // Was this an edit?
- // Fire action on server
- return;
- } else if (id && !title) {
- // If provided id, but title is empty delete item
- // Fire action on server
- return;
- } else {
- // This was a new item
- // Fire action on server
- return;
- // event.currentTarget.elements.todoInput.value = '';
- }
-}
-export function completeTodo(event, id: number): void {
- event.preventDefault();
- // Fire action on server
- return;
-}
-export function completeAll(): void {
- // Fire action on server
- return;
-}
-export function clearCompleted(): void {
- // Fire action on server
- return;
-}
-export function deleteTodo(event, id: number): void {
- event.preventDefault();
- // Fire action on server
- return;
-}
diff --git a/client/events/index.ts b/client/events/index.ts
new file mode 100644
index 0000000..7accaaa
--- /dev/null
+++ b/client/events/index.ts
@@ -0,0 +1,83 @@
+import db from '../state/store';
+
+/** *******************************
+ * Client & Server db Sync actions
+ */
+export function formSubmission(event, _id: string, flipEdit?): void {
+ let title: string =
+ event.currentTarget.id === 'todoForm'
+ ? event.currentTarget.elements.todoInput.value
+ : event.currentTarget.value;
+
+ event.preventDefault();
+
+ // If adding an empty todo, just return out.
+ if (!_id && !title) {
+ return;
+ } else if (_id && title.length) {
+ // Was this an edit?
+ // Fire action on db
+ db.get(_id).then((doc) => {
+ db.put({
+ ...doc,
+ title
+ }).then((response) => {
+ console.log('Todo has been updated');
+ });
+ });
+ } else if (_id && !title) {
+ // If provided id, but title is empty delete item
+ // Fire action on db
+ db.get(_id).then((doc) => {
+ db.put({
+ ...doc,
+ _deleted: true
+ }).then((response) => {
+ console.log('Todo has been deleted');
+ });
+ });
+ } else {
+ // This was a new item
+ // Fire action on db
+ db.put({
+ _id: new Date().toJSON(),
+ completed: false,
+ title: title
+ }).then((response) => {
+ console.log('Todo has been saved');
+ });
+ event.currentTarget.elements.todoInput.value = '';
+ }
+}
+export function completeTodo(event, _id: string): void {
+ event.preventDefault();
+ // Fire action on db
+ db.get(_id).then((doc: any) => {
+ db.put({
+ ...doc,
+ completed: !doc.completed
+ }).then((response) => {
+ console.log('Todo has been completed');
+ });
+ });
+}
+export function deleteTodo(event, _id: string): void {
+ event.preventDefault();
+ // Fire action on db
+ db.get(_id).then((doc) => {
+ db.put({
+ ...doc,
+ _deleted: true
+ }).then((response) => {
+ console.log('Todo has been deleted');
+ });
+ });
+}
+export function completeAll(event, todos): void {
+ // Fire action on db
+ return;
+}
+export function clearCompleted(event, todos): void {
+ // Fire action on db
+ return;
+}
diff --git a/client/index.tsx b/client/index.tsx
index c29148d..6c12b4a 100644
--- a/client/index.tsx
+++ b/client/index.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './views/app';
-import db from './store/store';
+import db from './state/store';
import 'todomvc-app-css/index.css';
import './views/app.css';
@@ -14,9 +14,12 @@ if (WEBPACK_ENV !== 'production') {
document.addEventListener("DOMContentLoaded", (): void => {
- db.allDocs({ include_docs: true })
+ db.allDocs({
+ include_docs: true,
+ descending: true
+ })
.then((response) => {
- const state = {
+ const data = {
todos: response.rows ?
response.rows.map((row) => row.doc):
[],
@@ -24,7 +27,7 @@ document.addEventListener("DOMContentLoaded", (): void => {
};
ReactDOM.render(
-
,
+
,
document.getElementById('root')
);
})
diff --git a/client/interfaces/index.ts b/client/interfaces/index.ts
index 5b2b3ed..b28b375 100644
--- a/client/interfaces/index.ts
+++ b/client/interfaces/index.ts
@@ -1,7 +1,8 @@
export interface Todo {
title: string;
completed?: boolean;
- id?: number;
+ _id?: string;
+ _rev?: string;
}
export interface State {
todos: Todo[];
@@ -12,11 +13,3 @@ export interface Doc {
_rev: string;
todos: Todo[];
}
-export interface Action {
- type: string;
- payload?: {
- id?: number;
- title?: string;
- filter?: string;
- };
-}
diff --git a/client/reducers/filter.ts b/client/reducers/filter.ts
deleted file mode 100644
index 94d7306..0000000
--- a/client/reducers/filter.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { handleActions, combineActions } from 'redux-actions';
-import { showAll, showActive, showCompleted } from '../actions';
-
-import { Action } from '../interfaces';
-
-export default handleActions(
- {
- [combineActions(showAll, showActive, showCompleted) as any]: (state: string, action: Action): string => {
- return action.payload.filter;
- }
- },
- 'show_all'
-);
diff --git a/client/reducers/index.ts b/client/reducers/index.ts
deleted file mode 100644
index bebc2a9..0000000
--- a/client/reducers/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { combineReducers } from 'redux';
-import todos from './todos';
-import filter from './filter';
-
-const rootReducer = combineReducers({
- todos,
- filter
-});
-
-export default rootReducer;
diff --git a/client/reducers/todos.test.ts b/client/reducers/todos.test.ts
deleted file mode 100644
index 9c348b6..0000000
--- a/client/reducers/todos.test.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import reducer from './todos';
-import { addTodo, deleteTodo, editTodo, completeTodo } from '../actions';
-//@ts-ignore
-test('Add a todo', function(): void {
- let result = reducer([], addTodo('New Todo!')),
- { title, completed, id } = result[0];
- //@ts-ignore
- expect(title).toBe('New Todo!');
- expect(completed).toBe(false);
- expect(id).toBe(0);
-});
-test('Delete a todo', function(): void {
- let todo1 = {
- id: 0,
- title: 'An existing todo',
- completed: false
- },
- todo2 = {
- id: 1,
- title: 'Another existing todo',
- completed: false
- },
- result = reducer([todo1, todo2], deleteTodo(0)),
- { title } = result[0];
-
- expect(title).toBe('Another existing todo');
-});
-test('Edit a todo', function(): void {
- let todo1 = {
- id: 0,
- title: 'An existing todo',
- completed: false
- },
- todo2 = {
- id: 1,
- title: 'Another existing todo',
- completed: false
- },
- result = reducer([todo1, todo2], editTodo(1, 'A new title')),
- { title } = result[1];
-
- expect(title).toBe('A new title');
-});
-test('Complete a todo', function(): void {
- let todo1 = {
- id: 0,
- title: 'An existing todo',
- completed: false
- },
- todo2 = {
- id: 1,
- title: 'Another existing todo',
- completed: false
- },
- result = reducer([todo1, todo2], completeTodo(1)),
- { completed } = result[1];
-
- expect(completed).toBe(true);
-});
diff --git a/client/reducers/todos.ts b/client/reducers/todos.ts
deleted file mode 100644
index bfa295f..0000000
--- a/client/reducers/todos.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { Todo } from '../interfaces';
-
-export default function handleActions(state, action) {
- switch (action.type) {
- case 'ADD_TODO': {
- return [
- {
- id: state.reduce((maxId, todo): number => Math.max(todo.id, maxId), -1) + 1,
- completed: false,
- title: action.payload.title
- },
- ...state
- ];
- }
- case 'DELETE_TODO': {
- return state.filter((todo): boolean => todo.id !== action.payload.id);
- }
- case 'EDIT_TODO': {
- return state.map(
- (todo): Todo =>
- todo.id === action.payload.id ? Object.assign({}, todo, { title: action.payload.title }) : todo
- );
- }
- case 'COMPLETE_TODO': {
- return state.map(
- (todo): Todo =>
- todo.id === action.payload.id ? Object.assign({}, todo, { completed: !todo.completed }) : todo
- );
- }
- case 'COMPLETE_ALL': {
- const areAllMarked = state.every((todo): boolean => todo.completed);
- return state.map(
- (todo): Todo =>
- Object.assign({}, todo, {
- completed: !areAllMarked
- })
- );
- }
- case 'CLEAR_COMPLETED': {
- return state.filter((todo): boolean => todo.completed === false);
- }
- default: {
- return [];
- }
- }
-}
diff --git a/client/routes/index.ts b/client/routes/index.ts
new file mode 100644
index 0000000..1f5846c
--- /dev/null
+++ b/client/routes/index.ts
@@ -0,0 +1,11 @@
+import page from 'page';
+
+function init(): void {
+ page('/', () => {});
+ page('/show_all', () => {});
+ page('/show_active', () => {});
+ page('/show_completed', () => {});
+ page();
+}
+
+export default init;
diff --git a/client/routes/routes.client.ts b/client/routes/routes.client.ts
deleted file mode 100644
index f5ae94d..0000000
--- a/client/routes/routes.client.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Store } from 'redux';
-import page from 'page';
-import { showAll, showActive, showCompleted } from '../actions';
-import { Action } from 'redux-actions';
-
-function init(store: Store): void {
- page('/', (): Action<{ filter: string }> => store.dispatch(showAll()));
- page('/show_all', (): Action<{ filter: string }> => store.dispatch(showAll()));
- page('/show_active', (): Action<{ filter: string }> => store.dispatch(showActive()));
- page('/show_completed', (): Action<{ filter: string }> => store.dispatch(showCompleted()));
- page();
-}
-
-export default init;
diff --git a/client/state/state-mgmt.ts b/client/state/state-mgmt.ts
new file mode 100644
index 0000000..2a39220
--- /dev/null
+++ b/client/state/state-mgmt.ts
@@ -0,0 +1,46 @@
+import React, { useEffect, useState } from 'react';
+import db from './store';
+
+export function handleTodoChange(todos, change) {
+ let index = -1;
+ for (let i = 0; i < todos.length; i++) {
+ if (todos[i]._id === change.doc._id) {
+ index = i;
+ break;
+ }
+ }
+ if (index === -1) {
+ return [change.doc, ...todos];
+ } else if (change.deleted) {
+ return [...todos.slice(0, index), ...todos.slice(index + 1)];
+ } else {
+ return [...todos.slice(0, index), change.doc, ...todos.slice(index + 1)];
+ }
+}
+
+export function useStateMgmt(state) {
+ const [todos, updateTodos] = useState(state.todos);
+ const [filter, updateFilter] = useState(state.filter);
+
+ useEffect(() => {
+ const changes = db
+ .changes({
+ live: true,
+ // eslint-disable-next-line
+ include_docs: true,
+ since: 'now',
+ timeout: false
+ })
+ .on('change', (change) => {
+ updateTodos((todos) => {
+ return handleTodoChange(todos, change);
+ });
+ });
+
+ return () => changes.cancel();
+ });
+
+ return [{ todos, filter }];
+}
+
+export const AppContext = React.createContext({ todos: [], filter: 'show_all' });
diff --git a/client/store/store.ts b/client/state/store.ts
similarity index 100%
rename from client/store/store.ts
rename to client/state/store.ts
diff --git a/client/store/state-mgmt.ts b/client/store/state-mgmt.ts
deleted file mode 100644
index 38a9fc7..0000000
--- a/client/store/state-mgmt.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import db from './store';
-
-export function useStateMgmt(state) {
- const [todos, updateTodos] = useState(state.todos);
- const [filter, updateFilter] = useState(state.filter);
-
- useEffect(() => {
- db.changes().on('change', (change) => {
- console.log(change);
- });
- });
-
- return [{ todos, filter }];
-}
-
-export const AppContext = React.createContext({ todos: [], filter: 'show_all' });
diff --git a/client/views/app.tsx b/client/views/app.tsx
index 1d622a2..adc3f78 100644
--- a/client/views/app.tsx
+++ b/client/views/app.tsx
@@ -1,9 +1,11 @@
import React from 'react';
-import { AppContext } from '../store/state-mgmt';
+import { AppContext, useStateMgmt } from '../state/state-mgmt';
import Header from '../components/header';
import TodoListWrapper from '../components/todo-list';
-export default function App({ state }) {
+export default function App({ initialData }) {
+
+ let [ state ] = useStateMgmt(initialData);
return (
diff --git a/public/main.js b/public/main.js
index fae2f4e..6e38430 100644
--- a/public/main.js
+++ b/public/main.js
@@ -1,601 +1,31 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./client/index.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./client/components/footer.js":
-/*!*************************************!*\
- !*** ./client/components/footer.js ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst state_mgmt_1 = __webpack_require__(/*! ../store/state-mgmt */ \"./client/store/state-mgmt.js\");\nconst client_events_1 = __webpack_require__(/*! ../events/client-events */ \"./client/events/client-events.js\");\nconst todo_filters_1 = __webpack_require__(/*! ../constants/todo-filters */ \"./client/constants/todo-filters.js\");\nlet FILTER_TITLES = {\n [todo_filters_1.SHOW_ALL]: 'All',\n [todo_filters_1.SHOW_ACTIVE]: 'Active',\n [todo_filters_1.SHOW_COMPLETED]: 'Completed'\n};\nfunction Footer({ filter, count, completed, active }) {\n if (count) {\n function RenderTodoCount() {\n let itemWord = active === 1 ? 'item' : 'items';\n return (react_1.default.createElement(\"span\", { className: \"todo-count\" },\n react_1.default.createElement(\"strong\", null, active || 'No'),\n \" \",\n itemWord,\n \" left\"));\n }\n function RenderFilterLink({ filterType }) {\n let title = FILTER_TITLES[filterType];\n let isSelected = filter === filterType ? 'selected' : '';\n return (react_1.default.createElement(\"a\", { className: isSelected, href: filterType, style: { cursor: 'pointer' } }, title));\n }\n function RenderClearButton() {\n if (completed > 0) {\n return (react_1.default.createElement(\"button\", { className: \"clear-completed\", onClick: () => client_events_1.clearCompleted() }, \"Clear completed\"));\n }\n else {\n return null;\n }\n }\n return (react_1.default.createElement(\"footer\", { className: \"footer\" },\n react_1.default.createElement(RenderTodoCount, null),\n react_1.default.createElement(\"ul\", { className: \"filters\" }, [todo_filters_1.SHOW_ALL, todo_filters_1.SHOW_ACTIVE, todo_filters_1.SHOW_COMPLETED].map((filterType) => react_1.default.createElement(\"li\", { key: filterType },\n react_1.default.createElement(RenderFilterLink, { filterType: filterType })))),\n react_1.default.createElement(RenderClearButton, null)));\n }\n else {\n return null;\n }\n}\nfunction default_1() {\n return (react_1.default.createElement(state_mgmt_1.AppContext.Consumer, null, ({ todos, filter }) => {\n let count = todos.length, completed = todos.reduce((count, todo) => (todo.completed ? count + 1 : count), 0), active = count - completed;\n return (react_1.default.createElement(Footer, { filter: filter, count: count, completed: completed, active: active }));\n }));\n}\nexports.default = default_1;\n//# sourceMappingURL=footer.js.map\n\n//# sourceURL=webpack:///./client/components/footer.js?");
-
-/***/ }),
-
-/***/ "./client/components/header.js":
-/*!*************************************!*\
- !*** ./client/components/header.js ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst state_mgmt_1 = __webpack_require__(/*! ../store/state-mgmt */ \"./client/store/state-mgmt.js\");\nconst todo_text_input_1 = __importDefault(__webpack_require__(/*! ./todo-text-input */ \"./client/components/todo-text-input.js\"));\nfunction Header({ filter }) {\n let newTodo = true, fakeTodo = {\n editing: false,\n title: ''\n };\n return (react_1.default.createElement(\"header\", { className: \"header\" },\n react_1.default.createElement(\"h1\", null, \"todos\"),\n react_1.default.createElement(todo_text_input_1.default, { todo: fakeTodo, newTodo: newTodo, filter: filter, placeholder: \"What needs to be done?\" })));\n}\nfunction default_1() {\n return (react_1.default.createElement(state_mgmt_1.AppContext.Consumer, null, ({ filter }) => {\n return (react_1.default.createElement(Header, { filter: filter }));\n }));\n}\nexports.default = default_1;\n//# sourceMappingURL=header.js.map\n\n//# sourceURL=webpack:///./client/components/header.js?");
-
-/***/ }),
-
-/***/ "./client/components/todo-item.js":
-/*!****************************************!*\
- !*** ./client/components/todo-item.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst todo_text_input_1 = __importDefault(__webpack_require__(/*! ./todo-text-input */ \"./client/components/todo-text-input.js\"));\nconst client_events_1 = __webpack_require__(/*! ../events/client-events */ \"./client/events/client-events.js\");\nlet cssDestroyForm = {\n height: '0px'\n}, cssDestroyText = {\n position: 'fixed',\n top: '-100px'\n}, cssDestroyEl = {\n textDecoration: 'none'\n}, cssCompleteButton = {\n display: 'block',\n width: '100%',\n textAlign: 'left'\n};\nfunction TodoItem({ todo, filter }) {\n let [editing, flipEdit] = react_1.useState(false), newTodo = false, element;\n if (editing) {\n element = (react_1.default.createElement(todo_text_input_1.default, { todo: todo, editing: editing, flipEdit: flipEdit, newTodo: newTodo, filter: filter, placeholder: \"Leaving empty deletes todo!\" }));\n }\n else {\n element = (react_1.default.createElement(\"div\", { className: \"view\" },\n react_1.default.createElement(\"form\", { id: \"completeForm\", method: \"POST\", action: `/todos/${todo.id}?type=COMPLETE_TODO&filter=${filter}` },\n react_1.default.createElement(\"input\", { id: \"completeTodo\", className: \"toggle\", type: \"checkbox\", checked: todo.completed, onChange: (event) => client_events_1.completeTodo(event, todo.id) }),\n react_1.default.createElement(\"label\", { htmlFor: \"completeTodo\" },\n react_1.default.createElement(\"button\", { type: \"submit\", style: cssCompleteButton, onClick: (event) => client_events_1.completeTodo(event, todo.id), onDoubleClick: () => flipEdit(true) }, todo.title))),\n react_1.default.createElement(\"form\", { id: \"deleteForm\", method: \"POST\", action: `/todos/${todo.id}?type=DELETE_TODO&filter=${filter}`, style: cssDestroyForm },\n react_1.default.createElement(\"button\", { type: \"submit\", style: cssDestroyEl, className: \"destroy\", onClick: (event) => client_events_1.deleteTodo(event, todo.id) },\n react_1.default.createElement(\"span\", { style: cssDestroyText }, \"Delete Todo\")))));\n }\n return (react_1.default.createElement(\"li\", { className: `todoItem\n\t\t\t${todo.completed ? 'completed' : ''}\n\t\t\t${editing ? 'editing' : ''}` }, element));\n}\nexports.default = TodoItem;\n//# sourceMappingURL=todo-item.js.map\n\n//# sourceURL=webpack:///./client/components/todo-item.js?");
-
-/***/ }),
-
-/***/ "./client/components/todo-list.js":
-/*!****************************************!*\
- !*** ./client/components/todo-list.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst state_mgmt_1 = __webpack_require__(/*! ../store/state-mgmt */ \"./client/store/state-mgmt.js\");\nconst todo_item_1 = __importDefault(__webpack_require__(/*! ./todo-item */ \"./client/components/todo-item.js\"));\nconst toggle_all_1 = __importDefault(__webpack_require__(/*! ./toggle-all */ \"./client/components/toggle-all.js\"));\nconst footer_1 = __importDefault(__webpack_require__(/*! ./footer */ \"./client/components/footer.js\"));\nconst todo_filters_1 = __webpack_require__(/*! ../constants/todo-filters */ \"./client/constants/todo-filters.js\");\nconst TODO_FILTERS = {\n [todo_filters_1.SHOW_ALL]: () => true,\n [todo_filters_1.SHOW_ACTIVE]: (todo) => !todo.completed,\n [todo_filters_1.SHOW_COMPLETED]: (todo) => todo.completed\n};\nfunction TodoList({ todos, filter }) {\n let filteredTodos = todos.filter(TODO_FILTERS[filter]);\n return (react_1.default.createElement(\"section\", { className: \"main\" },\n react_1.default.createElement(toggle_all_1.default, null),\n react_1.default.createElement(\"ul\", { className: \"todo-list\" }, filteredTodos.map(todo => (react_1.default.createElement(todo_item_1.default, { key: todo.id, todo: todo, filter: filter })))),\n react_1.default.createElement(footer_1.default, null)));\n}\nexports.TodoList = TodoList;\nfunction default_1() {\n return (react_1.default.createElement(state_mgmt_1.AppContext.Consumer, null, ({ todos, filter }) => {\n return react_1.default.createElement(TodoList, { todos: todos, filter: filter });\n }));\n}\nexports.default = default_1;\n//# sourceMappingURL=todo-list.js.map\n\n//# sourceURL=webpack:///./client/components/todo-list.js?");
-
-/***/ }),
-
-/***/ "./client/components/todo-text-input.js":
-/*!**********************************************!*\
- !*** ./client/components/todo-text-input.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst client_events_1 = __webpack_require__(/*! ../events/client-events */ \"./client/events/client-events.js\");\nfunction TodoTextInput({ editing, newTodo, placeholder, todo, flipEdit, filter }) {\n let isEditing = editing ? 'edit' : '';\n let isNew = newTodo ? 'new-todo' : '';\n function saveChange(event, id) {\n if (editing) {\n client_events_1.formSubmission(event, id, flipEdit);\n }\n }\n return (react_1.default.createElement(\"form\", { id: 'todoForm', method: 'POST', action: `/todos?=filter=${filter ? filter : ''}`, onSubmit: (event) => client_events_1.formSubmission(event, todo && todo.id, flipEdit) },\n react_1.default.createElement(\"input\", { id: \"todoInput\", className: isEditing || isNew, name: 'title', type: 'text', placeholder: placeholder, defaultValue: todo.title, autoFocus: editing, onBlur: (event) => saveChange(event, todo.id) })));\n}\nexports.default = TodoTextInput;\n//# sourceMappingURL=todo-text-input.js.map\n\n//# sourceURL=webpack:///./client/components/todo-text-input.js?");
-
-/***/ }),
-
-/***/ "./client/components/toggle-all.js":
-/*!*****************************************!*\
- !*** ./client/components/toggle-all.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst state_mgmt_1 = __webpack_require__(/*! ../store/state-mgmt */ \"./client/store/state-mgmt.js\");\nconst client_events_1 = __webpack_require__(/*! ../events/client-events */ \"./client/events/client-events.js\");\nfunction ToggleAll({ count, completed }) {\n if (count > 0) {\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(\"input\", { id: \"toggle-all\", className: \"toggle-all\", type: \"checkbox\", checked: completed === count, onChange: client_events_1.completeAll }),\n react_1.default.createElement(\"label\", { htmlFor: \"toggle-all\" })));\n }\n else {\n return null;\n }\n}\nfunction default_1() {\n return (react_1.default.createElement(state_mgmt_1.AppContext.Consumer, null, ({ todos }) => {\n const count = todos.length;\n const completed = todos.reduce((count, todo) => (todo.completed ? count + 1 : count), 0);\n return react_1.default.createElement(ToggleAll, { count: count, completed: completed });\n }));\n}\nexports.default = default_1;\n//# sourceMappingURL=toggle-all.js.map\n\n//# sourceURL=webpack:///./client/components/toggle-all.js?");
-
-/***/ }),
-
-/***/ "./client/constants/todo-filters.js":
-/*!******************************************!*\
- !*** ./client/constants/todo-filters.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHOW_ALL = 'show_all';\nexports.SHOW_COMPLETED = 'show_completed';\nexports.SHOW_ACTIVE = 'show_active';\n//# sourceMappingURL=todo-filters.js.map\n\n//# sourceURL=webpack:///./client/constants/todo-filters.js?");
-
-/***/ }),
-
-/***/ "./client/events/client-events.js":
-/*!****************************************!*\
- !*** ./client/events/client-events.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction formSubmission(event, id, flipEdit) {\n let title = event.currentTarget.id === 'todoForm'\n ? event.currentTarget.elements.todoInput.value\n : event.currentTarget.value;\n event.preventDefault();\n if (!id && !title) {\n return;\n }\n else if (id && title.length) {\n return;\n }\n else if (id && !title) {\n return;\n }\n else {\n return;\n }\n}\nexports.formSubmission = formSubmission;\nfunction completeTodo(event, id) {\n event.preventDefault();\n return;\n}\nexports.completeTodo = completeTodo;\nfunction completeAll() {\n return;\n}\nexports.completeAll = completeAll;\nfunction clearCompleted() {\n return;\n}\nexports.clearCompleted = clearCompleted;\nfunction deleteTodo(event, id) {\n event.preventDefault();\n return;\n}\nexports.deleteTodo = deleteTodo;\n//# sourceMappingURL=client-events.js.map\n\n//# sourceURL=webpack:///./client/events/client-events.js?");
-
-/***/ }),
-
-/***/ "./client/index.js":
-/*!*************************!*\
- !*** ./client/index.js ***!
- \*************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst react_dom_1 = __importDefault(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\nconst app_1 = __importDefault(__webpack_require__(/*! ./views/app */ \"./client/views/app.js\"));\nconst store_1 = __importDefault(__webpack_require__(/*! ./store/store */ \"./client/store/store.js\"));\n__webpack_require__(/*! todomvc-app-css/index.css */ \"./node_modules/todomvc-app-css/index.css\");\n__webpack_require__(/*! ./views/app.css */ \"./client/views/app.css\");\nif (true) {\n let axe = __webpack_require__(/*! react-axe */ \"./node_modules/react-axe/index.js\");\n axe(react_1.default, react_dom_1.default);\n}\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n store_1.default.allDocs({ include_docs: true })\n .then((response) => {\n const state = {\n todos: response.rows ?\n response.rows.map((row) => row.doc) :\n [],\n filter: \"show_all\"\n };\n react_dom_1.default.render(react_1.default.createElement(app_1.default, { state: state }), document.getElementById('root'));\n });\n});\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./client/index.js?");
-
-/***/ }),
-
-/***/ "./client/store/state-mgmt.js":
-/*!************************************!*\
- !*** ./client/store/state-mgmt.js ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst store_1 = __importDefault(__webpack_require__(/*! ./store */ \"./client/store/store.js\"));\nfunction useStateMgmt(state) {\n const [todos, updateTodos] = react_1.useState(state.todos);\n const [filter, updateFilter] = react_1.useState(state.filter);\n react_1.useEffect(() => {\n store_1.default.changes().on('change', (change) => {\n console.log(change);\n });\n });\n return [{ todos, filter }];\n}\nexports.useStateMgmt = useStateMgmt;\nexports.AppContext = react_1.default.createContext({ todos: [], filter: 'show_all' });\n//# sourceMappingURL=state-mgmt.js.map\n\n//# sourceURL=webpack:///./client/store/state-mgmt.js?");
-
-/***/ }),
-
-/***/ "./client/store/store.js":
-/*!*******************************!*\
- !*** ./client/store/store.js ***!
- \*******************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pouchdb_1 = __importDefault(__webpack_require__(/*! pouchdb */ \"./node_modules/pouchdb/lib/index-browser.es.js\"));\nexports.default = new pouchdb_1.default('todos');\n//# sourceMappingURL=store.js.map\n\n//# sourceURL=webpack:///./client/store/store.js?");
-
-/***/ }),
-
-/***/ "./client/views/app.css":
-/*!******************************!*\
- !*** ./client/views/app.css ***!
- \******************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./client/views/app.css?");
-
-/***/ }),
-
-/***/ "./client/views/app.js":
-/*!*****************************!*\
- !*** ./client/views/app.js ***!
- \*****************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst state_mgmt_1 = __webpack_require__(/*! ../store/state-mgmt */ \"./client/store/state-mgmt.js\");\nconst header_1 = __importDefault(__webpack_require__(/*! ../components/header */ \"./client/components/header.js\"));\nconst todo_list_1 = __importDefault(__webpack_require__(/*! ../components/todo-list */ \"./client/components/todo-list.js\"));\nfunction App({ state }) {\n return (react_1.default.createElement(state_mgmt_1.AppContext.Provider, { value: state },\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(header_1.default, null),\n react_1.default.createElement(todo_list_1.default, null))));\n}\nexports.default = App;\n//# sourceMappingURL=app.js.map\n\n//# sourceURL=webpack:///./client/views/app.js?");
-
-/***/ }),
-
-/***/ "./node_modules/argsarray/index.js":
-/*!*****************************************!*\
- !*** ./node_modules/argsarray/index.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n return function () {\n var len = arguments.length;\n if (len) {\n var args = [];\n var i = -1;\n while (++i < len) {\n args[i] = arguments[i];\n }\n return fun.call(this, args);\n } else {\n return fun.call(this, []);\n }\n };\n}\n\n//# sourceURL=webpack:///./node_modules/argsarray/index.js?");
-
-/***/ }),
-
-/***/ "./node_modules/axe-core/axe.js":
-/*!**************************************!*\
- !*** ./node_modules/axe-core/axe.js ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;var __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! aXe v3.2.2\n * Copyright (c) 2019 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 axeFunction(window) {\n var global = window;\n var document = window.document;\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n var axe = axe || {};\n axe.version = '3.2.2';\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n 'use strict';\n return axe;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n if (( false ? undefined : _typeof(module)) === 'object' && module.exports && typeof axeFunction.toString === 'function') {\n axe.source = '(' + axeFunction.toString() + ')(typeof window === \"object\" ? window : this);';\n module.exports = axe;\n }\n if (typeof window.getComputedStyle === 'function') {\n window.axe = axe;\n }\n var commons;\n function SupportError(error) {\n this.name = 'SupportError';\n this.cause = error.cause;\n this.message = '`' + error.cause + '` - feature unsupported in your environment.';\n if (error.ruleId) {\n this.ruleId = error.ruleId;\n this.message += ' Skipping ' + this.ruleId + ' rule.';\n }\n this.stack = new Error().stack;\n }\n SupportError.prototype = Object.create(Error.prototype);\n SupportError.prototype.constructor = SupportError;\n (function() {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c) {\n return require(i, !0);\n }\n if (u) {\n return u(i, !0);\n }\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = {\n exports: {}\n };\n e[i][0].call(p.exports, function(r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) {\n o(t[i]);\n }\n return o;\n }\n return r;\n })()({\n 1: [ function(_dereq_, module, exports) {\n _dereq_('es6-promise').polyfill();\n axe.imports = {\n axios: _dereq_('axios'),\n CssSelectorParser: _dereq_('css-selector-parser').CssSelectorParser,\n doT: _dereq_('dot'),\n emojiRegexText: _dereq_('emoji-regex')\n };\n }, {\n axios: 2,\n 'css-selector-parser': 27,\n dot: 29,\n 'emoji-regex': 30,\n 'es6-promise': 31\n } ],\n 2: [ function(_dereq_, module, exports) {\n module.exports = _dereq_('./lib/axios');\n }, {\n './lib/axios': 4\n } ],\n 3: [ function(_dereq_, module, exports) {\n (function(process) {\n 'use strict';\n var utils = _dereq_('./../utils');\n var settle = _dereq_('./../core/settle');\n var buildURL = _dereq_('./../helpers/buildURL');\n var parseHeaders = _dereq_('./../helpers/parseHeaders');\n var isURLSameOrigin = _dereq_('./../helpers/isURLSameOrigin');\n var createError = _dereq_('../core/createError');\n var btoa = typeof window !== 'undefined' && window.btoa && window.btoa.bind(window) || _dereq_('./../helpers/btoa');\n module.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type'];\n }\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n request.timeout = config.timeout;\n request[loadEvent] = function handleLoad() {\n if (!request || request.readyState !== 4 && !xDomain) {\n return;\n }\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response);\n request = null;\n };\n request.onerror = function handleError() {\n reject(createError('Network Error', config, null, request));\n request = null;\n };\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request));\n request = null;\n };\n if (utils.isStandardBrowserEnv()) {\n var cookies = _dereq_('./../helpers/cookies');\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n } else {\n request.setRequestHeader(key, val);\n }\n });\n }\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n if (config.cancelToken) {\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n request.abort();\n reject(cancel);\n request = null;\n });\n }\n if (requestData === undefined) {\n requestData = null;\n }\n request.send(requestData);\n });\n };\n }).call(this, _dereq_('_process'));\n }, {\n '../core/createError': 10,\n './../core/settle': 13,\n './../helpers/btoa': 17,\n './../helpers/buildURL': 18,\n './../helpers/cookies': 20,\n './../helpers/isURLSameOrigin': 22,\n './../helpers/parseHeaders': 24,\n './../utils': 26,\n _process: 33\n } ],\n 4: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./utils');\n var bind = _dereq_('./helpers/bind');\n var Axios = _dereq_('./core/Axios');\n var defaults = _dereq_('./defaults');\n function createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n utils.extend(instance, Axios.prototype, context);\n utils.extend(instance, context);\n return instance;\n }\n var axios = createInstance(defaults);\n axios.Axios = Axios;\n axios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n };\n axios.Cancel = _dereq_('./cancel/Cancel');\n axios.CancelToken = _dereq_('./cancel/CancelToken');\n axios.isCancel = _dereq_('./cancel/isCancel');\n axios.all = function all(promises) {\n return Promise.all(promises);\n };\n axios.spread = _dereq_('./helpers/spread');\n module.exports = axios;\n module.exports.default = axios;\n }, {\n './cancel/Cancel': 5,\n './cancel/CancelToken': 6,\n './cancel/isCancel': 7,\n './core/Axios': 8,\n './defaults': 15,\n './helpers/bind': 16,\n './helpers/spread': 25,\n './utils': 26\n } ],\n 5: [ function(_dereq_, module, exports) {\n 'use strict';\n function Cancel(message) {\n this.message = message;\n }\n Cancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n };\n Cancel.prototype.__CANCEL__ = true;\n module.exports = Cancel;\n }, {} ],\n 6: [ function(_dereq_, module, exports) {\n 'use strict';\n var Cancel = _dereq_('./Cancel');\n function CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n return;\n }\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n }\n CancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n };\n CancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n };\n module.exports = CancelToken;\n }, {\n './Cancel': 5\n } ],\n 7: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n };\n }, {} ],\n 8: [ function(_dereq_, module, exports) {\n 'use strict';\n var defaults = _dereq_('./../defaults');\n var utils = _dereq_('./../utils');\n var InterceptorManager = _dereq_('./InterceptorManager');\n var dispatchRequest = _dereq_('./dispatchRequest');\n function Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n Axios.prototype.request = function request(config) {\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n config = utils.merge(defaults, {\n method: 'get'\n }, this.defaults, config);\n config.method = config.method.toLowerCase();\n var chain = [ dispatchRequest, undefined ];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n return promise;\n };\n utils.forEach([ 'delete', 'get', 'head', 'options' ], function forEachMethodNoData(method) {\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n module.exports = Axios;\n }, {\n './../defaults': 15,\n './../utils': 26,\n './InterceptorManager': 9,\n './dispatchRequest': 11\n } ],\n 9: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n function InterceptorManager() {\n this.handlers = [];\n }\n InterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n };\n InterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n };\n InterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n };\n module.exports = InterceptorManager;\n }, {\n './../utils': 26\n } ],\n 10: [ function(_dereq_, module, exports) {\n 'use strict';\n var enhanceError = _dereq_('./enhanceError');\n module.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n };\n }, {\n './enhanceError': 12\n } ],\n 11: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n var transformData = _dereq_('./transformData');\n var isCancel = _dereq_('../cancel/isCancel');\n var defaults = _dereq_('../defaults');\n var isAbsoluteURL = _dereq_('./../helpers/isAbsoluteURL');\n var combineURLs = _dereq_('./../helpers/combineURLs');\n function throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n }\n module.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n config.headers = config.headers || {};\n config.data = transformData(config.data, config.headers, config.transformRequest);\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach([ 'delete', 'get', 'head', 'post', 'put', 'patch', 'common' ], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n return Promise.reject(reason);\n });\n };\n }, {\n '../cancel/isCancel': 7,\n '../defaults': 15,\n './../helpers/combineURLs': 19,\n './../helpers/isAbsoluteURL': 21,\n './../utils': 26,\n './transformData': 14\n } ],\n 12: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n };\n }, {} ],\n 13: [ function(_dereq_, module, exports) {\n 'use strict';\n var createError = _dereq_('./createError');\n module.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n };\n }, {\n './createError': 10\n } ],\n 14: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n module.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n };\n }, {\n './../utils': 26\n } ],\n 15: [ function(_dereq_, module, exports) {\n (function(process) {\n 'use strict';\n var utils = _dereq_('./utils');\n var normalizeHeaderName = _dereq_('./helpers/normalizeHeaderName');\n var DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n function setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n }\n function getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n adapter = _dereq_('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n adapter = _dereq_('./adapters/http');\n }\n return adapter;\n }\n var defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [ function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n } ],\n transformResponse: [ function transformResponse(data) {\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {}\n }\n return data;\n } ],\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n };\n defaults.headers = {\n common: {\n Accept: 'application/json, text/plain, */*'\n }\n };\n utils.forEach([ 'delete', 'get', 'head' ], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n });\n utils.forEach([ 'post', 'put', 'patch' ], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n });\n module.exports = defaults;\n }).call(this, _dereq_('_process'));\n }, {\n './adapters/http': 3,\n './adapters/xhr': 3,\n './helpers/normalizeHeaderName': 23,\n './utils': 26,\n _process: 33\n } ],\n 16: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n };\n }, {} ],\n 17: [ function(_dereq_, module, exports) {\n 'use strict';\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function E() {\n this.message = 'String contains an invalid character';\n }\n E.prototype = new Error();\n E.prototype.code = 5;\n E.prototype.name = 'InvalidCharacterError';\n function btoa(input) {\n var str = String(input);\n var output = '';\n for (var block, charCode, idx = 0, map = chars; str.charAt(idx | 0) || (map = '=', \n idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 255) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n }\n module.exports = btoa;\n }, {} ],\n 18: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n function encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n }\n module.exports = function buildURL(url, params, paramsSerializer) {\n if (!params) {\n return url;\n }\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [ val ];\n }\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n };\n }, {\n './../utils': 26\n } ],\n 19: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n };\n }, {} ],\n 20: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 864e5);\n }\n };\n }() : function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n }();\n }, {\n './../utils': 26\n } ],\n 21: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function isAbsoluteURL(url) {\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n };\n }, {} ],\n 22: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n module.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n function resolveURL(url) {\n var href = url;\n if (msie) {\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n }() : function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n }();\n }, {\n './../utils': 26\n } ],\n 23: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('../utils');\n module.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n };\n }, {\n '../utils': 26\n } ],\n 24: [ function(_dereq_, module, exports) {\n 'use strict';\n var utils = _dereq_('./../utils');\n var ignoreDuplicateOf = [ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent' ];\n module.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n if (!headers) {\n return parsed;\n }\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([ val ]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n };\n }, {\n './../utils': 26\n } ],\n 25: [ function(_dereq_, module, exports) {\n 'use strict';\n module.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n };\n }, {} ],\n 26: [ function(_dereq_, module, exports) {\n 'use strict';\n var bind = _dereq_('./helpers/bind');\n var isBuffer = _dereq_('is-buffer');\n var toString = Object.prototype.toString;\n function isArray(val) {\n return toString.call(val) === '[object Array]';\n }\n function isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n }\n function isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n }\n function isArrayBufferView(val) {\n var result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n return result;\n }\n function isString(val) {\n return typeof val === 'string';\n }\n function isNumber(val) {\n return typeof val === 'number';\n }\n function isUndefined(val) {\n return typeof val === 'undefined';\n }\n function isObject(val) {\n return val !== null && typeof val === 'object';\n }\n function isDate(val) {\n return toString.call(val) === '[object Date]';\n }\n function isFile(val) {\n return toString.call(val) === '[object File]';\n }\n function isBlob(val) {\n return toString.call(val) === '[object Blob]';\n }\n function isFunction(val) {\n return toString.call(val) === '[object Function]';\n }\n function isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n }\n function isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n }\n function trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n }\n function isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n }\n function forEach(obj, fn) {\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n if (typeof obj !== 'object') {\n obj = [ obj ];\n }\n if (isArray(obj)) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n }\n function merge() {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n }\n function extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n }\n module.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n };\n }, {\n './helpers/bind': 16,\n 'is-buffer': 32\n } ],\n 27: [ function(_dereq_, module, exports) {\n module.exports = {\n CssSelectorParser: _dereq_('./lib/css-selector-parser.js').CssSelectorParser\n };\n }, {\n './lib/css-selector-parser.js': 28\n } ],\n 28: [ function(_dereq_, module, exports) {\n function CssSelectorParser() {\n this.pseudos = {};\n this.attrEqualityMods = {};\n this.ruleNestingOperators = {};\n this.substitutesEnabled = false;\n }\n CssSelectorParser.prototype.registerSelectorPseudos = function(name) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n name = arguments[j];\n this.pseudos[name] = 'selector';\n }\n return this;\n };\n CssSelectorParser.prototype.unregisterSelectorPseudos = function(name) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n name = arguments[j];\n delete this.pseudos[name];\n }\n return this;\n };\n CssSelectorParser.prototype.registerNumericPseudos = function(name) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n name = arguments[j];\n this.pseudos[name] = 'numeric';\n }\n return this;\n };\n CssSelectorParser.prototype.unregisterNumericPseudos = function(name) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n name = arguments[j];\n delete this.pseudos[name];\n }\n return this;\n };\n CssSelectorParser.prototype.registerNestingOperators = function(operator) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n operator = arguments[j];\n this.ruleNestingOperators[operator] = true;\n }\n return this;\n };\n CssSelectorParser.prototype.unregisterNestingOperators = function(operator) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n operator = arguments[j];\n delete this.ruleNestingOperators[operator];\n }\n return this;\n };\n CssSelectorParser.prototype.registerAttrEqualityMods = function(mod) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n mod = arguments[j];\n this.attrEqualityMods[mod] = true;\n }\n return this;\n };\n CssSelectorParser.prototype.unregisterAttrEqualityMods = function(mod) {\n for (var j = 0, len = arguments.length; j < len; j++) {\n mod = arguments[j];\n delete this.attrEqualityMods[mod];\n }\n return this;\n };\n CssSelectorParser.prototype.enableSubstitutes = function() {\n this.substitutesEnabled = true;\n return this;\n };\n CssSelectorParser.prototype.disableSubstitutes = function() {\n this.substitutesEnabled = false;\n return this;\n };\n function isIdentStart(c) {\n return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_';\n }\n function isIdent(c) {\n return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_';\n }\n function isHex(c) {\n return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9';\n }\n function isDecimal(c) {\n return c >= '0' && c <= '9';\n }\n function isAttrMatchOperator(chr) {\n return chr === '=' || chr === '^' || chr === '$' || chr === '*' || chr === '~';\n }\n var identSpecialChars = {\n '!': true,\n '\"': true,\n '#': true,\n $: true,\n '%': true,\n '&': true,\n '\\'': true,\n '(': true,\n ')': true,\n '*': true,\n '+': true,\n ',': true,\n '.': true,\n '/': true,\n ';': true,\n '<': true,\n '=': true,\n '>': true,\n '?': true,\n '@': true,\n '[': true,\n '\\\\': true,\n ']': true,\n '^': true,\n '`': true,\n '{': true,\n '|': true,\n '}': true,\n '~': true\n };\n var strReplacementsRev = {\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\f': '\\\\f',\n '\\v': '\\\\v'\n };\n var singleQuoteEscapeChars = {\n n: '\\n',\n r: '\\r',\n t: '\\t',\n f: '\\f',\n '\\\\': '\\\\',\n '\\'': '\\''\n };\n var doubleQuotesEscapeChars = {\n n: '\\n',\n r: '\\r',\n t: '\\t',\n f: '\\f',\n '\\\\': '\\\\',\n '\"': '\"'\n };\n function ParseContext(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) {\n var chr, getIdent, getStr, l, skipWhitespace;\n l = str.length;\n chr = null;\n getStr = function(quote, escapeTable) {\n var esc, hex, result;\n result = '';\n pos++;\n chr = str.charAt(pos);\n while (pos < l) {\n if (chr === quote) {\n pos++;\n return result;\n } else if (chr === '\\\\') {\n pos++;\n chr = str.charAt(pos);\n if (chr === quote) {\n result += quote;\n } else if (esc = escapeTable[chr]) {\n result += esc;\n } else if (isHex(chr)) {\n hex = chr;\n pos++;\n chr = str.charAt(pos);\n while (isHex(chr)) {\n hex += chr;\n pos++;\n chr = str.charAt(pos);\n }\n if (chr === ' ') {\n pos++;\n chr = str.charAt(pos);\n }\n result += String.fromCharCode(parseInt(hex, 16));\n continue;\n } else {\n result += chr;\n }\n } else {\n result += chr;\n }\n pos++;\n chr = str.charAt(pos);\n }\n return result;\n };\n getIdent = function() {\n var result = '';\n chr = str.charAt(pos);\n while (pos < l) {\n if (isIdent(chr)) {\n result += chr;\n } else if (chr === '\\\\') {\n pos++;\n if (pos >= l) {\n throw Error('Expected symbol but end of file reached.');\n }\n chr = str.charAt(pos);\n if (identSpecialChars[chr]) {\n result += chr;\n } else if (isHex(chr)) {\n var hex = chr;\n pos++;\n chr = str.charAt(pos);\n while (isHex(chr)) {\n hex += chr;\n pos++;\n chr = str.charAt(pos);\n }\n if (chr === ' ') {\n pos++;\n chr = str.charAt(pos);\n }\n result += String.fromCharCode(parseInt(hex, 16));\n continue;\n } else {\n result += chr;\n }\n } else {\n return result;\n }\n pos++;\n chr = str.charAt(pos);\n }\n return result;\n };\n skipWhitespace = function() {\n chr = str.charAt(pos);\n var result = false;\n while (chr === ' ' || chr === '\\t' || chr === '\\n' || chr === '\\r' || chr === '\\f') {\n result = true;\n pos++;\n chr = str.charAt(pos);\n }\n return result;\n };\n this.parse = function() {\n var res = this.parseSelector();\n if (pos < l) {\n throw Error('Rule expected but \"' + str.charAt(pos) + '\" found.');\n }\n return res;\n };\n this.parseSelector = function() {\n var res;\n var selector = res = this.parseSingleSelector();\n chr = str.charAt(pos);\n while (chr === ',') {\n pos++;\n skipWhitespace();\n if (res.type !== 'selectors') {\n res = {\n type: 'selectors',\n selectors: [ selector ]\n };\n }\n selector = this.parseSingleSelector();\n if (!selector) {\n throw Error('Rule expected after \",\".');\n }\n res.selectors.push(selector);\n }\n return res;\n };\n this.parseSingleSelector = function() {\n skipWhitespace();\n var selector = {\n type: 'ruleSet'\n };\n var rule = this.parseRule();\n if (!rule) {\n return null;\n }\n var currentRule = selector;\n while (rule) {\n rule.type = 'rule';\n currentRule.rule = rule;\n currentRule = rule;\n skipWhitespace();\n chr = str.charAt(pos);\n if (pos >= l || chr === ',' || chr === ')') {\n break;\n }\n if (ruleNestingOperators[chr]) {\n var op = chr;\n pos++;\n skipWhitespace();\n rule = this.parseRule();\n if (!rule) {\n throw Error('Rule expected after \"' + op + '\".');\n }\n rule.nestingOperator = op;\n } else {\n rule = this.parseRule();\n if (rule) {\n rule.nestingOperator = null;\n }\n }\n }\n return selector;\n };\n this.parseRule = function() {\n var rule = null;\n while (pos < l) {\n chr = str.charAt(pos);\n if (chr === '*') {\n pos++;\n (rule = rule || {}).tagName = '*';\n } else if (isIdentStart(chr) || chr === '\\\\') {\n (rule = rule || {}).tagName = getIdent();\n } else if (chr === '.') {\n pos++;\n rule = rule || {};\n (rule.classNames = rule.classNames || []).push(getIdent());\n } else if (chr === '#') {\n pos++;\n (rule = rule || {}).id = getIdent();\n } else if (chr === '[') {\n pos++;\n skipWhitespace();\n var attr = {\n name: getIdent()\n };\n skipWhitespace();\n if (chr === ']') {\n pos++;\n } else {\n var operator = '';\n if (attrEqualityMods[chr]) {\n operator = chr;\n pos++;\n chr = str.charAt(pos);\n }\n if (pos >= l) {\n throw Error('Expected \"=\" but end of file reached.');\n }\n if (chr !== '=') {\n throw Error('Expected \"=\" but \"' + chr + '\" found.');\n }\n attr.operator = operator + '=';\n pos++;\n skipWhitespace();\n var attrValue = '';\n attr.valueType = 'string';\n if (chr === '\"') {\n attrValue = getStr('\"', doubleQuotesEscapeChars);\n } else if (chr === '\\'') {\n attrValue = getStr('\\'', singleQuoteEscapeChars);\n } else if (substitutesEnabled && chr === '$') {\n pos++;\n attrValue = getIdent();\n attr.valueType = 'substitute';\n } else {\n while (pos < l) {\n if (chr === ']') {\n break;\n }\n attrValue += chr;\n pos++;\n chr = str.charAt(pos);\n }\n attrValue = attrValue.trim();\n }\n skipWhitespace();\n if (pos >= l) {\n throw Error('Expected \"]\" but end of file reached.');\n }\n if (chr !== ']') {\n throw Error('Expected \"]\" but \"' + chr + '\" found.');\n }\n pos++;\n attr.value = attrValue;\n }\n rule = rule || {};\n (rule.attrs = rule.attrs || []).push(attr);\n } else if (chr === ':') {\n pos++;\n var pseudoName = getIdent();\n var pseudo = {\n name: pseudoName\n };\n if (chr === '(') {\n pos++;\n var value = '';\n skipWhitespace();\n if (pseudos[pseudoName] === 'selector') {\n pseudo.valueType = 'selector';\n value = this.parseSelector();\n } else {\n pseudo.valueType = pseudos[pseudoName] || 'string';\n if (chr === '\"') {\n value = getStr('\"', doubleQuotesEscapeChars);\n } else if (chr === '\\'') {\n value = getStr('\\'', singleQuoteEscapeChars);\n } else if (substitutesEnabled && chr === '$') {\n pos++;\n value = getIdent();\n pseudo.valueType = 'substitute';\n } else {\n while (pos < l) {\n if (chr === ')') {\n break;\n }\n value += chr;\n pos++;\n chr = str.charAt(pos);\n }\n value = value.trim();\n }\n skipWhitespace();\n }\n if (pos >= l) {\n throw Error('Expected \")\" but end of file reached.');\n }\n if (chr !== ')') {\n throw Error('Expected \")\" but \"' + chr + '\" found.');\n }\n pos++;\n pseudo.value = value;\n }\n rule = rule || {};\n (rule.pseudos = rule.pseudos || []).push(pseudo);\n } else {\n break;\n }\n }\n return rule;\n };\n return this;\n }\n CssSelectorParser.prototype.parse = function(str) {\n var context = new ParseContext(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled);\n return context.parse();\n };\n CssSelectorParser.prototype.escapeIdentifier = function(s) {\n var result = '';\n var i = 0;\n var len = s.length;\n while (i < len) {\n var chr = s.charAt(i);\n if (identSpecialChars[chr]) {\n result += '\\\\' + chr;\n } else {\n if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) {\n var charCode = chr.charCodeAt(0);\n if ((charCode & 63488) === 55296) {\n var extraCharCode = s.charCodeAt(i++);\n if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) {\n throw Error('UCS-2(decode): illegal sequence');\n }\n charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536;\n }\n result += '\\\\' + charCode.toString(16) + ' ';\n } else {\n result += chr;\n }\n }\n i++;\n }\n return result;\n };\n CssSelectorParser.prototype.escapeStr = function(s) {\n var result = '';\n var i = 0;\n var len = s.length;\n var chr, replacement;\n while (i < len) {\n chr = s.charAt(i);\n if (chr === '\"') {\n chr = '\\\\\"';\n } else if (chr === '\\\\') {\n chr = '\\\\\\\\';\n } else if (replacement = strReplacementsRev[chr]) {\n chr = replacement;\n }\n result += chr;\n i++;\n }\n return '\"' + result + '\"';\n };\n CssSelectorParser.prototype.render = function(path) {\n return this._renderEntity(path).trim();\n };\n CssSelectorParser.prototype._renderEntity = function(entity) {\n var currentEntity, parts, res;\n res = '';\n switch (entity.type) {\n case 'ruleSet':\n currentEntity = entity.rule;\n parts = [];\n while (currentEntity) {\n if (currentEntity.nestingOperator) {\n parts.push(currentEntity.nestingOperator);\n }\n parts.push(this._renderEntity(currentEntity));\n currentEntity = currentEntity.rule;\n }\n res = parts.join(' ');\n break;\n\n case 'selectors':\n res = entity.selectors.map(this._renderEntity, this).join(', ');\n break;\n\n case 'rule':\n if (entity.tagName) {\n if (entity.tagName === '*') {\n res = '*';\n } else {\n res = this.escapeIdentifier(entity.tagName);\n }\n }\n if (entity.id) {\n res += '#' + this.escapeIdentifier(entity.id);\n }\n if (entity.classNames) {\n res += entity.classNames.map(function(cn) {\n return '.' + this.escapeIdentifier(cn);\n }, this).join('');\n }\n if (entity.attrs) {\n res += entity.attrs.map(function(attr) {\n if (attr.operator) {\n if (attr.valueType === 'substitute') {\n return '[' + this.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']';\n } else {\n return '[' + this.escapeIdentifier(attr.name) + attr.operator + this.escapeStr(attr.value) + ']';\n }\n } else {\n return '[' + this.escapeIdentifier(attr.name) + ']';\n }\n }, this).join('');\n }\n if (entity.pseudos) {\n res += entity.pseudos.map(function(pseudo) {\n if (pseudo.valueType) {\n if (pseudo.valueType === 'selector') {\n return ':' + this.escapeIdentifier(pseudo.name) + '(' + this._renderEntity(pseudo.value) + ')';\n } else if (pseudo.valueType === 'substitute') {\n return ':' + this.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')';\n } else if (pseudo.valueType === 'numeric') {\n return ':' + this.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')';\n } else {\n return ':' + this.escapeIdentifier(pseudo.name) + '(' + this.escapeIdentifier(pseudo.value) + ')';\n }\n } else {\n return ':' + this.escapeIdentifier(pseudo.name);\n }\n }, this).join('');\n }\n break;\n\n default:\n throw Error('Unknown entity type: \"' + entity.type(+'\".'));\n }\n return res;\n };\n exports.CssSelectorParser = CssSelectorParser;\n }, {} ],\n 29: [ function(_dereq_, module, exports) {\n (function() {\n 'use strict';\n var doT = {\n name: 'doT',\n version: '1.1.1',\n templateSettings: {\n evaluate: /\\{\\{([\\s\\S]+?(\\}?)+)\\}\\}/g,\n interpolate: /\\{\\{=([\\s\\S]+?)\\}\\}/g,\n encode: /\\{\\{!([\\s\\S]+?)\\}\\}/g,\n use: /\\{\\{#([\\s\\S]+?)\\}\\}/g,\n useParams: /(^|[^\\w$])def(?:\\.|\\[[\\'\\\"])([\\w$\\.]+)(?:[\\'\\\"]\\])?\\s*\\:\\s*([\\w$\\.]+|\\\"[^\\\"]+\\\"|\\'[^\\']+\\'|\\{[^\\}]+\\})/g,\n define: /\\{\\{##\\s*([\\w\\.$]+)\\s*(\\:|=)([\\s\\S]+?)#\\}\\}/g,\n defineParams: /^\\s*([\\w$]+):([\\s\\S]+)/,\n conditional: /\\{\\{\\?(\\?)?\\s*([\\s\\S]*?)\\s*\\}\\}/g,\n iterate: /\\{\\{~\\s*(?:\\}\\}|([\\s\\S]+?)\\s*\\:\\s*([\\w$]+)\\s*(?:\\:\\s*([\\w$]+))?\\s*\\}\\})/g,\n varname: 'it',\n strip: true,\n append: true,\n selfcontained: false,\n doNotSkipEncoded: false\n },\n template: undefined,\n compile: undefined,\n log: true\n }, _globals;\n doT.encodeHTMLSource = function(doNotSkipEncoded) {\n var encodeHTMLRules = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n }, matchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n return function(code) {\n return code ? code.toString().replace(matchHTML, function(m) {\n return encodeHTMLRules[m] || m;\n }) : '';\n };\n };\n _globals = function() {\n return this || (0, eval)('this');\n }();\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = doT;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return doT;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n var startend = {\n append: {\n start: '\\'+(',\n end: ')+\\'',\n startencode: '\\'+encodeHTML('\n },\n split: {\n start: '\\';out+=(',\n end: ');out+=\\'',\n startencode: '\\';out+=encodeHTML('\n }\n }, skip = /$^/;\n function resolveDefs(c, block, def) {\n return (typeof block === 'string' ? block : block.toString()).replace(c.define || skip, function(m, code, assign, value) {\n if (code.indexOf('def.') === 0) {\n code = code.substring(4);\n }\n if (!(code in def)) {\n if (assign === ':') {\n if (c.defineParams) {\n value.replace(c.defineParams, function(m, param, v) {\n def[code] = {\n arg: param,\n text: v\n };\n });\n }\n if (!(code in def)) {\n def[code] = value;\n }\n } else {\n new Function('def', 'def[\\'' + code + '\\']=' + value)(def);\n }\n }\n return '';\n }).replace(c.use || skip, function(m, code) {\n if (c.useParams) {\n code = code.replace(c.useParams, function(m, s, d, param) {\n if (def[d] && def[d].arg && param) {\n var rw = (d + ':' + param).replace(/'|\\\\/g, '_');\n def.__exp = def.__exp || {};\n def.__exp[rw] = def[d].text.replace(new RegExp('(^|[^\\\\w$])' + def[d].arg + '([^\\\\w$])', 'g'), '$1' + param + '$2');\n return s + 'def.__exp[\\'' + rw + '\\']';\n }\n });\n }\n var v = new Function('def', 'return ' + code)(def);\n return v ? resolveDefs(c, v, def) : v;\n });\n }\n function unescape(code) {\n return code.replace(/\\\\('|\\\\)/g, '$1').replace(/[\\r\\t\\n]/g, ' ');\n }\n doT.template = function(tmpl, c, def) {\n c = c || doT.templateSettings;\n var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, str = c.use || c.define ? resolveDefs(c, tmpl, def || {}) : tmpl;\n str = ('var out=\\'' + (c.strip ? str.replace(/(^|\\r|\\n)\\t* +| +\\t*(\\r|\\n|$)/g, ' ').replace(/\\r|\\n|\\t|\\/\\*[\\s\\S]*?\\*\\//g, '') : str).replace(/'|\\\\/g, '\\\\$&').replace(c.interpolate || skip, function(m, code) {\n return cse.start + unescape(code) + cse.end;\n }).replace(c.encode || skip, function(m, code) {\n needhtmlencode = true;\n return cse.startencode + unescape(code) + cse.end;\n }).replace(c.conditional || skip, function(m, elsecase, code) {\n return elsecase ? code ? '\\';}else if(' + unescape(code) + '){out+=\\'' : '\\';}else{out+=\\'' : code ? '\\';if(' + unescape(code) + '){out+=\\'' : '\\';}out+=\\'';\n }).replace(c.iterate || skip, function(m, iterate, vname, iname) {\n if (!iterate) {\n return '\\';} } out+=\\'';\n }\n sid += 1;\n indv = iname || 'i' + sid;\n iterate = unescape(iterate);\n return '\\';var arr' + sid + '=' + iterate + ';if(arr' + sid + '){var ' + vname + ',' + indv + '=-1,l' + sid + '=arr' + sid + '.length-1;while(' + indv + ' 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function() {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {}\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function(name) {\n return [];\n };\n process.binding = function(name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function() {\n return '/';\n };\n process.chdir = function(dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function() {\n return 0;\n };\n }, {} ]\n }, {}, [ 1 ]);\n 'use strict';\n var utils = axe.utils = {};\n 'use strict';\n var helpers = {};\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n function getDefaultConfiguration(audit) {\n 'use strict';\n var config;\n if (audit) {\n config = axe.utils.clone(audit);\n config.commons = audit.commons;\n } else {\n config = {};\n }\n config.reporter = config.reporter || null;\n config.rules = config.rules || [];\n config.checks = config.checks || [];\n config.data = _extends({\n checks: {},\n rules: {}\n }, config.data);\n return config;\n }\n function unpackToObject(collection, audit, method) {\n 'use strict';\n var i, l;\n for (i = 0, l = collection.length; i < l; i++) {\n audit[method](collection[i]);\n }\n }\n function Audit(audit) {\n this.brand = 'axe';\n this.application = 'axeAPI';\n this.tagExclude = [ 'experimental' ];\n this.defaultConfig = audit;\n this._init();\n this._defaultLocale = null;\n }\n Audit.prototype._setDefaultLocale = function() {\n if (this._defaultLocale) {\n return;\n }\n var locale = {\n checks: {},\n rules: {}\n };\n var checkIDs = Object.keys(this.data.checks);\n for (var i = 0; i < checkIDs.length; i++) {\n var id = checkIDs[i];\n var check = this.data.checks[id];\n var _check$messages = check.messages, pass = _check$messages.pass, fail = _check$messages.fail, incomplete = _check$messages.incomplete;\n locale.checks[id] = {\n pass: pass,\n fail: fail,\n incomplete: incomplete\n };\n }\n var ruleIDs = Object.keys(this.data.rules);\n for (var _i = 0; _i < ruleIDs.length; _i++) {\n var _id = ruleIDs[_i];\n var rule = this.data.rules[_id];\n var description = rule.description, help = rule.help;\n locale.rules[_id] = {\n description: description,\n help: help\n };\n }\n this._defaultLocale = locale;\n };\n Audit.prototype._resetLocale = function() {\n var defaultLocale = this._defaultLocale;\n if (!defaultLocale) {\n return;\n }\n this.applyLocale(defaultLocale);\n };\n var mergeCheckLocale = function mergeCheckLocale(a, b) {\n var pass = b.pass, fail = b.fail;\n if (typeof pass === 'string') {\n pass = axe.imports.doT.compile(pass);\n }\n if (typeof fail === 'string') {\n fail = axe.imports.doT.compile(fail);\n }\n return _extends({}, a, {\n messages: {\n pass: pass || a.messages.pass,\n fail: fail || a.messages.fail,\n incomplete: _typeof(a.messages.incomplete) === 'object' ? _extends({}, a.messages.incomplete, b.incomplete) : b.incomplete\n }\n });\n };\n var mergeRuleLocale = function mergeRuleLocale(a, b) {\n var help = b.help, description = b.description;\n if (typeof help === 'string') {\n help = axe.imports.doT.compile(help);\n }\n if (typeof description === 'string') {\n description = axe.imports.doT.compile(description);\n }\n return _extends({}, a, {\n help: help || a.help,\n description: description || a.description\n });\n };\n Audit.prototype._applyCheckLocale = function(checks) {\n var keys = Object.keys(checks);\n for (var i = 0; i < keys.length; i++) {\n var id = keys[i];\n if (!this.data.checks[id]) {\n throw new Error('Locale provided for unknown check: \"' + id + '\"');\n }\n this.data.checks[id] = mergeCheckLocale(this.data.checks[id], checks[id]);\n }\n };\n Audit.prototype._applyRuleLocale = function(rules) {\n var keys = Object.keys(rules);\n for (var i = 0; i < keys.length; i++) {\n var id = keys[i];\n if (!this.data.rules[id]) {\n throw new Error('Locale provided for unknown rule: \"' + id + '\"');\n }\n this.data.rules[id] = mergeRuleLocale(this.data.rules[id], rules[id]);\n }\n };\n Audit.prototype.applyLocale = function(locale) {\n this._setDefaultLocale();\n if (locale.checks) {\n this._applyCheckLocale(locale.checks);\n }\n if (locale.rules) {\n this._applyRuleLocale(locale.rules);\n }\n };\n Audit.prototype._init = function() {\n var audit = getDefaultConfiguration(this.defaultConfig);\n axe.commons = commons = audit.commons;\n this.reporter = audit.reporter;\n this.commands = {};\n this.rules = [];\n this.checks = {};\n unpackToObject(audit.rules, this, 'addRule');\n unpackToObject(audit.checks, this, 'addCheck');\n this.data = {};\n this.data.checks = audit.data && audit.data.checks || {};\n this.data.rules = audit.data && audit.data.rules || {};\n this.data.failureSummaries = audit.data && audit.data.failureSummaries || {};\n this.data.incompleteFallbackMessage = audit.data && audit.data.incompleteFallbackMessage || '';\n this._constructHelpUrls();\n };\n Audit.prototype.registerCommand = function(command) {\n 'use strict';\n this.commands[command.id] = command.callback;\n };\n Audit.prototype.addRule = function(spec) {\n 'use strict';\n if (spec.metadata) {\n this.data.rules[spec.id] = spec.metadata;\n }\n var rule = this.getRule(spec.id);\n if (rule) {\n rule.configure(spec);\n } else {\n this.rules.push(new Rule(spec, this));\n }\n };\n Audit.prototype.addCheck = function(spec) {\n 'use strict';\n var metadata = spec.metadata;\n if ((typeof metadata === 'undefined' ? 'undefined' : _typeof(metadata)) === 'object') {\n this.data.checks[spec.id] = metadata;\n if (_typeof(metadata.messages) === 'object') {\n Object.keys(metadata.messages).filter(function(prop) {\n return metadata.messages.hasOwnProperty(prop) && typeof metadata.messages[prop] === 'string';\n }).forEach(function(prop) {\n if (metadata.messages[prop].indexOf('function') === 0) {\n metadata.messages[prop] = new Function('return ' + metadata.messages[prop] + ';')();\n }\n });\n }\n }\n if (this.checks[spec.id]) {\n this.checks[spec.id].configure(spec);\n } else {\n this.checks[spec.id] = new Check(spec);\n }\n };\n function getRulesToRun(rules, context, options) {\n var base = {\n now: [],\n later: []\n };\n var splitRules = rules.reduce(function(out, rule) {\n if (!axe.utils.ruleShouldRun(rule, context, options)) {\n return out;\n }\n if (rule.preload) {\n out.later.push(rule);\n return out;\n }\n out.now.push(rule);\n return out;\n }, base);\n return splitRules;\n }\n function getDefferedRule(rule, context, options) {\n if (options.performanceTimer) {\n axe.utils.performanceTimer.mark('mark_rule_start_' + rule.id);\n }\n return function(resolve, reject) {\n rule.run(context, options, function(ruleResult) {\n resolve(ruleResult);\n }, function(err) {\n if (!options.debug) {\n var errResult = Object.assign(new RuleResult(rule), {\n result: axe.constants.CANTTELL,\n description: 'An error occured while running this rule',\n message: err.message,\n stack: err.stack,\n error: err,\n errorNode: err.errorNode\n });\n resolve(errResult);\n } else {\n reject(err);\n }\n });\n };\n }\n Audit.prototype.run = function(context, options, resolve, reject) {\n 'use strict';\n this.normalizeOptions(options);\n axe._selectCache = [];\n var allRulesToRun = getRulesToRun(this.rules, context, options);\n var runNowRules = allRulesToRun.now;\n var runLaterRules = allRulesToRun.later;\n var nowRulesQueue = axe.utils.queue();\n runNowRules.forEach(function(rule) {\n nowRulesQueue.defer(getDefferedRule(rule, context, options));\n });\n var preloaderQueue = axe.utils.queue();\n if (runLaterRules.length) {\n preloaderQueue.defer(function(res, rej) {\n axe.utils.preload(options).then(function(preloadResults) {\n var assets = preloadResults[0];\n res(assets);\n }).catch(function(err) {\n console.warn('Couldn\\'t load preload assets: ', err);\n var assets = undefined;\n res(assets);\n });\n });\n }\n var queueForNowRulesAndPreloader = axe.utils.queue();\n queueForNowRulesAndPreloader.defer(nowRulesQueue);\n queueForNowRulesAndPreloader.defer(preloaderQueue);\n queueForNowRulesAndPreloader.then(function(nowRulesAndPreloaderResults) {\n var assetsFromQueue = nowRulesAndPreloaderResults.pop();\n if (assetsFromQueue && assetsFromQueue.length) {\n var assets = assetsFromQueue[0];\n if (assets) {\n context = _extends({}, context, assets);\n }\n }\n var nowRulesResults = nowRulesAndPreloaderResults[0];\n if (!runLaterRules.length) {\n axe._selectCache = undefined;\n resolve(nowRulesResults.filter(function(result) {\n return !!result;\n }));\n return;\n }\n var laterRulesQueue = axe.utils.queue();\n runLaterRules.forEach(function(rule) {\n var deferredRule = getDefferedRule(rule, context, options);\n laterRulesQueue.defer(deferredRule);\n });\n laterRulesQueue.then(function(laterRuleResults) {\n axe._selectCache = undefined;\n resolve(nowRulesResults.concat(laterRuleResults).filter(function(result) {\n return !!result;\n }));\n }).catch(reject);\n }).catch(reject);\n };\n Audit.prototype.after = function(results, options) {\n 'use strict';\n var rules = this.rules;\n return results.map(function(ruleResult) {\n var rule = axe.utils.findBy(rules, 'id', ruleResult.id);\n if (!rule) {\n throw new Error('Result for unknown rule. You may be running mismatch aXe-core versions');\n }\n return rule.after(ruleResult, options);\n });\n };\n Audit.prototype.getRule = function(ruleId) {\n return this.rules.find(function(rule) {\n return rule.id === ruleId;\n });\n };\n Audit.prototype.normalizeOptions = function(options) {\n 'use strict';\n var audit = this;\n if (_typeof(options.runOnly) === 'object') {\n if (Array.isArray(options.runOnly)) {\n options.runOnly = {\n type: 'tag',\n values: options.runOnly\n };\n }\n var only = options.runOnly;\n if (only.value && !only.values) {\n only.values = only.value;\n delete only.value;\n }\n if (!Array.isArray(only.values) || only.values.length === 0) {\n throw new Error('runOnly.values must be a non-empty array');\n }\n if ([ 'rule', 'rules' ].includes(only.type)) {\n only.type = 'rule';\n only.values.forEach(function(ruleId) {\n if (!audit.getRule(ruleId)) {\n throw new Error('unknown rule `' + ruleId + '` in options.runOnly');\n }\n });\n } else if ([ 'tag', 'tags', undefined ].includes(only.type)) {\n only.type = 'tag';\n var unmatchedTags = audit.rules.reduce(function(unmatchedTags, rule) {\n return unmatchedTags.length ? unmatchedTags.filter(function(tag) {\n return !rule.tags.includes(tag);\n }) : unmatchedTags;\n }, only.values);\n if (unmatchedTags.length !== 0) {\n axe.log('Could not find tags `' + unmatchedTags.join('`, `') + '`');\n }\n } else {\n throw new Error('Unknown runOnly type \\'' + only.type + '\\'');\n }\n }\n if (_typeof(options.rules) === 'object') {\n Object.keys(options.rules).forEach(function(ruleId) {\n if (!audit.getRule(ruleId)) {\n throw new Error('unknown rule `' + ruleId + '` in options.rules');\n }\n });\n }\n return options;\n };\n Audit.prototype.setBranding = function(branding) {\n 'use strict';\n var previous = {\n brand: this.brand,\n application: this.application\n };\n if (branding && branding.hasOwnProperty('brand') && branding.brand && typeof branding.brand === 'string') {\n this.brand = branding.brand;\n }\n if (branding && branding.hasOwnProperty('application') && branding.application && typeof branding.application === 'string') {\n this.application = branding.application;\n }\n this._constructHelpUrls(previous);\n };\n function getHelpUrl(_ref, ruleId, version) {\n var brand = _ref.brand, application = _ref.application;\n return axe.constants.helpUrlBase + brand + '/' + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + '/' + ruleId + '?application=' + application;\n }\n Audit.prototype._constructHelpUrls = function() {\n var _this = this;\n var previous = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var version = (axe.version.match(/^[1-9][0-9]*\\.[0-9]+/) || [ 'x.y' ])[0];\n this.rules.forEach(function(rule) {\n if (!_this.data.rules[rule.id]) {\n _this.data.rules[rule.id] = {};\n }\n var metaData = _this.data.rules[rule.id];\n if (typeof metaData.helpUrl !== 'string' || previous && metaData.helpUrl === getHelpUrl(previous, rule.id, version)) {\n metaData.helpUrl = getHelpUrl(_this, rule.id, version);\n }\n });\n };\n Audit.prototype.resetRulesAndChecks = function() {\n 'use strict';\n this._init();\n this._resetLocale();\n };\n 'use strict';\n function CheckResult(check) {\n 'use strict';\n this.id = check.id;\n this.data = null;\n this.relatedNodes = [];\n this.result = null;\n }\n 'use strict';\n function createExecutionContext(spec) {\n 'use strict';\n if (typeof spec === 'string') {\n return new Function('return ' + spec + ';')();\n }\n return spec;\n }\n function Check(spec) {\n if (spec) {\n this.id = spec.id;\n this.configure(spec);\n }\n }\n Check.prototype.enabled = true;\n Check.prototype.run = function(node, options, context, resolve, reject) {\n 'use strict';\n options = options || {};\n var enabled = options.hasOwnProperty('enabled') ? options.enabled : this.enabled, checkOptions = options.options || this.options;\n if (enabled) {\n var checkResult = new CheckResult(this);\n var checkHelper = axe.utils.checkHelper(checkResult, options, resolve, reject);\n var result;\n try {\n result = this.evaluate.call(checkHelper, node.actualNode, checkOptions, node, context);\n } catch (e) {\n if (node && node.actualNode) {\n e.errorNode = new DqElement(node.actualNode).toJSON();\n }\n reject(e);\n return;\n }\n if (!checkHelper.isAsync) {\n checkResult.result = result;\n resolve(checkResult);\n }\n } else {\n resolve(null);\n }\n };\n Check.prototype.configure = function(spec) {\n var _this = this;\n [ 'options', 'enabled' ].filter(function(prop) {\n return spec.hasOwnProperty(prop);\n }).forEach(function(prop) {\n return _this[prop] = spec[prop];\n });\n [ 'evaluate', 'after' ].filter(function(prop) {\n return spec.hasOwnProperty(prop);\n }).forEach(function(prop) {\n return _this[prop] = createExecutionContext(spec[prop]);\n });\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function pushUniqueFrame(collection, frame) {\n 'use strict';\n if (axe.utils.isHidden(frame)) {\n return;\n }\n var fr = axe.utils.findBy(collection, 'node', frame);\n if (!fr) {\n collection.push({\n node: frame,\n include: [],\n exclude: []\n });\n }\n }\n function pushUniqueFrameSelector(context, type, selectorArray) {\n 'use strict';\n context.frames = context.frames || [];\n var result, frame;\n var frames = document.querySelectorAll(selectorArray.shift());\n frameloop: for (var i = 0, l = frames.length; i < l; i++) {\n frame = frames[i];\n for (var j = 0, l2 = context.frames.length; j < l2; j++) {\n if (context.frames[j].node === frame) {\n context.frames[j][type].push(selectorArray);\n break frameloop;\n }\n }\n result = {\n node: frame,\n include: [],\n exclude: []\n };\n if (selectorArray) {\n result[type].push(selectorArray);\n }\n context.frames.push(result);\n }\n }\n function normalizeContext(context) {\n 'use strict';\n if (context && (typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object' || context instanceof NodeList) {\n if (context instanceof Node) {\n return {\n include: [ context ],\n exclude: []\n };\n }\n if (context.hasOwnProperty('include') || context.hasOwnProperty('exclude')) {\n return {\n include: context.include && +context.include.length ? context.include : [ document ],\n exclude: context.exclude || []\n };\n }\n if (context.length === +context.length) {\n return {\n include: context,\n exclude: []\n };\n }\n }\n if (typeof context === 'string') {\n return {\n include: [ context ],\n exclude: []\n };\n }\n return {\n include: [ document ],\n exclude: []\n };\n }\n function parseSelectorArray(context, type) {\n 'use strict';\n var item, result = [], nodeList;\n for (var i = 0, l = context[type].length; i < l; i++) {\n item = context[type][i];\n if (typeof item === 'string') {\n nodeList = Array.from(document.querySelectorAll(item));\n result = result.concat(nodeList.map(function(node) {\n return axe.utils.getNodeFromTree(context.flatTree[0], node);\n }));\n break;\n } else if (item && item.length && !(item instanceof Node)) {\n if (item.length > 1) {\n pushUniqueFrameSelector(context, type, item);\n } else {\n nodeList = Array.from(document.querySelectorAll(item[0]));\n result = result.concat(nodeList.map(function(node) {\n return axe.utils.getNodeFromTree(context.flatTree[0], node);\n }));\n }\n } else if (item instanceof Node) {\n if (item.documentElement instanceof Node) {\n result.push(context.flatTree[0]);\n } else {\n result.push(axe.utils.getNodeFromTree(context.flatTree[0], item));\n }\n }\n }\n return result.filter(function(r) {\n return r;\n });\n }\n function validateContext(context) {\n 'use strict';\n if (context.include.length === 0) {\n if (context.frames.length === 0) {\n var env = axe.utils.respondable.isInFrame() ? 'frame' : 'page';\n return new Error('No elements found for include in ' + env + ' Context');\n }\n context.frames.forEach(function(frame, i) {\n if (frame.include.length === 0) {\n return new Error('No elements found for include in Context of frame ' + i);\n }\n });\n }\n }\n function getRootNode(_ref) {\n var include = _ref.include, exclude = _ref.exclude;\n var selectors = Array.from(include).concat(Array.from(exclude));\n var localDocument = selectors.reduce(function(result, item) {\n if (result) {\n return result;\n } else if (item instanceof Element) {\n return item.ownerDocument;\n } else if (item instanceof Document) {\n return item;\n }\n }, null);\n return (localDocument || document).documentElement;\n }\n function Context(spec) {\n 'use strict';\n var _this = this;\n this.frames = [];\n this.initiator = spec && typeof spec.initiator === 'boolean' ? spec.initiator : true;\n this.page = false;\n spec = normalizeContext(spec);\n this.flatTree = axe.utils.getFlattenedTree(getRootNode(spec));\n this.exclude = spec.exclude;\n this.include = spec.include;\n this.include = parseSelectorArray(this, 'include');\n this.exclude = parseSelectorArray(this, 'exclude');\n axe.utils.select('frame, iframe', this).forEach(function(frame) {\n if (isNodeInContext(frame, _this)) {\n pushUniqueFrame(_this.frames, frame.actualNode);\n }\n });\n if (this.include.length === 1 && this.include[0].actualNode === document.documentElement) {\n this.page = true;\n }\n var err = validateContext(this);\n if (err instanceof Error) {\n throw err;\n }\n if (!Array.isArray(this.include)) {\n this.include = Array.from(this.include);\n }\n this.include.sort(axe.utils.nodeSorter);\n }\n 'use strict';\n function RuleResult(rule) {\n 'use strict';\n this.id = rule.id;\n this.result = axe.constants.NA;\n this.pageLevel = rule.pageLevel;\n this.impact = null;\n this.nodes = [];\n }\n 'use strict';\n function Rule(spec, parentAudit) {\n 'use strict';\n this._audit = parentAudit;\n this.id = spec.id;\n this.selector = spec.selector || '*';\n this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;\n this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;\n this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;\n this.any = spec.any || [];\n this.all = spec.all || [];\n this.none = spec.none || [];\n this.tags = spec.tags || [];\n this.preload = spec.preload ? true : false;\n if (spec.matches) {\n this.matches = createExecutionContext(spec.matches);\n }\n }\n Rule.prototype.matches = function() {\n 'use strict';\n return true;\n };\n Rule.prototype.gather = function(context) {\n 'use strict';\n var elements = axe.utils.select(this.selector, context);\n if (this.excludeHidden) {\n return elements.filter(function(element) {\n return !axe.utils.isHidden(element.actualNode);\n });\n }\n return elements;\n };\n Rule.prototype.runChecks = function(type, node, options, context, resolve, reject) {\n 'use strict';\n var self = this;\n var checkQueue = axe.utils.queue();\n this[type].forEach(function(c) {\n var check = self._audit.checks[c.id || c];\n var option = axe.utils.getCheckOption(check, self.id, options);\n checkQueue.defer(function(res, rej) {\n check.run(node, option, context, res, rej);\n });\n });\n checkQueue.then(function(results) {\n results = results.filter(function(check) {\n return check;\n });\n resolve({\n type: type,\n results: results\n });\n }).catch(reject);\n };\n Rule.prototype.run = function(context, options, resolve, reject) {\n var _this = this;\n var q = axe.utils.queue();\n var ruleResult = new RuleResult(this);\n var markStart = 'mark_rule_start_' + this.id;\n var markEnd = 'mark_rule_end_' + this.id;\n var markChecksStart = 'mark_runchecks_start_' + this.id;\n var markChecksEnd = 'mark_runchecks_end_' + this.id;\n var nodes = void 0;\n try {\n nodes = this.gather(context).filter(function(node) {\n return _this.matches(node.actualNode, node, context);\n });\n } catch (error) {\n reject(new SupportError({\n cause: error,\n ruleId: this.id\n }));\n return;\n }\n if (options.performanceTimer) {\n axe.log('gather (', nodes.length, '):', axe.utils.performanceTimer.timeElapsed() + 'ms');\n axe.utils.performanceTimer.mark(markChecksStart);\n }\n nodes.forEach(function(node) {\n q.defer(function(resolveNode, rejectNode) {\n var checkQueue = axe.utils.queue();\n [ 'any', 'all', 'none' ].forEach(function(type) {\n checkQueue.defer(function(res, rej) {\n _this.runChecks(type, node, options, context, res, rej);\n });\n });\n checkQueue.then(function(results) {\n if (results.length) {\n var hasResults = false, result = {};\n results.forEach(function(r) {\n var res = r.results.filter(function(result) {\n return result;\n });\n result[r.type] = res;\n if (res.length) {\n hasResults = true;\n }\n });\n if (hasResults) {\n result.node = new axe.utils.DqElement(node.actualNode, options);\n ruleResult.nodes.push(result);\n }\n }\n resolveNode();\n }).catch(function(err) {\n return rejectNode(err);\n });\n });\n });\n q.defer(function(resolve) {\n return setTimeout(resolve, 0);\n });\n if (options.performanceTimer) {\n axe.utils.performanceTimer.mark(markChecksEnd);\n axe.utils.performanceTimer.mark(markEnd);\n axe.utils.performanceTimer.measure('runchecks_' + this.id, markChecksStart, markChecksEnd);\n axe.utils.performanceTimer.measure('rule_' + this.id, markStart, markEnd);\n }\n q.then(function() {\n return resolve(ruleResult);\n }).catch(function(error) {\n return reject(error);\n });\n };\n function findAfterChecks(rule) {\n 'use strict';\n return axe.utils.getAllChecks(rule).map(function(c) {\n var check = rule._audit.checks[c.id || c];\n return check && typeof check.after === 'function' ? check : null;\n }).filter(Boolean);\n }\n function findCheckResults(nodes, checkID) {\n 'use strict';\n var checkResults = [];\n nodes.forEach(function(nodeResult) {\n var checks = axe.utils.getAllChecks(nodeResult);\n checks.forEach(function(checkResult) {\n if (checkResult.id === checkID) {\n checkResults.push(checkResult);\n }\n });\n });\n return checkResults;\n }\n function filterChecks(checks) {\n 'use strict';\n return checks.filter(function(check) {\n return check.filtered !== true;\n });\n }\n function sanitizeNodes(result) {\n 'use strict';\n var checkTypes = [ 'any', 'all', 'none' ];\n var nodes = result.nodes.filter(function(detail) {\n var length = 0;\n checkTypes.forEach(function(type) {\n detail[type] = filterChecks(detail[type]);\n length += detail[type].length;\n });\n return length > 0;\n });\n if (result.pageLevel && nodes.length) {\n nodes = [ nodes.reduce(function(a, b) {\n if (a) {\n checkTypes.forEach(function(type) {\n a[type].push.apply(a[type], b[type]);\n });\n return a;\n }\n }) ];\n }\n return nodes;\n }\n Rule.prototype.after = function(result, options) {\n 'use strict';\n var afterChecks = findAfterChecks(this);\n var ruleID = this.id;\n afterChecks.forEach(function(check) {\n var beforeResults = findCheckResults(result.nodes, check.id);\n var option = axe.utils.getCheckOption(check, ruleID, options);\n var afterResults = check.after(beforeResults, option);\n beforeResults.forEach(function(item) {\n if (afterResults.indexOf(item) === -1) {\n item.filtered = true;\n }\n });\n });\n result.nodes = sanitizeNodes(result);\n return result;\n };\n Rule.prototype.configure = function(spec) {\n 'use strict';\n if (spec.hasOwnProperty('selector')) {\n this.selector = spec.selector;\n }\n if (spec.hasOwnProperty('excludeHidden')) {\n this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;\n }\n if (spec.hasOwnProperty('enabled')) {\n this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;\n }\n if (spec.hasOwnProperty('pageLevel')) {\n this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;\n }\n if (spec.hasOwnProperty('any')) {\n this.any = spec.any;\n }\n if (spec.hasOwnProperty('all')) {\n this.all = spec.all;\n }\n if (spec.hasOwnProperty('none')) {\n this.none = spec.none;\n }\n if (spec.hasOwnProperty('tags')) {\n this.tags = spec.tags;\n }\n if (spec.hasOwnProperty('matches')) {\n if (typeof spec.matches === 'string') {\n this.matches = new Function('return ' + spec.matches + ';')();\n } else {\n this.matches = spec.matches;\n }\n }\n };\n 'use strict';\n (function(axe) {\n var definitions = [ {\n name: 'NA',\n value: 'inapplicable',\n priority: 0,\n group: 'inapplicable'\n }, {\n name: 'PASS',\n value: 'passed',\n priority: 1,\n group: 'passes'\n }, {\n name: 'CANTTELL',\n value: 'cantTell',\n priority: 2,\n group: 'incomplete'\n }, {\n name: 'FAIL',\n value: 'failed',\n priority: 3,\n group: 'violations'\n } ];\n var constants = {\n helpUrlBase: 'https://dequeuniversity.com/rules/',\n results: [],\n resultGroups: [],\n resultGroupMap: {},\n impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ]),\n preloadAssets: Object.freeze([ 'cssom' ]),\n preloadAssetsTimeout: 1e4\n };\n definitions.forEach(function(definition) {\n var name = definition.name;\n var value = definition.value;\n var priority = definition.priority;\n var group = definition.group;\n constants[name] = value;\n constants[name + '_PRIO'] = priority;\n constants[name + '_GROUP'] = group;\n constants.results[priority] = value;\n constants.resultGroups[priority] = group;\n constants.resultGroupMap[value] = group;\n });\n Object.freeze(constants.results);\n Object.freeze(constants.resultGroups);\n Object.freeze(constants.resultGroupMap);\n Object.freeze(constants);\n Object.defineProperty(axe, 'constants', {\n value: constants,\n enumerable: true,\n configurable: false,\n writable: false\n });\n })(axe);\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n axe.log = function() {\n 'use strict';\n if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log) {\n Function.prototype.apply.call(console.log, console, arguments);\n }\n };\n 'use strict';\n function cleanupPlugins(resolve, reject) {\n 'use strict';\n resolve = resolve || function() {};\n reject = reject || axe.log;\n if (!axe._audit) {\n throw new Error('No audit configured');\n }\n var q = axe.utils.queue();\n var cleanupErrors = [];\n Object.keys(axe.plugins).forEach(function(key) {\n q.defer(function(res) {\n var rej = function rej(err) {\n cleanupErrors.push(err);\n res();\n };\n try {\n axe.plugins[key].cleanup(res, rej);\n } catch (err) {\n rej(err);\n }\n });\n });\n var flattenedTree = axe.utils.getFlattenedTree(document.body);\n axe.utils.querySelectorAll(flattenedTree, 'iframe, frame').forEach(function(node) {\n q.defer(function(res, rej) {\n return axe.utils.sendCommandToFrame(node.actualNode, {\n command: 'cleanup-plugin'\n }, res, rej);\n });\n });\n q.then(function(results) {\n if (cleanupErrors.length === 0) {\n resolve(results);\n } else {\n reject(cleanupErrors);\n }\n }).catch(reject);\n }\n axe.cleanup = cleanupPlugins;\n 'use strict';\n function configureChecksRulesAndBranding(spec) {\n 'use strict';\n var audit;\n audit = axe._audit;\n if (!audit) {\n throw new Error('No audit configured');\n }\n if (spec.reporter && (typeof spec.reporter === 'function' || reporters[spec.reporter])) {\n audit.reporter = spec.reporter;\n }\n if (spec.checks) {\n spec.checks.forEach(function(check) {\n audit.addCheck(check);\n });\n }\n var modifiedRules = [];\n if (spec.rules) {\n spec.rules.forEach(function(rule) {\n modifiedRules.push(rule.id);\n audit.addRule(rule);\n });\n }\n if (spec.disableOtherRules) {\n audit.rules.forEach(function(rule) {\n if (modifiedRules.includes(rule.id) === false) {\n rule.enabled = false;\n }\n });\n }\n if (typeof spec.branding !== 'undefined') {\n audit.setBranding(spec.branding);\n } else {\n audit._constructHelpUrls();\n }\n if (spec.tagExclude) {\n audit.tagExclude = spec.tagExclude;\n }\n if (spec.locale) {\n audit.applyLocale(spec.locale);\n }\n }\n axe.configure = configureChecksRulesAndBranding;\n 'use strict';\n axe.getRules = function(tags) {\n 'use strict';\n tags = tags || [];\n var matchingRules = !tags.length ? axe._audit.rules : axe._audit.rules.filter(function(item) {\n return !!tags.filter(function(tag) {\n return item.tags.indexOf(tag) !== -1;\n }).length;\n });\n var ruleData = axe._audit.data.rules || {};\n return matchingRules.map(function(matchingRule) {\n var rd = ruleData[matchingRule.id] || {};\n return {\n ruleId: matchingRule.id,\n description: rd.description,\n help: rd.help,\n helpUrl: rd.helpUrl,\n tags: matchingRule.tags\n };\n });\n };\n 'use strict';\n function runCommand(data, keepalive, callback) {\n 'use strict';\n var resolve = callback;\n var reject = function reject(err) {\n if (err instanceof Error === false) {\n err = new Error(err);\n }\n callback(err);\n };\n var context = data && data.context || {};\n if (context.hasOwnProperty('include') && !context.include.length) {\n context.include = [ document ];\n }\n var options = data && data.options || {};\n switch (data.command) {\n case 'rules':\n return runRules(context, options, function(results, cleanup) {\n resolve(results);\n cleanup();\n }, reject);\n\n case 'cleanup-plugin':\n return cleanupPlugins(resolve, reject);\n\n default:\n if (axe._audit && axe._audit.commands && axe._audit.commands[data.command]) {\n return axe._audit.commands[data.command](data, callback);\n }\n }\n }\n axe._load = function(audit) {\n 'use strict';\n axe.utils.respondable.subscribe('axe.ping', function(data, keepalive, respond) {\n respond({\n axe: true\n });\n });\n axe.utils.respondable.subscribe('axe.start', runCommand);\n axe._audit = new Audit(audit);\n };\n 'use strict';\n var axe = axe || {};\n axe.plugins = {};\n function Plugin(spec) {\n 'use strict';\n this._run = spec.run;\n this._collect = spec.collect;\n this._registry = {};\n spec.commands.forEach(function(command) {\n axe._audit.registerCommand(command);\n });\n }\n Plugin.prototype.run = function() {\n 'use strict';\n return this._run.apply(this, arguments);\n };\n Plugin.prototype.collect = function() {\n 'use strict';\n return this._collect.apply(this, arguments);\n };\n Plugin.prototype.cleanup = function(done) {\n 'use strict';\n var q = axe.utils.queue();\n var that = this;\n Object.keys(this._registry).forEach(function(key) {\n q.defer(function(done) {\n that._registry[key].cleanup(done);\n });\n });\n q.then(function() {\n done();\n });\n };\n Plugin.prototype.add = function(impl) {\n 'use strict';\n this._registry[impl.id] = impl;\n };\n axe.registerPlugin = function(plugin) {\n 'use strict';\n axe.plugins[plugin.id] = new Plugin(plugin);\n };\n 'use strict';\n var reporters = {};\n var defaultReporter;\n axe.getReporter = function(reporter) {\n 'use strict';\n if (typeof reporter === 'string' && reporters[reporter]) {\n return reporters[reporter];\n }\n if (typeof reporter === 'function') {\n return reporter;\n }\n return defaultReporter;\n };\n axe.addReporter = function registerReporter(name, cb, isDefault) {\n 'use strict';\n reporters[name] = cb;\n if (isDefault) {\n defaultReporter = cb;\n }\n };\n 'use strict';\n function resetConfiguration() {\n 'use strict';\n var audit = axe._audit;\n if (!audit) {\n throw new Error('No audit configured');\n }\n audit.resetRulesAndChecks();\n }\n axe.reset = resetConfiguration;\n 'use strict';\n function cleanup() {\n axe._tree = undefined;\n axe._selectorData = undefined;\n }\n function runRules(context, options, resolve, reject) {\n 'use strict';\n try {\n context = new Context(context);\n axe._tree = context.flatTree;\n axe._selectorData = axe.utils.getSelectorData(context.flatTree);\n } catch (e) {\n cleanup();\n return reject(e);\n }\n var q = axe.utils.queue();\n var audit = axe._audit;\n if (options.performanceTimer) {\n axe.utils.performanceTimer.auditStart();\n }\n if (context.frames.length && options.iframes !== false) {\n q.defer(function(res, rej) {\n axe.utils.collectResultsFromFrames(context, options, 'rules', null, res, rej);\n });\n }\n var scrollState = void 0;\n q.defer(function(res, rej) {\n if (options.restoreScroll) {\n scrollState = axe.utils.getScrollState();\n }\n audit.run(context, options, res, rej);\n });\n q.then(function(data) {\n try {\n if (scrollState) {\n axe.utils.setScrollState(scrollState);\n }\n if (options.performanceTimer) {\n axe.utils.performanceTimer.auditEnd();\n }\n var results = axe.utils.mergeResults(data.map(function(results) {\n return {\n results: results\n };\n }));\n if (context.initiator) {\n results = audit.after(results, options);\n results.forEach(axe.utils.publishMetaData);\n results = results.map(axe.utils.finalizeRuleResult);\n }\n try {\n resolve(results, cleanup);\n } catch (e) {\n cleanup();\n axe.log(e);\n }\n } catch (e) {\n cleanup();\n reject(e);\n }\n }).catch(function(e) {\n cleanup();\n reject(e);\n });\n }\n axe._runRules = runRules;\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function isContext(potential) {\n 'use strict';\n switch (true) {\n case typeof potential === 'string':\n case Array.isArray(potential):\n case Node && potential instanceof Node:\n case NodeList && potential instanceof NodeList:\n return true;\n\n case (typeof potential === 'undefined' ? 'undefined' : _typeof(potential)) !== 'object':\n return false;\n\n case potential.include !== undefined:\n case potential.exclude !== undefined:\n case typeof potential.length === 'number':\n return true;\n\n default:\n return false;\n }\n }\n var noop = function noop() {};\n function normalizeRunParams(context, options, callback) {\n 'use strict';\n var typeErr = new TypeError('axe.run arguments are invalid');\n if (!isContext(context)) {\n if (callback !== undefined) {\n throw typeErr;\n }\n callback = options;\n options = context;\n context = document;\n }\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {\n if (callback !== undefined) {\n throw typeErr;\n }\n callback = options;\n options = {};\n }\n if (typeof callback !== 'function' && callback !== undefined) {\n throw typeErr;\n }\n return {\n context: context,\n options: options,\n callback: callback || noop\n };\n }\n axe.run = function(context, options, callback) {\n 'use strict';\n if (!axe._audit) {\n throw new Error('No audit configured');\n }\n var args = normalizeRunParams(context, options, callback);\n context = args.context;\n options = args.options;\n callback = args.callback;\n options.reporter = options.reporter || axe._audit.reporter || 'v1';\n if (options.performanceTimer) {\n axe.utils.performanceTimer.start();\n }\n var p = void 0;\n var reject = noop;\n var resolve = noop;\n if (typeof Promise === 'function' && callback === noop) {\n p = new Promise(function(_resolve, _reject) {\n reject = _reject;\n resolve = _resolve;\n });\n }\n axe._runRules(context, options, function(rawResults, cleanup) {\n var respond = function respond(results) {\n cleanup();\n try {\n callback(null, results);\n } catch (e) {\n axe.log(e);\n }\n resolve(results);\n };\n if (options.performanceTimer) {\n axe.utils.performanceTimer.end();\n }\n try {\n var reporter = axe.getReporter(options.reporter);\n var results = reporter(rawResults, options, respond);\n if (results !== undefined) {\n respond(results);\n }\n } catch (err) {\n cleanup();\n callback(err);\n reject(err);\n }\n }, function(err) {\n callback(err);\n reject(err);\n });\n return p;\n };\n 'use strict';\n helpers.failureSummary = function failureSummary(nodeData) {\n 'use strict';\n var failingChecks = {};\n failingChecks.none = nodeData.none.concat(nodeData.all);\n failingChecks.any = nodeData.any;\n return Object.keys(failingChecks).map(function(key) {\n if (!failingChecks[key].length) {\n return;\n }\n var sum = axe._audit.data.failureSummaries[key];\n if (sum && typeof sum.failureMessage === 'function') {\n return sum.failureMessage(failingChecks[key].map(function(check) {\n return check.message || '';\n }));\n }\n }).filter(function(i) {\n return i !== undefined;\n }).join('\\n\\n');\n };\n 'use strict';\n helpers.getEnvironmentData = function getEnvironmentData() {\n var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n var _win$screen = win.screen, screen = _win$screen === undefined ? {} : _win$screen, _win$navigator = win.navigator, navigator = _win$navigator === undefined ? {} : _win$navigator, _win$location = win.location, location = _win$location === undefined ? {} : _win$location, innerHeight = win.innerHeight, innerWidth = win.innerWidth;\n var orientation = screen.msOrientation || screen.orientation || screen.mozOrientation || {};\n return {\n testEngine: {\n name: 'axe-core',\n version: axe.version\n },\n testRunner: {\n name: axe._audit.brand\n },\n testEnvironment: {\n userAgent: navigator.userAgent,\n windowWidth: innerWidth,\n windowHeight: innerHeight,\n orientationAngle: orientation.angle,\n orientationType: orientation.type\n },\n timestamp: new Date().toISOString(),\n url: location.href\n };\n };\n 'use strict';\n helpers.incompleteFallbackMessage = function incompleteFallbackMessage() {\n 'use strict';\n return axe._audit.data.incompleteFallbackMessage();\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function normalizeRelatedNodes(node, options) {\n 'use strict';\n [ 'any', 'all', 'none' ].forEach(function(type) {\n if (!Array.isArray(node[type])) {\n return;\n }\n node[type].filter(function(checkRes) {\n return Array.isArray(checkRes.relatedNodes);\n }).forEach(function(checkRes) {\n checkRes.relatedNodes = checkRes.relatedNodes.map(function(relatedNode) {\n var res = {\n html: relatedNode.source\n };\n if (options.elementRef && !relatedNode.fromFrame) {\n res.element = relatedNode.element;\n }\n if (options.selectors !== false || relatedNode.fromFrame) {\n res.target = relatedNode.selector;\n }\n if (options.xpath) {\n res.xpath = relatedNode.xpath;\n }\n return res;\n });\n });\n });\n }\n var resultKeys = axe.constants.resultGroups;\n helpers.processAggregate = function(results, options) {\n var resultObject = axe.utils.aggregateResult(results);\n resultKeys.forEach(function(key) {\n if (options.resultTypes && !options.resultTypes.includes(key)) {\n (resultObject[key] || []).forEach(function(ruleResult) {\n if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {\n ruleResult.nodes = [ ruleResult.nodes[0] ];\n }\n });\n }\n resultObject[key] = (resultObject[key] || []).map(function(ruleResult) {\n ruleResult = Object.assign({}, ruleResult);\n if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {\n ruleResult.nodes = ruleResult.nodes.map(function(subResult) {\n if (_typeof(subResult.node) === 'object') {\n subResult.html = subResult.node.source;\n if (options.elementRef && !subResult.node.fromFrame) {\n subResult.element = subResult.node.element;\n }\n if (options.selectors !== false || subResult.node.fromFrame) {\n subResult.target = subResult.node.selector;\n }\n if (options.xpath) {\n subResult.xpath = subResult.node.xpath;\n }\n }\n delete subResult.result;\n delete subResult.node;\n normalizeRelatedNodes(subResult, options);\n return subResult;\n });\n }\n resultKeys.forEach(function(key) {\n return delete ruleResult[key];\n });\n delete ruleResult.pageLevel;\n delete ruleResult.result;\n return ruleResult;\n });\n });\n return resultObject;\n };\n 'use strict';\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n axe.addReporter('na', function(results, options, callback) {\n 'use strict';\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var out = helpers.processAggregate(results, options);\n callback(_extends({}, helpers.getEnvironmentData(), {\n toolOptions: options,\n violations: out.violations,\n passes: out.passes,\n incomplete: out.incomplete,\n inapplicable: out.inapplicable\n }));\n });\n 'use strict';\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n axe.addReporter('no-passes', function(results, options, callback) {\n 'use strict';\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options.resultTypes = [ 'violations' ];\n var out = helpers.processAggregate(results, options);\n callback(_extends({}, helpers.getEnvironmentData(), {\n toolOptions: options,\n violations: out.violations\n }));\n });\n 'use strict';\n axe.addReporter('raw', function(results, options, callback) {\n 'use strict';\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n callback(results);\n });\n 'use strict';\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n axe.addReporter('v1', function(results, options, callback) {\n 'use strict';\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var out = helpers.processAggregate(results, options);\n out.violations.forEach(function(result) {\n return result.nodes.forEach(function(nodeResult) {\n nodeResult.failureSummary = helpers.failureSummary(nodeResult);\n });\n });\n callback(_extends({}, helpers.getEnvironmentData(), {\n toolOptions: options,\n violations: out.violations,\n passes: out.passes,\n incomplete: out.incomplete,\n inapplicable: out.inapplicable\n }));\n });\n 'use strict';\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n axe.addReporter('v2', function(results, options, callback) {\n 'use strict';\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var out = helpers.processAggregate(results, options);\n callback(_extends({}, helpers.getEnvironmentData(), {\n toolOptions: options,\n violations: out.violations,\n passes: out.passes,\n incomplete: out.incomplete,\n inapplicable: out.inapplicable\n }));\n }, true);\n 'use strict';\n axe.utils.aggregate = function(map, values, initial) {\n values = values.slice();\n if (initial) {\n values.push(initial);\n }\n var sorting = values.map(function(val) {\n return map.indexOf(val);\n }).sort();\n return map[sorting.pop()];\n };\n 'use strict';\n var _axe$constants = axe.constants, CANTTELL_PRIO = _axe$constants.CANTTELL_PRIO, FAIL_PRIO = _axe$constants.FAIL_PRIO;\n var checkMap = [];\n checkMap[axe.constants.PASS_PRIO] = true;\n checkMap[axe.constants.CANTTELL_PRIO] = null;\n checkMap[axe.constants.FAIL_PRIO] = false;\n var checkTypes = [ 'any', 'all', 'none' ];\n function anyAllNone(obj, functor) {\n return checkTypes.reduce(function(out, type) {\n out[type] = (obj[type] || []).map(function(val) {\n return functor(val, type);\n });\n return out;\n }, {});\n }\n axe.utils.aggregateChecks = function(nodeResOriginal) {\n var nodeResult = Object.assign({}, nodeResOriginal);\n anyAllNone(nodeResult, function(check, type) {\n var i = typeof check.result === 'undefined' ? -1 : checkMap.indexOf(check.result);\n check.priority = i !== -1 ? i : axe.constants.CANTTELL_PRIO;\n if (type === 'none') {\n if (check.priority === axe.constants.PASS_PRIO) {\n check.priority = axe.constants.FAIL_PRIO;\n } else if (check.priority === axe.constants.FAIL_PRIO) {\n check.priority = axe.constants.PASS_PRIO;\n }\n }\n });\n var priorities = {\n all: nodeResult.all.reduce(function(a, b) {\n return Math.max(a, b.priority);\n }, 0),\n none: nodeResult.none.reduce(function(a, b) {\n return Math.max(a, b.priority);\n }, 0),\n any: nodeResult.any.reduce(function(a, b) {\n return Math.min(a, b.priority);\n }, 4) % 4\n };\n nodeResult.priority = Math.max(priorities.all, priorities.none, priorities.any);\n var impacts = [];\n checkTypes.forEach(function(type) {\n nodeResult[type] = nodeResult[type].filter(function(check) {\n return check.priority === nodeResult.priority && check.priority === priorities[type];\n });\n nodeResult[type].forEach(function(check) {\n return impacts.push(check.impact);\n });\n });\n if ([ CANTTELL_PRIO, FAIL_PRIO ].includes(nodeResult.priority)) {\n nodeResult.impact = axe.utils.aggregate(axe.constants.impact, impacts);\n } else {\n nodeResult.impact = null;\n }\n anyAllNone(nodeResult, function(c) {\n delete c.result;\n delete c.priority;\n });\n nodeResult.result = axe.constants.results[nodeResult.priority];\n delete nodeResult.priority;\n return nodeResult;\n };\n 'use strict';\n (function() {\n axe.utils.aggregateNodeResults = function(nodeResults) {\n var ruleResult = {};\n nodeResults = nodeResults.map(function(nodeResult) {\n if (nodeResult.any && nodeResult.all && nodeResult.none) {\n return axe.utils.aggregateChecks(nodeResult);\n } else if (Array.isArray(nodeResult.node)) {\n return axe.utils.finalizeRuleResult(nodeResult);\n } else {\n throw new TypeError('Invalid Result type');\n }\n });\n if (nodeResults && nodeResults.length) {\n var resultList = nodeResults.map(function(node) {\n return node.result;\n });\n ruleResult.result = axe.utils.aggregate(axe.constants.results, resultList, ruleResult.result);\n } else {\n ruleResult.result = 'inapplicable';\n }\n axe.constants.resultGroups.forEach(function(group) {\n return ruleResult[group] = [];\n });\n nodeResults.forEach(function(nodeResult) {\n var groupName = axe.constants.resultGroupMap[nodeResult.result];\n ruleResult[groupName].push(nodeResult);\n });\n var impactGroup = axe.constants.FAIL_GROUP;\n if (ruleResult[impactGroup].length === 0) {\n impactGroup = axe.constants.CANTTELL_GROUP;\n }\n if (ruleResult[impactGroup].length > 0) {\n var impactList = ruleResult[impactGroup].map(function(failure) {\n return failure.impact;\n });\n ruleResult.impact = axe.utils.aggregate(axe.constants.impact, impactList) || null;\n } else {\n ruleResult.impact = null;\n }\n return ruleResult;\n };\n })();\n 'use strict';\n function copyToGroup(resultObject, subResult, group) {\n var resultCopy = Object.assign({}, subResult);\n resultCopy.nodes = (resultCopy[group] || []).concat();\n axe.constants.resultGroups.forEach(function(group) {\n delete resultCopy[group];\n });\n resultObject[group].push(resultCopy);\n }\n axe.utils.aggregateResult = function(results) {\n var resultObject = {};\n axe.constants.resultGroups.forEach(function(groupName) {\n return resultObject[groupName] = [];\n });\n results.forEach(function(subResult) {\n if (subResult.error) {\n copyToGroup(resultObject, subResult, axe.constants.CANTTELL_GROUP);\n } else if (subResult.result === axe.constants.NA) {\n copyToGroup(resultObject, subResult, axe.constants.NA_GROUP);\n } else {\n axe.constants.resultGroups.forEach(function(group) {\n if (Array.isArray(subResult[group]) && subResult[group].length > 0) {\n copyToGroup(resultObject, subResult, group);\n }\n });\n }\n });\n return resultObject;\n };\n 'use strict';\n function areStylesSet(el, styles, stopAt) {\n 'use strict';\n var styl = window.getComputedStyle(el, null);\n var set = false;\n if (!styl) {\n return false;\n }\n styles.forEach(function(att) {\n if (styl.getPropertyValue(att.property) === att.value) {\n set = true;\n }\n });\n if (set) {\n return true;\n }\n if (el.nodeName.toUpperCase() === stopAt.toUpperCase() || !el.parentNode) {\n return false;\n }\n return areStylesSet(el.parentNode, styles, stopAt);\n }\n axe.utils.areStylesSet = areStylesSet;\n 'use strict';\n axe.utils.checkHelper = function checkHelper(checkResult, options, resolve, reject) {\n 'use strict';\n return {\n isAsync: false,\n async: function async() {\n this.isAsync = true;\n return function(result) {\n if (result instanceof Error === false) {\n checkResult.result = result;\n resolve(checkResult);\n } else {\n reject(result);\n }\n };\n },\n data: function data(_data) {\n checkResult.data = _data;\n },\n relatedNodes: function relatedNodes(nodes) {\n nodes = nodes instanceof Node ? [ nodes ] : axe.utils.toArray(nodes);\n checkResult.relatedNodes = nodes.map(function(element) {\n return new axe.utils.DqElement(element, options);\n });\n }\n };\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n axe.utils.clone = function(obj) {\n 'use strict';\n var index, length, out = obj;\n if (obj !== null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') {\n if (Array.isArray(obj)) {\n out = [];\n for (index = 0, length = obj.length; index < length; index++) {\n out[index] = axe.utils.clone(obj[index]);\n }\n } else {\n out = {};\n for (index in obj) {\n out[index] = axe.utils.clone(obj[index]);\n }\n }\n }\n return out;\n };\n 'use strict';\n function err(message, node) {\n 'use strict';\n var selector;\n if (axe._tree) {\n selector = axe.utils.getSelector(node);\n }\n return new Error(message + ': ' + (selector || node));\n }\n axe.utils.sendCommandToFrame = function(node, parameters, resolve, reject) {\n 'use strict';\n var win = node.contentWindow;\n if (!win) {\n axe.log('Frame does not have a content window', node);\n resolve(null);\n return;\n }\n var timeout = setTimeout(function() {\n timeout = setTimeout(function() {\n if (!parameters.debug) {\n resolve(null);\n } else {\n reject(err('No response from frame', node));\n }\n }, 0);\n }, 500);\n axe.utils.respondable(win, 'axe.ping', null, undefined, function() {\n clearTimeout(timeout);\n var frameWaitTime = parameters.options && parameters.options.frameWaitTime || 6e4;\n timeout = setTimeout(function() {\n reject(err('Axe in frame timed out', node));\n }, frameWaitTime);\n axe.utils.respondable(win, 'axe.start', parameters, undefined, function(data) {\n clearTimeout(timeout);\n if (data instanceof Error === false) {\n resolve(data);\n } else {\n reject(data);\n }\n });\n });\n };\n function collectResultsFromFrames(context, options, command, parameter, resolve, reject) {\n 'use strict';\n var q = axe.utils.queue();\n var frames = context.frames;\n frames.forEach(function(frame) {\n var params = {\n options: options,\n command: command,\n parameter: parameter,\n context: {\n initiator: false,\n page: context.page,\n include: frame.include || [],\n exclude: frame.exclude || []\n }\n };\n q.defer(function(res, rej) {\n var node = frame.node;\n axe.utils.sendCommandToFrame(node, params, function(data) {\n if (data) {\n return res({\n results: data,\n frameElement: node,\n frame: axe.utils.getSelector(node)\n });\n }\n res(null);\n }, rej);\n });\n });\n q.then(function(data) {\n resolve(axe.utils.mergeResults(data, options));\n }).catch(reject);\n }\n axe.utils.collectResultsFromFrames = collectResultsFromFrames;\n 'use strict';\n axe.utils.contains = function(node, otherNode) {\n 'use strict';\n function containsShadowChild(node, otherNode) {\n if (node.shadowId === otherNode.shadowId) {\n return true;\n }\n return !!node.children.find(function(child) {\n return containsShadowChild(child, otherNode);\n });\n }\n if (node.shadowId || otherNode.shadowId) {\n return containsShadowChild(node, otherNode);\n }\n if (typeof node.actualNode.contains === 'function') {\n return node.actualNode.contains(otherNode.actualNode);\n }\n return !!(node.actualNode.compareDocumentPosition(otherNode.actualNode) & 16);\n };\n 'use strict';\n (function(axe) {\n var parser = new axe.imports.CssSelectorParser();\n parser.registerNestingOperators('>');\n axe.utils.cssParser = parser;\n })(axe);\n 'use strict';\n function truncate(str, maxLength) {\n maxLength = maxLength || 300;\n if (str.length > maxLength) {\n var index = str.indexOf('>');\n str = str.substring(0, index + 1);\n }\n return str;\n }\n function getSource(element) {\n var source = element.outerHTML;\n if (!source && typeof XMLSerializer === 'function') {\n source = new XMLSerializer().serializeToString(element);\n }\n return truncate(source || '');\n }\n function DqElement(element, options, spec) {\n this._fromFrame = !!spec;\n this.spec = spec || {};\n if (options && options.absolutePaths) {\n this._options = {\n toRoot: true\n };\n }\n this.source = this.spec.source !== undefined ? this.spec.source : getSource(element);\n this._element = element;\n }\n DqElement.prototype = {\n get selector() {\n return this.spec.selector || [ axe.utils.getSelector(this.element, this._options) ];\n },\n get xpath() {\n return this.spec.xpath || [ axe.utils.getXpath(this.element) ];\n },\n get element() {\n return this._element;\n },\n get fromFrame() {\n return this._fromFrame;\n },\n toJSON: function toJSON() {\n 'use strict';\n return {\n selector: this.selector,\n source: this.source,\n xpath: this.xpath\n };\n }\n };\n DqElement.fromFrame = function(node, options, frame) {\n node.selector.unshift(frame.selector);\n node.xpath.unshift(frame.xpath);\n return new axe.utils.DqElement(frame.element, options, node);\n };\n axe.utils.DqElement = DqElement;\n 'use strict';\n axe.utils.matchesSelector = function() {\n 'use strict';\n var method;\n function getMethod(node) {\n var index, candidate, candidates = [ 'matches', 'matchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector', 'msMatchesSelector' ], length = candidates.length;\n for (index = 0; index < length; index++) {\n candidate = candidates[index];\n if (node[candidate]) {\n return candidate;\n }\n }\n }\n return function(node, selector) {\n if (!method || !node[method]) {\n method = getMethod(node);\n }\n return node[method](selector);\n };\n }();\n 'use strict';\n axe.utils.escapeSelector = function(value) {\n 'use strict';\n var string = String(value);\n var length = string.length;\n var index = -1;\n var codeUnit;\n var result = '';\n var firstCodeUnit = string.charCodeAt(0);\n while (++index < length) {\n codeUnit = string.charCodeAt(index);\n if (codeUnit == 0) {\n result += '�';\n continue;\n }\n if (codeUnit >= 1 && codeUnit <= 31 || codeUnit == 127 || index == 0 && codeUnit >= 48 && codeUnit <= 57 || index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) {\n result += '\\\\' + codeUnit.toString(16) + ' ';\n continue;\n }\n if (index == 0 && length == 1 && codeUnit == 45) {\n result += '\\\\' + string.charAt(index);\n continue;\n }\n if (codeUnit >= 128 || codeUnit == 45 || codeUnit == 95 || codeUnit >= 48 && codeUnit <= 57 || codeUnit >= 65 && codeUnit <= 90 || codeUnit >= 97 && codeUnit <= 122) {\n result += string.charAt(index);\n continue;\n }\n result += '\\\\' + string.charAt(index);\n }\n return result;\n };\n 'use strict';\n axe.utils.extendMetaData = function(to, from) {\n Object.assign(to, from);\n Object.keys(from).filter(function(prop) {\n return typeof from[prop] === 'function';\n }).forEach(function(prop) {\n to[prop] = null;\n try {\n to[prop] = from[prop](to);\n } catch (e) {}\n });\n };\n 'use strict';\n axe.utils.finalizeRuleResult = function(ruleResult) {\n Object.assign(ruleResult, axe.utils.aggregateNodeResults(ruleResult.nodes));\n delete ruleResult.nodes;\n return ruleResult;\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n axe.utils.findBy = function(array, key, value) {\n if (Array.isArray(array)) {\n return array.find(function(obj) {\n return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj[key] === value;\n });\n }\n };\n 'use strict';\n var axe = axe || {\n utils: {}\n };\n function virtualDOMfromNode(node, shadowId) {\n var vNodeCache = {};\n return {\n shadowId: shadowId,\n children: [],\n actualNode: node,\n get isFocusable() {\n if (!vNodeCache._isFocusable) {\n vNodeCache._isFocusable = axe.commons.dom.isFocusable(node);\n }\n return vNodeCache._isFocusable;\n },\n get tabbableElements() {\n if (!vNodeCache._tabbableElements) {\n vNodeCache._tabbableElements = axe.commons.dom.getTabbableElements(this);\n }\n return vNodeCache._tabbableElements;\n }\n };\n }\n function getSlotChildren(node) {\n var retVal = [];\n node = node.firstChild;\n while (node) {\n retVal.push(node);\n node = node.nextSibling;\n }\n return retVal;\n }\n axe.utils.getFlattenedTree = function(node, shadowId) {\n var retVal, realArray, nodeName;\n function reduceShadowDOM(res, child) {\n var replacements = axe.utils.getFlattenedTree(child, shadowId);\n if (replacements) {\n res = res.concat(replacements);\n }\n return res;\n }\n if (node.documentElement) {\n node = node.documentElement;\n }\n nodeName = node.nodeName.toLowerCase();\n if (axe.utils.isShadowRoot(node)) {\n retVal = virtualDOMfromNode(node, shadowId);\n shadowId = 'a' + Math.random().toString().substring(2);\n realArray = Array.from(node.shadowRoot.childNodes);\n retVal.children = realArray.reduce(reduceShadowDOM, []);\n return [ retVal ];\n } else {\n if (nodeName === 'content') {\n realArray = Array.from(node.getDistributedNodes());\n return realArray.reduce(reduceShadowDOM, []);\n } else if (nodeName === 'slot' && typeof node.assignedNodes === 'function') {\n realArray = Array.from(node.assignedNodes());\n if (!realArray.length) {\n realArray = getSlotChildren(node);\n }\n var styl = window.getComputedStyle(node);\n if (false) {} else {\n return realArray.reduce(reduceShadowDOM, []);\n }\n } else {\n if (node.nodeType === 1) {\n retVal = virtualDOMfromNode(node, shadowId);\n realArray = Array.from(node.childNodes);\n retVal.children = realArray.reduce(reduceShadowDOM, []);\n return [ retVal ];\n } else if (node.nodeType === 3) {\n return [ virtualDOMfromNode(node) ];\n }\n return undefined;\n }\n }\n };\n axe.utils.getNodeFromTree = function(vNode, node) {\n var found;\n if (vNode.actualNode === node) {\n return vNode;\n }\n vNode.children.forEach(function(candidate) {\n if (found) {\n return;\n }\n if (candidate.actualNode === node) {\n found = candidate;\n } else {\n found = axe.utils.getNodeFromTree(candidate, node);\n }\n });\n return found;\n };\n 'use strict';\n axe.utils.getAllChecks = function getAllChecks(object) {\n 'use strict';\n var result = [];\n return result.concat(object.any || []).concat(object.all || []).concat(object.none || []);\n };\n 'use strict';\n axe.utils.getBaseLang = function getBaseLang(lang) {\n if (!lang) {\n return '';\n }\n return lang.trim().split('-')[0].toLowerCase();\n };\n 'use strict';\n axe.utils.getCheckOption = function(check, ruleID, options) {\n var ruleCheckOption = ((options.rules && options.rules[ruleID] || {}).checks || {})[check.id];\n var checkOption = (options.checks || {})[check.id];\n var enabled = check.enabled;\n var opts = check.options;\n if (checkOption) {\n if (checkOption.hasOwnProperty('enabled')) {\n enabled = checkOption.enabled;\n }\n if (checkOption.hasOwnProperty('options')) {\n opts = checkOption.options;\n }\n }\n if (ruleCheckOption) {\n if (ruleCheckOption.hasOwnProperty('enabled')) {\n enabled = ruleCheckOption.enabled;\n }\n if (ruleCheckOption.hasOwnProperty('options')) {\n opts = ruleCheckOption.options;\n }\n }\n return {\n enabled: enabled,\n options: opts,\n absolutePaths: options.absolutePaths\n };\n };\n 'use strict';\n var _slicedToArray = function() {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) {\n break;\n }\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i['return']) {\n _i['return']();\n }\n } finally {\n if (_d) {\n throw _e;\n }\n }\n }\n return _arr;\n }\n return function(arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError('Invalid attempt to destructure non-iterable instance');\n }\n };\n }();\n function isMostlyNumbers() {\n var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return str.length !== 0 && (str.match(/[0-9]/g) || '').length >= str.length / 2;\n }\n function splitString(str, splitIndex) {\n return [ str.substring(0, splitIndex), str.substring(splitIndex) ];\n }\n function trimRight(str) {\n return str.replace(/\\s+$/, '');\n }\n function uriParser(url) {\n var original = url;\n var protocol = '', domain = '', port = '', path = '', query = '', hash = '';\n if (url.includes('#')) {\n var _splitString = splitString(url, url.indexOf('#'));\n var _splitString2 = _slicedToArray(_splitString, 2);\n url = _splitString2[0];\n hash = _splitString2[1];\n }\n if (url.includes('?')) {\n var _splitString3 = splitString(url, url.indexOf('?'));\n var _splitString4 = _slicedToArray(_splitString3, 2);\n url = _splitString4[0];\n query = _splitString4[1];\n }\n if (url.includes('://')) {\n var _url$split = url.split('://');\n var _url$split2 = _slicedToArray(_url$split, 2);\n protocol = _url$split2[0];\n url = _url$split2[1];\n var _splitString5 = splitString(url, url.indexOf('/'));\n var _splitString6 = _slicedToArray(_splitString5, 2);\n domain = _splitString6[0];\n url = _splitString6[1];\n } else if (url.substr(0, 2) === '//') {\n url = url.substr(2);\n var _splitString7 = splitString(url, url.indexOf('/'));\n var _splitString8 = _slicedToArray(_splitString7, 2);\n domain = _splitString8[0];\n url = _splitString8[1];\n }\n if (domain.substr(0, 4) === 'www.') {\n domain = domain.substr(4);\n }\n if (domain && domain.includes(':')) {\n var _splitString9 = splitString(domain, domain.indexOf(':'));\n var _splitString10 = _slicedToArray(_splitString9, 2);\n domain = _splitString10[0];\n port = _splitString10[1];\n }\n path = url;\n return {\n original: original,\n protocol: protocol,\n domain: domain,\n port: port,\n path: path,\n query: query,\n hash: hash\n };\n }\n axe.utils.getFriendlyUriEnd = function getFriendlyUriEnd() {\n var uri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (uri.length <= 1 || uri.substr(0, 5) === 'data:' || uri.substr(0, 11) === 'javascript:' || uri.includes('?')) {\n return;\n }\n var currentDomain = options.currentDomain, _options$maxLength = options.maxLength, maxLength = _options$maxLength === undefined ? 25 : _options$maxLength;\n var _uriParser = uriParser(uri), path = _uriParser.path, domain = _uriParser.domain, hash = _uriParser.hash;\n var pathEnd = path.substr(path.substr(0, path.length - 2).lastIndexOf('/') + 1);\n if (hash) {\n if (pathEnd && (pathEnd + hash).length <= maxLength) {\n return trimRight(pathEnd + hash);\n } else if (pathEnd.length < 2 && hash.length > 2 && hash.length <= maxLength) {\n return trimRight(hash);\n } else {\n return;\n }\n } else if (domain && domain.length < maxLength && path.length <= 1) {\n return trimRight(domain + path);\n }\n if (path === '/' + pathEnd && domain && currentDomain && domain !== currentDomain && (domain + path).length <= maxLength) {\n return trimRight(domain + path);\n }\n var lastDotIndex = pathEnd.lastIndexOf('.');\n if ((lastDotIndex === -1 || lastDotIndex > 1) && (lastDotIndex !== -1 || pathEnd.length > 2) && pathEnd.length <= maxLength && !pathEnd.match(/index(\\.[a-zA-Z]{2-4})?/) && !isMostlyNumbers(pathEnd)) {\n return trimRight(pathEnd);\n }\n };\n 'use strict';\n axe.utils.getRootNode = function getRootNode(node) {\n var doc = node.getRootNode && node.getRootNode() || document;\n if (doc === node) {\n doc = document;\n }\n return doc;\n };\n 'use strict';\n var escapeSelector = axe.utils.escapeSelector;\n var isXHTML = void 0;\n var ignoredAttributes = [ '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' ];\n var MAXATTRIBUTELENGTH = 31;\n function getAttributeNameValue(node, at) {\n var name = at.name;\n var atnv = void 0;\n if (name.indexOf('href') !== -1 || name.indexOf('src') !== -1) {\n var friendly = axe.utils.getFriendlyUriEnd(node.getAttribute(name));\n if (friendly) {\n var value = encodeURI(friendly);\n if (value) {\n atnv = escapeSelector(at.name) + '$=\"' + escapeSelector(value) + '\"';\n } else {\n return;\n }\n } else {\n atnv = escapeSelector(at.name) + '=\"' + escapeSelector(node.getAttribute(name)) + '\"';\n }\n } else {\n atnv = escapeSelector(name) + '=\"' + escapeSelector(at.value) + '\"';\n }\n return atnv;\n }\n function countSort(a, b) {\n return a.count < b.count ? -1 : a.count === b.count ? 0 : 1;\n }\n function filterAttributes(at) {\n return !ignoredAttributes.includes(at.name) && at.name.indexOf(':') === -1 && (!at.value || at.value.length < MAXATTRIBUTELENGTH);\n }\n axe.utils.getSelectorData = function(domTree) {\n var data = {\n classes: {},\n tags: {},\n attributes: {}\n };\n domTree = Array.isArray(domTree) ? domTree : [ domTree ];\n var currentLevel = domTree.slice();\n var stack = [];\n var _loop = function _loop() {\n var current = currentLevel.pop();\n var node = current.actualNode;\n if (!!node.querySelectorAll) {\n var tag = node.nodeName;\n if (data.tags[tag]) {\n data.tags[tag]++;\n } else {\n data.tags[tag] = 1;\n }\n if (node.classList) {\n Array.from(node.classList).forEach(function(cl) {\n var ind = escapeSelector(cl);\n if (data.classes[ind]) {\n data.classes[ind]++;\n } else {\n data.classes[ind] = 1;\n }\n });\n }\n if (node.attributes) {\n Array.from(node.attributes).filter(filterAttributes).forEach(function(at) {\n var atnv = getAttributeNameValue(node, at);\n if (atnv) {\n if (data.attributes[atnv]) {\n data.attributes[atnv]++;\n } else {\n data.attributes[atnv] = 1;\n }\n }\n });\n }\n }\n if (current.children.length) {\n stack.push(currentLevel);\n currentLevel = current.children.slice();\n }\n while (!currentLevel.length && stack.length) {\n currentLevel = stack.pop();\n }\n };\n while (currentLevel.length) {\n _loop();\n }\n return data;\n };\n function uncommonClasses(node, selectorData) {\n var retVal = [];\n var classData = selectorData.classes;\n var tagData = selectorData.tags;\n if (node.classList) {\n Array.from(node.classList).forEach(function(cl) {\n var ind = escapeSelector(cl);\n if (classData[ind] < tagData[node.nodeName]) {\n retVal.push({\n name: ind,\n count: classData[ind],\n species: 'class'\n });\n }\n });\n }\n return retVal.sort(countSort);\n }\n function getNthChildString(elm, selector) {\n var siblings = elm.parentNode && Array.from(elm.parentNode.children || '') || [];\n var hasMatchingSiblings = siblings.find(function(sibling) {\n return sibling !== elm && axe.utils.matchesSelector(sibling, selector);\n });\n if (hasMatchingSiblings) {\n var nthChild = 1 + siblings.indexOf(elm);\n return ':nth-child(' + nthChild + ')';\n } else {\n return '';\n }\n }\n function getElmId(elm) {\n if (!elm.getAttribute('id')) {\n return;\n }\n var doc = elm.getRootNode && elm.getRootNode() || document;\n var id = '#' + escapeSelector(elm.getAttribute('id') || '');\n if (!id.match(/player_uid_/) && doc.querySelectorAll(id).length === 1) {\n return id;\n }\n }\n function getBaseSelector(elm) {\n if (typeof isXHTML === 'undefined') {\n isXHTML = axe.utils.isXHTML(document);\n }\n return escapeSelector(isXHTML ? elm.localName : elm.nodeName.toLowerCase());\n }\n function uncommonAttributes(node, selectorData) {\n var retVal = [];\n var attData = selectorData.attributes;\n var tagData = selectorData.tags;\n if (node.attributes) {\n Array.from(node.attributes).filter(filterAttributes).forEach(function(at) {\n var atnv = getAttributeNameValue(node, at);\n if (atnv && attData[atnv] < tagData[node.nodeName]) {\n retVal.push({\n name: atnv,\n count: attData[atnv],\n species: 'attribute'\n });\n }\n });\n }\n return retVal.sort(countSort);\n }\n function getThreeLeastCommonFeatures(elm, selectorData) {\n var selector = '';\n var features = void 0;\n var clss = uncommonClasses(elm, selectorData);\n var atts = uncommonAttributes(elm, selectorData);\n if (clss.length && clss[0].count === 1) {\n features = [ clss[0] ];\n } else if (atts.length && atts[0].count === 1) {\n features = [ atts[0] ];\n selector = getBaseSelector(elm);\n } else {\n features = clss.concat(atts);\n features.sort(countSort);\n features = features.slice(0, 3);\n if (!features.some(function(feat) {\n return feat.species === 'class';\n })) {\n selector = getBaseSelector(elm);\n } else {\n features.sort(function(a, b) {\n return a.species !== b.species && a.species === 'class' ? -1 : a.species === b.species ? 0 : 1;\n });\n }\n }\n return selector += features.reduce(function(val, feat) {\n switch (feat.species) {\n case 'class':\n return val + '.' + feat.name;\n\n case 'attribute':\n return val + '[' + feat.name + ']';\n }\n return val;\n }, '');\n }\n function generateSelector(elm, options, doc) {\n if (!axe._selectorData) {\n throw new Error('Expect axe._selectorData to be set up');\n }\n var _options$toRoot = options.toRoot, toRoot = _options$toRoot === undefined ? false : _options$toRoot;\n var selector = void 0;\n var similar = void 0;\n do {\n var features = getElmId(elm);\n if (!features) {\n features = getThreeLeastCommonFeatures(elm, axe._selectorData);\n features += getNthChildString(elm, features);\n }\n if (selector) {\n selector = features + ' > ' + selector;\n } else {\n selector = features;\n }\n if (!similar) {\n similar = Array.from(doc.querySelectorAll(selector));\n } else {\n similar = similar.filter(function(item) {\n return axe.utils.matchesSelector(item, selector);\n });\n }\n elm = elm.parentElement;\n } while ((similar.length > 1 || toRoot) && elm && elm.nodeType !== 11);\n if (similar.length === 1) {\n return selector;\n } else if (selector.indexOf(' > ') !== -1) {\n return ':root' + selector.substring(selector.indexOf(' > '));\n }\n return ':root';\n }\n axe.utils.getSelector = function createUniqueSelector(elm) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!elm) {\n return '';\n }\n var doc = elm.getRootNode && elm.getRootNode() || document;\n if (doc.nodeType === 11) {\n var stack = [];\n while (doc.nodeType === 11) {\n stack.push({\n elm: elm,\n doc: doc\n });\n elm = doc.host;\n doc = elm.getRootNode();\n }\n stack.push({\n elm: elm,\n doc: doc\n });\n return stack.reverse().map(function(comp) {\n return generateSelector(comp.elm, options, comp.doc);\n });\n } else {\n return generateSelector(elm, options, doc);\n }\n };\n 'use strict';\n function getXPathArray(node, path) {\n var sibling, count;\n if (!node) {\n return [];\n }\n if (!path && node.nodeType === 9) {\n path = [ {\n str: 'html'\n } ];\n return path;\n }\n path = path || [];\n if (node.parentNode && node.parentNode !== node) {\n path = getXPathArray(node.parentNode, path);\n }\n if (node.previousSibling) {\n count = 1;\n sibling = node.previousSibling;\n do {\n if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) {\n count++;\n }\n sibling = sibling.previousSibling;\n } while (sibling);\n if (count === 1) {\n count = null;\n }\n } else if (node.nextSibling) {\n sibling = node.nextSibling;\n do {\n if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) {\n count = 1;\n sibling = null;\n } else {\n count = null;\n sibling = sibling.previousSibling;\n }\n } while (sibling);\n }\n if (node.nodeType === 1) {\n var element = {};\n element.str = node.nodeName.toLowerCase();\n var id = node.getAttribute && axe.utils.escapeSelector(node.getAttribute('id'));\n if (id && node.ownerDocument.querySelectorAll('#' + id).length === 1) {\n element.id = node.getAttribute('id');\n }\n if (count > 1) {\n element.count = count;\n }\n path.push(element);\n }\n return path;\n }\n function xpathToString(xpathArray) {\n return xpathArray.reduce(function(str, elm) {\n if (elm.id) {\n return '/' + elm.str + '[@id=\\'' + elm.id + '\\']';\n } else {\n return str + ('/' + elm.str) + (elm.count > 0 ? '[' + elm.count + ']' : '');\n }\n }, '');\n }\n axe.utils.getXpath = function getXpath(node) {\n var xpathArray = getXPathArray(node);\n return xpathToString(xpathArray);\n };\n 'use strict';\n var styleSheet;\n function injectStyle(style) {\n 'use strict';\n if (styleSheet && styleSheet.parentNode) {\n if (styleSheet.styleSheet === undefined) {\n styleSheet.appendChild(document.createTextNode(style));\n } else {\n styleSheet.styleSheet.cssText += style;\n }\n return styleSheet;\n }\n if (!style) {\n return;\n }\n var head = document.head || document.getElementsByTagName('head')[0];\n styleSheet = document.createElement('style');\n styleSheet.type = 'text/css';\n if (styleSheet.styleSheet === undefined) {\n styleSheet.appendChild(document.createTextNode(style));\n } else {\n styleSheet.styleSheet.cssText = style;\n }\n head.appendChild(styleSheet);\n return styleSheet;\n }\n axe.utils.injectStyle = injectStyle;\n 'use strict';\n axe.utils.isHidden = function isHidden(el, recursed) {\n 'use strict';\n var parent;\n if (el.nodeType === 9) {\n return false;\n }\n if (el.nodeType === 11) {\n el = el.host;\n }\n var style = window.getComputedStyle(el, null);\n if (!style || !el.parentNode || style.getPropertyValue('display') === 'none' || !recursed && style.getPropertyValue('visibility') === 'hidden' || el.getAttribute('aria-hidden') === 'true') {\n return true;\n }\n parent = el.assignedSlot ? el.assignedSlot : el.parentNode;\n return axe.utils.isHidden(parent, true);\n };\n 'use strict';\n var htmlTags = [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'math', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr' ];\n axe.utils.isHtmlElement = function isHtmlElement(node) {\n var tagName = node.nodeName.toLowerCase();\n return htmlTags.includes(tagName) && node.namespaceURI !== 'http://www.w3.org/2000/svg';\n };\n 'use strict';\n var possibleShadowRoots = [ 'article', 'aside', 'blockquote', 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ];\n axe.utils.isShadowRoot = function isShadowRoot(node) {\n var nodeName = node.nodeName.toLowerCase();\n if (node.shadowRoot) {\n if (/^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(nodeName) || possibleShadowRoots.includes(nodeName)) {\n return true;\n }\n }\n return false;\n };\n 'use strict';\n axe.utils.isXHTML = function(doc) {\n 'use strict';\n if (!doc.createElement) {\n return false;\n }\n return doc.createElement('A').localName === 'A';\n };\n 'use strict';\n function pushFrame(resultSet, options, frameElement, frameSelector) {\n 'use strict';\n var frameXpath = axe.utils.getXpath(frameElement);\n var frameSpec = {\n element: frameElement,\n selector: frameSelector,\n xpath: frameXpath\n };\n resultSet.forEach(function(res) {\n res.node = axe.utils.DqElement.fromFrame(res.node, options, frameSpec);\n var checks = axe.utils.getAllChecks(res);\n if (checks.length) {\n checks.forEach(function(check) {\n check.relatedNodes = check.relatedNodes.map(function(node) {\n return axe.utils.DqElement.fromFrame(node, options, frameSpec);\n });\n });\n }\n });\n }\n function spliceNodes(target, to) {\n 'use strict';\n var firstFromFrame = to[0].node, sorterResult, t;\n for (var i = 0, l = target.length; i < l; i++) {\n t = target[i].node;\n sorterResult = axe.utils.nodeSorter({\n actualNode: t.element\n }, {\n actualNode: firstFromFrame.element\n });\n if (sorterResult > 0 || sorterResult === 0 && firstFromFrame.selector.length < t.selector.length) {\n target.splice.apply(target, [ i, 0 ].concat(to));\n return;\n }\n }\n target.push.apply(target, to);\n }\n function normalizeResult(result) {\n 'use strict';\n if (!result || !result.results) {\n return null;\n }\n if (!Array.isArray(result.results)) {\n return [ result.results ];\n }\n if (!result.results.length) {\n return null;\n }\n return result.results;\n }\n axe.utils.mergeResults = function mergeResults(frameResults, options) {\n 'use strict';\n var result = [];\n frameResults.forEach(function(frameResult) {\n var results = normalizeResult(frameResult);\n if (!results || !results.length) {\n return;\n }\n results.forEach(function(ruleResult) {\n if (ruleResult.nodes && frameResult.frame) {\n pushFrame(ruleResult.nodes, options, frameResult.frameElement, frameResult.frame);\n }\n var res = axe.utils.findBy(result, 'id', ruleResult.id);\n if (!res) {\n result.push(ruleResult);\n } else {\n if (ruleResult.nodes.length) {\n spliceNodes(res.nodes, ruleResult.nodes);\n }\n }\n });\n });\n return result;\n };\n 'use strict';\n axe.utils.nodeSorter = function nodeSorter(nodeA, nodeB) {\n nodeA = nodeA.actualNode || nodeA;\n nodeB = nodeB.actualNode || nodeB;\n if (nodeA === nodeB) {\n return 0;\n }\n if (nodeA.compareDocumentPosition(nodeB) & 4) {\n return -1;\n } else {\n return 1;\n }\n };\n 'use strict';\n utils.performanceTimer = function() {\n 'use strict';\n function now() {\n if (window.performance && window.performance) {\n return window.performance.now();\n }\n }\n var originalTime = null;\n var lastRecordedTime = now();\n return {\n start: function start() {\n this.mark('mark_axe_start');\n },\n end: function end() {\n this.mark('mark_axe_end');\n this.measure('axe', 'mark_axe_start', 'mark_axe_end');\n this.logMeasures('axe');\n },\n auditStart: function auditStart() {\n this.mark('mark_audit_start');\n },\n auditEnd: function auditEnd() {\n this.mark('mark_audit_end');\n this.measure('audit_start_to_end', 'mark_audit_start', 'mark_audit_end');\n this.logMeasures();\n },\n mark: function mark(markName) {\n if (window.performance && window.performance.mark !== undefined) {\n window.performance.mark(markName);\n }\n },\n measure: function measure(measureName, startMark, endMark) {\n if (window.performance && window.performance.measure !== undefined) {\n window.performance.measure(measureName, startMark, endMark);\n }\n },\n logMeasures: function logMeasures(measureName) {\n function log(req) {\n axe.log('Measure ' + req.name + ' took ' + req.duration + 'ms');\n }\n if (window.performance && window.performance.getEntriesByType !== undefined) {\n var measures = window.performance.getEntriesByType('measure');\n for (var i = 0; i < measures.length; ++i) {\n var req = measures[i];\n if (req.name === measureName) {\n log(req);\n return;\n }\n log(req);\n }\n }\n },\n timeElapsed: function timeElapsed() {\n return now() - lastRecordedTime;\n },\n reset: function reset() {\n if (!originalTime) {\n originalTime = now();\n }\n lastRecordedTime = now();\n }\n };\n }();\n 'use strict';\n if (typeof Object.assign !== 'function') {\n (function() {\n Object.assign = function(target) {\n 'use strict';\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n })();\n }\n if (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function value(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n }\n axe.utils.pollyfillElementsFromPoint = function() {\n if (document.elementsFromPoint) {\n return document.elementsFromPoint;\n }\n if (document.msElementsFromPoint) {\n return document.msElementsFromPoint;\n }\n var usePointer = function() {\n var element = document.createElement('x');\n element.style.cssText = 'pointer-events:auto';\n return element.style.pointerEvents === 'auto';\n }();\n var cssProp = usePointer ? 'pointer-events' : 'visibility';\n var cssDisableVal = usePointer ? 'none' : 'hidden';\n var style = document.createElement('style');\n style.innerHTML = usePointer ? '* { pointer-events: all }' : '* { visibility: visible }';\n return function(x, y) {\n var current, i, d;\n var elements = [];\n var previousPointerEvents = [];\n document.head.appendChild(style);\n while ((current = document.elementFromPoint(x, y)) && elements.indexOf(current) === -1) {\n elements.push(current);\n previousPointerEvents.push({\n value: current.style.getPropertyValue(cssProp),\n priority: current.style.getPropertyPriority(cssProp)\n });\n current.style.setProperty(cssProp, cssDisableVal, 'important');\n }\n if (elements.indexOf(document.documentElement) < elements.length - 1) {\n elements.splice(elements.indexOf(document.documentElement), 1);\n elements.push(document.documentElement);\n }\n for (i = previousPointerEvents.length; !!(d = previousPointerEvents[--i]); ) {\n elements[i].style.setProperty(cssProp, d.value ? d.value : '', d.priority);\n }\n document.head.removeChild(style);\n return elements;\n };\n };\n if (typeof window.addEventListener === 'function') {\n document.elementsFromPoint = axe.utils.pollyfillElementsFromPoint();\n }\n if (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, 'includes', {\n value: function value(searchElement) {\n 'use strict';\n var O = Object(this);\n var len = parseInt(O.length, 10) || 0;\n if (len === 0) {\n return false;\n }\n var n = parseInt(arguments[1], 10) || 0;\n var k;\n if (n >= 0) {\n k = n;\n } else {\n k = len + n;\n if (k < 0) {\n k = 0;\n }\n }\n var currentElement;\n while (k < len) {\n currentElement = O[k];\n if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n return true;\n }\n k++;\n }\n return false;\n }\n });\n }\n if (!Array.prototype.some) {\n Object.defineProperty(Array.prototype, 'some', {\n value: function value(fun) {\n 'use strict';\n if (this == null) {\n throw new TypeError('Array.prototype.some called on null or undefined');\n }\n if (typeof fun !== 'function') {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(thisArg, t[i], i, t)) {\n return true;\n }\n }\n return false;\n }\n });\n }\n if (!Array.from) {\n Object.defineProperty(Array, 'from', {\n value: function() {\n var toStr = Object.prototype.toString;\n var isCallable = function isCallable(fn) {\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\n };\n var toInteger = function toInteger(value) {\n var number = Number(value);\n if (isNaN(number)) {\n return 0;\n }\n if (number === 0 || !isFinite(number)) {\n return number;\n }\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n };\n var maxSafeInteger = Math.pow(2, 53) - 1;\n var toLength = function toLength(value) {\n var len = toInteger(value);\n return Math.min(Math.max(len, 0), maxSafeInteger);\n };\n return function from(arrayLike) {\n var C = this;\n var items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\n }\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\n var T;\n if (typeof mapFn !== 'undefined') {\n if (!isCallable(mapFn)) {\n throw new TypeError('Array.from: when provided, the second argument must be a function');\n }\n if (arguments.length > 2) {\n T = arguments[2];\n }\n }\n var len = toLength(items.length);\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n var k = 0;\n var kValue;\n while (k < len) {\n kValue = items[k];\n if (mapFn) {\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n } else {\n A[k] = kValue;\n }\n k += 1;\n }\n A.length = len;\n return A;\n };\n }()\n });\n }\n if (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n } else {\n return this.indexOf(search, start) !== -1;\n }\n };\n }\n 'use strict';\n function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n } else {\n return Array.from(arr);\n }\n }\n axe.utils.preloadCssom = function preloadCssom(_ref) {\n var timeout = _ref.timeout, _ref$treeRoot = _ref.treeRoot, treeRoot = _ref$treeRoot === undefined ? axe._tree[0] : _ref$treeRoot;\n var rootNodes = getAllRootNodesInTree(treeRoot);\n var q = axe.utils.queue();\n if (!rootNodes.length) {\n return q;\n }\n var dynamicDoc = document.implementation.createHTMLDocument();\n var convertDataToStylesheet = getStyleSheetFactory(dynamicDoc);\n q.defer(function(resolve, reject) {\n getCssomForAllRootNodes(rootNodes, convertDataToStylesheet, timeout).then(function(assets) {\n var cssom = processCssomAssets(assets);\n resolve(cssom);\n }).catch(reject);\n });\n return q;\n };\n function getAllRootNodesInTree(tree) {\n var ids = [];\n var rootNodes = axe.utils.querySelectorAllFilter(tree, '*', function(node) {\n if (ids.includes(node.shadowId)) {\n return false;\n }\n ids.push(node.shadowId);\n return true;\n }).map(function(node) {\n return {\n shadowId: node.shadowId,\n rootNode: axe.utils.getRootNode(node.actualNode)\n };\n });\n return axe.utils.uniqueArray(rootNodes, []);\n }\n var getStyleSheetFactory = function getStyleSheetFactory(dynamicDoc) {\n return function(_ref2) {\n var data = _ref2.data, isExternal = _ref2.isExternal, shadowId = _ref2.shadowId, root = _ref2.root, priority = _ref2.priority, _ref2$isLink = _ref2.isLink, isLink = _ref2$isLink === undefined ? false : _ref2$isLink;\n var style = dynamicDoc.createElement('style');\n if (isLink) {\n var text = dynamicDoc.createTextNode('@import \"' + data.href + '\"');\n style.appendChild(text);\n } else {\n style.appendChild(dynamicDoc.createTextNode(data));\n }\n dynamicDoc.head.appendChild(style);\n return {\n sheet: style.sheet,\n isExternal: isExternal,\n shadowId: shadowId,\n root: root,\n priority: priority\n };\n };\n };\n function getCssomForAllRootNodes(rootNodes, convertDataToStylesheet, timeout) {\n var q = axe.utils.queue();\n rootNodes.forEach(function(_ref3, index) {\n var rootNode = _ref3.rootNode, shadowId = _ref3.shadowId;\n return q.defer(function(resolve, reject) {\n return loadCssom({\n rootNode: rootNode,\n shadowId: shadowId,\n timeout: timeout,\n convertDataToStylesheet: convertDataToStylesheet,\n rootIndex: index + 1\n }).then(resolve).catch(reject);\n });\n });\n return q;\n }\n function processCssomAssets(nestedAssets) {\n var result = [];\n nestedAssets.forEach(function(item) {\n if (Array.isArray(item)) {\n result.push.apply(result, _toConsumableArray(processCssomAssets(item)));\n } else {\n result.push(item);\n }\n });\n return result;\n }\n function loadCssom(options) {\n var rootIndex = options.rootIndex;\n var q = axe.utils.queue();\n var sheets = getStylesheetsOfRootNode(options);\n if (!sheets) {\n return q;\n }\n sheets.forEach(function(sheet, sheetIndex) {\n var priority = [ rootIndex, sheetIndex ];\n try {\n var deferredQ = parseNonCrossOriginStylesheet(sheet, options, priority);\n q.defer(deferredQ);\n } catch (e) {\n var _deferredQ = parseCrossOriginStylesheet(sheet.href, options, priority);\n q.defer(_deferredQ);\n }\n });\n return q;\n }\n function parseNonCrossOriginStylesheet(sheet, options, priority) {\n var q = axe.utils.queue();\n var cssRules = sheet.cssRules;\n var rules = Array.from(cssRules);\n if (!rules) {\n return q;\n }\n var cssImportRules = rules.filter(function(r) {\n return r.type === 3;\n });\n if (!cssImportRules.length) {\n q.defer(function(resolve) {\n return resolve({\n isExternal: false,\n priority: priority,\n root: options.rootNode,\n shadowId: options.shadowId,\n sheet: sheet\n });\n });\n return q;\n }\n cssImportRules.forEach(function(importRule, cssRuleIndex) {\n return q.defer(function(resolve, reject) {\n var importUrl = importRule.href;\n var newPriority = [].concat(_toConsumableArray(priority), [ cssRuleIndex ]);\n var axiosOptions = {\n method: 'get',\n url: importUrl,\n timeout: options.timeout\n };\n axe.imports.axios(axiosOptions).then(function(_ref4) {\n var data = _ref4.data;\n return resolve(options.convertDataToStylesheet({\n data: data,\n isExternal: true,\n priority: newPriority,\n root: options.rootNode,\n shadowId: options.shadowId\n }));\n }).catch(reject);\n });\n });\n var nonImportCSSRules = rules.filter(function(r) {\n return r.type !== 3;\n });\n if (!nonImportCSSRules.length) {\n return q;\n }\n q.defer(function(resolve) {\n return resolve(options.convertDataToStylesheet({\n data: nonImportCSSRules.map(function(rule) {\n return rule.cssText;\n }).join(),\n isExternal: false,\n priority: priority,\n root: options.rootNode,\n shadowId: options.shadowId\n }));\n });\n return q;\n }\n function parseCrossOriginStylesheet(url, options, priority) {\n var q = axe.utils.queue();\n if (!url) {\n return q;\n }\n var axiosOptions = {\n method: 'get',\n url: url,\n timeout: options.timeout\n };\n q.defer(function(resolve, reject) {\n axe.imports.axios(axiosOptions).then(function(_ref5) {\n var data = _ref5.data;\n return resolve(options.convertDataToStylesheet({\n data: data,\n isExternal: true,\n priority: priority,\n root: options.rootNode,\n shadowId: options.shadowId\n }));\n }).catch(reject);\n });\n return q;\n }\n function getStylesheetsOfRootNode(options) {\n var rootNode = options.rootNode, shadowId = options.shadowId;\n var sheets = void 0;\n if (rootNode.nodeType === 11 && shadowId) {\n sheets = getStylesheetsFromDocumentFragment(options);\n } else {\n sheets = getStylesheetsFromDocument(rootNode);\n }\n return filterStylesheetsWithSameHref(sheets);\n }\n function getStylesheetsFromDocumentFragment(options) {\n var rootNode = options.rootNode, convertDataToStylesheet = options.convertDataToStylesheet;\n return Array.from(rootNode.children).filter(filerStyleAndLinkAttributesInDocumentFragment).reduce(function(out, node) {\n var nodeName = node.nodeName.toUpperCase();\n var data = nodeName === 'STYLE' ? node.textContent : node;\n var isLink = nodeName === 'LINK';\n var stylesheet = convertDataToStylesheet({\n data: data,\n isLink: isLink,\n root: rootNode\n });\n out.push(stylesheet.sheet);\n return out;\n }, []);\n }\n function getStylesheetsFromDocument(rootNode) {\n return Array.from(rootNode.styleSheets).filter(function(sheet) {\n return filterMediaIsPrint(sheet.media.mediaText);\n });\n }\n function filerStyleAndLinkAttributesInDocumentFragment(node) {\n var nodeName = node.nodeName.toUpperCase();\n var linkHref = node.getAttribute('href');\n var linkRel = node.getAttribute('rel');\n var isLink = nodeName === 'LINK' && linkHref && linkRel && node.rel.toUpperCase().includes('STYLESHEET');\n var isStyle = nodeName === 'STYLE';\n return isStyle || isLink && filterMediaIsPrint(node.media);\n }\n function filterMediaIsPrint(media) {\n if (!media) {\n return true;\n }\n return !media.toUpperCase().includes('PRINT');\n }\n function filterStylesheetsWithSameHref(sheets) {\n var hrefs = [];\n return sheets.filter(function(sheet) {\n if (!sheet.href) {\n return true;\n }\n if (hrefs.includes(sheet.href)) {\n return false;\n }\n hrefs.push(sheet.href);\n return true;\n });\n }\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function isValidPreloadObject(preload) {\n return (typeof preload === 'undefined' ? 'undefined' : _typeof(preload)) === 'object' && Array.isArray(preload.assets);\n }\n axe.utils.shouldPreload = function shouldPreload(options) {\n if (!options || options.preload === undefined || options.preload === null) {\n return true;\n }\n if (typeof options.preload === 'boolean') {\n return options.preload;\n }\n return isValidPreloadObject(options.preload);\n };\n axe.utils.getPreloadConfig = function getPreloadConfig(options) {\n var config = {\n assets: axe.constants.preloadAssets,\n timeout: axe.constants.preloadAssetsTimeout\n };\n if (!options.preload) {\n return config;\n }\n if (typeof options.preload === 'boolean') {\n return config;\n }\n var areRequestedAssetsValid = options.preload.assets.every(function(a) {\n return axe.constants.preloadAssets.includes(a.toLowerCase());\n });\n if (!areRequestedAssetsValid) {\n throw new Error('Requested assets, not supported. ' + ('Supported assets are: ' + axe.constants.preloadAssets.join(', ') + '.'));\n }\n config.assets = axe.utils.uniqueArray(options.preload.assets.map(function(a) {\n return a.toLowerCase();\n }), []);\n if (options.preload.timeout && typeof options.preload.timeout === 'number' && !Number.isNaN(options.preload.timeout)) {\n config.timeout = options.preload.timeout;\n }\n return config;\n };\n axe.utils.preload = function preload(options) {\n var preloadFunctionsMap = {\n cssom: axe.utils.preloadCssom\n };\n var q = axe.utils.queue();\n var shouldPreload = axe.utils.shouldPreload(options);\n if (!shouldPreload) {\n return q;\n }\n var preloadConfig = axe.utils.getPreloadConfig(options);\n preloadConfig.assets.forEach(function(asset) {\n q.defer(function(resolve, reject) {\n preloadFunctionsMap[asset](preloadConfig).then(function(results) {\n resolve(_defineProperty({}, asset, results[0]));\n }).catch(reject);\n });\n });\n return q;\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function getIncompleteReason(checkData, messages) {\n function getDefaultMsg(messages) {\n if (messages.incomplete && messages.incomplete.default) {\n return messages.incomplete.default;\n } else {\n return helpers.incompleteFallbackMessage();\n }\n }\n if (checkData && checkData.missingData) {\n try {\n var msg = messages.incomplete[checkData.missingData[0].reason];\n if (!msg) {\n throw new Error();\n }\n return msg;\n } catch (e) {\n if (typeof checkData.missingData === 'string') {\n return messages.incomplete[checkData.missingData];\n } else {\n return getDefaultMsg(messages);\n }\n }\n } else {\n return getDefaultMsg(messages);\n }\n }\n function extender(checksData, shouldBeTrue) {\n 'use strict';\n return function(check) {\n var sourceData = checksData[check.id] || {};\n var messages = sourceData.messages || {};\n var data = Object.assign({}, sourceData);\n delete data.messages;\n if (check.result === undefined) {\n if (_typeof(messages.incomplete) === 'object') {\n data.message = function() {\n return getIncompleteReason(check.data, messages);\n };\n } else {\n data.message = messages.incomplete;\n }\n } else {\n data.message = check.result === shouldBeTrue ? messages.pass : messages.fail;\n }\n axe.utils.extendMetaData(check, data);\n };\n }\n axe.utils.publishMetaData = function(ruleResult) {\n 'use strict';\n var checksData = axe._audit.data.checks || {};\n var rulesData = axe._audit.data.rules || {};\n var rule = axe.utils.findBy(axe._audit.rules, 'id', ruleResult.id) || {};\n ruleResult.tags = axe.utils.clone(rule.tags || []);\n var shouldBeTrue = extender(checksData, true);\n var shouldBeFalse = extender(checksData, false);\n ruleResult.nodes.forEach(function(detail) {\n detail.any.forEach(shouldBeTrue);\n detail.all.forEach(shouldBeTrue);\n detail.none.forEach(shouldBeFalse);\n });\n axe.utils.extendMetaData(ruleResult, axe.utils.clone(rulesData[ruleResult.id] || {}));\n };\n 'use strict';\n var convertExpressions = function convertExpressions() {};\n var matchExpressions = function matchExpressions() {};\n function matchesTag(node, exp) {\n return node.nodeType === 1 && (exp.tag === '*' || node.nodeName.toLowerCase() === exp.tag);\n }\n function matchesClasses(node, exp) {\n return !exp.classes || exp.classes.reduce(function(result, cl) {\n return result && node.className && node.className.match(cl.regexp);\n }, true);\n }\n function matchesAttributes(node, exp) {\n return !exp.attributes || exp.attributes.reduce(function(result, att) {\n var nodeAtt = node.getAttribute(att.key);\n return result && nodeAtt !== null && (!att.value || att.test(nodeAtt));\n }, true);\n }\n function matchesId(node, exp) {\n return !exp.id || node.id === exp.id;\n }\n function matchesPseudos(target, exp) {\n if (!exp.pseudos || exp.pseudos.reduce(function(result, pseudo) {\n if (pseudo.name === 'not') {\n return result && !matchExpressions([ target ], pseudo.expressions, false).length;\n }\n throw new Error('the pseudo selector ' + pseudo.name + ' has not yet been implemented');\n }, true)) {\n return true;\n }\n return false;\n }\n var escapeRegExp = function() {\n var from = /(?=[\\-\\[\\]{}()*+?.\\\\\\^$|,#\\s])/g;\n var to = '\\\\';\n return function(string) {\n return string.replace(from, to);\n };\n }();\n var reUnescape = /\\\\/g;\n function convertAttributes(atts) {\n if (!atts) {\n return;\n }\n return atts.map(function(att) {\n var attributeKey = att.name.replace(reUnescape, '');\n var attributeValue = (att.value || '').replace(reUnescape, '');\n var test, regexp;\n switch (att.operator) {\n case '^=':\n regexp = new RegExp('^' + escapeRegExp(attributeValue));\n break;\n\n case '$=':\n regexp = new RegExp(escapeRegExp(attributeValue) + '$');\n break;\n\n case '~=':\n regexp = new RegExp('(^|\\\\s)' + escapeRegExp(attributeValue) + '(\\\\s|$)');\n break;\n\n case '|=':\n regexp = new RegExp('^' + escapeRegExp(attributeValue) + '(-|$)');\n break;\n\n case '=':\n test = function test(value) {\n return attributeValue === value;\n };\n break;\n\n case '*=':\n test = function test(value) {\n return value && value.includes(attributeValue);\n };\n break;\n\n case '!=':\n test = function test(value) {\n return attributeValue !== value;\n };\n break;\n\n default:\n test = function test(value) {\n return !!value;\n };\n }\n if (attributeValue === '' && /^[*$^]=$/.test(att.operator)) {\n test = function test() {\n return false;\n };\n }\n if (!test) {\n test = function test(value) {\n return value && regexp.test(value);\n };\n }\n return {\n key: attributeKey,\n value: attributeValue,\n test: test\n };\n });\n }\n function convertClasses(classes) {\n if (!classes) {\n return;\n }\n return classes.map(function(className) {\n className = className.replace(reUnescape, '');\n return {\n value: className,\n regexp: new RegExp('(^|\\\\s)' + escapeRegExp(className) + '(\\\\s|$)')\n };\n });\n }\n function convertPseudos(pseudos) {\n if (!pseudos) {\n return;\n }\n return pseudos.map(function(p) {\n var expressions;\n if (p.name === 'not') {\n expressions = axe.utils.cssParser.parse(p.value);\n expressions = expressions.selectors ? expressions.selectors : [ expressions ];\n expressions = convertExpressions(expressions);\n }\n return {\n name: p.name,\n expressions: expressions,\n value: p.value\n };\n });\n }\n convertExpressions = function convertExpressions(expressions) {\n return expressions.map(function(exp) {\n var newExp = [];\n var rule = exp.rule;\n while (rule) {\n newExp.push({\n tag: rule.tagName ? rule.tagName.toLowerCase() : '*',\n combinator: rule.nestingOperator ? rule.nestingOperator : ' ',\n id: rule.id,\n attributes: convertAttributes(rule.attrs),\n classes: convertClasses(rule.classNames),\n pseudos: convertPseudos(rule.pseudos)\n });\n rule = rule.rule;\n }\n return newExp;\n });\n };\n function createLocalVariables(nodes, anyLevel, thisLevel, parentShadowId) {\n var retVal = {\n nodes: nodes.slice(),\n anyLevel: anyLevel,\n thisLevel: thisLevel,\n parentShadowId: parentShadowId\n };\n retVal.nodes.reverse();\n return retVal;\n }\n function matchesSelector(node, exp) {\n return matchesTag(node.actualNode, exp[0]) && matchesClasses(node.actualNode, exp[0]) && matchesAttributes(node.actualNode, exp[0]) && matchesId(node.actualNode, exp[0]) && matchesPseudos(node, exp[0]);\n }\n matchExpressions = function matchExpressions(domTree, expressions, recurse, filter) {\n var stack = [];\n var nodes = Array.isArray(domTree) ? domTree : [ domTree ];\n var currentLevel = createLocalVariables(nodes, expressions, [], domTree[0].shadowId);\n var result = [];\n while (currentLevel.nodes.length) {\n var node = currentLevel.nodes.pop();\n var childOnly = [];\n var childAny = [];\n var combined = currentLevel.anyLevel.slice().concat(currentLevel.thisLevel);\n var added = false;\n for (var i = 0; i < combined.length; i++) {\n var exp = combined[i];\n if (matchesSelector(node, exp) && (!exp[0].id || node.shadowId === currentLevel.parentShadowId)) {\n if (exp.length === 1) {\n if (!added && (!filter || filter(node))) {\n result.push(node);\n added = true;\n }\n } else {\n var rest = exp.slice(1);\n if ([ ' ', '>' ].includes(rest[0].combinator) === false) {\n throw new Error('axe.utils.querySelectorAll does not support the combinator: ' + exp[1].combinator);\n }\n if (rest[0].combinator === '>') {\n childOnly.push(rest);\n } else {\n childAny.push(rest);\n }\n }\n }\n if (currentLevel.anyLevel.includes(exp) && (!exp[0].id || node.shadowId === currentLevel.parentShadowId)) {\n childAny.push(exp);\n }\n }\n if (node.children && node.children.length && recurse) {\n stack.push(currentLevel);\n currentLevel = createLocalVariables(node.children, childAny, childOnly, node.shadowId);\n }\n while (!currentLevel.nodes.length && stack.length) {\n currentLevel = stack.pop();\n }\n }\n return result;\n };\n axe.utils.querySelectorAll = function(domTree, selector) {\n return axe.utils.querySelectorAllFilter(domTree, selector);\n };\n axe.utils.querySelectorAllFilter = function(domTree, selector, filter) {\n domTree = Array.isArray(domTree) ? domTree : [ domTree ];\n var expressions = axe.utils.cssParser.parse(selector);\n expressions = expressions.selectors ? expressions.selectors : [ expressions ];\n expressions = convertExpressions(expressions);\n return matchExpressions(domTree, expressions, true, filter);\n };\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n (function() {\n 'use strict';\n function noop() {}\n function funcGuard(f) {\n if (typeof f !== 'function') {\n throw new TypeError('Queue methods require functions as arguments');\n }\n }\n function queue() {\n var tasks = [];\n var started = 0;\n var remaining = 0;\n var completeQueue = noop;\n var complete = false;\n var err;\n var defaultFail = function defaultFail(e) {\n err = e;\n setTimeout(function() {\n if (err !== undefined && err !== null) {\n axe.log('Uncaught error (of queue)', err);\n }\n }, 1);\n };\n var failed = defaultFail;\n function createResolve(i) {\n return function(r) {\n tasks[i] = r;\n remaining -= 1;\n if (!remaining && completeQueue !== noop) {\n complete = true;\n completeQueue(tasks);\n }\n };\n }\n function abort(msg) {\n completeQueue = noop;\n failed(msg);\n return tasks;\n }\n function pop() {\n var length = tasks.length;\n for (;started < length; started++) {\n var task = tasks[started];\n try {\n task.call(null, createResolve(started), abort);\n } catch (e) {\n abort(e);\n }\n }\n }\n var q = {\n defer: function defer(fn) {\n if ((typeof fn === 'undefined' ? 'undefined' : _typeof(fn)) === 'object' && fn.then && fn.catch) {\n var defer = fn;\n fn = function fn(resolve, reject) {\n defer.then(resolve).catch(reject);\n };\n }\n funcGuard(fn);\n if (err !== undefined) {\n return;\n } else if (complete) {\n throw new Error('Queue already completed');\n }\n tasks.push(fn);\n ++remaining;\n pop();\n return q;\n },\n then: function then(fn) {\n funcGuard(fn);\n if (completeQueue !== noop) {\n throw new Error('queue `then` already set');\n }\n if (!err) {\n completeQueue = fn;\n if (!remaining) {\n complete = true;\n completeQueue(tasks);\n }\n }\n return q;\n },\n catch: function _catch(fn) {\n funcGuard(fn);\n if (failed !== defaultFail) {\n throw new Error('queue `catch` already set');\n }\n if (!err) {\n failed = fn;\n } else {\n fn(err);\n err = null;\n }\n return q;\n },\n abort: abort\n };\n return q;\n }\n axe.utils.queue = queue;\n })();\n 'use strict';\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n (function(exports) {\n 'use strict';\n var messages = {}, subscribers = {}, errorTypes = Object.freeze([ 'EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError' ]);\n function _getSource() {\n var application = 'axeAPI', version = '', src;\n if (typeof axe !== 'undefined' && axe._audit && axe._audit.application) {\n application = axe._audit.application;\n }\n if (typeof axe !== 'undefined') {\n version = axe.version;\n }\n src = application + '.' + version;\n return src;\n }\n function verify(postedMessage) {\n if ((typeof postedMessage === 'undefined' ? 'undefined' : _typeof(postedMessage)) === 'object' && typeof postedMessage.uuid === 'string' && postedMessage._respondable === true) {\n var messageSource = _getSource();\n return postedMessage._source === messageSource || postedMessage._source === 'axeAPI.x.y.z' || messageSource === 'axeAPI.x.y.z';\n }\n return false;\n }\n function post(win, topic, message, uuid, keepalive, callback) {\n var error;\n if (message instanceof Error) {\n error = {\n name: message.name,\n message: message.message,\n stack: message.stack\n };\n message = undefined;\n }\n var data = {\n uuid: uuid,\n topic: topic,\n message: message,\n error: error,\n _respondable: true,\n _source: _getSource(),\n _keepalive: keepalive\n };\n if (typeof callback === 'function') {\n messages[uuid] = callback;\n }\n win.postMessage(JSON.stringify(data), '*');\n }\n function respondable(win, topic, message, keepalive, callback) {\n var id = uuid.v1();\n post(win, topic, message, id, keepalive, callback);\n }\n respondable.subscribe = function(topic, callback) {\n subscribers[topic] = callback;\n };\n respondable.isInFrame = function(win) {\n win = win || window;\n return !!win.frameElement;\n };\n function createResponder(source, topic, uuid) {\n return function(message, keepalive, callback) {\n post(source, topic, message, uuid, keepalive, callback);\n };\n }\n function publish(source, data, keepalive) {\n var topic = data.topic;\n var subscriber = subscribers[topic];\n if (subscriber) {\n var responder = createResponder(source, null, data.uuid);\n subscriber(data.message, keepalive, responder);\n }\n }\n function buildErrorObject(error) {\n var msg = error.message || 'Unknown error occurred';\n var errorName = errorTypes.includes(error.name) ? error.name : 'Error';\n var ErrConstructor = window[errorName] || Error;\n if (error.stack) {\n msg += '\\n' + error.stack.replace(error.message, '');\n }\n return new ErrConstructor(msg);\n }\n function parseMessage(dataString) {\n var data;\n if (typeof dataString !== 'string') {\n return;\n }\n try {\n data = JSON.parse(dataString);\n } catch (ex) {}\n if (!verify(data)) {\n return;\n }\n if (_typeof(data.error) === 'object') {\n data.error = buildErrorObject(data.error);\n } else {\n data.error = undefined;\n }\n return data;\n }\n if (typeof window.addEventListener === 'function') {\n window.addEventListener('message', function(e) {\n var data = parseMessage(e.data);\n if (!data) {\n return;\n }\n var uuid = data.uuid;\n var keepalive = data._keepalive;\n var callback = messages[uuid];\n if (callback) {\n var result = data.error || data.message;\n var responder = createResponder(e.source, data.topic, uuid);\n callback(result, keepalive, responder);\n if (!keepalive) {\n delete messages[uuid];\n }\n }\n if (!data.error) {\n try {\n publish(e.source, data, keepalive);\n } catch (err) {\n post(e.source, data.topic, err, uuid, false);\n }\n }\n }, false);\n }\n exports.respondable = respondable;\n })(utils);\n 'use strict';\n function matchTags(rule, runOnly) {\n 'use strict';\n var include, exclude, matching;\n var defaultExclude = axe._audit && axe._audit.tagExclude ? axe._audit.tagExclude : [];\n if (runOnly.hasOwnProperty('include') || runOnly.hasOwnProperty('exclude')) {\n include = runOnly.include || [];\n include = Array.isArray(include) ? include : [ include ];\n exclude = runOnly.exclude || [];\n exclude = Array.isArray(exclude) ? exclude : [ exclude ];\n exclude = exclude.concat(defaultExclude.filter(function(tag) {\n return include.indexOf(tag) === -1;\n }));\n } else {\n include = Array.isArray(runOnly) ? runOnly : [ runOnly ];\n exclude = defaultExclude.filter(function(tag) {\n return include.indexOf(tag) === -1;\n });\n }\n matching = include.some(function(tag) {\n return rule.tags.indexOf(tag) !== -1;\n });\n if (matching || include.length === 0 && rule.enabled !== false) {\n return exclude.every(function(tag) {\n return rule.tags.indexOf(tag) === -1;\n });\n } else {\n return false;\n }\n }\n axe.utils.ruleShouldRun = function(rule, context, options) {\n 'use strict';\n var runOnly = options.runOnly || {};\n var ruleOptions = (options.rules || {})[rule.id];\n if (rule.pageLevel && !context.page) {\n return false;\n } else if (runOnly.type === 'rule') {\n return runOnly.values.indexOf(rule.id) !== -1;\n } else if (ruleOptions && typeof ruleOptions.enabled === 'boolean') {\n return ruleOptions.enabled;\n } else if (runOnly.type === 'tag' && runOnly.values) {\n return matchTags(rule, runOnly.values);\n } else {\n return matchTags(rule, []);\n }\n };\n 'use strict';\n function getScroll(elm) {\n var style = window.getComputedStyle(elm);\n var visibleOverflowY = style.getPropertyValue('overflow-y') === 'visible';\n var visibleOverflowX = style.getPropertyValue('overflow-x') === 'visible';\n if (!visibleOverflowY && elm.scrollHeight > elm.clientHeight || !visibleOverflowX && elm.scrollWidth > elm.clientWidth) {\n return {\n elm: elm,\n top: elm.scrollTop,\n left: elm.scrollLeft\n };\n }\n }\n function setScroll(elm, top, left) {\n if (elm === window) {\n return elm.scroll(top, left);\n } else {\n elm.scrollTop = top;\n elm.scrollLeft = left;\n }\n }\n function getElmScrollRecursive(root) {\n return Array.from(root.children).reduce(function(scrolls, elm) {\n var scroll = getScroll(elm);\n if (scroll) {\n scrolls.push(scroll);\n }\n return scrolls.concat(getElmScrollRecursive(elm));\n }, []);\n }\n axe.utils.getScrollState = function getScrollState() {\n var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n var root = win.document.documentElement;\n var windowScroll = [ win.pageXOffset !== undefined ? {\n elm: win,\n top: win.pageYOffset,\n left: win.pageXOffset\n } : {\n elm: root,\n top: root.scrollTop,\n left: root.scrollLeft\n } ];\n return windowScroll.concat(getElmScrollRecursive(document.body));\n };\n axe.utils.setScrollState = function setScrollState(scrollState) {\n scrollState.forEach(function(_ref) {\n var elm = _ref.elm, top = _ref.top, left = _ref.left;\n return setScroll(elm, top, left);\n });\n };\n 'use strict';\n function getDeepest(collection) {\n 'use strict';\n return collection.sort(function(a, b) {\n if (axe.utils.contains(a, b)) {\n return 1;\n }\n return -1;\n })[0];\n }\n function isNodeInContext(node, context) {\n 'use strict';\n var include = context.include && getDeepest(context.include.filter(function(candidate) {\n return axe.utils.contains(candidate, node);\n }));\n var exclude = context.exclude && getDeepest(context.exclude.filter(function(candidate) {\n return axe.utils.contains(candidate, node);\n }));\n if (!exclude && include || exclude && axe.utils.contains(exclude, include)) {\n return true;\n }\n return false;\n }\n function pushNode(result, nodes) {\n 'use strict';\n var temp;\n if (result.length === 0) {\n return nodes;\n }\n if (result.length < nodes.length) {\n temp = result;\n result = nodes;\n nodes = temp;\n }\n for (var i = 0, l = nodes.length; i < l; i++) {\n if (!result.includes(nodes[i])) {\n result.push(nodes[i]);\n }\n }\n return result;\n }\n function reduceIncludes(includes) {\n return includes.reduce(function(res, el) {\n if (!res.length || !res[res.length - 1].actualNode.contains(el.actualNode)) {\n res.push(el);\n }\n return res;\n }, []);\n }\n axe.utils.select = function select(selector, context) {\n 'use strict';\n var result = [], candidate;\n if (axe._selectCache) {\n for (var j = 0, l = axe._selectCache.length; j < l; j++) {\n var item = axe._selectCache[j];\n if (item.selector === selector) {\n return item.result;\n }\n }\n }\n var curried = function(context) {\n return function(node) {\n return isNodeInContext(node, context);\n };\n }(context);\n var reducedIncludes = reduceIncludes(context.include);\n for (var i = 0; i < reducedIncludes.length; i++) {\n candidate = reducedIncludes[i];\n if (candidate.actualNode.nodeType === candidate.actualNode.ELEMENT_NODE && axe.utils.matchesSelector(candidate.actualNode, selector) && curried(candidate)) {\n result = pushNode(result, [ candidate ]);\n }\n result = pushNode(result, axe.utils.querySelectorAllFilter(candidate, selector, curried));\n }\n if (axe._selectCache) {\n axe._selectCache.push({\n selector: selector,\n result: result\n });\n }\n return result;\n };\n 'use strict';\n axe.utils.toArray = function(thing) {\n 'use strict';\n return Array.prototype.slice.call(thing);\n };\n axe.utils.uniqueArray = function(arr1, arr2) {\n return arr1.concat(arr2).filter(function(elem, pos, arr) {\n return arr.indexOf(elem) === pos;\n });\n };\n 'use strict';\n axe.utils.tokenList = function(str) {\n 'use strict';\n return str.trim().replace(/\\s{2,}/g, ' ').split(' ');\n };\n 'use strict';\n var uuid;\n (function(_global) {\n var _rng;\n var _crypto = _global.crypto || _global.msCrypto;\n if (!_rng && _crypto && _crypto.getRandomValues) {\n var _rnds8 = new Uint8Array(16);\n _rng = function whatwgRNG() {\n _crypto.getRandomValues(_rnds8);\n return _rnds8;\n };\n }\n if (!_rng) {\n var _rnds = new Array(16);\n _rng = function _rng() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 3) === 0) {\n r = Math.random() * 4294967296;\n }\n _rnds[i] = r >>> ((i & 3) << 3) & 255;\n }\n return _rnds;\n };\n }\n var BufferClass = typeof _global.Buffer == 'function' ? _global.Buffer : Array;\n var _byteToHex = [];\n var _hexToByte = {};\n for (var i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 256).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n function parse(s, buf, offset) {\n var i = buf && offset || 0, ii = 0;\n buf = buf || [];\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n if (ii < 16) {\n buf[i + ii++] = _hexToByte[oct];\n }\n });\n while (ii < 16) {\n buf[i + ii++] = 0;\n }\n return buf;\n }\n function unparse(buf, offset) {\n var i = offset || 0, bth = _byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]];\n }\n var _seedBytes = _rng();\n var _nodeId = [ _seedBytes[0] | 1, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] ];\n var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 16383;\n var _lastMSecs = 0, _lastNSecs = 0;\n function v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n options = options || {};\n var clockseq = options.clockseq != null ? options.clockseq : _clockseq;\n var msecs = options.msecs != null ? options.msecs : new Date().getTime();\n var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1;\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4;\n if (dt < 0 && options.clockseq == null) {\n clockseq = clockseq + 1 & 16383;\n }\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {\n nsecs = 0;\n }\n if (nsecs >= 1e4) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n msecs += 122192928e5;\n var tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296;\n b[i++] = tl >>> 24 & 255;\n b[i++] = tl >>> 16 & 255;\n b[i++] = tl >>> 8 & 255;\n b[i++] = tl & 255;\n var tmh = msecs / 4294967296 * 1e4 & 268435455;\n b[i++] = tmh >>> 8 & 255;\n b[i++] = tmh & 255;\n b[i++] = tmh >>> 24 & 15 | 16;\n b[i++] = tmh >>> 16 & 255;\n b[i++] = clockseq >>> 8 | 128;\n b[i++] = clockseq & 255;\n var node = options.node || _nodeId;\n for (var n = 0; n < 6; n++) {\n b[i + n] = node[n];\n }\n return buf ? buf : unparse(b);\n }\n function v4(options, buf, offset) {\n var i = buf && offset || 0;\n if (typeof options == 'string') {\n buf = options == 'binary' ? new BufferClass(16) : null;\n options = null;\n }\n options = options || {};\n var rnds = options.random || (options.rng || _rng)();\n rnds[6] = rnds[6] & 15 | 64;\n rnds[8] = rnds[8] & 63 | 128;\n if (buf) {\n for (var ii = 0; ii < 16; ii++) {\n buf[i + ii] = rnds[ii];\n }\n }\n return buf || unparse(rnds);\n }\n uuid = v4;\n uuid.v1 = v1;\n uuid.v4 = v4;\n uuid.parse = parse;\n uuid.unparse = unparse;\n uuid.BufferClass = BufferClass;\n })(window);\n 'use strict';\n axe.utils.validInputTypes = function validInputTypes() {\n 'use strict';\n return [ 'hidden', 'text', 'search', 'tel', 'url', 'email', 'password', 'date', 'month', 'week', 'time', 'datetime-local', 'number', 'range', 'color', 'checkbox', 'radio', 'file', 'submit', 'image', 'reset', 'button' ];\n };\n 'use strict';\n 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', 'cnr', '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', 'cuy', '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', 'gkd', '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', 'gnj', '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', 'gyo', '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', 'hkn', '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', 'hyw', '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', 'lws', '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', 'nlm', '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', 'nzd', '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', 'pbm', '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', 'tez', '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 axe.utils.validLangs = function() {\n 'use strict';\n return langs;\n };\n 'use strict';\n var _extends = Object.assign || function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n };\n function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n } else {\n return Array.from(arr);\n }\n }\n axe._load({\n data: {\n rules: {\n accesskeys: {\n description: 'Ensures every accesskey attribute value is unique',\n help: 'accesskey attribute value must be unique'\n },\n 'area-alt': {\n description: 'Ensures elements of image maps have alternate text',\n help: 'Active elements must have alternate text'\n },\n 'aria-allowed-attr': {\n description: 'Ensures ARIA attributes are allowed for an element\\'s role',\n help: 'Elements must only use allowed ARIA attributes'\n },\n 'aria-allowed-role': {\n description: 'Ensures role attribute has an appropriate value for the element',\n help: 'ARIA role must be appropriate for the element'\n },\n 'aria-dpub-role-fallback': {\n description: 'Ensures unsupported DPUB roles are only used on elements with implicit fallback roles',\n help: 'Unsupported DPUB ARIA roles should be used on elements with implicit fallback roles'\n },\n 'aria-hidden-body': {\n description: 'Ensures aria-hidden=\\'true\\' is not present on the document body.',\n help: 'aria-hidden=\\'true\\' must not be present on the document body'\n },\n 'aria-hidden-focus': {\n description: 'Ensures aria-hidden elements do not contain focusable elements',\n help: 'ARIA hidden element must not contain focusable elements'\n },\n 'aria-required-attr': {\n description: 'Ensures elements with ARIA roles have all required ARIA attributes',\n help: 'Required ARIA attributes must be provided'\n },\n 'aria-required-children': {\n description: 'Ensures elements with an ARIA role that require child roles contain them',\n help: 'Certain ARIA roles must contain particular children'\n },\n 'aria-required-parent': {\n description: 'Ensures elements with an ARIA role that require parent roles are contained by them',\n help: 'Certain ARIA roles must be contained by particular parents'\n },\n 'aria-roles': {\n description: 'Ensures all elements with a role attribute use a valid value',\n help: 'ARIA roles used must conform to valid values'\n },\n 'aria-valid-attr-value': {\n description: 'Ensures all ARIA attributes have valid values',\n help: 'ARIA attributes must conform to valid values'\n },\n 'aria-valid-attr': {\n description: 'Ensures attributes that begin with aria- are valid ARIA attributes',\n help: 'ARIA attributes must conform to valid names'\n },\n 'audio-caption': {\n description: 'Ensures