diff --git a/.gitignore b/.gitignore index 81cb582..2ccd045 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Custom +dist + # Logs logs *.log diff --git a/dist/completed/10/code.js b/dist/completed/10/code.js deleted file mode 100644 index f9eb9fb..0000000 --- a/dist/completed/10/code.js +++ /dev/null @@ -1,95 +0,0 @@ - -function proxyFetch(url, params) { - const proxyUrl = 'https://cors-anywhere.herokuapp.com/'; - return fetch(proxyUrl + url, params); -} - -async function getRandomName() { - const response = await proxyFetch('http://names.drycodes.com/1?combine=2&separator=space'); - const [name] = await response.json(); - return name; -} - -async function getRandomAnimalImage(kind) { - const response = await proxyFetch(`https://some-random-api.ml/img/${kind}`); - const {link} = await response.json(); - return link; -} - -async function getRandomAnimalFact(kind) { - const response = await proxyFetch(`https://some-random-api.ml/facts/${kind}`); - const {fact} = await response.json(); - return fact; -} - -async function showAnimal(kind) { - while (document.body.firstElementChild) { - document.body.removeChild(document.body.firstElementChild); - } - const container = document.createElement('div'); - container.classList.add('animal'); - const reloadButton = document.createElement('button'); - reloadButton.classList.add('reload'); - const image = document.createElement('img'); - image.referrerPolicy = 'no-referrer'; - image.src = await getRandomAnimalImage(kind); - const paragraph = document.createElement('p'); - paragraph.textContent = await getRandomAnimalFact(kind); - reloadButton.addEventListener('click', async function() { - const link = await getRandomAnimalImage(kind); - const text = await getRandomAnimalFact(kind); - image.src = link; - image.onload = () => paragraph.textContent = text; - }); - container.appendChild(reloadButton); - container.appendChild(image); - container.appendChild(paragraph); - document.body.appendChild(container); -} - -async function selectAnimal() { - document.body.innerHTML = - `
-

А на чьей стороне ты?

- -
`; - const items = document.querySelectorAll('.select ul > li'); - const animals = ['cat', 'dog', 'fox']; - for (let i = 0; i < items.length; ++i) { - items[i].addEventListener('click', async function() { - await showAnimal(animals[i]); - }); - } -} - - -async function initGreeting() { - const name = await getRandomName(); - const text = document.createElement('div'); - text.classList.add('welcome'); - text.innerHTML = - `

Добро пожаловать, странник!

-

Я буду звать тебя ${name}, ок?

`; - const buttons = document.createElement('div'); - const okButton = document.createElement('button'); - okButton.classList.add('button'); - okButton.textContent = 'Ладно...'; - const noButton = document.createElement('button'); - noButton.classList.add('button'); - noButton.textContent = 'А может не надо?..'; - buttons.appendChild(okButton); - buttons.appendChild(noButton); - document.body.appendChild(text); - document.body.appendChild(buttons); - okButton.addEventListener('click', selectAnimal); - noButton.addEventListener('click', async function() { - const newName = await getRandomName(); - text.innerHTML = `

Хм... Тогда что насчёт

${newName}?

`; - }); -} - -initGreeting(); \ No newline at end of file diff --git a/dist/completed/10/img/refresh.png b/dist/completed/10/img/refresh.png deleted file mode 100644 index 42d8ea0..0000000 Binary files a/dist/completed/10/img/refresh.png and /dev/null differ diff --git a/dist/completed/10/index.html b/dist/completed/10/index.html deleted file mode 100644 index 000274b..0000000 --- a/dist/completed/10/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - Co Pets - - - - - \ No newline at end of file diff --git a/dist/completed/10/style.css b/dist/completed/10/style.css deleted file mode 100644 index b8a41be..0000000 --- a/dist/completed/10/style.css +++ /dev/null @@ -1,130 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Comfortaa:400,700&subset=cyrillic'); -html, body { - height: 100%; - width: 100%; - margin: 0; -} -body { - display: flex; - flex-flow: column nowrap; - justify-content: center; - align-content: center; - background-color: #5bc0eb; -} -.welcome { - height: auto; - flex: 1; - display: flex; - flex-flow: column nowrap; - justify-content: center; - font-size: 4vw; - font-family: 'Comfortaa', sans-serif; - font-weight: 700; - text-align: center; - color: white; -} -.welcome > p { - margin: 0; -} -.welcome > p:first-child { - margin-bottom: 20px; -} -.welcome .name { - color: #E55934; -} -.welcome + div { - height: 25%; - display: flex; - align-items: flex-start; - justify-content: center; -} -.button { - margin: 0 40px; - outline: none; - border: none; - font-family: 'Comfortaa', sans-serif; - font-weight: 400; - font-size: 5vh; - padding: 20px 40px; - cursor: pointer; - border-radius: 20px; - border: black solid 2px; - background-color: white; -} - -.select { - display: flex; - flex-flow: column nowrap; - align-items: center; -} -.select > p { - font-size: 4vw; - font-family: 'Comfortaa', sans-serif; - font-weight: 700; - text-align: center; - color: white; -} -.select > ul { - width: 600px; - padding: 0; - margin: 0; - list-style: none; - background-color: #7e64cc; - text-align: center; - font-size: 3rem; - font-family: 'Comfortaa', sans-serif; - font-weight: 700; - color: #4f4f69; - border-radius: 30px; - border: 4px solid #7e64cc; - overflow: hidden; -} -.select li { - height: 100px; - line-height: 100px; - /* padding-right: 60px; */ - background-color: white; - user-select: none; - cursor: pointer; -} -.select li:not(:first-child) { - margin-top: 4px; -} -.select li:hover { - background-color: orange; -} -.animal { - height: 100%; - display: flex; - flex-flow: column nowrap; - align-items: center; - justify-content: center; -} -.reload { - box-sizing: border-box; - height: 5vw; - width: 5vw; - padding: 1vw; - outline: none; - border: none; - cursor: pointer; - border-radius: 50%; - box-shadow: 1px 1px 1px 0 black; - margin-bottom: 40px; - background-color: white; -} -.reload > img { - width: 100%; - height: 100%; -} -.animal > img { - height: 60%; - box-shadow: 20px 20px 0 0 #f1f068; -} -.animal > p { - text-align: center; - font-size: 3rem; - font-family: 'Comfortaa', sans-serif; - font-weight: 400; - text-shadow: 1px 1px 0 white; -} \ No newline at end of file diff --git a/dist/completed/11/__snapshots__/index.test.js.snap b/dist/completed/11/__snapshots__/index.test.js.snap deleted file mode 100644 index ba06c87..0000000 --- a/dist/completed/11/__snapshots__/index.test.js.snap +++ /dev/null @@ -1,29 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`dwadad 1`] = ` -Object { - "genre": "novel", - "name": "The Great Gatsby", - "year": 1925, -} -`; - -exports[`Тестирование функций Array для разных типов Функция фильтрации 1`] = ` -Array [ - 1, - 2, - 3, - 5, - 6, -] -`; - -exports[`Тестирование функций Array для разных типов Функция фильтрации 2`] = ` -Array [ - "str1", - "str2", - "str3", - "str5", - "str6", -] -`; diff --git a/dist/completed/11/folder/fe.js b/dist/completed/11/folder/fe.js deleted file mode 100644 index 459fe8c..0000000 --- a/dist/completed/11/folder/fe.js +++ /dev/null @@ -1,5 +0,0 @@ - - -export function trying() { - console.log('fe.js'); -} \ No newline at end of file diff --git a/dist/completed/11/folder/fe.test.js b/dist/completed/11/folder/fe.test.js deleted file mode 100644 index e191bcf..0000000 --- a/dist/completed/11/folder/fe.test.js +++ /dev/null @@ -1,5 +0,0 @@ - - -test('test', function() { - expect(1).toBe(1); -}); \ No newline at end of file diff --git a/dist/completed/11/index.html b/dist/completed/11/index.html deleted file mode 100644 index 9fedec3..0000000 --- a/dist/completed/11/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - Выбор варианта - - -
-

- Кликните на Куб, чтобы узнать свой вариант. -

-
-
- 3 -
-
-
- - - \ No newline at end of file diff --git a/dist/completed/11/index.js b/dist/completed/11/index.js deleted file mode 100644 index 1de7bac..0000000 --- a/dist/completed/11/index.js +++ /dev/null @@ -1,14 +0,0 @@ - -function div(a, b) { - return a / b; -} - -export function sum(a, b) { - return a + b; -} - -console.log('index.js'); - -import {trying} from './folder/fe.js'; - -trying(); \ No newline at end of file diff --git a/dist/completed/11/index.test.js b/dist/completed/11/index.test.js deleted file mode 100644 index 4b561e5..0000000 --- a/dist/completed/11/index.test.js +++ /dev/null @@ -1,510 +0,0 @@ -import { sum } from "./index.js"; -import { tsConstructorType } from "@babel/types"; - -console.log(sum); -test("adds 1 + 2 to equal 3", () => { - expect(sum(1, 2)).toBe(3); -}); - -test("dawd", () => { - expect("dawd").not.toContain("e"); -}); -const houseForSale = { - bath: true, - bedrooms: 4, - kitchen: { - amenities: ["плита", "духовка", "стиральная машина"], - area: 20, - wallColor: "белый" - } -}; - -test("the house has my desired features", function() { - const desiredHouse = { - bath: true, - kitchen: { - amenities: expect.arrayContaining(["плита"]), - wallColor: expect.stringMatching(/белый|желтый/) - } - }; - expect(houseForSale).toMatchObject(desiredHouse); -}); - -test("the number of elements must match exactly", () => { - const expectedResult = [{ foo: "bar" }, { baz: 1 }]; - const actualResult = [{ foo: "bar" }, { baz: 1 }]; - expect(actualResult).toMatchObject(expectedResult); -}); - -test(".toMatchObject is called for each elements, so extra object properties are okay", () => { - expect([{ foo: "bar" }, { baz: 1, extra: "quux" }]).toMatchObject([ - { foo: "bar" }, - { baz: 1 } - ]); -}); - -let compile = function() { - console.log([].join.call(arguments, " -> ")); -}; -function drink(something) { - if (something === "чернила осьминога") { - compile = function() { - if (arguments.length === 3) { - const includes = [].includes.bind(arguments); - if ( - includes("волосы козы") && - includes("гнилая груша") && - includes("муравьиный яд") - ) { - throw Error("Ктулху"); - } - } - }; - } else { - console.log("Bueeeh.."); - } -} - -test("вызов Ктулху", function() { - expect(function() { - drink("чернила осьминога"); - compile("волосы козы", "гнилая груша", "муравьиный яд"); - }).toThrow("Ктулху"); -}); - -function getDataById(id) { - if (id === 1) { - return { name: "The Great Gatsby", year: 1925, genre: "novel" }; - } else if (id === 2) { - return { name: "Ulysses", year: 1918, genre: "modernist novel" }; - } else { - return null; - } -} - -test("Получение данных по id", function() { - const id = 2; - const data = getDataById(id); - expect(data).toMatchInlineSnapshot(` - Object { - "genre": "modernist novel", - "name": "Ulysses", - "year": 1918, - } - `); -}); - -test('dwadad', function() { - const id = 1; - const data = getDataById(id); - expect(data).toMatchSnapshot(); -}); - - -class DataStorage { - constructor(maxElements, locale) { - this.maxElements = maxElements; - this._count = 0; - this._locale = locale; - this._innerStorage = {array: []}; - this._blocked = true; - } - - open() { - this._blocked = false; - } - - close() { - this._blocked = true; - } - - isOpen() { - return !this._blocked; - } - - addNext(value) { - if (this._blocked || this._count === this.maxElements) { - return false; - } - this._innerStorage.array.push(value); - this._count++; - return true; - } - - addByKey(key, value) { - if (this._blocked || this._innerStorage.hasOwnProperty(key) || this._count === this.maxElements) { - return false; - } - this._innerStorage[key] = value; - this._count++; - return true; - } - - isEmpty() { - return this._count === 0; - } - - clearAllData() { - if (this._blocked) { - return false; - } - this._innerStorage = {array: []}; - this._count = 0; - return true; - } -} - - -describe('Тестирование класса DataStorage', function() { - - let storage; - - beforeAll(function() { - const locale = 'ru-RU'; - const maxElements = 5; - storage = new DataStorage(maxElements, locale); - }); - - test('По умолчанию хранилище закрыто', function() { - expect(storage.isOpen()).toBeFalsy(); - }); - - describe('Закрытое хранилище', function() { - - afterEach(function() { - storage.close(); - }); - - test('Нельзя добавлять в массив', function() { - const testValue = 22; - const result = storage.addNext(testValue); - expect(result).toBeFalsy(); - expect(storage._count).toBe(0); - }); - - test('Нельзя добавлять по ключу', function() { - const testKey = 'alpha'; - const testValue = 22; - const result = storage.addByKey(testKey, testValue); - expect(result).toBeFalsy(); - expect(storage._count).toBe(0); - }); - - test('Нельзя очистить', function() { - const result = storage.clearAllData(); - expect(result).toBeFalsy(); - expect(storage._count).toBe(0); - }); - - test('Можно открыть', function() { - storage.open(); - expect(storage.isOpen()).toBeTruthy(); - }); - }); - - describe('Открытое хранилище', function() { - - beforeEach(function() { - storage.open(); - }); - - test('Добавление в массив', function() { - const testValue = 432; - const currentCount = storage._count; - storage.addNext(testValue); - expect(storage._count).toBe(currentCount + 1); - expect(storage._innerStorage.array[0]).toBe(testValue); - }); - - test('Добавление по ключу', function() { - const testKey = 'echo'; - const testValue = 432; - const currentCount = storage._count; - storage.addByKey(testKey, testValue); - expect(storage._count).toBe(currentCount + 1); - expect(storage._innerStorage[testKey]).toBe(testValue); - }); - - test('Можно закрыть', function() { - const countBeforeClosing = storage._count; - storage.close(); - expect(storage.isOpen()).toBeFalsy(); - expect(storage._count).toBe(countBeforeClosing); - }); - - describe('Хранилище с данными', function() { - - beforeEach(function() { - storage.clearAllData(); - storage.addNext('четверг'); - storage.addNext('пятница'); - storage.addByKey('interval', 7); - }); - - test('Очистка удаляет все данные', function() { - const result = storage.clearAllData(); - expect(result).toBeTruthy(); - expect(storage._count).toBe(0); - }); - - test('Нельзя добавить повторяющийся ключ', function() { - const testKey = 'interval'; - const testValue = 14; - const currentCount = storage._count; - const result = storage.addByKey(testKey, testValue); - expect(result).toBeFalsy(); - expect(storage._count).toBe(currentCount); - }); - }); - - describe('Хранилище переполнено', function() { - - beforeAll(function() { - storage.clearAllData(); - for (let i = 0; i < storage.maxElements; ++i) { - storage.addNext(i); - } - }); - - test('Нельзя больше добавлять в массив', function() { - const testValue = 22; - const currentCount = storage._count; - const result = storage.addNext(testValue); - expect(result).toBeFalsy(); - expect(storage._count).toBe(currentCount); - }); - - test('Нельзя больше добавлять по ключу', function() { - const testKey = 'alpha'; - const testValue = 22; - const currentCount = storage._count; - const result = storage.addByKey(testKey, testValue); - expect(result).toBeFalsy(); - expect(storage._count).toBe(currentCount); - }); - - }); - }); -}); - -test('Деление 8 на 2', function() { - const a = 8; - const b = 2; - const expectedResult = 4; - const result = a / b; - expect(result).toBeCloseTo(expectedResult); -}); -test('Деление -11 на 3', function() { - const a = -11; - const b = 3; - const expectedResult = -3.666666; - const result = a / b; - expect(result).toBeCloseTo(expectedResult); -}); -test('Деление -200 на 0', function() { - const a = -200; - const b = 0; - const expectedResult = -Infinity; -}); - -test.each([ - [8, 2, 4], - [-11, 3, -3.666666], - [-200, 0, -Infinity] -])('Деление чисел', function(a, b, expectedResult) { - const result = a / b; - expect(result).toBeCloseTo(expectedResult); -}); - - -describe.each([ - [[1, 2, 3, 4, 5, 6], 4], - [['str1', 'str2', 'str3', 'str4', 'str5', 'str6'], 'str4'] -])('Тестирование функций Array для разных типов', function(array, value) { - - test('Функция поиска', function() { - const result = array.find((el) => el === value); - expect(result).toBeDefined(); - }); - - test('Функция фильтрации', function() { - const result = array.filter((el) => el !== value); - expect(result).toMatchSnapshot(); - }); - - test('Функция проверки вхождения', function() { - const result = array.includes(value); - expect(result).toBeTruthy(); - }); - -}); - -function fetchData(url) { - return new Promise(function(resolve) { - let returnedData = null; - switch (url) { - case 'sweets': - returnedData = 'candys'; - break; - case 'veggies': - returnedData = 'potato'; - break; - case 'fruits': - returnedData = 'apricot'; - break; - default: - returnedData = 'nothing'; - break; - } - setTimeout(resolve, 3333, returnedData); - }); -} - -describe.skip('Тестирование асинхронных запросов', function() { - - test('Запрос на получение фрукта', function() { - return expect(fetchData('fruits')).resolves.toBe('apricot'); - }); - - test.each([ - ['diamonds'], - ['phones'], - ['combs'], - ['drug'] - ])('Запрос на получение того, чего нет', function(item) { - return expect(fetchData(item)).resolves.toBe('nothing'); - }); - - // Повышенный уровень опасности взрыва мозга! - test.each('Запросы на получение овощей, фруктов и сладостей вместе', function() { - return expect( - Promise.all([ - fetchData('veggies'), - fetchData('fruits'), - fetchData('sweets') - ]).then(results => results.join(', ')) - ).toBe('potato, apricot, candys'); - }); - -}); - -const module1 = { fetchData }; -test('Тестирование спаев', function() { - jest.spyOn(module1, 'fetchData'); - return module1.fetchData('electronics').then(function(data) { - expect(data).toBe('nothing'); - expect(module1.fetchData).toBeCalledTimes(1); - }); -}); - -const myModule = { - soldSomething: function() { - if (arguments.length === 0) { - return false; - } - console.log('И что же мы продаём?'); - console.log('Мы продаём:'); - for (const item of arguments) { - console.log(item); - } - return true; - }, - buySomething: function() { - const itemsToSold = ['Велосипед', 'Телевизор', 'Холодильник', 'Машина', 'Дача', 'Квартира']; - const solded = []; - const buyedItems = []; - console.log('И что же мы покупаем?'); - if (arguments.length === 0) { - console.log('Мы покупаем баобаб!'); - itemsToSold.forEach((item) => solded.push(item)); - buyedItems.push('Баобаб вот такой ширины!'); - } else { - console.log('Мы покупаем:'); - for (let i = 0; i < arguments.length; ++i) { - console.log(arguments[i]); - if (i < itemsToSold.length) { - solded.push(itemsToSold[i]); - } - buyedItems.push(arguments[i]); - } - } - myModule.soldSomething(...solded); - return buyedItems; - } -} - -describe.only('Спаи', function() { - - test('Чтобы купить что-нибудь ненужное, нужно сначала продать что-нибудь ненужное', function() { - jest.spyOn(myModule, 'soldSomething'); - myModule.buySomething('Гири'); - expect(myModule.soldSomething).toBeCalledWith('Велосипед'); - }); - test('Покупаем - значит продаём', function() { - jest.spyOn(myModule, 'soldSomething'); - myModule.buySomething(); - expect(myModule.soldSomething).toHaveBeenCalled(); - }); - - test('Покупаем 1 раз - значит продаём 1 раз', function() { - const spy = jest.spyOn(myModule, 'soldSomething'); - spy.clearMock(); - myModule.buySomething(); - expect(myModule.soldSomething).toHaveBeenCalledTimes(1); - }); - - test('Продажа совершается успешно', function() { - jest.spyOn(myModule, 'soldSomething'); - myModule.buySomething('груша'); - expect(myModule.soldSomething).toHaveReturnedWith(true); - }); - - test('Получение купленных вещей', function() { - jest.spyOn(myModule, 'buySomething'); - myModule.buySomething('чернила', 'какаду', 'удочка'); - expect(myModule.buySomething).toHaveReturnedWith(['чернила', 'какаду', 'удочка']); - }); -}); - - -function longAndComplexQueryToDatabase() { - const types = ['el', 'qu', 're', 'co']; - types.forEach((value, index) => { - if (value.length === index) { - value = value.repeat(12); - let codes = []; - for (const char of value) { - codes.push(char.charCodeAt(0)); - } - return codes - .filter((n) => n % 2) - .map((n) => n += 5 - Math.random() * 10) - .reduce((result, n) => result += n); - } - }); -} - -function checkDatabaseCount() { - let num = longAndComplexQueryToDatabase(); - if (num > 1000) { - return true; - } else { - return false; - } -} - -test('Проверка заполненности БД', function() { - longAndComplexQueryToDatabase = jest.fn(function() { - return 2000; - }); - const result = checkDatabaseCount(); - expect(result).toBeTruthy(); -}); - -test('Проверка заполненности БД', function() { - longAndComplexQueryToDatabase = jest.fn(function() { - return 400; - }); - const result = checkDatabaseCount(); - expect(result).toBeFalsy(); -}); diff --git a/dist/completed/11/life.js b/dist/completed/11/life.js deleted file mode 100644 index 898359d..0000000 --- a/dist/completed/11/life.js +++ /dev/null @@ -1,17 +0,0 @@ - -export class Man { - plantTree() { - console.log('Man must plant a tree - ✓'); - } - raiseSon() { - console.log('Man must raise a son - ✓'); - } - buildHouse() { - console.log('Man must build a house - ✓'); - } - liveMansLife() { - this.plantTree(); - this.raiseSon(); - this.buildHouse(); - } -} \ No newline at end of file diff --git a/dist/completed/11/life.test.js b/dist/completed/11/life.test.js deleted file mode 100644 index c986916..0000000 --- a/dist/completed/11/life.test.js +++ /dev/null @@ -1,33 +0,0 @@ -import {Man} from './life.js'; - -describe('Проверка жизни мужчины', function() { - - let man = null; - - beforeAll(function() { - man = new Man('Piter'); - jest.spyOn(man, 'plantTree'); - jest.spyOn(man, 'raiseSon'); - jest.spyOn(man, 'buildHouse'); - }); - - afterEach(function() { - jest.resetAllMocks(); - }); - - test('Посадил дерево', function() { - man.liveMansLife(); - expect(man.plantTree).toHaveBeenCalledTimes(1); - }); - - test('Вырастил сына', function() { - man.liveMansLife(); - expect(man.raiseSon).toHaveBeenCalledTimes(1); - }); - - test('Построил дом', function() { - man.liveMansLife(); - expect(man.buildHouse).toHaveBeenCalledTimes(1); - }); - -}); \ No newline at end of file diff --git a/dist/completed/11/package-lock.json b/dist/completed/11/package-lock.json deleted file mode 100644 index 910cdfd..0000000 --- a/dist/completed/11/package-lock.json +++ /dev/null @@ -1,6087 +0,0 @@ -{ - "name": "11", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.4" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", - "dev": true, - "requires": { - "@jest/source-map": "^24.3.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - } - }, - "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" - } - }, - "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" - } - }, - "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", - "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.0.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", - "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", - "dev": true, - "requires": { - "@types/jest-diff": "*" - } - }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", - "dev": true - }, - "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", - "dev": true - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", - "dev": true, - "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", - "dev": true - }, - "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", - "dev": true, - "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", - "dev": true - }, - "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.134", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.134.tgz", - "integrity": "sha512-C3uK2SrtWg/gSWaluLHWSHjyebVZCe4ZC0NVgTAoTq8tCR9FareRK5T7R7AS/nPZShtlEcjVMX1kQ8wi4nU68w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", - "dev": true, - "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" - } - } - } - }, - "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" - } - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.8.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", - "dev": true, - "requires": { - "pretty-format": "^24.8.0" - } - }, - "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", - "dev": true - }, - "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" - } - }, - "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^12.0.2" - } - }, - "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", - "dev": true - }, - "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" - } - }, - "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" - } - }, - "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.8.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", - "dev": true, - "requires": { - "merge-stream": "^1.0.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - } - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", - "integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "prompts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", - "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", - "dev": true, - "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", - "dev": true, - "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uglify-js": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.12.tgz", - "integrity": "sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/dist/completed/11/package.json b/dist/completed/11/package.json deleted file mode 100644 index bbef718..0000000 --- a/dist/completed/11/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "11", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "jest" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@types/jest": "^24.0.13", - "jest": "^24.8.0", - "prettier": "^1.17.1" - }, - "type": "module" -} diff --git a/dist/completed/11/style.css b/dist/completed/11/style.css deleted file mode 100644 index f86424d..0000000 --- a/dist/completed/11/style.css +++ /dev/null @@ -1,46 +0,0 @@ -html, body { - margin: 0; - width: 100%; - height: 100%; -} -body { - background-color: lightskyblue; - display: flex; -} -body > div { - display: flex; - width: 100%; - flex-flow: column nowrap; - align-items: center; -} -.text { - font-size: 4vw; - text-align: center; -} -.cube-outer { - height: 24vw; - width: 24vw; - background-color: black; - padding: 1.2vw; - cursor: pointer; - box-shadow: 0 0 20px 5px rgba(33,33,33,.6); -} -.cube-inner { - border-radius: 2vw; - background-color: red; - height: 100%; - width: 100%; - color: rgb(224,224,224); - font-size: 20vw; - text-align: center; - line-height: 24vw; - text-shadow: - 3px 3px 0 #000, - -1px -1px 0 #000, - 1px -1px 0 #000, - -1px 1px 0 #000, - 1px 1px 0 #000; -} -.cube-inner > span { - transition: opacity 4s ease-in 2s; -} \ No newline at end of file diff --git a/dist/completed/11/variant.js b/dist/completed/11/variant.js deleted file mode 100644 index a92dc17..0000000 --- a/dist/completed/11/variant.js +++ /dev/null @@ -1,11 +0,0 @@ - -const cubeOuter = document.querySelector('.cube-outer'); -const cubeNumber = document.querySelector('.cube-inner > span'); -cubeOuter.addEventListener('click', function handler() { - cubeNumber.style.opacity = 1; - cubeOuter.removeEventListener('click', handler); - setTimeout(() => { - const text = document.querySelector('.text'); - text.textContent = 'Ваш вариант:'; - }, 2000); -}); \ No newline at end of file diff --git a/dist/completed/5/DisLike.js b/dist/completed/5/DisLike.js deleted file mode 100644 index 7fb3907..0000000 --- a/dist/completed/5/DisLike.js +++ /dev/null @@ -1,24 +0,0 @@ - -export class DisLike { - - constructor(likes = 0, dislikes = 0) { - this.likes = likes; - this.dislikes = dislikes; - } - - reset() { - this.likes = 0; - this.dislikes = 0; - } - - like() { - this.likes++; - return this.likes; - } - - dislike() { - this.dislikes++; - return this.dislikes; - } - -} diff --git a/dist/completed/5/DisLike.test.js b/dist/completed/5/DisLike.test.js deleted file mode 100644 index e92c4d3..0000000 --- a/dist/completed/5/DisLike.test.js +++ /dev/null @@ -1,55 +0,0 @@ - -import {DisLike} from './DisLike.js'; - -test('Constructor set default 0', () => { - const counters = new DisLike(); - expect(counters.likes).toBe(0); - expect(counters.dislikes).toBe(0); -}); - -test('Constructor set counters', () => { - const likesInit = 40; - const dislikesInit = 20; - const counters = new DisLike(likesInit, dislikesInit); - expect(counters.likes).toBe(likesInit); - expect(counters.dislikes).toBe(dislikesInit); -}); - -test('Reset counter to zero', () => { - const counters = new DisLike(13, 42); - counters.reset(); - expect(counters.likes).toBe(0); - expect(counters.dislikes).toBe(0); -}); - -test('Like increases counter by 1', () => { - const initialValue = 1; - const expectedValue = 2; - const counters = new DisLike(initialValue, initialValue); - counters.like(); - expect(counters.likes).toBe(expectedValue); -}); - -test('Like returns new counter value', () => { - const initialValue = 1; - const expectedValue = 2; - const counters = new DisLike(initialValue, initialValue); - const actualValue = counters.like(); - expect(actualValue).toBe(expectedValue); -}); - -test('Dislike increases counter by 1', () => { - const initialValue = 1; - const expectedValue = 2; - const counters = new DisLike(initialValue, initialValue); - counters.dislike(); - expect(counters.dislikes).toBe(expectedValue); -}); - -test('Like returns new counter value', () => { - const initialValue = 1; - const expectedValue = 2; - const counters = new DisLike(initialValue, initialValue); - const actualValue = counters.dislike(); - expect(actualValue).toBe(expectedValue); -}); \ No newline at end of file diff --git a/dist/completed/5/code.js b/dist/completed/5/code.js deleted file mode 100644 index bb81622..0000000 --- a/dist/completed/5/code.js +++ /dev/null @@ -1,71 +0,0 @@ - -import {DisLike} from './DisLike.js'; - -async function proxyFetch(url, options) { - const proxyUrl = 'https://cors-anywhere.herokuapp.com/'; - const response = await fetch(proxyUrl + url, options); - return await response.json(); -} - -async function receiveUserData() { - return await proxyFetch('https://randus.org/api.php'); -} - -async function getRandomName() { - const userData = await receiveUserData(); - const name = `${userData.lname} ${userData.fname} ${userData.patronymic}`; - return name; -} - -let counter = 0; -async function changePerson() { - const personImage = document.querySelector('.card > img'); - const personNameText = document.querySelector('.description > p'); - if (!(personImage && personNameText)) { - return; - } - const getRandomNamePromise = getRandomName(); - personImage.src = 'https://thispersondoesnotexist.com/image?' + counter; - counter++; - personImage.addEventListener('load', async function() { - const randomName = await getRandomNamePromise; - personNameText.textContent = randomName; - }); -} - -let canChange = true; -const timeout = 2000; -function timeoutBetweenChanges() { - canChange = false; - setTimeout(function() { - canChange = true; - }, timeout); -} -changePerson(); -timeoutBetweenChanges(); -const app = new DisLike(); -const rightDiv = document.querySelector('.right'); -const leftDiv = document.querySelector('.left'); -if (rightDiv) { - rightDiv.addEventListener('click', function() { - if (canChange) { - const likes = app.like(); - const visualLikeCounter = document.querySelector('.like > div'); - visualLikeCounter.textContent = likes; - changePerson(); - timeoutBetweenChanges(); - } - }); -} - -if (leftDiv) { - leftDiv.addEventListener('click', function() { - if (canChange) { - const dislikes = app.dislike(); - const visualDislikeCounter = document.querySelector('.dislike > div'); - visualDislikeCounter.textContent = dislikes; - changePerson(); - timeoutBetweenChanges(); - } - }); -} diff --git a/dist/completed/5/code.test.js b/dist/completed/5/code.test.js deleted file mode 100644 index db57ddb..0000000 --- a/dist/completed/5/code.test.js +++ /dev/null @@ -1,46 +0,0 @@ - -import { __RewireAPI__ } from './code.js'; -import * as iFetch from 'isomorphic-fetch'; -window.fetch = iFetch.default; - -const receiveUserData = __RewireAPI__.__get__('receiveUserData'); -const getRandomName = __RewireAPI__.__get__('getRandomName'); -__RewireAPI__.__Rewire__('proxyFetch', async function (url, options) { - const response = await fetch(url, options); - const data = await response.json(); - return data; -}); - -afterEach(() => { - jest.restoreAllMocks(); -}); - -test('Server responded with status 200', async () => { - const data = await receiveUserData(); - expect(data).toBeDefined(); -}); - -test('Valid random name received', async () => { - const testUserData = { - lname: 'Шалдыбин', - fname: 'Семен', - patronymic: 'Константинович', - gender: 'm', - date: '3 сентября 1978', - }; - const fakeResponse = { - json: () => testUserData - }; - jest.spyOn(window, 'fetch').mockImplementationOnce(() => new Promise(resolve => resolve(fakeResponse))); - const randomName = await getRandomName(); - expect(randomName).toMatch(/(?:[А-ЯЁ][а-яё]+ ){2}[А-ЯЁ][а-яё]+/); -}); - -test('Makes only one request', async () => { - const fakeResponse = { - json: () => "mock" - }; - jest.spyOn(window, 'fetch').mockImplementationOnce(() => new Promise(resolve => resolve(fakeResponse))); - await getRandomName(); - expect(fetch).toBeCalledTimes(1); -}); \ No newline at end of file diff --git a/dist/completed/5/index.html b/dist/completed/5/index.html deleted file mode 100644 index cf6586e..0000000 --- a/dist/completed/5/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - Лицемер (c) - - -
-
- -
-
- Avatar -
-

-
-
-
-
-
-
-
- -
- - - \ No newline at end of file diff --git a/dist/completed/5/jest.config.json b/dist/completed/5/jest.config.json deleted file mode 100644 index d12a3f9..0000000 --- a/dist/completed/5/jest.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "collectCoverage": true -} \ No newline at end of file diff --git a/dist/completed/5/package-lock.json b/dist/completed/5/package-lock.json deleted file mode 100644 index 5e80e57..0000000 --- a/dist/completed/5/package-lock.json +++ /dev/null @@ -1,5844 +0,0 @@ -{ - "name": "5", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.4" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", - "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", - "dev": true, - "requires": { - "@jest/source-map": "^24.3.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" - } - }, - "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" - } - }, - "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", - "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.0.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", - "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", - "dev": true, - "requires": { - "@types/jest-diff": "*" - } - }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", - "dev": true - }, - "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", - "dev": true - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", - "dev": true, - "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-rewire": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-rewire/-/babel-plugin-rewire-1.2.0.tgz", - "integrity": "sha512-JBZxczHw3tScS+djy6JPLMjblchGhLI89ep15H3SyjujIzlxo5nr6Yjo7AXotdeVczeBmWs0tF8PgJWDdgzAkQ==", - "dev": true - }, - "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", - "dev": true - }, - "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", - "dev": true, - "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", - "dev": true - }, - "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.134", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.134.tgz", - "integrity": "sha512-C3uK2SrtWg/gSWaluLHWSHjyebVZCe4ZC0NVgTAoTq8tCR9FareRK5T7R7AS/nPZShtlEcjVMX1kQ8wi4nU68w==", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", - "dev": true, - "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" - } - } - } - }, - "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" - } - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.8.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", - "dev": true, - "requires": { - "pretty-format": "^24.8.0" - } - }, - "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", - "dev": true - }, - "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" - } - }, - "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^12.0.2" - } - }, - "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", - "dev": true - }, - "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" - } - }, - "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" - } - }, - "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.8.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", - "dev": true, - "requires": { - "merge-stream": "^1.0.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "prompts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", - "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", - "dev": true, - "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", - "dev": true, - "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uglify-js": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.12.tgz", - "integrity": "sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/dist/completed/5/package.json b/dist/completed/5/package.json deleted file mode 100644 index 193ff08..0000000 --- a/dist/completed/5/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "5", - "version": "1.0.0", - "description": "", - "main": "DisLike.js", - "scripts": { - "test": "jest" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@babel/runtime": "^7.4.4", - "@types/jest": "^24.0.13", - "babel-plugin-rewire": "^1.2.0", - "isomorphic-fetch": "^2.2.1", - "jest": "^24.8.0" - } -} diff --git a/dist/completed/5/style.css b/dist/completed/5/style.css deleted file mode 100644 index e64d617..0000000 --- a/dist/completed/5/style.css +++ /dev/null @@ -1,115 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Playfair+Display+SC&subset=cyrillic'); -@import url('https://fonts.googleapis.com/css?family=Arimo&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; - font-family: 'Arimo'; -} -body { - display: flex; - flex-flow: column nowrap; -} -body > header { - height: 60px; - background-color: #7161EF; -} -.content { - flex: 1; - display: flex; - flex-flow: row nowrap; -} -.content > aside { - width: 20%; - text-align: center; - display: flex; - flex-flow: column; - justify-content: center; -} -.dislike { - background-color: #212121; - color: #ECECEC; - -} -aside > div { - position: relative; - display: flex; - justify-content: center; - align-items: center; - font-size: 12rem; - flex: 1; -} -aside > div::before { - position: absolute; - top: 30px; - height: 140px; - font-size: 3rem; -} -.dislike > div::before { - content: 'Dislike:'; -} -.like > div::before { - content: 'Like:'; -} -.content > section { - flex: 1; - background-color: #FFE7DB; -} -.header-d { - text-align: center; - height: 80px; - line-height: 80px; - font-size: 1.8rem; -} -section { - display: flex; - justify-content: center; - align-items: center; -} -.card { - height: 70%; - width: auto; - position: relative; - box-shadow: 0 4px 16px 0 rgba(0,0,0,0.2); - transition: 0.3s ease-out; - border-radius: 5px; - cursor: pointer; - text-align: center; -} -.card:hover { - box-shadow: 0 8px 32px 0 rgba(0,0,0,0.4); - transform-origin: center; - transform: scale(1.02, 1.02); -} -.card > img { - display: inline-block; - border-radius: 5px 5px 0 0; - margin: 0 auto; - max-height: 90%; - max-width: 100%; -} -.description { - display: block; - height: 10%; - font-size: 1.4rem; -} -.description > p { - margin: 12px 0 0 0; -} -.invisible-box { - position: absolute; - top: 0; - height: 100%; - width: 100%; - font-size: 0; -} -.left { - display: inline-block; - height: 100%; - width: 50%; -} -.right { - display: inline-block; - height: 100%; - width: 50%; -} \ No newline at end of file diff --git a/dist/completed/6/Yakubovich.js b/dist/completed/6/Yakubovich.js deleted file mode 100644 index c8331fa..0000000 --- a/dist/completed/6/Yakubovich.js +++ /dev/null @@ -1,116 +0,0 @@ - -export class Yakubovich { - constructor(abc, dict) { - this.history = new Map(); - this.score = 0; - this.completed = 0; - this.revealedLetters = []; - this.onguessed = null; - } - - start(abc, dict) { - this._setAlphabet(abc); - this._setDictionary(dict); - this._newQuestion(); - } - - _setAlphabet(abc) { - if (typeof abc === 'string' && abc !== '') { - this.alphabet = abc.toUpperCase();; - } else { - throw new Error('Alphabet is not correct.'); - } - } - - _setDictionary(dict) { - if (typeof dict !== 'object') { - throw new Error('Dictionary is not correct.'); - } - if (!(dict instanceof Map)) { - dict = new Map(Object.entries(dict)); - } - const keyArr = Array.from(dict.keys()); - for (const key of keyArr) { - const upperKey = key.toUpperCase(); - if (upperKey !== key) { - dict.set(upperKey, dict.get(key)); - dict.delete(key); - } - } - const regex = new RegExp(`^[${this.alphabet}${this.alphabet.toLowerCase()}]+$`); - for (const key of dict.keys()) { - if (!regex.test(key)) { - throw new Error('Dictionary is not correct.'); - } - } - this.dictionary = dict; - } - - _newQuestion() { - this.revealedLetters = []; - const remainingQuestionsCount = this.dictionary.size; - const randomQuestionIndex = Math.floor(Math.random() * remainingQuestionsCount); - const items = Array.from(this.dictionary.keys()); - const randomAnswer = items[randomQuestionIndex]; - this._answer = randomAnswer; - } - - _guessed() { - this.history.set(this._answer, this.question); - this.dictionary.delete(this._answer); - this.completed++; - this._newQuestion(); - if (this.onguessed) { - setTimeout(this.onguessed()); - } - } - - get numberOfLetters() { - if (!this._answer) { - throw Error('Capital-show is not init.'); - } - return this._answer.length; - } - - get question() { - if (!this._answer) { - throw Error('Capital-show is not init.'); - } - return this.dictionary.get(this._answer); - } - - pickLetter(letter) { - letter = letter.toUpperCase(); - if (!this._answer) { - throw Error('Capital-show is not init.'); - } else if (!this.alphabet.includes(letter)) { - throw Error(`Letter ${letter} is not included in the alphabet.`); - }; - const guessedLetters = []; - if (this.revealedLetters.includes(letter)) { - return guessedLetters; - } - for (let i = 0; i < this._answer.length; i++) { - if (this._answer[i] === letter) { - guessedLetters.push(i); - this.revealedLetters.push(this._answer[i]); - } - } - if (this.revealedLetters.length === this._answer.length) { - this._guessed(); - } - return guessedLetters; - } - - tryWord(word) { - if (!this._answer) { - throw Error('Capital-show is not init.'); - } - if (word.toUpperCase() === this._answer) { - this._guessed(); - return true; - } else { - return false; - } - } -} \ No newline at end of file diff --git a/dist/completed/6/Yakubovich.test.js b/dist/completed/6/Yakubovich.test.js deleted file mode 100644 index acd215b..0000000 --- a/dist/completed/6/Yakubovich.test.js +++ /dev/null @@ -1,231 +0,0 @@ - -import {Yakubovich} from './Yakubovich.js'; -import { stringLiteral } from '@babel/types'; - -describe('Testing constructor and initialization process', () => { - - test('Constructors works', () => { - const yakub = new Yakubovich(); - expect(yakub).toBeDefined(); - }); - - test('Alphabet correctly assigned', () => { - const numberAlphabet = '0123456789'; - const yakub = new Yakubovich(); - yakub._setAlphabet(numberAlphabet); - expect(yakub.alphabet).toBe(numberAlphabet); - }); - - test('Incorrect alphabet', () => { - const notReallyAlphabet = {a: 'b', c: 'd'}; - const yakub = new Yakubovich(); - expect(() => yakub._setAlphabet(notReallyAlphabet)).toThrow(); - }) - - describe('Testing different dictionaries', () => { - - let yakub = null; - - beforeEach(() => { - const numberAlphabet = '0123456789'; - yakub = new Yakubovich(); - yakub._setAlphabet(numberAlphabet); - }); - - test('Correct dictionary using object', () => { - const QnA = { - '42': 'Answer to the Ultimate Question of Life, the Universe, and Everything', - '1': 'The Sinus of 90 degrees', - '13772000000': 'Age of the Universe in years' - }; - const expected = new Map(Object.entries(QnA)); - yakub._setDictionary(QnA); - expect(yakub.dictionary).toEqual(expected); - }); - - test('Correct dictionary using Map', () => { - const QnA = { - '42': 'Answer to the Ultimate Question of Life, the Universe, and Everything', - '1': 'The Sinus of 90 degrees', - '13772000000': 'Age of the Universe in years' - }; - const expected = new Map(Object.entries(QnA)); - yakub._setDictionary(expected); - expect(yakub.dictionary).toEqual(expected); - }); - - test('Incorrect dictionary', () => { - const incorrectDict = "String. Why string?"; - expect(() => yakub._setDictionary(incorrectDict)).toThrow(); - }); - - test('Answers don\'t match the alphabet', () => { - const QnA = { - '42342': 'Answer to the Ultimate Question of Life, the Universe, and Everything', - 'dawdawd': 'The Sinus of 90 degrees', - 'f222e': 'Age of the Universe in years' - }; - const expected = new Map(Object.entries(QnA)); - expect(() => yakub._setDictionary(expected)).toThrow(); - }); - }); - - test('Choosing question and answer are working', () => { - const numberAlphabet = '01'; - const QnA = {'110': '6', '101': '5'}; - const choices = ['110', '101']; - const yakub = new Yakubovich(); - yakub._setAlphabet(numberAlphabet); - yakub._setDictionary(QnA); - yakub._newQuestion(); - expect(choices).toContain(yakub._answer); - }); -}); - -const engDict = { - 'word': 'riddle', - 'twowords': 'really big and long riddle', - 'abcdefghi': 'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Officiis, tempora veritatis quaerat ipsum' -} -const engAbc = 'abcdefghijklmnopqrstuvwxyz'; -const engChoosenWord = 'twowords'; -const rusDict = { - 'слово': 'загадка', - 'длинноеслово': 'довольно длинная и очень оригинальная загадка', - 'абвгдейжзийклм': 'С большой долей вероятности мы можем сказать, что исходя из прибыли за прошедший квартал, ситуация' -} -const rusAbc = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; -const rusChoosenWord = 'длинноеслово'; - -describe.each([ - [engAbc, engDict, engChoosenWord], - [rusAbc, rusDict, rusChoosenWord] -])('Test main functionality for russian and english languages', (abc, dict, choosen) => { - - let poleChudes = null; - - beforeEach(() => { - poleChudes = new Yakubovich(); - poleChudes._newQuestion = jest.fn(function() { - this.revealedLetters = []; - this._answer = choosen.toUpperCase(); - }); - poleChudes.start(abc, dict); - }); - - test('Existing letter in lower case', () => { - const randomLetterIndex = Math.floor(Math.random() * choosen.length); - const letter = choosen[randomLetterIndex]; - const isExist = poleChudes.pickLetter(letter); - expect(isExist).not.toEqual([]); - }); - - test('Existing letter in upper case', () => { - const randomLetterIndex = Math.floor(Math.random() * choosen.length); - const letter = choosen[randomLetterIndex].toUpperCase(); - const isExist = poleChudes.pickLetter(letter); - expect(isExist).not.toEqual([]); - }); - - test('open letter that doesn\'t exist', () => { - const letter = [].find.call(poleChudes.alphabet, (val) => !choosen.includes(val)); - const isExist = poleChudes.pickLetter(letter); - expect(isExist).toEqual([]); - }); - - test('attempt to use a letter does not match the alphabet', () => { - const letter = '😅'; - expect(() => poleChudes.pickLetter(letter)).toThrow(); - }); - - test('cyclic picking of one letter does not cause complete guessing', () => { - const randomLetterIndex = Math.floor(Math.random() * choosen.length); - const letter = choosen[randomLetterIndex]; - poleChudes._guessed = jest.spyOn(poleChudes, '_guessed'); - for (let i = 0; i < 20; ++i) { - poleChudes.pickLetter(letter); - } - expect(poleChudes._guessed).not.toBeCalled(); - }); - - test('picking the last letter causes a new word choosing', () => { - const allLetters = Array.from(choosen); - const lastLetter = allLetters.shift(); - poleChudes.revealedLetters = allLetters; - poleChudes._guessed = jest.spyOn(poleChudes, '_guessed'); - poleChudes.pickLetter(lastLetter); - expect(poleChudes._guessed).toHaveBeenCalledTimes(1); - }); - - test('Guessed word removed from the dictionary', () => { - poleChudes._guessed(); - expect(poleChudes.dictionary).not.toContain(choosen); - }); - - test('Guessed word added to the history', () => { - const expectedHistory = choosen.toUpperCase(); - poleChudes._guessed(); - const answerHistory = Array.from(poleChudes.history.keys()); - expect(answerHistory).toContain(expectedHistory); - }); - - test('Callback onGuessed is called', done => { - poleChudes.onguessed = () => done(); - poleChudes._guessed(); - }); - - test('Successful word guessing (lower case)', () => { - poleChudes._guessed = jest.spyOn(poleChudes, '_guessed'); - poleChudes.tryWord(choosen); - expect(poleChudes._guessed).toBeCalledTimes(1); - }); - - test('Successful word guessing (random case)', () => { - const correctWord = String.fromCharCode(null, [].map.call(choosen, (val, ind) => ind % 2 ? val : val.toUpperCase())); - poleChudes._guessed = jest.spyOn(poleChudes, '_guessed'); - poleChudes.tryWord(correctWord); - expect(poleChudes._guessed).not.toBeCalled(); - }); - - test('Unsuccessful word guessing', () => { - const notCorrectWord = 'bsd832ahc'; - poleChudes._guessed = jest.spyOn(poleChudes, '_guessed'); - poleChudes.tryWord(notCorrectWord); - expect(poleChudes._guessed).not.toBeCalled(); - }); - - test('Get number of letters', () => { - const expectedNumber = choosen.length; - const actualNumber = poleChudes.numberOfLetters; - expect(expectedNumber).toBe(actualNumber); - }); - - test('Get question', () => { - const expectedQuestion = dict[choosen]; - const actualQuestion = poleChudes.question; - expect(actualQuestion).toBe(expectedQuestion); - }); -}); - -describe('Uninitialized instance', () => { - - test('Can\'t get number of letters', () => { - const yakub = new Yakubovich(); - expect(() => yakub.numberOfLetters).toThrow(); - }); - - test('Can\'t get question', () => { - const yakub = new Yakubovich(); - expect(() => yakub.question).toThrow(); - }); - - test('Can\'t pick letter', () => { - const yakub = new Yakubovich(); - expect(() => yakub.pickLetter('q')).toThrow(); - }); - - test('Can\'t guessing a whole word', () => { - const yakub = new Yakubovich(); - expect(() => yakub.tryWord('snfonsef3')).toThrow(); - }); -}); \ No newline at end of file diff --git a/dist/completed/6/dictionary.json b/dist/completed/6/dictionary.json deleted file mode 100644 index 4648673..0000000 --- a/dist/completed/6/dictionary.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Брусника": "Эту ягоду пытались культивировать начиная с 19 века, но полноценно это удалось лишь в 60-х годах 20 века", - "Эдельвейс": "Этот цветок Паустовский назвал маленькой звездой, закутанной по горло в белый мех, чтобы не замерзнуть от прикосновения льдов", - "Авокадо": "Этот фрукт признан самым калорийным и в Индии зовется коровой бедняков", - "Инфляция": "Этот термин произошел от латинского слова, переводимого на Русский как вздутие", - "Голодание": "Этот старейший метод лечения используется даже дикими животными", - "Устрица": "Этот представитель фауны умеет менять пол по своему желанию", - "Дальтонизм": "Этот недуг не позволил Илье Репину в преклонном возрасте исправить свою знаменитую картину Иван Грозный и сын его Иван", - "Трещетка": "Этот народный музыкальный инструмент в старину использовался в свадебных обрядах при исполнении величальных песен", - "Хрусталь": "Этот материал был известен в Египте и Месопотамии, но в современном виде был получен только в 17 веке", - "Каникулы": "Этот всем известный с детства термин произошел от латинского названия звезды Сириус, утренний восход который приходился на жаркое время года", - "Зверобой": "Этому растению приписывали свойство прогонять нечистую силу", - "Огурец": "Этому овощу установлены памятники в нескольких городах России", - "Шахматы": "Этой теме была посвящена первая книга, напечатанная в Англии", - "Бездарь": "Это слово, обозначающее не самого талантливого человека, ввел в русский язык поэт Игорь Северянин", - "Пролетарий": "Это слово часто употреблявшееся в Советском союзе, произошло от латинского производить на свет потомство", - "Верность": "Что являлось главной добродетелью вассала по отношению к своему сеньору в период феодализма", - "Колодец": "Шадуф это тип какого сооружения", - "Мрамор": "Чтобы создать эффект красиво разлетающихся пуль в кино, их делают из этого материала", - "Талант": "Что хотел увеличить Чарльз Диккенс спя всегда лицом на север", - "Цветы": "Что не принято приносить с собой в гости в Китае, чтобы не оскорбить хозяев", - "Алюминий": "Что называли глиняным серебром", - "Масло": "Что на Руси издревле хранили в бочках, которые назывались веретенками", - "Трение": "Что изучает трибология?", - "Погреб": "Что заменяло холодильник до его изобретения", - "Абрикос": "Что в Древнем Египте называли звездой солнца", - "Початок": "У древних индейцев это символизировало жизнь", - "Ворон": "Так назывались 10 миллионов в древнерусском счете", - "Хирург": "Слово это пришло из греческого языка, где обозначало парикмахера", - "Женьшень": "С китайского языка название этого растения переводится как человек-корень", - "Букашка": "Раньше так называлась коробочка или трубка для сбора насекомых", - "Рубильник": "Простейшее коммутационное устройство", - "Цилиндр": "Предмет, вынуждавший делать высокие крыши у лондонских такси", - "Испания": "По одной из версий, название этой страны с одного из древних языков можно перевести как берег кроликов" -} \ No newline at end of file diff --git a/dist/completed/6/index.html b/dist/completed/6/index.html deleted file mode 100644 index d5fcfe9..0000000 --- a/dist/completed/6/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - Поле Чудес - - -
-
-
-

-
-
-
-
-
-
-
-
-
Угадайте слово:
- -
-
-
-
ОЧКИ:
-
382
-
-
- Количество слов: - 0 -
-
-
-
- - - \ No newline at end of file diff --git a/dist/completed/6/package-lock.json b/dist/completed/6/package-lock.json deleted file mode 100644 index 891bc8e..0000000 --- a/dist/completed/6/package-lock.json +++ /dev/null @@ -1,5769 +0,0 @@ -{ - "name": "6", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.4" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", - "dev": true, - "requires": { - "@jest/source-map": "^24.3.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" - } - }, - "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" - } - }, - "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" - } - }, - "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", - "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.0.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", - "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", - "dev": true, - "requires": { - "@types/jest-diff": "*" - } - }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", - "dev": true - }, - "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", - "dev": true - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", - "dev": true, - "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.0.tgz", - "integrity": "sha512-v8M7YAMacMOJ4T4Z9QSud3dFYASMDvK9d2RWBHRSJlO4nGboLQVtFdbDmgzxfM7XrvcvO56L0sHcqGjuk/4wTQ==", - "dev": true, - "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.0.tgz", - "integrity": "sha512-9NxJBUp8p35vrBbEhQl+FvKbYY68fELWld0asAXMnfWl9xRrN472mw/n+ZvmnG0fYh4U7agPcJZ7iqcJW5R9Rg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", - "dev": true - }, - "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.135", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz", - "integrity": "sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", - "dev": true, - "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" - } - } - } - }, - "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" - } - }, - "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", - "dev": true - }, - "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.8.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", - "dev": true, - "requires": { - "pretty-format": "^24.8.0" - } - }, - "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", - "dev": true - }, - "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" - } - }, - "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^12.0.2" - } - }, - "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", - "dev": true - }, - "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" - } - }, - "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" - } - }, - "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.8.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", - "dev": true, - "requires": { - "merge-stream": "^1.0.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "prompts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", - "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", - "dev": true, - "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.8.tgz", - "integrity": "sha512-9ASu7tuCKzdFa2YKfJmnmlilFrIJ8HFfE6MCs4aDLUw4gTBAaNwTTx/gw8Qo97fsV+UTVQXTmz9sHByeC8sKZg==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", - "dev": true, - "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uglify-js": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.14.tgz", - "integrity": "sha512-dgyjIw8KFK6AyVl5vm2tEqPewv5TKGEiiVFLI1LbF+oHua/Njd8tZk3lIbF1AWU1rNdEg7scaceADb4zqCcWXg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/dist/completed/6/package.json b/dist/completed/6/package.json deleted file mode 100644 index 3142742..0000000 --- a/dist/completed/6/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "6", - "version": "1.0.0", - "description": "", - "main": "Yakubovich.js", - "scripts": { - "test": "jest" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@types/jest": "^24.0.13", - "jest": "^24.8.0" - } -} diff --git a/dist/completed/6/script.js b/dist/completed/6/script.js deleted file mode 100644 index 9e93892..0000000 --- a/dist/completed/6/script.js +++ /dev/null @@ -1,107 +0,0 @@ - -import {Yakubovich} from './Yakubovich.js'; - -async function loadDictionary() { - const response = await fetch('dictionary.json'); - const dict = await response.json(); - return dict; -} -const alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; -const poleChudes = new Yakubovich(); - -async function startGame() { - const dict = await loadDictionary(); - try { - poleChudes.start(alphabet, dict); - } catch (err) { - console.log(`Error with initialization in poleChudes.start: ${err}`); - return; - } - const mainArea = document.querySelector('.main-area'); - let squares = null; - let setBlock = false; - - function prepareSquares(count) { - squares = document.querySelectorAll('.main-area > div'); - let currentCount = squares.length; - while (currentCount !== count) { - if (currentCount < count) { - const additionalSquare = document.createElement('div'); - mainArea.appendChild(additionalSquare); - currentCount++; - } else { - mainArea.removeChild(mainArea.lastElementChild); - currentCount--; - } - } - squares = document.querySelectorAll('.main-area > div'); - } - prepareSquares(poleChudes.numberOfLetters); - const letterBlocks = document.querySelectorAll('.abc > span'); - const questionText = document.querySelector('.riddle > p'); - questionText.textContent = poleChudes.question; - - function restart() { - for (const square of squares) { - square.textContent = ''; - square.className = ''; - } - for (const letterBlock of letterBlocks) { - letterBlock.className = ''; - } - prepareSquares(poleChudes.numberOfLetters); - questionText.textContent = poleChudes.question; - } - - const completedCount = document.getElementById('count'); - poleChudes.onguessed = function() { - setBlock = true; - completedCount.textContent = poleChudes.completed; - setTimeout(function() { - setBlock = false; - restart(); - }, 2000); - } - - const charBox = document.querySelector('.abc'); - charBox.addEventListener('click', function(e) { - if (setBlock || e.target.tagName !== 'SPAN' || e.target.className !== '') { - return; - } - const letter = e.target.textContent; - const letterInfo = poleChudes.pickLetter(letter); - if (letterInfo.length !== 0) { - for (const letterPosition of letterInfo) { - squares[letterPosition].textContent = letter; - squares[letterPosition].classList.add('revealed'); - } - e.target.classList.add('green'); - } else { - e.target.classList.add('red'); - } - }); - - const wordInput = document.getElementsByName('word')[0]; - wordInput.addEventListener('change', function() { - const word = wordInput.value.toUpperCase(); - if (setBlock || word === '') { - return; - } - if (poleChudes.tryWord(word)) { - for (let i = 0; i < word.length; ++i) { - squares[i].textContent = word[i]; - squares[i].classList.add('revealed'); - } - } - wordInput.value = ''; - }); -} - -startGame(); - -const charBox = document.querySelector('.abc'); -for (let i = 0; i < alphabet.length; ++i) { - let charButton = document.createElement("span"); - charButton.textContent = alphabet[i].toUpperCase(); - charBox.appendChild(charButton); -} \ No newline at end of file diff --git a/dist/completed/6/style.css b/dist/completed/6/style.css deleted file mode 100644 index 5081908..0000000 --- a/dist/completed/6/style.css +++ /dev/null @@ -1,190 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Yeseva+One&subset=cyrillic'); -@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; -} -body { - display: flex; - flex-flow: column nowrap; - font-family: 'Open Sans'; - font-weight: 400; -} -body > header { - height: 60px; - background-color: #7161EF; -} -.content { - flex: 1; - display: flex; - flex-flow: column nowrap; -} -.riddle { - height: 20%; - width: 100%; - display: flex; - align-items: center; - justify-content: center; - background-color: #FFECE4; - border-bottom: 1px solid #B2B2B2; - color: rgba(0,0,0,.75); - overflow: hidden; -} -.riddle > p { - margin: 0 100px; - font-size: 2.8rem; - text-align: center; -} -.main-area { - box-sizing: border-box; - height: 44%; - width: 100%; - background-color: #FFE7DB; - display: flex; - flex-flow: row wrap; - justify-content: center; - align-items: center; - padding: 20px 100px; - overflow: auto; - font-family: 'Yeseva One'; - text-align: center; - font-size: 5rem; -} -.main-area > div { - background-image: linear-gradient(rgba(32,32,32,.8), rgba(96,96,96,.7)); - width: 12vh; - height: 12vh; - line-height: 12vh; - margin: 10px; - border: 2px solid #B2B2B2; - user-select: none; - color: transparent; -} -.main-area > div.revealed { - background-image: linear-gradient(#eee, #fff); - transition: color 1.2s ease-out; - color: rgba(0,0,0,.75); - cursor: default; -} -.manage { - height: 36%; - width: 100%; - display: flex; - background-color: #FFECE4; - border-top: 1px solid #B2B2B2; -} -.guess { - flex: 3; - display: flex; - flex-flow: column nowrap; - align-items: center; - font-size: 3rem; - color: rgba(0,0,0,.75); -} -.guess > div { - box-sizing: border-box; - height: 120px; - line-height: 120px; - padding: 20px; -} -.guess > label { - width: 500px; - position: relative; -} -.guess input { - box-sizing: border-box; - width: 100%; - font-size: 3rem; - text-align: center; - font-family: 'Open Sans'; - padding: 2px 10px; - outline: none; - border: none; - background: transparent; - border-bottom: 2px solid #b2b2b2; - color: #9e7b57; -} -.guess span { - position: absolute; - bottom: 0; - left: 0; - width: 0; - height: 2px; - background-color: #7161EF; - will-change: width; - transition: width .8s ease; -} -input:focus + span { - width: 100%; -} -.stats { - flex: 2; - display: flex; - flex-flow: column; - justify-content: flex-start; - color: rgba(0,0,0,.75); -} -.stats-score { - display: flex; - flex-flow: column; - align-items: center; - margin-top: 80px; -} -.stats-score > div:first-child { - font-size: 3rem; -} -.stats-score > div:last-child { - font-size: 3.4rem; - font-weight: 600; - font-style: italic; - margin-top: -10px; - color: #2aa9dc; -} -.stats-count { - text-align: center; - font-size: 1.2rem; -} -.stats-count > span:last-child { - font-style: italic; -} -.letter { - flex: 2; - display: flex; - justify-content: center; - align-items: center; -} -.abc { - box-sizing: border-box; - width: 280px; - height: 280px; - display: flex; - flex-flow: row wrap; - border: 2px solid #b2b2b2; - padding: 6px; - box-shadow: -4px 4px 20px 0 rgba(0,0,0,.3); -} -.abc > span { - background: white; - margin: 6px; - width: 30px; - height: 30px; - line-height: 30px; - text-align: center; - font-size: 1.2rem; - font-weight: 600; - cursor: pointer; - border-radius: 2px; - border: 1px solid rgba(0,0,0,.75); - user-select: none; -} -span.green { - cursor: default; - background-color: #43af3c; - color: white; -} -span.red { - cursor: default; - background-color: #e23f3f; - color: white; -} diff --git a/dist/completed/7/code.js b/dist/completed/7/code.js deleted file mode 100644 index 74b9b15..0000000 --- a/dist/completed/7/code.js +++ /dev/null @@ -1,230 +0,0 @@ - - -function activateButtonIfAllInputsContainValue(inputs, button) { - for (const input of inputs) { - input.addEventListener('input', function () { - input.style.borderColor = ''; - if ([].every.call(inputs, (inp) => inp.value !== '')) { - button.classList.remove('locked-button'); - button.classList.add('active-button'); - } else { - button.classList.remove('active-button'); - button.classList.add('locked-button'); - } - }); - } -} -const errColor = 'red'; - -function basicTextValidation(value) { - return /^[A-Za-zА-Яа-яЁё`'(),.-]+$/.test(value); -} - -function emailValidation(value) { - return /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(value); -} - -function passwordValidation(value) { - return /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/.test(value); -} - -function phoneNumberValidation(value) { - return /^\+[0-9]{1,4}\([0-9]{1,3}\)[0-9]{3,4}-[0-9]{2}-[0-9]{2}$/.test(value); -} - -function onlyDigitValidation(value, length) { - return new RegExp(`^[0-9]{${length}}$`).test(value); -} - -function cardDateValidation(value) { - return /^[01][0-9]\/[0-9]{2}$/.test(value); -} - -function validationStep1() { - const surname = document.getElementsByName('firstname')[0]; - let allOk = true; - if (!basicTextValidation(surname.value)) { - allOk = false; - surname.style.borderColor = errColor; - } - const lastname = document.getElementsByName('lastname')[0]; - if (!basicTextValidation(lastname.value)) { - allOk = false; - lastname.style.borderColor = errColor; - } - const email = document.getElementsByName('email')[0]; - if (!emailValidation(email.value)) { - allOk = false; - email.style.borderColor = errColor; - } - const country = document.getElementsByName('country')[0]; - if (!basicTextValidation(country.value)) { - allOk = false; - country.style.borderColor = errColor; - } - const address = document.getElementsByName('address')[0]; - if (!basicTextValidation(address.value)) { - allOk = false; - address.style.borderColor = errColor; - } - const password1 = document.getElementsByName('password')[0]; - const password2 = document.getElementsByName('repassword')[0]; - if (!passwordValidation(password1.value)) { - allOk = false; - password1.style.borderColor = errColor; - } - if (password1.value !== password2.value) { - allOk = false; - password2.style.borderColor = errColor; - } - return allOk; -} - -const sendMessageButton = document.querySelector('.phone-entry > button'); -const phoneInput = document.getElementsByName('phone')[0]; -phoneInput.addEventListener('input', function () { - phoneInput.style.borderColor = ''; - if (phoneInput.value === '') { - sendMessageButton.classList.remove('active-button'); - sendMessageButton.classList.add('locked-button'); - } else { - sendMessageButton.classList.remove('locked-button'); - sendMessageButton.classList.add('active-button'); - } -}); -const phoneCodeArea = document.querySelector('.ver-code'); -sendMessageButton.addEventListener('click', function () { - if (!phoneNumberValidation(phoneInput.value)) { - phoneInput.style.borderColor = errColor; - phoneCodeArea.classList.add('invisible'); - } else { - phoneCodeArea.classList.remove('invisible'); - } -}); -const verifyCodeButton = document.getElementsByName('fr2_verify_btn')[0]; -const codeInput = document.getElementsByName('verify')[0]; -codeInput.addEventListener('input', function () { - if (onlyDigitValidation(codeInput.value, 4)) { - verifyCodeButton.classList.remove('locked-button'); - verifyCodeButton.classList.add('active-button'); - } else { - verifyCodeButton.classList.remove('active-button'); - verifyCodeButton.classList.add('locked-button'); - } -}); -verifyCodeButton.addEventListener('click', function() { - if (onlyDigitValidation(codeInput.value, 4)) { - nextButton2.classList.remove('locked-button'); - nextButton2.classList.add('active-button'); - } -}); - -const cardInputs = document.querySelectorAll('#frame_4 .credit-card > div:nth-of-type(1) input'); -for (let i = 0; i < cardInputs.length - 1; ++i) { - cardInputs[i].addEventListener('keyup', function (e) { - if (e.target.value.length == 4) { - cardInputs[i + 1].focus(); - } - }); -} - - -function validationStep3() { - let allOk = true; - for (const cardInput of cardInputs) { - if (!onlyDigitValidation(cardInput.value, 4)) { - allOk = false; - cardInput.style.borderColor = errColor; - } - } - const expirationDate = document.getElementsByName('credit-date')[0]; - if (!cardDateValidation(expirationDate.value)) { - allOk = false; - expirationDate.style.borderColor = errColor; - } - const cvv = document.getElementsByName('credit-cvv')[0]; - if (!onlyDigitValidation(cvv.value, 3)) { - allOk = false; - cvv.style.borderColor = errColor; - } - const acceptPolicyCheckbox = document.getElementsByName('terms')[0]; - if (!acceptPolicyCheckbox.checked) { - allOk = false; - acceptPolicyCheckbox.style.borderColor = errColor; - } - return allOk; -} - -const sections = document.querySelectorAll("main section"); -const indicator = document.querySelector(".indicator"); -const steps = document.querySelectorAll(".indicator .step"); -const wire = document.querySelector(".indicator .wire"); -const microWire1 = document.querySelector('.indicator .micro-wire-1'); -const microWire2 = document.querySelector('.indicator .micro-wire-2'); - -const regButton = document.getElementsByName("reg")[0]; -regButton.addEventListener("click", function () { - sections[0].classList.add("invisible"); - sections[1].classList.remove("invisible"); - indicator.classList.remove("invisible"); -}); - -const cancelButton = document.getElementsByName("fr1_cancel_btn")[0]; -cancelButton.addEventListener("click", function () { - sections[1].classList.add("invisible"); - sections[0].classList.remove("invisible"); - indicator.classList.add("invisible"); -}); -const nextButton1 = document.getElementsByName("fr1_next_btn")[0]; -nextButton1.addEventListener("click", function () { - if (validationStep1()) { - sections[1].classList.add("invisible"); - sections[2].classList.remove("invisible"); - steps[0].classList.add("completed"); - wire.style.backgroundImage = "linear-gradient(to right, #7161EF 50%, #fff 50%)"; - microWire1.style.zIndex = 1; - } -}); - -const backButton1 = document.getElementsByName("fr2_back_btn")[0]; -backButton1.addEventListener("click", function () { - sections[2].classList.add("invisible"); - sections[1].classList.remove("invisible"); - steps[0].classList.remove("completed"); - wire.style.backgroundImage = "linear-gradient(to right, #fff, #fff)"; - microWire1.style.zIndex = ''; -}); -const nextButton2 = document.getElementsByName("fr2_next_btn")[0]; -nextButton2.addEventListener("click", function () { - if (nextButton2.classList.contains('active-button')) { - sections[2].classList.add("invisible"); - sections[3].classList.remove("invisible"); - steps[1].classList.add("completed"); - wire.style.backgroundImage = "linear-gradient(to right, #7161EF, #7161EF)"; - microWire2.style.zIndex = 1; - } -}); - -const backButton2 = document.getElementsByName("fr3_back_btn")[0]; -backButton2.addEventListener("click", function () { - sections[3].classList.add("invisible"); - sections[2].classList.remove("invisible"); - steps[1].classList.remove("completed"); - wire.style.backgroundImage = "linear-gradient(to right, #7161EF 50%, #fff 50%)"; - microWire2.style.zIndex = ''; -}); -const endButton = document.getElementsByName("fr3_end_btn")[0]; -endButton.addEventListener("click", function () { - if (validationStep3()) { - sections[3].classList.add("invisible"); - sections[4].classList.remove("invisible"); - indicator.classList.add("invisible"); - steps[2].classList.add("completed"); - } -}); - -const allInputs1 = document.querySelectorAll('#frame_2 input'); -activateButtonIfAllInputsContainValue(allInputs1, nextButton1); - -const allInputs3 = document.querySelectorAll('#frame_4 input'); -activateButtonIfAllInputsContainValue(allInputs3, endButton); \ No newline at end of file diff --git a/dist/completed/7/img/flying_star.svg b/dist/completed/7/img/flying_star.svg deleted file mode 100644 index b7470d5..0000000 --- a/dist/completed/7/img/flying_star.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - flying_star - - - - - - - diff --git a/dist/completed/7/index.html b/dist/completed/7/index.html deleted file mode 100644 index 990196d..0000000 --- a/dist/completed/7/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - Регистрация в Сервис - - -
-
-
-
- - -
-

Браузерные гномы собирают страницу...

-
-
- -
-
- -
-

Добро пожаловать в Сервис!

- Для продолжения нужно зарегистрироваться - -
- - - - -
-
- - - \ No newline at end of file diff --git a/dist/completed/7/loader.css b/dist/completed/7/loader.css deleted file mode 100644 index fdcac76..0000000 --- a/dist/completed/7/loader.css +++ /dev/null @@ -1,31 +0,0 @@ -#loader { - flex: 1; - display: flex; - justify-content: center; - align-items: center; -} -.loader-box { - display: flex; - flex-flow: column nowrap; - align-items: center; -} -.loader-box > div { - height: 32px; - width: 300px; - background: white; - display: flex; - flex-flow: row nowrap; - border-radius: 20px; - border: 1px solid black; - overflow: hidden; -} -.full { - border-radius: 20px 0 0 20px; - background: #7161EF; - transition: width .1s linear; -} -.empty { - border-radius: 0 20px 20px 0; - background: transparent; - flex-grow: 1; -} \ No newline at end of file diff --git a/dist/completed/7/loader.js b/dist/completed/7/loader.js deleted file mode 100644 index 088a8e1..0000000 --- a/dist/completed/7/loader.js +++ /dev/null @@ -1,22 +0,0 @@ - -const time = 2000; -const tick = 100; - -const load = document.querySelector(".full"); - -let currentWidth = 0; -const maxWidth = 100; -const incrWidth = maxWidth * tick / time; - -const timer = setInterval(function() { - if (currentWidth == maxWidth) { - clearInterval(timer); - const loader = document.getElementById("loader"); - loader.classList.add("invisible"); - const main = document.getElementById("page"); - main.classList.remove("invisible"); - return; - } - currentWidth += incrWidth; - load.style.width = currentWidth + "%"; -}, tick); diff --git a/dist/completed/7/style.css b/dist/completed/7/style.css deleted file mode 100644 index 8f44e5c..0000000 --- a/dist/completed/7/style.css +++ /dev/null @@ -1,373 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; -} -body { - display: flex; - flex-flow: column nowrap; - font-family: 'Open Sans'; - font-weight: 400; - background-image: linear-gradient(30deg, #ffffff,#f5f0ff ); -} -body > header { - height: 60px; - background-color: #7161EF; -} -#page { - flex: 1; - display: flex; - justify-content: center; - align-items: center; -} -#page > div { - position: relative; - box-sizing: border-box; - background: white; - border: 1px solid black; - height: 480px; - width: 640px; - box-shadow: 10px -10px 0 0 #7161EF; - padding: 20px; -} -section#frame_1 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: center; -} -#frame_1 > p { - font-size: 3.2rem; - text-align: center; - margin-bottom: 0; -} -#frame_1 > p > span { - font-weight: 600; - color: #a09016; -} -#frame_1 > small { - font-size: 1rem; - margin-top: 30px; - margin-bottom: 100px; -} -.active-button { - background: #7161EF; - color: white; - cursor: pointer; -} -.active-button:hover { - background: #a397ff; -} -.locked-button { - background: #cdc6ff; - cursor: default; - color: white; -} -#frame_1 > button { - width: 200px; - height: 50px; - margin-left: 300px; - font-size: 1.3rem; -} -button { - border: unset; -} -button:focus { - outline: none; -} -.invisible { - display: none !important; -} -section#frame_2 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: flex-start; - position: relative; -} -.frame-header { - font-size: 1.1rem; - margin-left: 20px; -} -#frame_2 .private-data { - box-sizing: border-box; - display: flex; - flex-flow: column nowrap; - width: 100%; - padding: 20px; - padding-left: 50px; -} -#frame_2 .private-data > div { - display: flex; - flex-flow: row nowrap; -} -#frame_2 .private-data > div > div { - display: flex; - flex-flow: column nowrap; -} -#frame_2 .private-data > div:not(:first-child) { - margin-top: 10px; -} -#frame_2 .private-data > div > div + div { - margin-left: 50px; -} -main input[type="text"], -main input[type="password"] { - outline-color: #7161EF; - font-size: 1.1rem; - border: none; - outline: none; - border-bottom: 2px solid #7161EF; -} -.buttons { - position: absolute; - display: flex; - flex-flow: row nowrap; - width: 100%; - justify-content: flex-end; - bottom: 20px; -} -.buttons > button { - width: 120px; - height: 36px; - font-size: 1.2rem; - margin-left: 10px; -} -.buttons > button:last-child { - margin-right: 30px; -} -section#frame_3 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: flex-start; - position: relative; -} -#frame_3 .phone-data { - margin: 0 40px; -} -#frame_3 .phone-data > p { - font-size: .9rem; -} -#frame_3 .phone-entry { - margin-top: 30px; - margin-left: 30px; -} -#frame_3 .phone-entry > input { - padding-left: 20px; - width: 250px; - font-size: 1.4rem; -} -#frame_3 input::placeholder { - color: #bebebe; -} -#frame_3 .phone-data button { - margin-left: 40px; - height: 30px; - width: 80px; - border-radius: 4px; -} -#frame_3 .ver-code { - margin-top: 50px; -} -#frame_3 .ver-code label { - font-size: .9rem; -} -#frame_3 .ver-code input { - margin-left: 30px; - margin-top: 10px; - border: 1px solid #7161EF; - border-radius: 5px; - padding: 4px; - text-align: center; - width: 70px; - font-size: 1.2rem; -} -#frame_3 .ver-code button { - margin-left: 20px; - margin-bottom: 1px; -} -section#frame_4 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: flex-start; - position: relative; -} -#frame_4 .credit-card { - margin: 0 40px; -} -#frame_4 .credit-card > p { - font-size: .9rem; -} -#frame_4 .credit-card > div:nth-of-type(1) { - display: flex; - flex-flow: column nowrap; - margin-left: 40px; - margin-top: 40px; -} -#frame_4 .credit-card > div:nth-of-type(2) { - display: flex; - flex-flow: row nowrap; - margin-left: 40px; - margin-top: 30px; -} -#frame_4 .credit-card > div:nth-of-type(2) > div { - display: flex; - flex-flow: column nowrap; -} -#frame_4 .credit-card > div:nth-of-type(2) > div:nth-of-type(2) { - margin-left: 100px; -} -#frame_4 label { - font-size: .9rem; -} -#fram_4 .credit-card > div:nth-of-type(1) > div { - display: flex; - flex-flow: row nowrap; -} -#frame_4 .credit-card > div:last-child { - margin-top: 40px; - font-size: .5rem; -} -#frame_4 .credit-card > div:last-child > input { - padding-top: 5px; -} -#frame_4 .credit-card > div:last-child > label { - font-size: .8rem; - padding-left: 10px; -} -#frame_4 .credit-card > div:nth-of-type(1) input { - width: 46px; - height: 26px; - padding-left: 6px; - font-size: 1.2rem; - margin-top: 8px; - border: 2px solid #7161EF; - background: #fbfaff; - border-radius: 6px; - outline: none; - caret-color: #7161EF; -} -/* #frame_4 .credit-card > div:nth-of-type(1) input { - width: 276px; - font-size: 1.2rem; - margin-top: 8px; - caret-color: #7161EF; - padding-left: 30px; -} */ -#frame_4 .credit-card > div:nth-of-type(1) input:not(:first-child) { - margin-left: 3px; -} -#frame_4 .credit-card > div:nth-of-type(2) input { - width: 100px; - margin-top: 8px; - text-align: center; -} -#frame_4 input::placeholder { - color: #bebebe; -} -#frame_4 input[type="checkbox"] { - cursor: pointer; -} -section#frame_5 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: center; - position: relative; -} -#frame_5 > img { - position: absolute; - width: 300px; - left: calc(50% - 150px); - z-index: 1; -} -#frame_5 > p:nth-of-type(1) { - font-size: 3rem; - color: #7161EF; - text-shadow: 3px -3px 0 #e9c500; - font-weight: 600; - z-index: 2; - margin-top: 190px; - text-align: center; -} -#frame_5 > p:nth-of-type(2) { - font-size: 1.8rem; - margin: 0; - z-index: 2; -} -#frame_5 > p:nth-of-type(3) { - z-index: 2; - margin-top: 10px; - font-size: 1.1rem; -} -.indicator { - position: absolute; - bottom: 48px; - left: 50px; - display: flex; - flex-flow: row nowrap; -} -.indicator > .step { - height: 16px; - width: 16px; - border-radius: 50%; - border: 1px solid #7161EF; - display: flex; - justify-content: center; - align-items: center; - position: relative; - z-index: 3; - background: #fff; - font-size: .8rem; - color: black; - user-select: none; -} -.indicator > div.completed { - background: #7161EF; - color: #fff; -} -.indicator > .step:not(:first-child) { - margin-left: 20px; -} -.indicator > .wire { - box-sizing: border-box; - position: absolute; - width: calc(100% - 4px); - height: 8px; - top: calc(50% - 4px); - background: #fff; - border: 1px solid #7161EF; - z-index: 2; - margin: 0 2px; -} -.indicator > .micro-wire-1 { - position: absolute; - height: 6px; - width: 27px; - left: 14px; - top: calc(50% - 3px); - z-index: 4; - background-color: #fff; -} -.indicator > .micro-wire-2 { - position: absolute; - height: 6px; - width: 27px; - left: 52px; - top: calc(50% - 3px); - z-index: 4; - background-color: #fff; -} \ No newline at end of file diff --git a/dist/completed/8/code.mjs b/dist/completed/8/code.mjs deleted file mode 100644 index bf12570..0000000 --- a/dist/completed/8/code.mjs +++ /dev/null @@ -1,303 +0,0 @@ -import { CellType, MinesweeperGame } from "./minesweeper.mjs" - -let menu = document.querySelector(".menu"); -let menuButton = document.querySelector(".header > button"); - -function closeMenu() { - menu.classList.remove("menu-shown"); - menu.classList.add("menu-hidden"); - menuButton.classList.remove("is-active"); -} - -function openMenu() { - gameWinPopup.classList.add("invisible"); - gameOverPopup.classList.add("invisible"); - menu.classList.remove("menu-hidden"); - menu.classList.add("menu-shown"); - menuButton.classList.add("is-active"); -} - -function toggleMenu() { - - if (menu.classList.contains("menu-hidden")) { - gameWinPopup.classList.add("invisible"); - gameOverPopup.classList.add("invisible"); - openMenu(); - } else { - closeMenu(); - } -} - -document.addEventListener("keydown", function(e) { - if (e.key === "Escape") { - toggleMenu(); - } - -}); - -let closeMenuButton = document.querySelector(".menu-close"); -closeMenuButton.addEventListener("click", function() { - closeMenu(); -}); - -menuButton.addEventListener("click", function() { - toggleMenu(); -}); - - -let game = null -let firstClick = false;; - -let gameBoardContainer = document.querySelector(".board-container"); -let gameBoard = document.querySelector(".board"); -let gameBoardText = document.querySelector(".game > span"); - -function resetAll() { - - gameBoardContainer.classList.add("invisible"); - gameBoardText.classList.remove("invisible"); - let svgUp = document.getElementById("back_up"); - let svgDown = document.getElementById("back_down"); - svgUp.classList.remove("invisible"); - svgDown.classList.remove("invisible"); - svgUp.classList.remove("go-up"); - svgDown.classList.remove("go-down"); - gameBoard.style.pointerEvents = "initial"; - gameWinPopup.classList.add("invisible"); - gameOverPopup.classList.add("invisible"); - stopGameTimer(); - resetBombCounter(); - firstClick = false; -} - -let headerIcon = document.querySelector(".header > img"); -headerIcon.addEventListener("click", resetAll); - -let gameBar = document.querySelector(".game-bar"); -let dragGameBar = document.querySelector(".game-bar-drag"); -let gameBarStyle = getComputedStyle(gameBar); -let gameBarX = parseInt(gameBarStyle.left.slice(0, -2)); - -dragGameBar.addEventListener("mousedown", function(e) { - - function moveGameBar(e) { - - gameBarX += e.movementX; - if (gameBarX < 0) { - gameBarX = 0; - } - if (gameBarX > window.innerWidth - gameBar.clientWidth - 2) { - gameBarX = window.innerWidth - gameBar.clientWidth - 2; - } - gameBar.style.left = gameBarX + "px"; - } - document.addEventListener("mousemove", moveGameBar); - - function releaseGameBar() { - document.removeEventListener("mousemove", moveGameBar); - document.removeEventListener("mouseup", releaseGameBar); - }; - document.addEventListener("mouseup", releaseGameBar); - -}); - -let timerSpanSeconds = document.querySelector(".game-bar > .timer > .seconds"); -let timerSpanMinutes = document.querySelector(".game-bar > .timer > .minutes"); - -let timerMustDie = false; -function runGameTimer() { - - let interval = 1000; - let startTime = Date.now(); - let expected = startTime + interval; - timerMustDie = false; - - function timerStep() { - - if (timerMustDie) { - timerSpanMinutes.textContent = "00"; - timerSpanSeconds.textContent = "00"; - return; - } - let dt = Date.now() - expected; - if (dt > interval) { - expected += dt; - } - let elapsedSeconds = (expected - startTime) / 1000; - timerSpanMinutes.textContent = Math.floor(elapsedSeconds / 60).toString().padStart(2, "0"); - timerSpanSeconds.textContent = (elapsedSeconds % 60).toString().padStart(2, "0"); - - expected += interval; - setTimeout(timerStep, interval - dt % interval); - - } - setTimeout(timerStep, interval); -} -function stopGameTimer() { - timerMustDie = true; -} - -let foundedBombsSpan = document.querySelector(".game-bar-bombs > .bombs-counter"); -let maxBombsSpan = document.querySelector(".game-bar-bombs > .max-bombs"); -let bombsCounter = 0; - -function resetBombCounter() { - - bombsCounter = 0; - foundedBombsSpan.textContent = bombsCounter; - maxBombsSpan.textContent = bombsCounter; -} - -function startGame(xSize, ySize, bombs) { - - game = new MinesweeperGame(xSize, ySize, bombs); - while (gameBoard.firstChild) { - gameBoard.removeChild(gameBoard.firstChild); - } - for (let i = 0; i < game.board.length; ++i) { - - let row = game.board[i]; - let rowDiv = document.createElement("div"); - gameBoard.appendChild(rowDiv); - for (let j = 0; j < row.length; ++j) { - - let cellDiv = document.createElement("div"); - cellDiv.className = "cell unknown"; - cellDiv.textContent = "?"; - cellDiv.dataset.x = j; - cellDiv.dataset.y = i; - rowDiv.appendChild(cellDiv); - } - } - maxBombsSpan.textContent = bombs; - gameBoard.style.pointerEvents = "initial"; - firstClick = false; - game.onGameWin = function() { - setTimeout(endGame, 1000, [true]); - } -} - -let gameOverPopup = document.querySelector(".game-over-popup"); -let gameWinPopup = document.querySelector(".game-win-popup"); - -function endGame(isWin=false) { - - gameBoard.style.pointerEvents = "none"; - if (isWin) { - gameWinPopup.classList.remove("invisible"); - } else { - gameOverPopup.classList.remove("invisible"); - } - stopGameTimer(); - resetBombCounter(); -} - -let menuStartButton = document.querySelector(".menu-content > button"); -let firstScreenStartButton = document.querySelector("#back_down > g:nth-child(11) > g:nth-child(2)"); - -let xSize, ySize, bombs; - -let resetAfterLoseImg = document.querySelector(".game-over-popup > img"); -resetAfterLoseImg.addEventListener("click", function() { - gameOverPopup.classList.add("invisible"); - startGame(xSize, ySize, bombs); -}); - -menuStartButton.addEventListener("click", function() { - - xSize = parseInt(document.getElementsByName("area-width")[0].value); - ySize = parseInt(document.getElementsByName("area-height")[0].value); - bombs = parseInt(document.getElementsByName("bomb-number")[0].value); - startGame(xSize, ySize, bombs); - closeMenu(); -}); -firstScreenStartButton.addEventListener("click", function() { - - if (gameBoardContainer.classList.contains("invisible")) { - gameBoardText.classList.add("invisible"); - gameBoardContainer.classList.remove("invisible"); - } - xSize = parseInt(document.getElementsByName("svg-area-width")[0].value); - ySize = parseInt(document.getElementsByName("svg-area-height")[0].value); - bombs = parseInt(document.getElementsByName("svg-bomb-number")[0].value); - startGame(xSize, ySize, bombs); - let svgUp = document.getElementById("back_up"); - let svgDown = document.getElementById("back_down"); - svgUp.classList.add("go-up"); - svgDown.classList.add("go-down"); - setTimeout(function() { - svgUp.classList.add("invisible"); - }, 3000); - setTimeout(function() { - svgDown.classList.add("invisible"); - }, 1500); -}); - - -gameBoard.addEventListener("click", function(e) { - - let cell; - if (!e.target.classList.contains("cell")) { - cell = document.elementFromPoint(e.x, e.y); - } else { - cell = e.target; - } - let cellX = parseInt(cell.dataset.x); - let cellY = parseInt(cell.dataset.y); - if (game.getCellStatus(cellX, cellY) !== CellType.Unknown) { - return; - } - let pickResultData = game.pick(cellX, cellY); - if (pickResultData === "BOOOM!") { - cell.classList.replace("unknown", "bomb"); - cell.textContent = "💣"; - setTimeout(endGame, 1000); - return; - } - if (!(pickResultData instanceof Array)) { - console.log("Error: MinesweeperGame.pick() return not Array"); - return; - } - for (let cellInfo of pickResultData) { - - let revealedCell = gameBoard.children[cellInfo.y].children[cellInfo.x]; - revealedCell.className = "cell safely"; - revealedCell.textContent = (cellInfo.value === 0 ? "" : cellInfo.value); - - } - if (!firstClick) { - - runGameTimer(); - firstClick = true; - } -}); - -gameBoard.addEventListener("contextmenu", function(e) { - - let cell; - if (!e.target.classList.contains("cell")) { - cell = document.elementFromPoint(e.x, e.y); - } else { - cell = e.target; - } - let cellX = parseInt(cell.dataset.x); - let cellY = parseInt(cell.dataset.y); - if (game.getCellStatus(cellX, cellY) === CellType.Revealed) { - return; - } - let newStatus = game.markBomb(cellX, cellY); - if (newStatus === CellType.Marked) { - - cell.classList.add("flag"); - cell.textContent = "🚩"; - bombsCounter++; - - } else { - - cell.classList.remove("flag"); - cell.textContent = "?"; - bombsCounter--; - } - foundedBombsSpan.textContent = bombsCounter; - e.preventDefault(); -}); \ No newline at end of file diff --git a/dist/completed/8/fonts/izhitsa-cyrillic.ttf b/dist/completed/8/fonts/izhitsa-cyrillic.ttf deleted file mode 100644 index 02d7a55..0000000 Binary files a/dist/completed/8/fonts/izhitsa-cyrillic.ttf and /dev/null differ diff --git a/dist/completed/8/hamburger.css b/dist/completed/8/hamburger.css deleted file mode 100644 index 8154040..0000000 --- a/dist/completed/8/hamburger.css +++ /dev/null @@ -1,104 +0,0 @@ -.hamburger { - padding: 15px 15px; - display: inline-block; - cursor: pointer; - transition-property: opacity, filter; - transition-duration: 0.15s; - transition-timing-function: linear; - font: inherit; - color: inherit; - text-transform: none; - background-color: transparent; - border: 0; - margin: 0; - overflow: visible; -} - -.hamburger:hover { - opacity: 0.7; -} - -.hamburger.is-active:hover { - opacity: 0.7; -} - -.hamburger.is-active .hamburger-inner, -.hamburger.is-active .hamburger-inner::before, -.hamburger.is-active .hamburger-inner::after { - background-color: #534741; -} - -.hamburger-box { - width: 40px; - height: 24px; - display: inline-block; - position: relative; -} - -.hamburger-inner { - display: block; - top: 50%; - margin-top: -2px; -} - -.hamburger-inner, -.hamburger-inner::before, -.hamburger-inner::after { - width: 40px; - height: 4px; - background-color: #534741; - border-radius: 4px; - position: absolute; - transition-property: transform; - transition-duration: 0.15s; - transition-timing-function: ease; -} - -.hamburger-inner::before, -.hamburger-inner::after { - content: ""; - display: block; -} - -.hamburger-inner::before { - top: -10px; -} - -.hamburger-inner::after { - bottom: -10px; -} - -/* - * Spring - */ -.hamburger--spring .hamburger-inner { - top: 2px; - transition: background-color 0s 0.13s linear; -} - -.hamburger--spring .hamburger-inner::before { - top: 10px; - transition: top 0.1s 0.2s cubic-bezier(0.33333, 0.66667, 0.66667, 1), transform 0.13s cubic-bezier(0.55, 0.055, 0.675, 0.19); -} - -.hamburger--spring .hamburger-inner::after { - top: 20px; - transition: top 0.2s 0.2s cubic-bezier(0.33333, 0.66667, 0.66667, 1), transform 0.13s cubic-bezier(0.55, 0.055, 0.675, 0.19); -} - -.hamburger--spring.is-active .hamburger-inner { - transition-delay: 0.22s; - background-color: transparent !important; -} - -.hamburger--spring.is-active .hamburger-inner::before { - top: 0; - transition: top 0.1s 0.15s cubic-bezier(0.33333, 0, 0.66667, 0.33333), transform 0.13s 0.22s cubic-bezier(0.215, 0.61, 0.355, 1); - transform: translate3d(0, 10px, 0) rotate(45deg); -} - -.hamburger--spring.is-active .hamburger-inner::after { - top: 0; - transition: top 0.2s cubic-bezier(0.33333, 0, 0.66667, 0.33333), transform 0.13s 0.22s cubic-bezier(0.215, 0.61, 0.355, 1); - transform: translate3d(0, 10px, 0) rotate(-45deg); -} \ No newline at end of file diff --git a/dist/completed/8/img/back-down.svg b/dist/completed/8/img/back-down.svg deleted file mode 100644 index 1f8c685..0000000 --- a/dist/completed/8/img/back-down.svg +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - back-down - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Размеры поля - 99х99 - - - Количество бомб - 200 - - - - - - Сапёр - - - - - - - - нлаин - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/completed/8/img/back-up.svg b/dist/completed/8/img/back-up.svg deleted file mode 100644 index 1b68e2e..0000000 --- a/dist/completed/8/img/back-up.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - back-up - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/completed/8/img/background.svg b/dist/completed/8/img/background.svg deleted file mode 100644 index 73d0f26..0000000 --- a/dist/completed/8/img/background.svg +++ /dev/null @@ -1 +0,0 @@ -background \ No newline at end of file diff --git a/dist/completed/8/img/drag.svg b/dist/completed/8/img/drag.svg deleted file mode 100644 index ba473ba..0000000 --- a/dist/completed/8/img/drag.svg +++ /dev/null @@ -1 +0,0 @@ -Drag \ No newline at end of file diff --git a/dist/completed/8/img/favicon.png b/dist/completed/8/img/favicon.png deleted file mode 100644 index 815c4b3..0000000 Binary files a/dist/completed/8/img/favicon.png and /dev/null differ diff --git a/dist/completed/8/img/logo.svg b/dist/completed/8/img/logo.svg deleted file mode 100644 index 9fcb188..0000000 --- a/dist/completed/8/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ -Ресурс 3Сапёрнлаин \ No newline at end of file diff --git a/dist/completed/8/img/logo_horizont.svg b/dist/completed/8/img/logo_horizont.svg deleted file mode 100644 index 30f84f3..0000000 --- a/dist/completed/8/img/logo_horizont.svg +++ /dev/null @@ -1 +0,0 @@ -logo_horizontСапёрнлаин \ No newline at end of file diff --git a/dist/completed/8/img/restart.svg b/dist/completed/8/img/restart.svg deleted file mode 100644 index a74d91f..0000000 --- a/dist/completed/8/img/restart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/dist/completed/8/index.html b/dist/completed/8/index.html deleted file mode 100644 index b1b9749..0000000 --- a/dist/completed/8/index.html +++ /dev/null @@ -1,582 +0,0 @@ - - - - - - - - - - - - - Сапёр Онлайн - - -
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Размеры поля - - - - - - - - - Количество бомб - - - - - - - - - Сапёр - - - - - - - - нлаин - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Игровое поле - - - -
-
- 00 - : - 00 -
-
- 💣 - 00 - / - 99 -
-
- -
-
-
- - - - \ No newline at end of file diff --git a/dist/completed/8/minesweeper.mjs b/dist/completed/8/minesweeper.mjs deleted file mode 100644 index b8553b0..0000000 --- a/dist/completed/8/minesweeper.mjs +++ /dev/null @@ -1,187 +0,0 @@ -export const CellType = { - Unknown: 1, - Revealed: 2, - Marked: 3 -} - -export class MinesweeperGame { - - constructor(xSize, ySize, bombNumber) { - - if (bombNumber > xSize * ySize) { - bombNumber = 0; - } - this.x = xSize; - this.y = ySize; - this.totalBombs = bombNumber; - this.markedBombs = 0; - this.revealedCells = 0; - this.isInit = false; - this.onGameWin = null; - - this.board = new Array(this.y); - for (let i = 0; i < this.board.length; ++i) { - this.board[i] = new Array(this.x); - for (let j = 0; j < this.board[i].length; ++j) { - this.board[i][j] = { - x: j, - y: i, - hasBomb: false, - status: CellType.Unknown, - value: "?" - }; - } - } - } - - * _neighbors(cellX, cellY) { - - const comb = [0, -1, 1]; - const combCount = comb.length * comb.length; - for (let i = 1; i < combCount; ++i) { - - let xIndex = cellX + comb[i % comb.length]; - let yIndex = cellY + comb[Math.floor(i / comb.length)]; - if (this._isCellReal(xIndex, yIndex)) { - yield this.board[yIndex][xIndex]; - } - - } - } - - initialize(startX, startY) { - - let safeCells = [ this.board[startY][startX] ]; - let viewedCells = [ this.board[startY][startX] ]; - - let generateSafeCells = (posX, posY, round) => { - - let safePropability = (round < 4 ? 100 - 30 * (round - 1) : 14 - round); - let currentRoundSafeCells = []; - for (let cell of this._neighbors(posX, posY)) { - - let rand = Math.random() * 100; - if (!viewedCells.includes(cell)) { - - viewedCells.push(cell); - if (rand <= safePropability) { - - safeCells.push(cell); - currentRoundSafeCells.push(cell); - } - } - } - for (let cell of currentRoundSafeCells) { - generateSafeCells(cell.x, cell.y, round + 1); - } - }; - generateSafeCells(startX, startY, 1); - - let bombCells = []; - const totalCells = this.x * this.y; - - while (bombCells.length != this.totalBombs) { - let rand = Math.floor(Math.random() * totalCells); - let randomCell = this.board[Math.floor(rand / this.x)][rand % this.x] - if (!bombCells.includes(randomCell) && - (!safeCells.includes(randomCell) || bombCells.length + safeCells.length >= totalCells)) { - bombCells.push(randomCell); - randomCell.hasBomb = true; - } - } - this.isInit = true; - } - - _pickSingleCell(x, y) { - - let pickedCell = this.board[y][x]; - if (pickedCell.status !== CellType.Unknown) { - return; - } - if (!this.isInit) { - this.initialize(x, y); - } - pickedCell.status = CellType.Revealed; - this.revealedCells++; - if (pickedCell.hasBomb) { - return "BOOOM!"; - } - let sum = 0; - for (let cell of this._neighbors(x, y)) { - if (cell.hasBomb) { - ++sum; - } - } - pickedCell.value = sum; - return sum; - } - - pick(x, y) { - - let pickedCell = this.board[y][x]; - if (pickedCell.status !== CellType.Unknown) { - return; - } - let result = this._pickSingleCell(x, y); - if (result === "BOOOM!") { - - this.gemeover = true; - return result; - } - - let revealedCells = [ {x, y, value: result } ]; - let revealNeighboars = (centerX, centerY) => { - - for (let cell of this._neighbors(centerX, centerY)) { - - if (cell.status !== CellType.Unknown) { - continue; - } - let result = this._pickSingleCell(cell.x, cell.y); - revealedCells.push({x: cell.x, y: cell.y, value: result }); - if (result === 0) { - revealNeighboars(cell.x, cell.y); - } - } - }; - if (result === 0) { - revealNeighboars(x, y); - } - // Game win - if (this.markedBombs === this.totalBombs && this.revealedCells === this.x * this.y - this.totalBombs) { - setTimeout(this.onGameWin, 0); - } - return revealedCells; - } - - markBomb(x, y) { - - let pickedCell = this.board[y][x]; - if (pickedCell.status === CellType.Unknown) { - - pickedCell.status = CellType.Marked; - this.markedBombs++; - - } else if (pickedCell.status === CellType.Marked) { - - pickedCell.status = CellType.Unknown; - this.markedBombs--; - } - return pickedCell.status; - } - - getCellStatus(x, y) { - - return this.board[y][x].status; - } - - _isCellReal(x, y) { - - if (x < 0 || x >= this.x || y < 0 || y >= this.y) { - return false; - } else { - return true; - } - } - -} \ No newline at end of file diff --git a/dist/completed/8/style.css b/dist/completed/8/style.css deleted file mode 100644 index e685cd5..0000000 --- a/dist/completed/8/style.css +++ /dev/null @@ -1,391 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&subset=cyrillic'); -@import url('https://fonts.googleapis.com/css?family=Roboto'); -@font-face { - font-family: 'Izhitsa Cyrillic'; - src: url('fonts/izhitsa-cyrillic.ttf'); -} - -html, -body { - margin: 0; - height: 100%; - width: 100%; - position: relative; - font-family: 'Roboto', sans-serif; - overflow: hidden; -} -.header { - background-color: #c2e9e9; - height: 50px; - position: relative; - z-index: 3; - display: flex; - flex-flow: row nowrap; - justify-content: space-between; -} - -.header > img { - margin: 2px 0 2px 60px; - cursor: pointer; -} - -.header>button { - outline: none; - margin-top: -2px; -} -.new-game > svg { - position: absolute; - height: 100%; - width: 100%; - min-width: 1920px; - min-height: 1080px; - left: 0; - bottom: 0; - z-index: 10; -} -@media (max-width: 1920px) { - .new-game > svg { - left: calc((100vw - 1920px) / 2); - } - } -/* @media (max-height: 720px) { - .new-game { - bottom: calc((100vh - 1080px) / 2); - } -} */ -.go-up { - transition: bottom 3s ease; - bottom: 100% !important; -} -.go-down { - transition: bottom 3s ease; - bottom: -100% !important; -} -.svg-bombs { - position: absolute; -} - -.menu { - position: absolute; - height: 100%; - width: 100%; - display: flex; - justify-content: center; - align-items: center; - z-index: 2; - background-color: darkgreen; - top: 0; - -moz-user-select: none; - user-select: none; -} -.menu-shown { - transition: top .6s ease-out, - background-color .3s linear .45s; - -} -.menu-hidden { - top: -100%; - background-color: transparent; - transition: top .6s ease-in, - background-color .2s linear; -} - -.menu>div { - position: relative; - height: 450px; - width: 400px; - background: #fff; - border-radius: 20px 20px 4px 4px; - box-shadow: 0 0 32px 1px black; - background-image: url("img/background.svg"); - background-repeat: no-repeat; - background-position: center; - background-origin: border-box; - background-size: 101%; -} - -.menu-close { - position: absolute; - color: #e02c2c; - top: 10px; - right: 8px; - cursor: pointer; -} - -.menu-close:hover { - color: #b12929; -} - -.menu-content { - box-sizing: border-box; - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - padding: 50px; - padding-bottom: 20px; -} - -.menu-content>img { - width: 80%; - align-self: center; - margin-top: -40px; -} - -.menu-content>div { - display: flex; - flex-flow: column nowrap; -} - -.area-size { - margin-top: 30px; -} - -.menu-content label { - font-size: 1.4rem; -} - -.area-size>label::before { - content: "🗒️"; -} - -.area-size>div { - display: flex; - flex-flow: row nowrap; - margin: 10px 0; -} - -.menu-content input { - height: 24px; - width: 30%; - font-family: 'Roboto', sans-serif; - font-size: 1.2rem; - text-align: center; - transform: scaleY(1.2); -} - -.area-size>div>span { - font-size: 1.2rem; - line-height: 34px; - margin: 0 4px 0 6px; - transform: scaleY(1.2); -} - -.bombs>label::before { - content: "💣"; -} - -.menu-content .bombs>input { - margin-top: 10px; -} - -.menu-content>button { - font-family: "Press Start 2P", cursive; - font-size: 1.4rem; - height: 60px; - width: 180px; - align-self: center; - margin-top: 30px; - background: #af6f41; - border: none; - outline: none; - cursor: pointer; - border-radius: 10px; - animation: heartbeat 3s ease-in-out infinite both; -} - -.menu-content>button:hover { - background: #daa077; -} - -@keyframes heartbeat { - from { - transform: scale(1); - transform-origin: center center; - animation-timing-function: ease-out; - } - - 5% { - transform: scale(0.91); - animation-timing-function: ease-in; - } - - 8% { - transform: scale(0.98); - animation-timing-function: ease-out; - } - - 16% { - transform: scale(0.87); - animation-timing-function: ease-in; - } - - 22% { - transform: scale(1); - animation-timing-function: ease-out; - } -} - -.game { - height: calc(100% - 50px); - background: #fff4a3; - display: flex; - justify-content: center; - align-items: center; - user-select: none; - -moz-user-select: none; - position: relative; -} - -.game>span { - font-size: 8rem; - color: #77a4c5; - margin: 0 40px; - text-align: center; -} - -.board-container { - box-sizing: border-box; - height: 100%; - width: 100%; - overflow: auto; - position: relative; - text-align: center; - line-height: 100%; - white-space: nowrap; -} -.board-container::before { - content: ""; - display: inline-block; - height: 100%; - vertical-align: middle; - } -.game .board { - display: inline-flex; - vertical-align: middle; - flex-flow: column nowrap; - justify-content: center; - align-items: center; - margin: 100px; -} -.game .board > div { - display: flex; - flex-flow: row nowrap; - justify-content: center; - align-items: center; -} - -.board .cell { - box-sizing: border-box; - height: 26px; - width: 26px; - flex: 0 0 26px; - line-height: 26px; - border: 1px solid #444; - text-align: center; - -moz-user-select: none; - user-select: none; -} -.board .unknown { - background-color: #93EF81; - transition: background-color 1s linear; -} -.board .unknown:hover:not([class*="flag"]) { - background-color: rgb(73, 175, 52); - transition: none; -} -.board .safely { - background-color: rgb(238, 191, 138); - transition: none; -} -.board .bomb { - background-color: red; - transition: none; -} -.board .flag { - background-color: rgb(190, 190, 190); - transition: none; -} - -.invisible { - display: none !important; -} -.game-bar { - height: 60px; - width: 300px; - border-radius: 30px; - border: 1px solid #222; - position: absolute; - bottom: 0; - left: calc(50% - 150px); - display: flex; - flex-flow: row nowrap; - justify-content: space-around; - align-items: center; - background-color: #eee; - font-size: 1.4rem; -} -.game-bar-drag { - box-sizing: border-box; - padding: 14px; - width: 52px; - cursor: move; -} -.game-bar-drag > img { - width: 21px; -} -.game-over-popup { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - display: flex; - flex-flow: column nowrap; - align-items: center; - width: 400px; - height: 140px; - background: #c2e9e9; - z-index: 10; - text-align: center; - border-radius: 20px; - box-shadow: 0 0 10px 0 black; -} -.game-over-popup > span { - font-family: "Roboto", serif; - font-size: 2.4rem; - margin-top: 10px; - margin-bottom: 10px; - color: #222; -} -.game-over-popup > img { - width: 60px; - transform-origin: center; - cursor: pointer; -} -.game-over-popup > img:hover { - transform: scale(1.04); -} -.game-win-popup { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - display: flex; - flex-flow: column nowrap; - align-items: center; - justify-content: space-between; - width: 420px; - height: 120px; - background: #8cc63f; - z-index: 10; - text-align: center; - border-radius: 20px; - box-shadow: 0 0 10px 0 black; - box-sizing: border-box; - padding: 18px 0; -} -.game-win-popup > span { - font-family: "Roboto", serif; - font-size: 2rem; - color: #222; -} \ No newline at end of file diff --git a/dist/completed/8/svg-style.css b/dist/completed/8/svg-style.css deleted file mode 100644 index 7b309a0..0000000 --- a/dist/completed/8/svg-style.css +++ /dev/null @@ -1,89 +0,0 @@ -svg text { - -moz-user-select: none; - user-select: none; -} -#back_down > g:nth-child(11) > g:nth-child(2) { - cursor: pointer -} -#back_down > g:nth-child(11) > g.z > g { - stroke: rgba(255, 255, 255, .9); - fill: rgba(255, 255, 255, .9); - animation: highlight 7s linear 2s infinite normal; -} - -@keyframes highlight { - 0% { - transform: translateX(0); - } - 13% { - transform: translateX(300px); - } - 100% { - transform: translateX(300px); - } -} - -#back_down > g:nth-child(11) { - transform-origin: 50% 77%; - transition: transform .1s ease-out; -} -#back_down > g:nth-child(11):hover { - transform: rotateZ(2deg); -} -#back_down > g:nth-child(11) > g:nth-child(2) > path.y { - transition: fill .2s ease-out; -} -#back_down > g:nth-child(11):hover > g:nth-child(2) > path.y { - fill: #fffeb5; -} - -#back_up > g > g:nth-of-type(1) { - animation: fly-cloud-1 234s linear infinite normal; - animation-delay: -170s; -} - -@keyframes fly-cloud-1 { - 0% { transform: translate(96%, 30px); } - 100% { transform: translate(-30%, 30px); } -} - -#back_up > g > g:nth-of-type(2) { - animation: fly-cloud-2 100s linear infinite normal; - animation-delay: -26s; -} - -@keyframes fly-cloud-2 { - 0% { transform: translate(54%, -50px); } - 100% { transform: translate(-74%, -50px); } -} - -#back_up > g > g:nth-of-type(3) { - animation: fly-cloud-3 140s linear infinite normal; - animation-delay: -15s; -} - -@keyframes fly-cloud-3 { - 0% { transform: translate(19%, 120px); } - 100% { transform: translate(-99%, 120px); } -} -#back_up > g > rect { - animation: day-night 360s linear infinite alternate; -} - -@keyframes day-night { - 0% { fill: #a9cbff; } - 100% { fill: #243246; } -} - -foreignObject > input { - height: 100%; - width: 70px; - border: none; - padding: 0; - font-size: 1.5rem; - font-family: "Izhitsa Cyrillic", sans-serif; - background: none; - outline: none; - text-align: center; - color: #333; -} \ No newline at end of file diff --git a/dist/completed/9/code.js b/dist/completed/9/code.js deleted file mode 100644 index 246ea7b..0000000 --- a/dist/completed/9/code.js +++ /dev/null @@ -1,41 +0,0 @@ - -const workspace = document.querySelector('.workspace'); -workspace.addEventListener('mousedown', function(e) { - if (!e.target.classList.contains('circle')) { - return; - } - const movable = e.target; - let x = parseInt(movable.style.left.slice(0, -2)); - let y = parseInt(movable.style.top.slice(0, -2)); - const offsetX = e.offsetX; - const offsetY = e.offsetY; - const height = movable.offsetHeight; - const width = movable.offsetWidth; - movable.classList.replace('grab', 'grabbing'); - document.body.style.cursor = 'grabbing'; - function move(e) { - // console.dir(e); - e.preventDefault(); - x += e.movementX; - y += e.movementY; - if (e.x < workspace.offsetLeft + offsetX) { - x = 0; - } else if (e.x > workspace.offsetLeft + workspace.clientWidth - width + offsetX) { - x = workspace.clientWidth - width; - } - if (e.y < workspace.offsetTop + offsetY) { - y = 0; - } else if (e.y > workspace.offsetTop + workspace.clientHeight - height + offsetY) { - y = workspace.clientHeight - height; - } - movable.style.left = x + 'px'; - movable.style.top = y + 'px'; - } - document.addEventListener('mousemove', move); - document.addEventListener('mouseup', function up(e) { - document.removeEventListener('mouseup', up); - document.removeEventListener('mousemove', move); - document.body.style.cursor = 'default'; - movable.classList.replace('grabbing', 'grab'); - }); -}, true); \ No newline at end of file diff --git a/dist/completed/9/index.html b/dist/completed/9/index.html deleted file mode 100644 index baa7e08..0000000 --- a/dist/completed/9/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - Figures - - -
-
-
- -
-
-
-
-
-
-
- - - \ No newline at end of file diff --git a/dist/completed/9/style.css b/dist/completed/9/style.css deleted file mode 100644 index 52d9718..0000000 --- a/dist/completed/9/style.css +++ /dev/null @@ -1,50 +0,0 @@ -html, body { - height: 100%; - width: 100%; - margin: 0; -} -header { - height: 60px; - background-color: #9A8C98; -} -main { - height: calc(100% - 60px); - width: 100%; -} -.toolbar { - height: 40px; - width: 100%; - background-color: #C9ADA7; -} -.canvas { - box-sizing: border-box; - height: calc(100% - 40px); - width: 100%; - background-color: #F2E9E4; - padding: 4vw 10vw 6vw 10vw; - overflow: auto; -} -.workspace { - position: relative; - background-color: #fff; - height: 100%; - width: 100%; -} -.workspace > .circle { - box-sizing: border-box; - position: absolute; - border-radius: 50%; - border: 1px solid #22223B; - background-color: rgb(25, 125, 207); -} - -.grabbing { - cursor: grabbing !important; - cursor: -moz-grabbing !important; - cursor: -webkit-grabbing !important; -} -.grab { - cursor: grab !important; - cursor: -moz-grab !important; - cursor: -webkit-grab !important; -} \ No newline at end of file diff --git a/dist/css/bundle.min.css b/dist/css/bundle.min.css deleted file mode 100644 index 1699c85..0000000 --- a/dist/css/bundle.min.css +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * reveal.js - * http://revealjs.com - * MIT licensed - * - * Copyright (C) 2018 Hakim El Hattab, http://hakim.se - */.reveal a,.reveal abbr,.reveal acronym,.reveal address,.reveal applet,.reveal article,.reveal aside,.reveal audio,.reveal b,.reveal big,.reveal blockquote,.reveal canvas,.reveal caption,.reveal center,.reveal cite,.reveal code,.reveal dd,.reveal del,.reveal details,.reveal dfn,.reveal div,.reveal dl,.reveal dt,.reveal em,.reveal embed,.reveal fieldset,.reveal figcaption,.reveal figure,.reveal footer,.reveal form,.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6,.reveal header,.reveal hgroup,.reveal iframe,.reveal img,.reveal ins,.reveal kbd,.reveal label,.reveal legend,.reveal li,.reveal mark,.reveal menu,.reveal nav,.reveal object,.reveal ol,.reveal output,.reveal p,.reveal pre,.reveal q,.reveal ruby,.reveal s,.reveal samp,.reveal section,.reveal small,.reveal span,.reveal strike,.reveal strong,.reveal sub,.reveal summary,.reveal sup,.reveal table,.reveal tbody,.reveal td,.reveal tfoot,.reveal th,.reveal thead,.reveal time,.reveal tr,.reveal tt,.reveal u,.reveal ul,.reveal var,.reveal video,body,html{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.reveal article,.reveal aside,.reveal details,.reveal figcaption,.reveal figure,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal section{display:block}body,html{width:100%;height:100%;overflow:hidden}body{position:relative;line-height:1;background-color:#fff;color:#000}.reveal .slides section .fragment{opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{-webkit-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}.reveal .slides section .fragment.zoom-in{-webkit-transform:scale(.1);-ms-transform:scale(.1);transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{-webkit-transform:none;-ms-transform:none;transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{-webkit-transform:translate(0,20%);-ms-transform:translate(0,20%);transform:translate(0,20%)}.reveal .slides section .fragment.fade-up.visible{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.reveal .slides section .fragment.fade-down{-webkit-transform:translate(0,-20%);-ms-transform:translate(0,-20%);transform:translate(0,-20%)}.reveal .slides section .fragment.fade-down.visible{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.reveal .slides section .fragment.fade-right{-webkit-transform:translate(-20%,0);-ms-transform:translate(-20%,0);transform:translate(-20%,0)}.reveal .slides section .fragment.fade-right.visible{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.reveal .slides section .fragment.fade-left{-webkit-transform:translate(20%,0);-ms-transform:translate(20%,0);transform:translate(20%,0)}.reveal .slides section .fragment.fade-left.visible{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}.reveal .stretch{max-width:none;max-height:none}.reveal pre.stretch code{height:100%;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}@-webkit-keyframes bounce-right{0%,10%,25%,40%,50%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(10px);transform:translateX(10px)}30%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}}@keyframes bounce-right{0%,10%,25%,40%,50%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(10px);transform:translateX(10px)}30%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}}@-webkit-keyframes bounce-down{0%,10%,25%,40%,50%{-webkit-transform:translateY(0);transform:translateY(0)}20%{-webkit-transform:translateY(10px);transform:translateY(10px)}30%{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{-webkit-transform:translateY(0);transform:translateY(0)}20%{-webkit-transform:translateY(10px);transform:translateY(10px)}30%{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:1;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;-webkit-transform:scale(.9999);-ms-transform:scale(.9999);transform:scale(.9999);transition:color .2s ease,opacity .2s ease,-webkit-transform .2s ease;-webkit-transition:color .2s ease,opacity .2s ease,-webkit-transform .2s ease;transition:color .2s ease,opacity .2s ease,transform .2s ease;transition:color .2s ease,opacity .2s ease,transform .2s ease,-webkit-transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:'';position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;-webkit-transition:all .15s ease,background-color .8s ease;transition:all .15s ease,background-color .8s ease;-webkit-transform-origin:.2em 50%;-ms-transform-origin:.2em 50%;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(45deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(45deg);transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(-45deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(-45deg);transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(40deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(40deg);transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(-40deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(-40deg);transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(36deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(36deg);transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(-36deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(-36deg);transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}.reveal .controls .navigate-right{right:0;bottom:3.2em;-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{-webkit-animation:bounce-right 2s 50 both ease-out;animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;-webkit-transform:translateY(-10px);-ms-transform:translateY(-10px);transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:0;-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{-webkit-animation:bounce-down 2s 50 both ease-out;animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-left.enabled,.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover,.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-left.enabled,.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;-webkit-transform:none;-ms-transform:none;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.has-vertical-slides) .controls .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(45deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(45deg);transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{-webkit-transform:translateX(.5em) translateY(1.55em) rotate(-45deg);-ms-transform:translateX(.5em) translateY(1.55em) rotate(-45deg);transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:8px;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:8px;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:8px;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:8px;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:'';display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:0;background-color:currentColor;-webkit-transition:width .8s cubic-bezier(.26,.86,.44,.985);transition:width .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}@media only screen and (orientation:landscape){.reveal.ua-iphone{position:fixed}}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;-webkit-perspective:600px;perspective:600px;-webkit-perspective-origin:50% 40%;perspective-origin:50% 40%}.reveal .slides>section{-ms-perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;padding:20px 0;pointer-events:auto;z-index:10;-webkit-transform-style:flat;transform-style:flat;transition:-webkit-transform-origin .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985);-webkit-transition:visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform-origin .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform .8s cubic-bezier(.26,.86,.44,.985);transition:visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform-origin .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform .8s cubic-bezier(.26,.86,.44,.985);transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985);transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform-origin .8s cubic-bezier(.26,.86,.44,.985),-ms-transform-origin .8s cubic-bezier(.26,.86,.44,.985),-webkit-transform .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{-webkit-transition-duration:.4s;transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{-webkit-transition-duration:1.2s;transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{-webkit-transition-duration:.4s;transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{-webkit-transition-duration:1.2s;transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal.slide section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{-webkit-transform:translate(-150%,0);-ms-transform:translate(-150%,0);transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{-webkit-transform:translate(150%,0);-ms-transform:translate(150%,0);transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{-webkit-transform:translate(0,-150%);-ms-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{-webkit-transform:translate(0,150%);-ms-transform:translate(0,150%);transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{-webkit-transform:translate(-150%,0);-ms-transform:translate(-150%,0);transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{-webkit-transform:translate(150%,0);-ms-transform:translate(150%,0);transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{-webkit-transform:translate(0,-150%);-ms-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{-webkit-transform:translate(0,150%);-ms-transform:translate(0,150%);transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{-webkit-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{-webkit-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{-webkit-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{-webkit-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{-webkit-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{-webkit-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{-webkit-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{-webkit-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){-webkit-transition-timing-function:ease;transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;-webkit-transform:scale(16);-ms-transform:scale(16);transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;-webkit-transform:scale(.2);-ms-transform:scale(.2);transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{-webkit-transform:translate(0,-150%);-ms-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{-webkit-transform:translate(0,150%);-ms-transform:translate(0,150%);transform:translate(0,150%)}.reveal.cube .slides{-webkit-perspective:1300px;perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;-webkit-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;-webkit-box-shadow:0 95px 25px rgba(0,0,0,.2);box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg);transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg);transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,-100%,0) rotateX(90deg);transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,100%,0) rotateX(-90deg);transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{-webkit-perspective-origin:0 50%;perspective-origin:0 50%;-webkit-perspective:3000px;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);-webkit-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;-webkit-box-shadow:0 95px 25px rgba(0,0,0,.2);box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(-40%,0,0) rotateY(-80deg);transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,-40%,0) rotateX(80deg);transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){-webkit-transform:none;-ms-transform:none;transform:none;-webkit-transition:opacity .5s;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{-webkit-transition:none;transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){-webkit-transform:none;-ms-transform:none;transform:none;-webkit-transition:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;-webkit-transition:all 1s ease;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.no-transforms{overflow-y:auto}.no-transforms .reveal .slides{position:relative;width:80%;height:auto!important;top:0;left:50%;margin:0;text-align:center}.no-transforms .reveal .controls,.no-transforms .reveal .progress{display:none!important}.no-transforms .reveal .slides section{display:block!important;opacity:1!important;position:relative!important;height:auto;min-height:0;top:0;left:-50%;margin:70px 0;-webkit-transform:none;-ms-transform:none;transform:none}.no-transforms .reveal .slides section section{left:0}.reveal .no-transition,.reveal .no-transition *{-webkit-transition:none!important;transition:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;-webkit-perspective:600px;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:transparent;-webkit-transition:all .8s cubic-bezier(.26,.86,.44,.985);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background{-webkit-transition:none;transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background{opacity:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past{-webkit-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future{-webkit-transform:translate(100%,0);-ms-transform:translate(100%,0);transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past{-webkit-transform:translate(0,-100%);-ms-transform:translate(0,-100%);transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future{opacity:0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0);transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future{opacity:0;-webkit-transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0);transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future{opacity:0;-webkit-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0);transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future{opacity:0;-webkit-transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0);transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background{-webkit-transition-timing-function:ease;transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past{opacity:0;visibility:hidden;-webkit-transform:scale(16);-ms-transform:scale(16);transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future{opacity:0;visibility:hidden;-webkit-transform:scale(.2);-ms-transform:scale(.2);transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past{opacity:0;visibility:hidden;-webkit-transform:scale(16);-ms-transform:scale(16);transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future{opacity:0;visibility:hidden;-webkit-transform:scale(.2);-ms-transform:scale(.2);transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{-webkit-transition-duration:.4s;transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{-webkit-transition-duration:1.2s;transition-duration:1.2s}.reveal.overview{-webkit-perspective-origin:50% 50%;perspective-origin:50% 50%;-webkit-perspective:700px;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;-webkit-transition:none;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{-webkit-perspective:inherit;perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{-webkit-transition:none;transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{-webkit-transition:none;transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{float:right}.reveal.has-parallax-background .backgrounds{-webkit-transition:all .8s ease;transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{-webkit-transition-duration:.4s;transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{-webkit-transition-duration:1.2s;transition-duration:1.2s}.reveal .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease}.reveal .overlay.visible{opacity:1;visibility:visible}.reveal .overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;-webkit-transition:all .3s ease;transition:all .3s ease}.reveal .overlay header{position:absolute;left:0;top:0;width:100%;height:40px;z-index:2;border-bottom:1px solid #222}.reveal .overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;-webkit-box-sizing:border-box;box-sizing:border-box}.reveal .overlay header a:hover{opacity:1}.reveal .overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal .overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal .overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal .overlay .viewport{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;top:40px;right:0;bottom:0;left:0}.reveal .overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease}.reveal .overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal .overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal .overlay.overlay-preview .x-frame-error{opacity:0;-webkit-transition:opacity .3s ease .3s;transition:opacity .3s ease .3s}.reveal .overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal .overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;-webkit-transform:scale(.2);-ms-transform:scale(.2);transform:scale(.2)}.reveal .overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal .overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal .overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal .overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal .overlay.overlay-help .viewport .viewport-inner table td,.reveal .overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal .overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;-webkit-transition:all .4s ease;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;-webkit-perspective:400px;perspective:400px;-webkit-perspective-origin:50% 50%;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease;-webkit-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);-webkit-transform:translate3d(0,0,-45px) rotateX(90deg);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:translate3d(0,110%,0) rotateX(-90deg);transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:25vw;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:'Speaker notes';display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75vw;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:42.8571428571%}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%}.reveal.show-notes .speaker-notes{top:100%;height:66.6666666667%}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(../font/font-awesome/font/fontawesome-webfont.eot?v=4.7.0);src:url(../font/font-awesome/fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(../font/font-awesome/fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(../font/font-awesome/fontawesome-webfont.woff?v=4.7.0) format('woff'),url(../font/font-awesome/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(../font/font-awesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}#presentable-toc{height:600px;overflow:auto}#presentable-toc ol,#reveal #presentable-toc ol{display:block;margin:.6em 0 1.2em 0;padding:0}#presentable-toc ol,#presentable-toc ul,#reveal #presentable-toc ol,#reveal #presentable-toc ul{list-style:none}#presentable-toc ol ol,#presentable-toc ol ul,#reveal #presentable-toc ol ol,#reveal #presentable-toc ol ul{margin-bottom:.5em;margin-top:.5em;margin-left:1.5em}#presentable-toc li,#reveal #presentable-toc li{margin:0 0 .2em;padding:0}#presentable-toc li:before{content:normal}#presentable-toc li div{border-bottom:1px dotted #fff;width:98%}#presentable-toc li .page{float:right;text-align:right}#presentable-toc li a,#reveal #presentable-toc li a{text-decoration:none}#presentable-icon{position:absolute;top:10px;left:10px}#presentable-icon a{outline:0}#presentable-icon img{border:1px solid #666;outline:0}#reveal #presentable-icon,.reveal #presentable-icon{z-index:30}#reveal #presentable-icon a:hover img,.reveal #presentable-icon a:hover img{border-color:#13daec}#presentable-toc.html5slides{height:540px}#presentable-toc.html5slides li div{border-bottom:1px dotted #000}#presentable-toc.io2012slides{height:500px}#presentable-toc.io2012slides li div{border-bottom:1px dotted #000}#presentable-toc.io2012slides li a{border-bottom:none}#presentable-toc.shower{height:340px;font-size:80%}#presentable-toc.shower ol li,#presentable-toc.shower ul li{text-indent:0}#presentable-toc.shower li div{border-color:#000}#presentable-toc.shower a{border:none;background:0 0}#presentable-icon{z-index:1}.cover #presentable-icon.shower,.list #presentable-icon.shower{display:none}#presentable-icon.shower img{border-color:#bbb}#presentable-icon.impressjs{pointer-events:auto}#presentable-icon.impressjs a{background:0 0}#presentable-toc.impressjs div{line-height:1}#presentable-toc.impressjs li .title{font-size:35px}.hljs{display:block;overflow-x:auto;padding:.5em;background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst{color:#dcdcdc}.hljs-title{color:#4ec9b0}.hljs-builtin-name{color:#4ec9b0}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-code{font-family:Monospace}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy9yZXZlYWwuY3NzIiwiY3NzL2J1bmRsZS5taW4uY3NzIiwiY3NzL2ZvbnQtYXdlc29tZS5jc3MiLCJqcy9yZXZlYWwvcGx1Z2luL3ByZXNlbnRhYmxlL3ByZXNlbnRhYmxlLmNzcyIsImNzcy92czIwMTUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUNZQSxVQUFXLGFBQWMsZ0JBQWlCLGdCREYxQyxlQ1NBLGdCQUFpQixjQUdXLGNBUDVCLFVBSDJELFlBRHdCLG1CQVFuRCxlQURqQixnQkFITyxlQUhrRCxhQUFjLGFBSTlELFdBSHhCLFlBTWdELGdCQU5uQyxZREhiLFlDTUEsV0FBWSxXQUhjLFdBTXVDLGNBRmpFLGlCQUdnQixtQkFBaEIsZUFBb0MsZUFIbEIsYUFObEIsV0FBWSxXQUFZLFdBQVksV0FBWSxXQUFZLFdBU1IsZUFBZ0IsZURWcEUsZUNHc0MsWUFBYSxZQUFhLFlBSWhDLGNBQWUsZUFEYSxXQU05QyxhQURkLGFBQWMsWURYZCxlQ01vQyxXQUtULGVBVjZDLFVBQStCLFlBRTFCLFVBUWxDLGFBUjZDLFVBQVcsYUFRMUMsZ0JBUHpELGNESkEsYUNJZSxlQUFnQixlQUFnQixZQU8yQixnQkFQZCxZQUk1RCxjQUFnQyxjQUFxRSxXQUF0RCxjQUEwQyxXQUEzQixjQUk5RCxhQUo2RSxXQUpKLFdBQzlELFVBQ3FDLFdBRnFDLFlBUTFDLGNEWjNDLEtBQUEsS0FhQSxPQUFBLEVBQ0EsUUFBQSxFQUNBLE9BQUEsRUFDQSxVQUFBLEtBQ0EsS0FBQSxRQUNBLGVBQUEsU0FFQSxnQkFBQSxjQUFBLGdCQUFBLG1CQUFBLGVDQ0EsZUFBZ0IsZUFBZ0IsZUFBZ0IsYUFBYyxZQUFhLGdCREMzRSxRQUFBLE1DTUEsS0REQSxLQUVBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsU0FBQSxPQUVBLEtBQ0EsU0FBQSxTQUNBLFlBQUEsRUFDQSxpQkFBQSxLQUNBLE1BQUEsS0FLQSxrQ0FDQSxRQUFBLEVBQ0EsV0FBQSxPQUNBLG1CQUFBLElBQUEsSUFBQSxLQUFBLFdBQUEsSUFBQSxJQUFBLEtBQ0EsMENBQ0EsUUFBQSxFQUNBLFdBQUEsUUFFQSx1Q0FDQSxRQUFBLEVBQ0EsV0FBQSxRQUNBLCtDQUNBLGtCQUFBLFdBQ0EsY0FBQSxXQUFBLFVBQUEsV0FFQSx5Q0FDQSxRQUFBLEVBQ0EsV0FBQSxRQUNBLGlEQUNBLGtCQUFBLFVBQ0EsY0FBQSxVQUFBLFVBQUEsVUFFQSwwQ0FDQSxrQkFBQSxVQUNBLGNBQUEsVUFBQSxVQUFBLFVBQ0Esa0RBQ0Esa0JBQUEsS0FDQSxjQUFBLEtBQUEsVUFBQSxLQUVBLDJDQUNBLFFBQUEsRUFDQSxXQUFBLFFBQ0EsbURBQ0EsUUFBQSxFQUNBLFdBQUEsT0FFQSxnREFDQSxRQUFBLEVBQ0EsV0FBQSxRQUNBLHdEQUNBLFFBQUEsR0FDQSxXQUFBLFFBRUEseUNBQ0EsUUFBQSxFQUNBLFdBQUEsUUFDQSxpREFDQSxnQkFBQSxhQUVBLDBDQUNBLGtCQUFBLGlCQUNBLGNBQUEsaUJBQUEsVUFBQSxpQkFDQSxrREFDQSxrQkFBQSxlQUNBLGNBQUEsZUFBQSxVQUFBLGVBRUEsNENBQ0Esa0JBQUEsa0JBQ0EsY0FBQSxrQkFBQSxVQUFBLGtCQUNBLG9EQUNBLGtCQUFBLGVBQ0EsY0FBQSxlQUFBLFVBQUEsZUFFQSw2Q0FDQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JBQ0EscURBQ0Esa0JBQUEsZUFDQSxjQUFBLGVBQUEsVUFBQSxlQUVBLDRDQUNBLGtCQUFBLGlCQUNBLGNBQUEsaUJBQUEsVUFBQSxpQkFDQSxvREFDQSxrQkFBQSxlQUNBLGNBQUEsZUFBQSxVQUFBLGVDZ0JBLGtERGRBLG1EQUVBLFFBQUEsRUFDQSxXQUFBLE9DZUUsbUVEZEYsb0VBRUEsUUFBQSxFQUNBLFdBQUEsUUFFQSx3REFDQSxRQUFBLEVBQ0EsV0FBQSxPQUNBLGdFQUNBLFFBQUEsR0FDQSxXQUFBLFFBQ0EseUVBQ0EsUUFBQSxFQUNBLFdBQUEsUUNtQkEsaURBQ0EseURBRkEsMERBRkEsd0RBQ0Esa0REZkEsZ0RBTUEsUUFBQSxFQUNBLFdBQUEsUUFFQSx3REFDQSxNQUFBLFFBRUEsMERBQ0EsTUFBQSxRQUVBLHlEQUNBLE1BQUEsUUFFQSx5RUFDQSxNQUFBLFFBRUEsMkVBQ0EsTUFBQSxRQUVBLDBFQUNBLE1BQUEsUUFNQSxjQUNBLFFBQUEsR0FDQSxXQUFBLE9BRUEsZUFDQSxRQUFBLEVBR0EsVUFDQSxTQUFBLFNBRUEsaUJBQ0EsVUFBQSxLQUNBLFdBQUEsS0FFQSx5QkFDQSxPQUFBLEtBQ0EsV0FBQSxLQUNBLG1CQUFBLFdBQUEsV0FBQSxXQUtBLGdDQUNBLEdBQUEsSUFBQSxJQUFBLElBQUEsSUFDQSxrQkFBQSxjQUNBLFVBQUEsY0FDQSxJQUNBLGtCQUFBLGlCQUNBLFVBQUEsaUJBQ0EsSUFDQSxrQkFBQSxpQkFDQSxVQUFBLGtCQUNBLHdCQUNBLEdBQUEsSUFBQSxJQUFBLElBQUEsSUFDQSxrQkFBQSxjQUNBLFVBQUEsY0FDQSxJQUNBLGtCQUFBLGlCQUNBLFVBQUEsaUJBQ0EsSUFDQSxrQkFBQSxpQkFDQSxVQUFBLGtCQUVBLCtCQUNBLEdBQUEsSUFBQSxJQUFBLElBQUEsSUFDQSxrQkFBQSxjQUNBLFVBQUEsY0FDQSxJQUNBLGtCQUFBLGlCQUNBLFVBQUEsaUJBQ0EsSUFDQSxrQkFBQSxpQkFDQSxVQUFBLGtCQUVBLHVCQUNBLEdBQUEsSUFBQSxJQUFBLElBQUEsSUFDQSxrQkFBQSxjQUNBLFVBQUEsY0FDQSxJQUNBLGtCQUFBLGlCQUNBLFVBQUEsaUJBQ0EsSUFDQSxrQkFBQSxpQkFDQSxVQUFBLGtCQUVBLGtCQUNBLFFBQUEsS0FDQSxTQUFBLFNBQ0EsSUFBQSxLQUNBLE9BQUEsS0FDQSxNQUFBLEtBQ0EsS0FBQSxLQUNBLFFBQUEsRUFDQSxNQUFBLEtBQ0EsZUFBQSxLQUNBLFVBQUEsS0FDQSx5QkFDQSxTQUFBLFNBQ0EsUUFBQSxFQUNBLGlCQUFBLFlBQ0EsT0FBQSxFQUNBLFFBQUEsRUFDQSxPQUFBLFFBQ0EsTUFBQSxhQUNBLGtCQUFBLGFBQ0EsY0FBQSxhQUFBLFVBQUEsYUFDQSxXQUFBLE1BQUEsSUFBQSxJQUFBLENBQUEsUUFBQSxJQUFBLElBQUEsQ0FBQSxrQkFBQSxJQUFBLEtBQ0EsbUJBQUEsTUFBQSxJQUFBLElBQUEsQ0FBQSxRQUFBLElBQUEsSUFBQSxDQUFBLGtCQUFBLElBQUEsS0FBQSxXQUFBLE1BQUEsSUFBQSxJQUFBLENBQUEsUUFBQSxJQUFBLElBQUEsQ0FBQSxVQUFBLElBQUEsS0FBQSxXQUFBLE1BQUEsSUFBQSxJQUFBLENBQUEsUUFBQSxJQUFBLElBQUEsQ0FBQSxVQUFBLElBQUEsSUFBQSxDQUFBLGtCQUFBLElBQUEsS0FDQSxRQUFBLEVBQ0EsZUFBQSxLQUNBLFVBQUEsUUFDQSxXQUFBLE9BQ0EsUUFBQSxFQUNBLG1CQUFBLEtBQ0EsNEJBQUEsWUNtQkUsd0NEbEJGLHlDQUVBLFFBQUEsR0FDQSxTQUFBLFNBQ0EsSUFBQSxFQUNBLEtBQUEsRUFDQSxNQUFBLE1BQ0EsT0FBQSxLQUNBLGNBQUEsTUFDQSxpQkFBQSxhQUNBLG1CQUFBLElBQUEsS0FBQSxJQUFBLENBQUEsaUJBQUEsSUFBQSxLQUFBLFdBQUEsSUFBQSxLQUFBLElBQUEsQ0FBQSxpQkFBQSxJQUFBLEtBQ0EseUJBQUEsS0FBQSxJQUNBLHFCQUFBLEtBQUEsSUFBQSxpQkFBQSxLQUFBLElBQ0EsWUFBQSxVQUNBLGtDQUNBLFNBQUEsU0FDQSxNQUFBLE1BQ0EsT0FBQSxNQUNBLHlDQUNBLGtCQUFBLGlCQUFBLG1CQUFBLGNBQ0EsY0FBQSxpQkFBQSxtQkFBQSxjQUFBLFVBQUEsaUJBQUEsbUJBQUEsY0FDQSx3Q0FDQSxrQkFBQSxpQkFBQSxtQkFBQSxlQUNBLGNBQUEsaUJBQUEsbUJBQUEsZUFBQSxVQUFBLGlCQUFBLG1CQUFBLGVBQ0EsK0NBQ0Esa0JBQUEsaUJBQUEsbUJBQUEsY0FDQSxjQUFBLGlCQUFBLG1CQUFBLGNBQUEsVUFBQSxpQkFBQSxtQkFBQSxjQUNBLDhDQUNBLGtCQUFBLGlCQUFBLG1CQUFBLGVBQ0EsY0FBQSxpQkFBQSxtQkFBQSxlQUFBLFVBQUEsaUJBQUEsbUJBQUEsZUFDQSxnREFDQSxrQkFBQSxpQkFBQSxtQkFBQSxjQUNBLGNBQUEsaUJBQUEsbUJBQUEsY0FBQSxVQUFBLGlCQUFBLG1CQUFBLGNBQ0EsK0NBQ0Esa0JBQUEsaUJBQUEsbUJBQUEsZUFDQSxjQUFBLGlCQUFBLG1CQUFBLGVBQUEsVUFBQSxpQkFBQSxtQkFBQSxlQUNBLGlDQUNBLE1BQUEsTUFDQSxPQUFBLE1BQ0Esa0JBQUEsa0JBQ0EsY0FBQSxrQkFBQSxVQUFBLGtCQUNBLGtDQUNBLE1BQUEsRUFDQSxPQUFBLE1BQ0Esa0JBQUEsaUJBQ0EsY0FBQSxpQkFBQSxVQUFBLGlCQUNBLGtEQUNBLGtCQUFBLGVBQ0EsY0FBQSxlQUFBLFVBQUEsZUFDQSw0Q0FDQSxrQkFBQSxhQUFBLEdBQUEsR0FBQSxLQUFBLFNBQ0EsVUFBQSxhQUFBLEdBQUEsR0FBQSxLQUFBLFNBQ0EsK0JBQ0EsTUFBQSxNQUNBLE9BQUEsTUFDQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JBQ0EsK0NBQ0Esa0JBQUEsY0FDQSxjQUFBLGNBQUEsVUFBQSxjQUNBLGlDQUNBLE1BQUEsTUFDQSxPQUFBLEVBQ0Esa0JBQUEsaUJBQ0EsY0FBQSxpQkFBQSxVQUFBLGlCQUNBLGlEQUNBLGtCQUFBLGVBQ0EsY0FBQSxlQUFBLFVBQUEsZUFDQSwyQ0FDQSxrQkFBQSxZQUFBLEdBQUEsR0FBQSxLQUFBLFNBQ0EsVUFBQSxZQUFBLEdBQUEsR0FBQSxLQUFBLFNBQ0EsMEVDaUNFLHdFRC9CRixRQUFBLEdBQ0EsZ0ZDaUNJLDhFRC9CSixRQUFBLEVBQ0EsMkVDaUNFLHlFRC9CRixRQUFBLEVBQ0EsV0FBQSxPQUNBLDJCQUNBLFdBQUEsUUFDQSxRQUFBLEdBQ0EsT0FBQSxRQUNBLGtCQUFBLEtBQ0EsY0FBQSxLQUFBLFVBQUEsS0FDQSxzQ0FDQSxRQUFBLEdDbUNFLDRDRGxDRixpQ0FFQSxRQUFBLEVBRUEsMkRBQ0EsT0FBQSxNQUNBLE1BQUEsTUFFQSw0REFDQSxPQUFBLE1BQ0EsTUFBQSxLQUVBLDJEQUNBLE1BQUEsTUFDQSxPQUFBLElBRUEsNkRBQ0EsTUFBQSxNQUNBLE9BQUEsS0FFQSxzQ0FDQSxNQUFBLEtBRUEsdUNBQ0EsTUFBQSxLQ29DQSx5RERsQ0Esd0RBRUEsa0JBQUEsaUJBQUEsbUJBQUEsY0FDQSxjQUFBLGlCQUFBLG1CQUFBLGNBQUEsVUFBQSxpQkFBQSxtQkFBQSxjQ3FDQSx3RERuQ0EsdURBRUEsa0JBQUEsaUJBQUEsbUJBQUEsZUFDQSxjQUFBLGlCQUFBLG1CQUFBLGVBQUEsVUFBQSxpQkFBQSxtQkFBQSxlQUVBLG9DQUNBLDhDQUNBLElBQUEsRUFDQSxNQUFBLEVBQ0EsT0FBQSxFQUNBLEtBQUEsRUN1Q0UsNkREdENGLDZEQ29DRSw4REFDQSwyRERqQ0YsT0FBQSxLQUNBLE1BQUEsS0FDQSw2REFDQSxJQUFBLElBQ0EsS0FBQSxJQUNBLFdBQUEsT0FDQSw4REFDQSxJQUFBLElBQ0EsTUFBQSxJQUNBLFdBQUEsT0FDQSwyREFDQSxJQUFBLElBQ0EsS0FBQSxJQUNBLFlBQUEsT0FDQSw2REFDQSxPQUFBLElBQ0EsS0FBQSxJQUNBLFlBQUEsUUFLQSxrQkFDQSxTQUFBLFNBQ0EsUUFBQSxLQUNBLE9BQUEsSUFDQSxNQUFBLEtBQ0EsT0FBQSxFQUNBLEtBQUEsRUFDQSxRQUFBLEdBQ0EsaUJBQUEsZUFDQSxNQUFBLEtBRUEsd0JBQ0EsUUFBQSxHQUNBLFFBQUEsTUFDQSxTQUFBLFNBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxJQUFBLE1BRUEsdUJBQ0EsUUFBQSxNQUNBLE9BQUEsS0FDQSxNQUFBLEVBQ0EsaUJBQUEsYUFDQSxtQkFBQSxNQUFBLElBQUEsK0JBQUEsV0FBQSxNQUFBLElBQUEsK0JBS0Esc0JBQ0EsU0FBQSxTQUNBLFFBQUEsTUFDQSxNQUFBLElBQ0EsT0FBQSxJQUNBLFFBQUEsR0FDQSxZQUFBLFNBQUEsQ0FBQSxXQUNBLFVBQUEsS0FDQSxZQUFBLEVBQ0EsTUFBQSxLQUNBLGlCQUFBLGVBQ0EsUUFBQSxJQUVBLHdCQUNBLE1BQUEsYUFFQSxnQ0FDQSxPQUFBLEVBQUEsSUFLQSxRQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFNBQUEsT0FDQSxpQkFBQSxXQUNBLGFBQUEsV0FFQSwrQ0FDQSxrQkFDQSxTQUFBLE9BRUEsZ0JBQ0EsU0FBQSxTQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsSUFBQSxFQUNBLE1BQUEsRUFDQSxPQUFBLEVBQ0EsS0FBQSxFQUNBLE9BQUEsS0FDQSxlQUFBLEtBQ0EsU0FBQSxRQUNBLFFBQUEsRUFDQSxXQUFBLE9BQ0Esb0JBQUEsTUFDQSxZQUFBLE1BQ0EsMkJBQUEsSUFBQSxJQUNBLG1CQUFBLElBQUEsSUFFQSx3QkFDQSxnQkFBQSxNQUVBLHdCQ3FDQSxnQ0RuQ0EsUUFBQSxLQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsUUFBQSxLQUFBLEVBQ0EsZUFBQSxLQUNBLFFBQUEsR0FDQSx3QkFBQSxLQUNBLGdCQUFBLEtBQ0EsV0FBQSx5QkFBQSxJQUFBLDhCQUFBLENBQUEsa0JBQUEsSUFBQSw4QkFBQSxDQUFBLFdBQUEsSUFBQSw4QkFBQSxDQUFBLFFBQUEsSUFBQSwrQkFDQSxtQkFBQSxXQUFBLElBQUEsOEJBQUEsQ0FBQSxRQUFBLElBQUEsOEJBQUEsQ0FBQSx5QkFBQSxJQUFBLDhCQUFBLENBQUEsa0JBQUEsSUFBQSwrQkFBQSxXQUFBLFdBQUEsSUFBQSw4QkFBQSxDQUFBLFFBQUEsSUFBQSw4QkFBQSxDQUFBLHlCQUFBLElBQUEsOEJBQUEsQ0FBQSxrQkFBQSxJQUFBLCtCQUFBLFdBQUEsaUJBQUEsSUFBQSw4QkFBQSxDQUFBLFVBQUEsSUFBQSw4QkFBQSxDQUFBLFdBQUEsSUFBQSw4QkFBQSxDQUFBLFFBQUEsSUFBQSwrQkFBQSxXQUFBLGlCQUFBLElBQUEsOEJBQUEsQ0FBQSxVQUFBLElBQUEsOEJBQUEsQ0FBQSxXQUFBLElBQUEsOEJBQUEsQ0FBQSxRQUFBLElBQUEsOEJBQUEsQ0FBQSx5QkFBQSxJQUFBLDhCQUFBLENBQUEscUJBQUEsSUFBQSw4QkFBQSxDQUFBLGtCQUFBLElBQUEsK0JBR0Esb0RBQ0EsNEJBQUEsSUFBQSxvQkFBQSxJQUVBLG9EQUNBLDRCQUFBLEtBQUEsb0JBQUEsS0FHQSxvREFDQSw0QkFBQSxJQUFBLG9CQUFBLElBRUEsb0RBQ0EsNEJBQUEsS0FBQSxvQkFBQSxLQUVBLDhCQUNBLFlBQUEsRUFDQSxlQUFBLEVBQ0EsZUFBQSxLQUVBLGdDQzRDQSx3Q0QxQ0EsUUFBQSxNQUNBLFFBQUEsR0FDQSxRQUFBLEVBRUEsOEJDNENBLHNDQUVBLDZEQURBLHFERHpDQSxlQUFBLEtBRUEsZUM0Q0EsdUJBQ0EsK0JEMUNBLFdBQUEsWUFHQSwrQkM2Q0EsNkJBREEsdUNBRUEscUNEMUNBLGVBQUEsS0FFQSxpQ0M0Q0EseUNEMUNBLGVBQUEsS0M4Q0EsK0JENUNBLDZCQzhDQSx1Q0FEQSxxQ0R6Q0EsUUFBQSxFQVNBLHNCQUNBLDRCQUFBLE9BQ0Esb0JBQUEsT0FFQSxvREM0Q0EseURBQ0EsMEREMUNBLGtCQUFBLG1CQUNBLGNBQUEsbUJBQUEsVUFBQSxtQkFFQSxzREM2Q0EsMERBQ0EsNEREM0NBLGtCQUFBLGtCQUNBLGNBQUEsa0JBQUEsVUFBQSxrQkFFQSw0REM4Q0EsaUVBQ0Esa0VENUNBLGtCQUFBLG1CQUNBLGNBQUEsbUJBQUEsVUFBQSxtQkFFQSw4REMrQ0Esa0VBQ0Esb0VEN0NBLGtCQUFBLGtCQUNBLGNBQUEsa0JBQUEsVUFBQSxrQkFFQSx1QkFDQSw0QkFBQSxPQUNBLG9CQUFBLE9BRUEscURDZ0RBLDBEQUNBLDJERDlDQSxrQkFBQSxtQkFDQSxjQUFBLG1CQUFBLFVBQUEsbUJBRUEsdURDaURBLDJEQUNBLDZERC9DQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JBRUEsNkRDa0RBLGtFQUNBLG1FRGhEQSxrQkFBQSxtQkFDQSxjQUFBLG1CQUFBLFVBQUEsbUJBRUEsK0RDbURBLG1FQUNBLHFFRGpEQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JBTUEsdURDb0RBLHNDRGxEQSx3QkFBQSxZQUNBLGdCQUFBLFlBRUEsc0RDb0RBLDJEQUNBLDRERGxEQSxrQkFBQSx1QkFBQSxnQkFBQSx1QkFDQSxVQUFBLHVCQUFBLGdCQUFBLHVCQUVBLHdEQ29EQSw0REFDQSw4RERsREEsa0JBQUEsc0JBQUEsZUFBQSxzQkFDQSxVQUFBLHNCQUFBLGVBQUEsc0JBRUEsOERDb0RBLG1FQUNBLG9FRGxEQSxrQkFBQSx3QkFBQSxlQUFBLHdCQUNBLFVBQUEsd0JBQUEsZUFBQSx3QkFFQSxnRUNvREEsb0VBQ0Esc0VEbERBLGtCQUFBLHVCQUFBLGdCQUFBLHVCQUNBLFVBQUEsdUJBQUEsZ0JBQUEsdUJBRUEsc0RDb0RBLHFDRGxEQSx3QkFBQSxZQUNBLGdCQUFBLFlBRUEscURDb0RBLDBEQUNBLDJERGxEQSxrQkFBQSx1QkFBQSxnQkFBQSx1QkFDQSxVQUFBLHVCQUFBLGdCQUFBLHVCQUVBLHVEQ29EQSwyREFDQSw2RERsREEsa0JBQUEsc0JBQUEsZUFBQSxzQkFDQSxVQUFBLHNCQUFBLGVBQUEsc0JBRUEsNkRDb0RBLGtFQUNBLG1FRGxEQSxrQkFBQSx3QkFBQSxlQUFBLHdCQUNBLFVBQUEsd0JBQUEsZUFBQSx3QkFFQSwrRENvREEsbUVBQ0EscUVEbERBLGtCQUFBLHVCQUFBLGdCQUFBLHVCQUNBLFVBQUEsdUJBQUEsZ0JBQUEsdUJBS0EsdURDb0RBLHNDRGxEQSx3QkFBQSxZQUNBLGdCQUFBLFlBRUEsc0RDb0RBLDJEQUNBLDRERGxEQSxrQkFBQSx1QkFBQSxlQUFBLHVCQUNBLFVBQUEsdUJBQUEsZUFBQSx1QkFFQSx3RENvREEsNERBQ0EsOEREbERBLGtCQUFBLHNCQUFBLGdCQUFBLHNCQUNBLFVBQUEsc0JBQUEsZ0JBQUEsc0JBRUEsOERDb0RBLG1FQUNBLG9FRGxEQSxrQkFBQSxzQkFBQSxnQkFBQSxzQkFDQSxVQUFBLHNCQUFBLGdCQUFBLHNCQUVBLGdFQ29EQSxvRUFDQSxzRURsREEsa0JBQUEscUJBQUEsZUFBQSxxQkFDQSxVQUFBLHFCQUFBLGVBQUEscUJBS0EsOENDb0RBLG9ERGxEQSxtQ0FBQSxLQUFBLDJCQUFBLEtBRUEsbURDcURBLHdEQUNBLHlERG5EQSxXQUFBLE9BQ0Esa0JBQUEsVUFDQSxjQUFBLFVBQUEsVUFBQSxVQUVBLHFEQ3NEQSx5REFDQSwyRERwREEsV0FBQSxPQUNBLGtCQUFBLFVBQ0EsY0FBQSxVQUFBLFVBQUEsVUFFQSwyREN1REEsZ0VBQ0EsaUVEckRBLGtCQUFBLG1CQUNBLGNBQUEsbUJBQUEsVUFBQSxtQkFFQSw2REN3REEsaUVBQ0EsbUVEdERBLGtCQUFBLGtCQUNBLGNBQUEsa0JBQUEsVUFBQSxrQkFTQSxxQkFDQSxvQkFBQSxPQUNBLFlBQUEsT0FFQSw2QkFDQSxRQUFBLEtBQ0EsV0FBQSxNQUNBLDRCQUFBLE9BQ0Esb0JBQUEsT0FDQSxtQkFBQSxXQUFBLFdBQUEsV0FDQSx3QkFBQSxZQUNBLGdCQUFBLFlBRUEsb0NBQ0EsV0FBQSxFQUVBLGdEQUNBLFFBQUEsR0FDQSxTQUFBLFNBQ0EsUUFBQSxNQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsS0FBQSxFQUNBLElBQUEsRUFDQSxXQUFBLGVBQ0EsY0FBQSxJQUNBLGtCQUFBLGtCQUNBLFVBQUEsa0JBRUEsK0NBQ0EsUUFBQSxHQUNBLFNBQUEsU0FDQSxRQUFBLE1BQ0EsTUFBQSxJQUNBLE9BQUEsS0FDQSxLQUFBLEdBQ0EsT0FBQSxFQUNBLFdBQUEsSUFDQSxRQUFBLEVBQ0EsY0FBQSxJQUNBLG1CQUFBLEVBQUEsS0FBQSxLQUFBLGVBQUEsV0FBQSxFQUFBLEtBQUEsS0FBQSxlQUNBLGtCQUFBLGtCQUFBLGVBQ0EsVUFBQSxrQkFBQSxlQUVBLG1DQUNBLFFBQUEsRUFDQSxXQUFBLElBRUEsa0NBQ0EseUJBQUEsS0FBQSxFQUNBLHFCQUFBLEtBQUEsRUFBQSxpQkFBQSxLQUFBLEVBQ0Esa0JBQUEsdUJBQUEsZ0JBQ0EsVUFBQSx1QkFBQSxnQkFFQSxvQ0FDQSx5QkFBQSxFQUFBLEVBQ0EscUJBQUEsRUFBQSxFQUFBLGlCQUFBLEVBQUEsRUFDQSxrQkFBQSxzQkFBQSxlQUNBLFVBQUEsc0JBQUEsZUFFQSwwQ0FDQSx5QkFBQSxFQUFBLEtBQ0EscUJBQUEsRUFBQSxLQUFBLGlCQUFBLEVBQUEsS0FDQSxrQkFBQSx1QkFBQSxlQUNBLFVBQUEsdUJBQUEsZUFFQSw0Q0FDQSx5QkFBQSxFQUFBLEVBQ0EscUJBQUEsRUFBQSxFQUFBLGlCQUFBLEVBQUEsRUFDQSxrQkFBQSxzQkFBQSxnQkFDQSxVQUFBLHNCQUFBLGdCQVNBLHFCQUNBLDJCQUFBLEVBQUEsSUFDQSxtQkFBQSxFQUFBLElBQ0Esb0JBQUEsT0FDQSxZQUFBLE9BRUEsNkJBQ0EsUUFBQSxLQUNBLFdBQUEsTUFDQSxtQkFBQSxXQUFBLFdBQUEsV0FDQSx3QkFBQSxZQUNBLGdCQUFBLFlBRUEsa0NBQ0EsUUFBQSxHQUVBLGdEQUNBLFFBQUEsR0FDQSxTQUFBLFNBQ0EsUUFBQSxNQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsS0FBQSxFQUNBLElBQUEsRUFDQSxXQUFBLGVBQ0Esa0JBQUEsa0JBQ0EsVUFBQSxrQkFFQSwrQ0FDQSxRQUFBLEdBQ0EsU0FBQSxTQUNBLFFBQUEsTUFDQSxNQUFBLElBQ0EsT0FBQSxLQUNBLEtBQUEsR0FDQSxPQUFBLEVBQ0EsV0FBQSxJQUNBLFFBQUEsRUFDQSxjQUFBLElBQ0EsbUJBQUEsRUFBQSxLQUFBLEtBQUEsZUFBQSxXQUFBLEVBQUEsS0FBQSxLQUFBLGVBQ0Esa0JBQUEsa0JBQUEsZUFFQSxtQ0FDQSxRQUFBLEVBQ0EsV0FBQSxJQUVBLGtDQUNBLHlCQUFBLEVBQUEsRUFDQSxxQkFBQSxFQUFBLEVBQUEsaUJBQUEsRUFBQSxFQUNBLGtCQUFBLHNCQUFBLGdCQUNBLFVBQUEsc0JBQUEsZ0JBRUEsb0NBQ0EseUJBQUEsS0FBQSxFQUNBLHFCQUFBLEtBQUEsRUFBQSxpQkFBQSxLQUFBLEVBQ0Esa0JBQUEsbUJBQ0EsVUFBQSxtQkFFQSwwQ0FDQSx5QkFBQSxFQUFBLEVBQ0EscUJBQUEsRUFBQSxFQUFBLGlCQUFBLEVBQUEsRUFDQSxrQkFBQSxzQkFBQSxlQUNBLFVBQUEsc0JBQUEsZUFFQSw0Q0FDQSx5QkFBQSxFQUFBLEtBQ0EscUJBQUEsRUFBQSxLQUFBLGlCQUFBLEVBQUEsS0FDQSxrQkFBQSxtQkFDQSxVQUFBLG1CQUtBLDhDQ3FFQSxvREFDQSw0RERuRUEsa0JBQUEsS0FDQSxjQUFBLEtBQUEsVUFBQSxLQUNBLG1CQUFBLFFBQUEsSUFBQSxXQUFBLFFBQUEsSUFFQSxzQ0N1RUEsOENEckVBLG1CQUFBLEtBQUEsV0FBQSxLQUtBLDhDQ3dFQSxvRER0RUEsa0JBQUEsS0FDQSxjQUFBLEtBQUEsVUFBQSxLQUNBLG1CQUFBLEtBQUEsV0FBQSxLQUtBLHVCQUNBLFNBQUEsU0FDQSxJQUFBLEVBQ0EsS0FBQSxFQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsV0FBQSxLQUNBLFdBQUEsT0FDQSxRQUFBLEVBQ0EsUUFBQSxJQUNBLG1CQUFBLElBQUEsR0FBQSxLQUFBLFdBQUEsSUFBQSxHQUFBLEtBRUEsc0NBQ0EsU0FBQSxTQUNBLE9BQUEsS0FDQSxNQUFBLEtBQ0EsTUFBQSxLQUNBLGNBQUEsSUFDQSxRQUFBLElBQUEsS0FDQSxPQUFBLElBQUEsTUFBQSxLQUNBLFVBQUEsS0FDQSxXQUFBLElBQ0EsT0FBQSxRQUNBLDRDQUNBLE1BQUEsS0FDQSxhQUFBLEtBRUEsOEJBQ0EsV0FBQSxRQUNBLFFBQUEsRUFLQSxlQUNBLFdBQUEsS0FFQSwrQkFDQSxTQUFBLFNBQ0EsTUFBQSxJQUNBLE9BQUEsZUFDQSxJQUFBLEVBQ0EsS0FBQSxJQUNBLE9BQUEsRUFDQSxXQUFBLE9BRUEsaUNDMkVBLGlDRHpFQSxRQUFBLGVBRUEsdUNBQ0EsUUFBQSxnQkFDQSxRQUFBLFlBQ0EsU0FBQSxtQkFDQSxPQUFBLEtBQ0EsV0FBQSxFQUNBLElBQUEsRUFDQSxLQUFBLEtBQ0EsT0FBQSxLQUFBLEVBQ0Esa0JBQUEsS0FDQSxjQUFBLEtBQUEsVUFBQSxLQUVBLCtDQUNBLEtBQUEsRUFFQSx1QkM0RUEseUJEMUVBLG1CQUFBLGVBQUEsV0FBQSxlQUtBLHFCQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLElBQUEsRUFDQSxLQUFBLEVBQ0Esb0JBQUEsTUFDQSxZQUFBLE1BRUEsMEJBQ0EsUUFBQSxLQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFFBQUEsRUFDQSxXQUFBLE9BQ0EsU0FBQSxPQUNBLGlCQUFBLFlBQ0EsbUJBQUEsSUFBQSxJQUFBLCtCQUFBLFdBQUEsSUFBQSxJQUFBLCtCQUVBLGtDQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLG9CQUFBLElBQUEsSUFDQSxrQkFBQSxVQUNBLGdCQUFBLE1BRUEsZ0NBQ0EsUUFBQSxNQUVBLGtDQUNBLFFBQUEsRUFDQSxXQUFBLFFBQ0EsUUFBQSxFQUVBLHFDQUNBLFFBQUEsWUFDQSxXQUFBLGtCQUdBLGdDQUNBLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFVBQUEsS0FDQSxXQUFBLEtBQ0EsSUFBQSxFQUNBLEtBQUEsRUFDQSxjQUFBLE1BQ0EsV0FBQSxNQUVBLDhEQUNBLGNBQUEsUUFDQSxXQUFBLFFDaUZBLHdFRDlFQSx3RUFFQSxtQkFBQSxLQUFBLFdBQUEsS0NrRkEseUVEL0VBLHlFQUVBLFFBQUEsRUFDQSw0QkFBQSxPQUNBLG9CQUFBLE9DaUZBLDhFRC9FQSw4RUFFQSxrQkFBQSxtQkFDQSxjQUFBLG1CQUFBLFVBQUEsbUJDa0ZBLGdGRGhGQSxnRkFFQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JDbUZBLGdHRGpGQSxnR0FFQSxrQkFBQSxtQkFDQSxjQUFBLG1CQUFBLFVBQUEsbUJDb0ZBLGtHRGxGQSxrR0FFQSxrQkFBQSxrQkFDQSxjQUFBLGtCQUFBLFVBQUEsa0JDc0ZBLCtFRG5GQSwrRUFFQSxRQUFBLEVBQ0Esa0JBQUEsdUJBQUEsZ0JBQUEsdUJBQ0EsVUFBQSx1QkFBQSxnQkFBQSx1QkNxRkEsaUZEbkZBLGlGQUVBLFFBQUEsRUFDQSxrQkFBQSxzQkFBQSxlQUFBLHNCQUNBLFVBQUEsc0JBQUEsZUFBQSxzQkNxRkEsaUdEbkZBLGlHQUVBLFFBQUEsRUFDQSxrQkFBQSx1QkFBQSxlQUFBLHVCQUNBLFVBQUEsdUJBQUEsZUFBQSx1QkNxRkEsbUdEbkZBLG1HQUVBLFFBQUEsRUFDQSxrQkFBQSxzQkFBQSxnQkFBQSxzQkFDQSxVQUFBLHNCQUFBLGdCQUFBLHNCQ3NGQSxnRkRuRkEsZ0ZBRUEsUUFBQSxFQUNBLGtCQUFBLHVCQUFBLGVBQUEsdUJBQ0EsVUFBQSx1QkFBQSxlQUFBLHVCQ3FGQSxrRkRuRkEsa0ZBRUEsUUFBQSxFQUNBLGtCQUFBLHNCQUFBLGdCQUFBLHNCQUNBLFVBQUEsc0JBQUEsZ0JBQUEsc0JDcUZBLGtHRG5GQSxrR0FFQSxRQUFBLEVBQ0Esa0JBQUEsdUJBQUEsZ0JBQUEsdUJBQ0EsVUFBQSx1QkFBQSxnQkFBQSx1QkNxRkEsb0dEbkZBLG9HQUVBLFFBQUEsRUFDQSxrQkFBQSxzQkFBQSxlQUFBLHNCQUNBLFVBQUEsc0JBQUEsZUFBQSxzQkNzRkEsd0VEbkZBLHdFQUVBLG1DQUFBLEtBQUEsMkJBQUEsS0NzRkEsNkVEcEZBLDZFQUVBLFFBQUEsRUFDQSxXQUFBLE9BQ0Esa0JBQUEsVUFDQSxjQUFBLFVBQUEsVUFBQSxVQ3VGQSwrRURyRkEsK0VBRUEsUUFBQSxFQUNBLFdBQUEsT0FDQSxrQkFBQSxVQUNBLGNBQUEsVUFBQSxVQUFBLFVDd0ZBLCtGRHRGQSwrRkFFQSxRQUFBLEVBQ0EsV0FBQSxPQUNBLGtCQUFBLFVBQ0EsY0FBQSxVQUFBLFVBQUEsVUN5RkEsaUdEdkZBLGlHQUVBLFFBQUEsRUFDQSxXQUFBLE9BQ0Esa0JBQUEsVUFDQSxjQUFBLFVBQUEsVUFBQSxVQUdBLG1FQUNBLDRCQUFBLElBQUEsb0JBQUEsSUFFQSxtRUFDQSw0QkFBQSxLQUFBLG9CQUFBLEtBS0EsaUJBQ0EsMkJBQUEsSUFBQSxJQUNBLG1CQUFBLElBQUEsSUFDQSxvQkFBQSxNQUNBLFlBQUEsTUFDQSx5QkFDQSxxQkFBQSxZQUNBLGlDQUNBLE9BQUEsS0FDQSxJQUFBLFlBQ0EsUUFBQSxZQUNBLFNBQUEsT0FDQSxXQUFBLGtCQUNBLE9BQUEsUUFDQSxtQkFBQSxXQUFBLFdBQUEsV0M0RkUseUNEM0ZGLHVDQUVBLFFBQUEsS0FBQSxNQUFBLHFCQUNBLGVBQUEsS0FDQSwyQ0FDQSxRQUFBLEVBQ0EsbUJBQUEsS0FBQSxXQUFBLEtBQ0EsdUNDNEZFLHdDRDFGRixRQUFBLGVBQ0EsdUNBQ0EsUUFBQSxFQUNBLElBQUEsWUFDQSxXQUFBLElBQ0EsUUFBQSxFQUNBLFNBQUEsUUFDQSw4QkFDQSxvQkFBQSxRQUNBLFlBQUEsUUFDQSxxQkFBQSxZQUNBLGdEQUNBLFFBQUEsRUFDQSxXQUFBLFFBQ0EsUUFBQSxLQUFBLE1BQUEscUJBQ0EsZUFBQSxLQUNBLHNEQUNBLFNBQUEsUUFFQSxpQ0M0RkEsOENEMUZBLG1CQUFBLEtBQUEsV0FBQSxLQUVBLGdEQzZGQSw2REQzRkEsbUJBQUEsS0FBQSxXQUFBLEtBS0Esb0JDOEZBLHVCQUNBLHVCQUNBLHVCQUNBLHVCQUNBLHVCQUNBLHVCRDVGQSxVQUFBLElBQ0EsWUFBQSxXQ2dHQSxpQkQ5RkEsZ0JBRUEsVUFBQSxJQUVBLGVDOEZBLGVENUZBLFdBQUEsTUFFQSwyQkFDQSxNQUFBLE1BS0EsNkNBQ0EsbUJBQUEsSUFBQSxJQUFBLEtBQUEsV0FBQSxJQUFBLElBQUEsS0FHQSx5RUFDQSw0QkFBQSxJQUFBLG9CQUFBLElBRUEseUVBQ0EsNEJBQUEsS0FBQSxvQkFBQSxLQUtBLGlCQUNBLFNBQUEsU0FDQSxJQUFBLEVBQ0EsS0FBQSxFQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsUUFBQSxLQUNBLFdBQUEsZUFDQSxRQUFBLEVBQ0EsV0FBQSxPQUNBLG1CQUFBLElBQUEsSUFBQSxLQUFBLFdBQUEsSUFBQSxJQUFBLEtBRUEseUJBQ0EsUUFBQSxFQUNBLFdBQUEsUUFFQSwwQkFDQSxTQUFBLFNBQ0EsUUFBQSxNQUNBLElBQUEsSUFDQSxLQUFBLElBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxPQUFBLE1BQUEsRUFBQSxFQUFBLE1BQ0EsUUFBQSxHQUNBLGlCQUFBLDB6SUFDQSxXQUFBLFFBQ0EsUUFBQSxHQUNBLG1CQUFBLElBQUEsSUFBQSxLQUFBLFdBQUEsSUFBQSxJQUFBLEtBRUEsd0JBQ0EsU0FBQSxTQUNBLEtBQUEsRUFDQSxJQUFBLEVBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxRQUFBLEVBQ0EsY0FBQSxJQUFBLE1BQUEsS0FFQSwwQkFDQSxRQUFBLGFBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxZQUFBLEtBQ0EsUUFBQSxFQUFBLEtBQ0EsTUFBQSxNQUNBLFFBQUEsR0FDQSxtQkFBQSxXQUFBLFdBQUEsV0FFQSxnQ0FDQSxRQUFBLEVBRUEsZ0NBQ0EsUUFBQSxhQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0Esb0JBQUEsSUFBQSxJQUNBLGdCQUFBLEtBQ0Esa0JBQUEsVUFFQSxzQ0FDQSxpQkFBQSxnb0JBRUEseUNBQ0EsaUJBQUEsZ1FBRUEsMkJBQ0EsU0FBQSxTQUNBLFFBQUEsWUFDQSxRQUFBLFlBQ0EsUUFBQSxLQUNBLElBQUEsS0FDQSxNQUFBLEVBQ0EsT0FBQSxFQUNBLEtBQUEsRUFFQSxrREFDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFVBQUEsS0FDQSxXQUFBLEtBQ0EsT0FBQSxFQUNBLFFBQUEsRUFDQSxXQUFBLE9BQ0EsbUJBQUEsSUFBQSxJQUFBLEtBQUEsV0FBQSxJQUFBLElBQUEsS0FFQSx5REFDQSxRQUFBLEVBQ0EsV0FBQSxRQUVBLHdEQUNBLFNBQUEsU0FDQSxRQUFBLEdBQ0EsS0FBQSxFQUNBLElBQUEsSUFDQSxNQUFBLEtBQ0EsV0FBQSxPQUNBLGVBQUEsT0FFQSxnREFDQSxRQUFBLEVBQ0EsbUJBQUEsUUFBQSxJQUFBLEtBQUEsSUFBQSxXQUFBLFFBQUEsSUFBQSxLQUFBLElBRUEsdURBQ0EsUUFBQSxFQUVBLGlEQUNBLFFBQUEsRUFDQSxXQUFBLE9BQ0Esa0JBQUEsVUFDQSxjQUFBLFVBQUEsVUFBQSxVQUVBLHdDQUNBLFNBQUEsS0FDQSxNQUFBLEtBRUEsd0RBQ0EsTUFBQSxNQUNBLE9BQUEsS0FDQSxRQUFBLEtBQUEsS0FBQSxLQUFBLEtBQ0EsV0FBQSxPQUNBLGVBQUEsT0FFQSwrREFDQSxVQUFBLEtBRUEsOERBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxnQkFBQSxTQUNBLFVBQUEsS0N5R0EsaUVEdkdBLGlFQUVBLE1BQUEsTUFDQSxRQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxlQUFBLE9BRUEsaUVBQ0EsWUFBQSxLQUNBLGVBQUEsS0FLQSxrQkFDQSxTQUFBLFNBQ0EsS0FBQSxLQUNBLE9BQUEsS0FDQSxRQUFBLEdBQ0EsT0FBQSxRQUNBLG1CQUFBLElBQUEsSUFBQSxLQUFBLFdBQUEsSUFBQSxJQUFBLEtBQ0EsNEJBQUEsWUFFQSwyQkFDQSxRQUFBLEVBQ0EsV0FBQSxPQUtBLGNBQ0EsUUFBQSxhQUNBLFlBQUEsSUFDQSxTQUFBLE9BQ0EsZUFBQSxJQUNBLG9CQUFBLE1BQ0EsWUFBQSxNQUNBLDJCQUFBLElBQUEsSUFDQSxtQkFBQSxJQUFBLElBRUEsb0JBQ0EsV0FBQSxJQUNBLFlBQUEsS0FFQSxtQkFDQSxRQUFBLE1BQ0EsU0FBQSxTQUNBLFFBQUEsRUFBQSxJQUNBLGVBQUEsS0FDQSxtQkFBQSxJQUFBLElBQUEsS0FBQSxXQUFBLElBQUEsSUFBQSxLQUNBLHlCQUFBLElBQUEsRUFDQSxxQkFBQSxJQUFBLEVBQUEsaUJBQUEsSUFBQSxFQUNBLHdCQUFBLFlBQ0EsZ0JBQUEsWUFDQSw0QkFBQSxPQUNBLG9CQUFBLE9BRUEseUJBQ0EsV0FBQSxlQUNBLGtCQUFBLHVCQUFBLGVBQ0EsVUFBQSx1QkFBQSxlQUVBLHlCQUNBLFFBQUEsaUJBQ0EsUUFBQSxNQUNBLFNBQUEsU0FDQSxLQUFBLEVBQ0EsSUFBQSxFQUNBLFFBQUEsRUFBQSxJQUNBLDRCQUFBLE9BQ0Esb0JBQUEsT0FDQSx5QkFBQSxJQUFBLEVBQ0EscUJBQUEsSUFBQSxFQUFBLGlCQUFBLElBQUEsRUFDQSxrQkFBQSxzQkFBQSxnQkFDQSxVQUFBLHNCQUFBLGdCQUtBLG9CQUNBLFFBQUEsS0FFQSx1QkFDQSxRQUFBLEtBQ0EsU0FBQSxTQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsSUFBQSxFQUNBLEtBQUEsS0FDQSxRQUFBLEtBQUEsS0FBQSxLQUFBLEtBQ0EsUUFBQSxFQUNBLFVBQUEsS0FDQSxZQUFBLElBQ0EsT0FBQSxJQUFBLE1BQUEsZ0JBQ0EsTUFBQSxLQUNBLGlCQUFBLFFBQ0EsU0FBQSxLQUNBLG1CQUFBLFdBQUEsV0FBQSxXQUNBLFdBQUEsS0FDQSxZQUFBLFNBQUEsQ0FBQSxXQUNBLDJCQUFBLE1BQ0EsMENBQ0EsTUFBQSxLQUNBLFdBQUEsT0FDQSw2QkFDQSxRQUFBLEVBQ0EsOEJBQ0EsUUFBQSxnQkFDQSxRQUFBLE1BQ0EsY0FBQSxLQUNBLFFBQUEsR0FFQSxtQkFDQSxVQUFBLEtBQ0EsU0FBQSxRQUVBLGtDQUNBLFFBQUEsTUFFQSxxQ0FDQSx1QkFDQSxVQUFBLE1BRUEscUNBQ0EsbUJBQ0EsWUFBQSxFQUNBLFVBQUEsS0FDQSxXQUFBLElBQ0EsU0FBQSxRQUNBLGtDQUNBLElBQUEsS0FDQSxLQUFBLEVBQ0EsTUFBQSxLQUNBLE9BQUEsZ0JBRUEsb0NBQ0EsbUJBQ0EsV0FBQSxJQUNBLGtDQUNBLElBQUEsS0FDQSxPQUFBLGVBQ0EsdUJBQ0EsVUFBQSxNQUtBLGtCQzZHQSx1QkFEQSx3QkR6R0EsNEJBQUEsa0JBQ0Esb0JBQUEsa0JDOEdBLDBCRDVHQSwwQkFFQSxRQUFBLEVBRUEsMkJBQ0EsV0FBQSxJQUVBLGlDQUNBLFdBQUEsT0V0akRBOzs7QUFNQSxXQUNBLFlBQUEsWUFDQSxJQUFBLCtEQUNBLElBQUEsaUVBQUEsMkJBQUEsQ0RvcURPLDREQUE4RCxlQUFlLENBQzdFLDJEQUE2RCxjQUFjLENBQzNFLDBEQUE0RCxrQkFBa0IsQ0FDOUUsNkVBQStFLGNDbHFEdEYsWUFBQSxJQUNBLFdBQUEsT0FHQSxJQUNBLFFBQUEsYUFDQSxLQUFBLE9BQUEsT0FBQSxPQUFBLElBQUEsQ0FBQSxFQUFBLFlBQ0EsVUFBQSxRQUNBLGVBQUEsS0FDQSx1QkFBQSxZQUNBLHdCQUFBLFVBR0EsT0FDQSxVQUFBLGFBQ0EsWUFBQSxNQUNBLGVBQUEsS0FFQSxPQUNBLFVBQUEsSUFFQSxPQUNBLFVBQUEsSUFFQSxPQUNBLFVBQUEsSUFFQSxPQUNBLFVBQUEsSUFFQSxPQUNBLE1BQUEsYUFDQSxXQUFBLE9BRUEsT0FDQSxhQUFBLEVBQ0EsWUFBQSxhQUNBLGdCQUFBLEtBRUEsVUFDQSxTQUFBLFNBRUEsT0FDQSxTQUFBLFNBQ0EsS0FBQSxjQUNBLE1BQUEsYUFDQSxJQUFBLFlBQ0EsV0FBQSxPQUVBLGFBQ0EsS0FBQSxjQUVBLFdBQ0EsUUFBQSxLQUFBLE1BQUEsTUFDQSxPQUFBLE1BQUEsTUFBQSxLQUNBLGNBQUEsS0FFQSxjQUNBLE1BQUEsS0FFQSxlQUNBLE1BQUEsTUFFQSxpQkFDQSxhQUFBLEtBRUEsa0JBQ0EsWUFBQSxLQUdBLFlBQ0EsTUFBQSxNQUVBLFdBQ0EsTUFBQSxLQUVBLGNBQ0EsYUFBQSxLQUVBLGVBQ0EsWUFBQSxLQUVBLFNBQ0Esa0JBQUEsUUFBQSxHQUFBLFNBQUEsT0FDQSxVQUFBLFFBQUEsR0FBQSxTQUFBLE9BRUEsVUFDQSxrQkFBQSxRQUFBLEdBQUEsU0FBQSxTQUNBLFVBQUEsUUFBQSxHQUFBLFNBQUEsU0FFQSwyQkFDQSxHQUNBLGtCQUFBLFVBQ0EsVUFBQSxVQUVBLEtBQ0Esa0JBQUEsZUFDQSxVQUFBLGdCQUdBLG1CQUNBLEdBQ0Esa0JBQUEsVUFDQSxVQUFBLFVBRUEsS0FDQSxrQkFBQSxlQUNBLFVBQUEsZ0JBR0EsY0FFQSxrQkFBQSxjQUNBLGNBQUEsY0FDQSxVQUFBLGNBRUEsZUFFQSxrQkFBQSxlQUNBLGNBQUEsZUFDQSxVQUFBLGVBRUEsZUFFQSxrQkFBQSxlQUNBLGNBQUEsZUFDQSxVQUFBLGVBRUEsb0JBRUEsa0JBQUEsWUFDQSxjQUFBLFlBQ0EsVUFBQSxZQUVBLGtCQUVBLGtCQUFBLFlBQ0EsY0FBQSxZQUNBLFVBQUEsWUR3cURBLDBCQUNBLHdCQUhBLHFCQUNBLHFCQ3JxREEsb0JBS0EsZUFBQSxLQUFBLE9BQUEsS0FFQSxVQUNBLFNBQUEsU0FDQSxRQUFBLGFBQ0EsTUFBQSxJQUNBLE9BQUEsSUFDQSxZQUFBLElBQ0EsZUFBQSxPQUVBLGFEcXFEQSxhQ25xREEsU0FBQSxTQUNBLEtBQUEsRUFDQSxNQUFBLEtBQ0EsV0FBQSxPQUVBLGFBQ0EsWUFBQSxRQUVBLGFBQ0EsVUFBQSxJQUVBLFlBQ0EsTUFBQSxLQUlBLGlCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxjQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRRHVxREEsaUJDcnFEQSxrQkRzcURBLGlCQ25xREEsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUR1cURBLGVDcnFEQSxnQkFFQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsK0JBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRRHVxREEsa0JDcnFEQSx3QkFFQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGVBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLGtCRHFxREEsbUJDbnFEQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUR1cURBLGlCQ3JxREEsaUJEc3FEQSxxQkNucURBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsZ0JEcXFEQSwyQkNucURBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsd0JEcXFEQSxpQkNucURBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLDhCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFEdXFEQSxnQ0NycURBLG1CQUVBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsdUJEcXFEQSxxQkNucURBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUR1cURBLGdCQ3JxREEsaUJBRUEsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxzQkRxcURBLG9CQ25xREEsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLGdCRHFxREEsZUNucURBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSw4QkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxpQkRxcURBLGlCQ25xREEsUUFBQSxRQUVBLGlCRHFxREEsZ0JDbnFEQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxlRHFxREEsb0JDbnFEQSxRQUFBLFFBRUEsZ0JEcXFEQSxtQkNucURBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFEdXFEQSxvQkNycURBLGdCQUVBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFEd3FEQSxnQkN0cURBLG1CRHFxREEsbUJDbHFEQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSw0QkFDQSxRQUFBLFFBRUEsOEJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUR1cURBLGdCQ3JxREEsb0JBRUEsUUFBQSxRRHVxREEscUJDcnFEQSxxQkFFQSxRQUFBLFFEdXFEQSxvQkNycURBLG1CQUVBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHVCRHFxREEsZ0JDbnFEQSxRQUFBLFFEdXFEQSxpQkNycURBLGlCQUVBLFFBQUEsUUFFQSxxQkRxcURBLHNCQ25xREEsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFEdXFEQSxnQkNycURBLGlCQUVBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRRHVxREEscUJDcnFEQSxpQkFFQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSw4QkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsd0JEcXFEQSxrQkNucURBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCRHFxREEsaUJDbnFEQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsMEJEcXFEQSxxQkNucURBLFFBQUEsUUFFQSwyQkRxcURBLDBCQUNBLHVCQ25xREEsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRRHVxREEsd0JDcnFEQSxrQkFFQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSw0QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSw2QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSwrQkFDQSxRQUFBLFFBRUEsZ0NBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUFFQSwrQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLGdDQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRRHVxREEsK0JDcnFEQSx1QkFFQSxRQUFBLFFEdXFEQSw2QkNycURBLHFCQUVBLFFBQUEsUUR1cURBLGdDQ3JxREEsd0JBRUEsUUFBQSxRRHVxREEsZUNycURBLGdCQUVBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxrQkRxcURBLGVDbnFEQSxRQUFBLFFEdXFEQSxlQ3JxREEsaUJBRUEsUUFBQSxRQUVBLGVEdXFEQSxlQUZBLGVBQ0EsZUNscURBLFFBQUEsUUR1cURBLGtCQUNBLGVDdHFEQSxpQkFHQSxRQUFBLFFEdXFEQSxlQ3JxREEsZUFFQSxRQUFBLFFBRUEsbUJEcXFEQSxlQ25xREEsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSwyQkFDQSxRQUFBLFFBRUEsNEJBQ0EsUUFBQSxRQUVBLDRCQUNBLFFBQUEsUUFFQSw2QkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsNEJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSwyQkFDQSxRQUFBLFFBRUEsNEJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxrQkRxcURBLG9CQ25xREEsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGVBQ0EsUUFBQSxRQUVBLGNBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxnQ0FDQSxRQUFBLFFBRUEsK0JBQ0EsUUFBQSxRRHVxREEsK0JDcnFEQSx1QkFFQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFEdXFEQSxlQ3JxREEsd0JBRUEsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRRHVxREEsZ0JDcnFEQSx1QkRzcURBLHNCQ25xREEsUUFBQSxRRHVxREEsMEJDcnFEQSx3QkFFQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLDhCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGVBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsZUFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxzQkRxcURBLGVDbnFEQSxRQUFBLFFBRUEsZURxcURBLGdCQ25xREEsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsNkJBQ0EsUUFBQSxRRHdxREEsd0JDdHFEQSx3QkRxcURBLDBCQ2xxREEsUUFBQSxRRHVxREEsMEJDcnFEQSxzQkFFQSxRQUFBLFFEdXFEQSx3QkNycURBLHdCQUVBLFFBQUEsUUFFQSx3QkRxcURBLHdCQ25xREEsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxxQkRxcURBLHFCQUdBLHFCQUZBLHNCQUNBLG1CQ2xxREEsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxjRHNxREEsaUJBREEsc0JDbHFEQSxRQUFBLFFEdXFEQSxrQkNycURBLGNBRUEsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUR3cURBLHVCQ3RxREEsK0JEcXFEQSxxQkNscURBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsY0FDQSxRQUFBLFFBRUEsa0JEcXFEQSxrQkNucURBLFFBQUEsUUR1cURBLHVCQ3JxREEsZ0JBRUEsUUFBQSxRRHVxREEseUJDcnFEQSxrQkFFQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsNEJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUR1cURBLG9CQ3JxREEseUJBRUEsUUFBQSxRQUVBLGVBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsY0FDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGNBQ0EsUUFBQSxRRHdxREEsZUN0cURBLGtCRHFxREEsa0JDbHFEQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSwyQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsb0JEcXFEQSx1QkNucURBLFFBQUEsUUFFQSwyQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLHlCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSw2QkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUR1cURBLGVDcnFEQSxpQkFFQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRRHVxREEsd0JDcnFEQSxjQUVBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSxxQkRzcURBLHdCQURBLG1CQ2xxREEsUUFBQSxRQUVBLHFCRHFxREEsa0NDbnFEQSxRQUFBLFFBRUEscUJEcXFEQSx3QkNucURBLFFBQUEsUUFFQSxxQkRxcURBLDJCQ25xREEsUUFBQSxRQUVBLHFCRHFxREEseUJDbnFEQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx1QkRxcURBLDJCQ25xREEsUUFBQSxRQUVBLHVCRHFxREEsMEJDbnFEQSxRQUFBLFFBRUEsdUJEcXFEQSx5QkNucURBLFFBQUEsUUFFQSxxQkFDQSxRQUFBLFFBRUEsdUJEcXFEQSx1QkNucURBLFFBQUEsUUR1cURBLHdCQ3JxREEsdUJBRUEsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSw0QkFDQSxRQUFBLFFBRUEsY0FDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsZ0NBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsaUJBQ0EsUUFBQSxRQUVBLDZCQUNBLFFBQUEsUUR1cURBLHNCQ3JxREEsY0FFQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLDRCQUNBLFFBQUEsUUFFQSw0QkFDQSxRQUFBLFFBRUEsNEJBQ0EsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSxzQkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLHdCQUNBLFFBQUEsUUFFQSxlQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsd0JBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsa0JBQ0EsUUFBQSxRQUVBLDRCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsNkJBQ0EsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSw2QkFDQSxRQUFBLFFBRUEsZ0NBQ0EsUUFBQSxRQUVBLG1CQUNBLFFBQUEsUUFFQSx1Q0FDQSxRQUFBLFFEdXFEQSwrQ0NycURBLDRCQUVBLFFBQUEsUUR3cURBLGdCQ3RxREEsb0JEcXFEQSwyQkNscURBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRRHVxREEseUJDcnFEQSxtQkFFQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLDBCQUNBLFFBQUEsUUFFQSwyQkFDQSxRQUFBLFFBRUEsc0JBQ0EsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSxpQkFDQSxRQUFBLFFBRUEscUJBQ0EsUUFBQSxRQUVBLDhCRHFxREEsZ0NDbnFEQSxRQUFBLFFBRUEsY0RxcURBLHdCQ25xREEsUUFBQSxRQUVBLHVCQUNBLFFBQUEsUUFFQSx5QkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSx3QkFDQSxRQUFBLFFBRUEsMEJBQ0EsUUFBQSxRRHVxREEsd0JDcnFEQSxpQkFFQSxRQUFBLFFEdXFEQSwwQkNycURBLG1CQUVBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEseUJBQ0EsUUFBQSxRQUVBLGtCQUNBLFFBQUEsUUFFQSxvQkFDQSxRQUFBLFFBRUEsMkJEcXFEQSxtQkNucURBLFFBQUEsUUFFQSw2QkRxcURBLHFCQ25xREEsUUFBQSxRQUVBLGlCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsb0JBQ0EsUUFBQSxRQUVBLHlCRHNxREEsNEJBREEsdUJDbHFEQSxRQUFBLFFBRUEseUJEcXFEQSxzQ0NucURBLFFBQUEsUUFFQSx5QkRxcURBLDRCQ25xREEsUUFBQSxRQUVBLHlCRHFxREEsK0JDbnFEQSxRQUFBLFFBRUEseUJEcXFEQSw2QkNucURBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFEd3FEQSxnQkN0cURBLG1CRHFxREEsZUNscURBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsMkJBQ0EsUUFBQSxRQUVBLDJCQUNBLFFBQUEsUUFFQSwwQkFDQSxRQUFBLFFBRUEsMkJEcXFEQSx3QkNucURBLFFBQUEsUUFFQSw2QkRxcURBLDBCQ25xREEsUUFBQSxRQUVBLG9CQUNBLFFBQUEsUUFFQSxnQkFDQSxRQUFBLFFBRUEsZ0JBQ0EsUUFBQSxRQUVBLGdCQUNBLFFBQUEsUUFFQSxtQkFDQSxRQUFBLFFBRUEsbUJBQ0EsUUFBQSxRQUVBLHFCQUNBLFFBQUEsUUFFQSx1QkFDQSxRQUFBLFFBRUEsdUJBQ0EsUUFBQSxRQUVBLHNCQUNBLFFBQUEsUUFFQSxrQkFDQSxRQUFBLFFBRUEsU0FDQSxTQUFBLFNBQ0EsTUFBQSxJQUNBLE9BQUEsSUFDQSxRQUFBLEVBQ0EsT0FBQSxLQUNBLFNBQUEsT0FDQSxLQUFBLGNBQ0EsT0FBQSxFQUVBLDBCRHFxREEseUJDbnFEQSxTQUFBLE9BQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxPQUFBLEVBQ0EsU0FBQSxRQUNBLEtBQUEsS0M1d0VBLGlCQUNBLE9BQUEsTUFDQSxTQUFBLEtGKzhIQSxvQkU1OEhBLDRCQUVBLFFBQUEsTUFDQSxPQUFBLEtBQUEsRUFBQSxNQUFBLEVBQ0EsUUFBQSxFRis4SEEsb0JBQXFCLG9CRTU4SHJCLDRCQUFBLDRCQUVBLFdBQUEsS0YrOEh3Qix1QkFBeEIsdUJFNThIQSwrQkFBQSwrQkFFQSxjQUFBLEtBQ0EsV0FBQSxLQUNBLFlBQUEsTUYrOEhBLG9CRTU4SEEsNEJBRUEsT0FBQSxFQUFBLEVBQUEsS0FDQSxRQUFBLEVBR0EsMkJBQ0EsUUFBQSxPQUdBLHdCQUNBLGNBQUEsSUFBQSxPQUFBLEtBQ0EsTUFBQSxJQUdBLDBCQUNBLE1BQUEsTUFDQSxXQUFBLE1GKzhIQSxzQkU1OEhBLDhCQUVBLGdCQUFBLEtBR0Esa0JBQ0EsU0FBQSxTQUNBLElBQUEsS0FDQSxLQUFBLEtBR0Esb0JBQ0EsUUFBQSxFQUdBLHNCQUNBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsUUFBQSxFQVdBLDBCRjQ4SEEsMEJFMThIQSxRQUFBLEdBR0Esc0NGNDhIQSxzQ0UxOEhBLGFBQUEsUUFNQSw2QkFDQSxPQUFBLE1BR0Esb0NBQ0EsY0FBQSxJQUFBLE9BQUEsS0FLQSw4QkFDQSxPQUFBLE1BR0EscUNBQ0EsY0FBQSxJQUFBLE9BQUEsS0FHQSxtQ0FDQSxjQUFBLEtBS0Esd0JBQ0EsT0FBQSxNQUNBLFVBQUEsSUFHQSw4QkFBQSw4QkFDQSxZQUFBLEVBR0EsK0JBQ0EsYUFBQSxLQUdBLDBCQUVBLE9BQUEsS0FFQSxXQUFBLElBSUEsa0JBQ0EsUUFBQSxFQUdBLGdDRjQ4SEEsK0JFMThIQSxRQUFBLEtBR0EsNkJBQ0EsYUFBQSxLQUtBLDRCQUNBLGVBQUEsS0FHQSw4QkFDQSxXQUFBLElBR0EsK0JBQ0EsWUFBQSxFQUdBLHFDQUNBLFVBQUEsS0NqTEEsTUFDQSxRQUFBLE1BQ0EsV0FBQSxLQUNBLFFBQUEsS0FDQSxXQUFBLFFBQ0EsTUFBQSxRQUdBLGNIcW9JQSxjQUVBLFdBREEsYUdsb0lBLE1BQUEsUUFFQSxXQUNBLE1BQUEsUUFDQSxnQkFBQSxVQUdBLGVIcW9JQSxXR25vSUEsTUFBQSxRSHdvSUEsWUdyb0lBLGFBRUEsTUFBQSxRSHdvSUEsa0JHcm9JQSxhQUVBLE1BQUEsUUFHQSxhSHFvSUEsbUJHbm9JQSxNQUFBLFFIMG9JQSxjQUZBLGVBQ0EsYUd0b0lBLFlBSUEsTUFBQSxRQUdBLFlBQ0EsTUFBQSxRQUdBLG1CQUVBLE1BQUEsUUFHQSxjSHFvSUEsWUdub0lBLE1BQUEsUUFDQSxXQUFBLE9BR0EsYUFDQSxNQUFBLFFBR0EsV0hxb0lBLG1CQUNBLFVHbm9JQSxNQUFBLFFId29JQSx3Qkdyb0lBLGVBRUEsTUFBQSxRQUdBLFdIcW9JQSxnQkdub0lBLE1BQUEsUUFJQSxjQUNBLE1BQUEsS0FHQSxlQUNBLFdBQUEsT0FHQSxhQUNBLFlBQUEsSUFHQSxXQUNBLFlBQUEsVUFHQSxhSHdvSUEsb0JBREEscUJBREEsa0JBR0Esc0JBSkEsbUJHL25JQSxNQUFBLFFBR0EsZUFDQSxpQkFBQSxRQUNBLFFBQUEsYUFDQSxNQUFBLEtBR0EsZUFDQSxpQkFBQSxLQUNBLFFBQUEsYUFDQSxNQUFBIiwiZmlsZSI6ImNzcy9idW5kbGUubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiByZXZlYWwuanNcclxuICogaHR0cDovL3JldmVhbGpzLmNvbVxyXG4gKiBNSVQgbGljZW5zZWRcclxuICpcclxuICogQ29weXJpZ2h0IChDKSAyMDE4IEhha2ltIEVsIEhhdHRhYiwgaHR0cDovL2hha2ltLnNlXHJcbiAqL1xyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFJFU0VUIFNUWUxFU1xyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5odG1sLCBib2R5LCAucmV2ZWFsIGRpdiwgLnJldmVhbCBzcGFuLCAucmV2ZWFsIGFwcGxldCwgLnJldmVhbCBvYmplY3QsIC5yZXZlYWwgaWZyYW1lLFxyXG4ucmV2ZWFsIGgxLCAucmV2ZWFsIGgyLCAucmV2ZWFsIGgzLCAucmV2ZWFsIGg0LCAucmV2ZWFsIGg1LCAucmV2ZWFsIGg2LCAucmV2ZWFsIHAsIC5yZXZlYWwgYmxvY2txdW90ZSwgLnJldmVhbCBwcmUsXHJcbi5yZXZlYWwgYSwgLnJldmVhbCBhYmJyLCAucmV2ZWFsIGFjcm9ueW0sIC5yZXZlYWwgYWRkcmVzcywgLnJldmVhbCBiaWcsIC5yZXZlYWwgY2l0ZSwgLnJldmVhbCBjb2RlLFxyXG4ucmV2ZWFsIGRlbCwgLnJldmVhbCBkZm4sIC5yZXZlYWwgZW0sIC5yZXZlYWwgaW1nLCAucmV2ZWFsIGlucywgLnJldmVhbCBrYmQsIC5yZXZlYWwgcSwgLnJldmVhbCBzLCAucmV2ZWFsIHNhbXAsXHJcbi5yZXZlYWwgc21hbGwsIC5yZXZlYWwgc3RyaWtlLCAucmV2ZWFsIHN0cm9uZywgLnJldmVhbCBzdWIsIC5yZXZlYWwgc3VwLCAucmV2ZWFsIHR0LCAucmV2ZWFsIHZhcixcclxuLnJldmVhbCBiLCAucmV2ZWFsIHUsIC5yZXZlYWwgY2VudGVyLFxyXG4ucmV2ZWFsIGRsLCAucmV2ZWFsIGR0LCAucmV2ZWFsIGRkLCAucmV2ZWFsIG9sLCAucmV2ZWFsIHVsLCAucmV2ZWFsIGxpLFxyXG4ucmV2ZWFsIGZpZWxkc2V0LCAucmV2ZWFsIGZvcm0sIC5yZXZlYWwgbGFiZWwsIC5yZXZlYWwgbGVnZW5kLFxyXG4ucmV2ZWFsIHRhYmxlLCAucmV2ZWFsIGNhcHRpb24sIC5yZXZlYWwgdGJvZHksIC5yZXZlYWwgdGZvb3QsIC5yZXZlYWwgdGhlYWQsIC5yZXZlYWwgdHIsIC5yZXZlYWwgdGgsIC5yZXZlYWwgdGQsXHJcbi5yZXZlYWwgYXJ0aWNsZSwgLnJldmVhbCBhc2lkZSwgLnJldmVhbCBjYW52YXMsIC5yZXZlYWwgZGV0YWlscywgLnJldmVhbCBlbWJlZCxcclxuLnJldmVhbCBmaWd1cmUsIC5yZXZlYWwgZmlnY2FwdGlvbiwgLnJldmVhbCBmb290ZXIsIC5yZXZlYWwgaGVhZGVyLCAucmV2ZWFsIGhncm91cCxcclxuLnJldmVhbCBtZW51LCAucmV2ZWFsIG5hdiwgLnJldmVhbCBvdXRwdXQsIC5yZXZlYWwgcnVieSwgLnJldmVhbCBzZWN0aW9uLCAucmV2ZWFsIHN1bW1hcnksXHJcbi5yZXZlYWwgdGltZSwgLnJldmVhbCBtYXJrLCAucmV2ZWFsIGF1ZGlvLCAucmV2ZWFsIHZpZGVvIHtcclxuICBtYXJnaW46IDA7XHJcbiAgcGFkZGluZzogMDtcclxuICBib3JkZXI6IDA7XHJcbiAgZm9udC1zaXplOiAxMDAlO1xyXG4gIGZvbnQ6IGluaGVyaXQ7XHJcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9XHJcblxyXG4ucmV2ZWFsIGFydGljbGUsIC5yZXZlYWwgYXNpZGUsIC5yZXZlYWwgZGV0YWlscywgLnJldmVhbCBmaWdjYXB0aW9uLCAucmV2ZWFsIGZpZ3VyZSxcclxuLnJldmVhbCBmb290ZXIsIC5yZXZlYWwgaGVhZGVyLCAucmV2ZWFsIGhncm91cCwgLnJldmVhbCBtZW51LCAucmV2ZWFsIG5hdiwgLnJldmVhbCBzZWN0aW9uIHtcclxuICBkaXNwbGF5OiBibG9jazsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBHTE9CQUwgU1RZTEVTXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbmh0bWwsXHJcbmJvZHkge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuOyB9XHJcblxyXG5ib2R5IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBjb2xvcjogIzAwMDsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBWSUVXIEZSQUdNRU5UU1xyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQge1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTsgfVxyXG4gIC5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC52aXNpYmxlIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgICB2aXNpYmlsaXR5OiBpbmhlcml0OyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZ3JvdyB7XHJcbiAgb3BhY2l0eTogMTtcclxuICB2aXNpYmlsaXR5OiBpbmhlcml0OyB9XHJcbiAgLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50Lmdyb3cudmlzaWJsZSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4zKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuc2hyaW5rIHtcclxuICBvcGFjaXR5OiAxO1xyXG4gIHZpc2liaWxpdHk6IGluaGVyaXQ7IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuc2hyaW5rLnZpc2libGUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNyk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50Lnpvb20taW4ge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpOyB9XHJcbiAgLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50Lnpvb20taW4udmlzaWJsZSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1vdXQge1xyXG4gIG9wYWNpdHk6IDE7XHJcbiAgdmlzaWJpbGl0eTogaW5oZXJpdDsgfVxyXG4gIC5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5mYWRlLW91dC52aXNpYmxlIHtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5zZW1pLWZhZGUtb3V0IHtcclxuICBvcGFjaXR5OiAxO1xyXG4gIHZpc2liaWxpdHk6IGluaGVyaXQ7IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuc2VtaS1mYWRlLW91dC52aXNpYmxlIHtcclxuICAgIG9wYWNpdHk6IDAuNTtcclxuICAgIHZpc2liaWxpdHk6IGluaGVyaXQ7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5zdHJpa2Uge1xyXG4gIG9wYWNpdHk6IDE7XHJcbiAgdmlzaWJpbGl0eTogaW5oZXJpdDsgfVxyXG4gIC5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5zdHJpa2UudmlzaWJsZSB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmZhZGUtdXAge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMjAlKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDIwJSk7IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS11cC52aXNpYmxlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1kb3duIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yMCUpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTIwJSk7IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1kb3duLnZpc2libGUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5mYWRlLXJpZ2h0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC0yMCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIwJSwgMCk7IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1yaWdodC52aXNpYmxlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1sZWZ0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwJSwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMCUsIDApOyB9XHJcbiAgLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmZhZGUtbGVmdC52aXNpYmxlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1pbi10aGVuLW91dCxcclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmN1cnJlbnQtdmlzaWJsZSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1pbi10aGVuLW91dC5jdXJyZW50LWZyYWdtZW50LFxyXG4gIC5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5jdXJyZW50LXZpc2libGUuY3VycmVudC1mcmFnbWVudCB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG4gICAgdmlzaWJpbGl0eTogaW5oZXJpdDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmZhZGUtaW4tdGhlbi1zZW1pLW91dCB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47IH1cclxuICAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuZmFkZS1pbi10aGVuLXNlbWktb3V0LnZpc2libGUge1xyXG4gICAgb3BhY2l0eTogMC41O1xyXG4gICAgdmlzaWJpbGl0eTogaW5oZXJpdDsgfVxyXG4gIC5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5mYWRlLWluLXRoZW4tc2VtaS1vdXQuY3VycmVudC1mcmFnbWVudCB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG4gICAgdmlzaWJpbGl0eTogaW5oZXJpdDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmhpZ2hsaWdodC1yZWQsXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5oaWdobGlnaHQtY3VycmVudC1yZWQsXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5oaWdobGlnaHQtZ3JlZW4sXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5oaWdobGlnaHQtY3VycmVudC1ncmVlbixcclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmhpZ2hsaWdodC1ibHVlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuaGlnaGxpZ2h0LWN1cnJlbnQtYmx1ZSB7XHJcbiAgb3BhY2l0eTogMTtcclxuICB2aXNpYmlsaXR5OiBpbmhlcml0OyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuaGlnaGxpZ2h0LXJlZC52aXNpYmxlIHtcclxuICBjb2xvcjogI2ZmMmMyZDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmhpZ2hsaWdodC1ncmVlbi52aXNpYmxlIHtcclxuICBjb2xvcjogIzE3ZmYyZTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24gLmZyYWdtZW50LmhpZ2hsaWdodC1ibHVlLnZpc2libGUge1xyXG4gIGNvbG9yOiAjMWI5MWZmOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuaGlnaGxpZ2h0LWN1cnJlbnQtcmVkLmN1cnJlbnQtZnJhZ21lbnQge1xyXG4gIGNvbG9yOiAjZmYyYzJkOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiAuZnJhZ21lbnQuaGlnaGxpZ2h0LWN1cnJlbnQtZ3JlZW4uY3VycmVudC1mcmFnbWVudCB7XHJcbiAgY29sb3I6ICMxN2ZmMmU7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudC5oaWdobGlnaHQtY3VycmVudC1ibHVlLmN1cnJlbnQtZnJhZ21lbnQge1xyXG4gIGNvbG9yOiAjMWI5MWZmOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIERFRkFVTFQgRUxFTUVOVCBTVFlMRVNcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLyogRml4ZXMgaXNzdWUgaW4gQ2hyb21lIHdoZXJlIGl0YWxpYyBmb250cyBkaWQgbm90IGFwcGVhciB3aGVuIHByaW50aW5nIHRvIFBERiAqL1xyXG4ucmV2ZWFsOmFmdGVyIHtcclxuICBjb250ZW50OiAnJztcclxuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cclxuXHJcbi5yZXZlYWwgaWZyYW1lIHtcclxuICB6LWluZGV4OiAxOyB9XHJcblxyXG4vKiogUHJldmVudHMgbGF5ZXJpbmcgaXNzdWVzIGluIGNlcnRhaW4gYnJvd3Nlci90cmFuc2l0aW9uIGNvbWJpbmF0aW9ucyAqL1xyXG4ucmV2ZWFsIGEge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxyXG5cclxuLnJldmVhbCAuc3RyZXRjaCB7XHJcbiAgbWF4LXdpZHRoOiBub25lO1xyXG4gIG1heC1oZWlnaHQ6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwgcHJlLnN0cmV0Y2ggY29kZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBDT05UUk9MU1xyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlLXJpZ2h0IHtcclxuICAwJSwgMTAlLCAyNSUsIDQwJSwgNTAlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cclxuICAyMCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTBweCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTsgfVxyXG4gIDMwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNXB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpOyB9IH1cclxuQGtleWZyYW1lcyBib3VuY2UtcmlnaHQge1xyXG4gIDAlLCAxMCUsIDI1JSwgNDAlLCA1MCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxyXG4gIDIwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOyB9XHJcbiAgMzAlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTVweCk7IH0gfVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jZS1kb3duIHtcclxuICAwJSwgMTAlLCAyNSUsIDQwJSwgNTAlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cclxuICAyMCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxyXG4gIDMwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOyB9IH1cclxuXHJcbkBrZXlmcmFtZXMgYm91bmNlLWRvd24ge1xyXG4gIDAlLCAxMCUsIDI1JSwgNDAlLCA1MCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxyXG4gIDIwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9XHJcbiAgMzAlIHtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7IH0gfVxyXG5cclxuLnJldmVhbCAuY29udHJvbHMge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogYXV0bztcclxuICBib3R0b206IDEycHg7XHJcbiAgcmlnaHQ6IDEycHg7XHJcbiAgbGVmdDogYXV0bztcclxuICB6LWluZGV4OiAxO1xyXG4gIGNvbG9yOiAjMDAwO1xyXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG4gIGZvbnQtc2l6ZTogMTBweDsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzIGJ1dHRvbiB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXI6IDA7XHJcbiAgICBvdXRsaW5lOiAwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgY29sb3I6IGN1cnJlbnRDb2xvcjtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjk5OTkpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTk5OSk7XHJcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCAtd2Via2l0LXRyYW5zZm9ybSAwLjJzIGVhc2U7XHJcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xyXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgb3BhY2l0eTogMDtcclxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcclxuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cclxuICAucmV2ZWFsIC5jb250cm9scyAuY29udHJvbHMtYXJyb3c6YmVmb3JlLFxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzphZnRlciB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMi42ZW07XHJcbiAgICBoZWlnaHQ6IDAuNWVtO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMC4yNWVtO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC44cyBlYXNlO1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwLjJlbSA1MCU7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAuMmVtIDUwJTtcclxuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IH1cclxuICAucmV2ZWFsIC5jb250cm9scyAuY29udHJvbHMtYXJyb3cge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgd2lkdGg6IDMuNmVtO1xyXG4gICAgaGVpZ2h0OiAzLjZlbTsgfVxyXG4gICAgLnJldmVhbCAuY29udHJvbHMgLmNvbnRyb2xzLWFycm93OmJlZm9yZSB7XHJcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuNWVtKSB0cmFuc2xhdGVZKDEuNTVlbSkgcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMC41ZW0pIHRyYW5zbGF0ZVkoMS41NWVtKSByb3RhdGUoNDVkZWcpOyB9XHJcbiAgICAucmV2ZWFsIC5jb250cm9scyAuY29udHJvbHMtYXJyb3c6YWZ0ZXIge1xyXG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSgtNDVkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSgtNDVkZWcpOyB9XHJcbiAgICAucmV2ZWFsIC5jb250cm9scyAuY29udHJvbHMtYXJyb3c6aG92ZXI6YmVmb3JlIHtcclxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMC41ZW0pIHRyYW5zbGF0ZVkoMS41NWVtKSByb3RhdGUoNDBkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSg0MGRlZyk7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzpob3ZlcjphZnRlciB7XHJcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuNWVtKSB0cmFuc2xhdGVZKDEuNTVlbSkgcm90YXRlKC00MGRlZyk7XHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuNWVtKSB0cmFuc2xhdGVZKDEuNTVlbSkgcm90YXRlKC00MGRlZyk7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzphY3RpdmU6YmVmb3JlIHtcclxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMC41ZW0pIHRyYW5zbGF0ZVkoMS41NWVtKSByb3RhdGUoMzZkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSgzNmRlZyk7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzphY3RpdmU6YWZ0ZXIge1xyXG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSgtMzZkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSgtMzZkZWcpOyB9XHJcbiAgLnJldmVhbCAuY29udHJvbHMgLm5hdmlnYXRlLWxlZnQge1xyXG4gICAgcmlnaHQ6IDYuNGVtO1xyXG4gICAgYm90dG9tOiAzLjJlbTtcclxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMHB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMHB4KTsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzIC5uYXZpZ2F0ZS1yaWdodCB7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvdHRvbTogMy4yZW07XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOyB9XHJcbiAgICAucmV2ZWFsIC5jb250cm9scyAubmF2aWdhdGUtcmlnaHQgLmNvbnRyb2xzLWFycm93IHtcclxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzIC5uYXZpZ2F0ZS1yaWdodC5oaWdobGlnaHQge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogYm91bmNlLXJpZ2h0IDJzIDUwIGJvdGggZWFzZS1vdXQ7XHJcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBib3VuY2UtcmlnaHQgMnMgNTAgYm90aCBlYXNlLW91dDsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzIC5uYXZpZ2F0ZS11cCB7XHJcbiAgICByaWdodDogMy4yZW07XHJcbiAgICBib3R0b206IDYuNGVtO1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOyB9XHJcbiAgICAucmV2ZWFsIC5jb250cm9scyAubmF2aWdhdGUtdXAgLmNvbnRyb2xzLWFycm93IHtcclxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XHJcbiAgLnJldmVhbCAuY29udHJvbHMgLm5hdmlnYXRlLWRvd24ge1xyXG4gICAgcmlnaHQ6IDMuMmVtO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxyXG4gICAgLnJldmVhbCAuY29udHJvbHMgLm5hdmlnYXRlLWRvd24gLmNvbnRyb2xzLWFycm93IHtcclxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzIC5uYXZpZ2F0ZS1kb3duLmhpZ2hsaWdodCB7XHJcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBib3VuY2UtZG93biAycyA1MCBib3RoIGVhc2Utb3V0O1xyXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogYm91bmNlLWRvd24gMnMgNTAgYm90aCBlYXNlLW91dDsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtYmFjay1hcnJvd3M9XCJmYWRlZFwiXSAubmF2aWdhdGUtbGVmdC5lbmFibGVkLFxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtYmFjay1hcnJvd3M9XCJmYWRlZFwiXSAubmF2aWdhdGUtdXAuZW5hYmxlZCB7XHJcbiAgICBvcGFjaXR5OiAwLjM7IH1cclxuICAgIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtYmFjay1hcnJvd3M9XCJmYWRlZFwiXSAubmF2aWdhdGUtbGVmdC5lbmFibGVkOmhvdmVyLFxyXG4gICAgLnJldmVhbCAuY29udHJvbHNbZGF0YS1jb250cm9scy1iYWNrLWFycm93cz1cImZhZGVkXCJdIC5uYXZpZ2F0ZS11cC5lbmFibGVkOmhvdmVyIHtcclxuICAgICAgb3BhY2l0eTogMTsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtYmFjay1hcnJvd3M9XCJoaWRkZW5cIl0gLm5hdmlnYXRlLWxlZnQuZW5hYmxlZCxcclxuICAucmV2ZWFsIC5jb250cm9sc1tkYXRhLWNvbnRyb2xzLWJhY2stYXJyb3dzPVwiaGlkZGVuXCJdIC5uYXZpZ2F0ZS11cC5lbmFibGVkIHtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47IH1cclxuICAucmV2ZWFsIC5jb250cm9scyAuZW5hYmxlZCB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgb3BhY2l0eTogMC45O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzIC5lbmFibGVkLmZyYWdtZW50ZWQge1xyXG4gICAgb3BhY2l0eTogMC41OyB9XHJcbiAgLnJldmVhbCAuY29udHJvbHMgLmVuYWJsZWQ6aG92ZXIsXHJcbiAgLnJldmVhbCAuY29udHJvbHMgLmVuYWJsZWQuZnJhZ21lbnRlZDpob3ZlciB7XHJcbiAgICBvcGFjaXR5OiAxOyB9XHJcblxyXG4ucmV2ZWFsOm5vdCguaGFzLXZlcnRpY2FsLXNsaWRlcykgLmNvbnRyb2xzIC5uYXZpZ2F0ZS1sZWZ0IHtcclxuICBib3R0b206IDEuNGVtO1xyXG4gIHJpZ2h0OiA1LjVlbTsgfVxyXG5cclxuLnJldmVhbDpub3QoLmhhcy12ZXJ0aWNhbC1zbGlkZXMpIC5jb250cm9scyAubmF2aWdhdGUtcmlnaHQge1xyXG4gIGJvdHRvbTogMS40ZW07XHJcbiAgcmlnaHQ6IDAuNWVtOyB9XHJcblxyXG4ucmV2ZWFsOm5vdCguaGFzLWhvcml6b250YWwtc2xpZGVzKSAuY29udHJvbHMgLm5hdmlnYXRlLXVwIHtcclxuICByaWdodDogMS40ZW07XHJcbiAgYm90dG9tOiA1ZW07IH1cclxuXHJcbi5yZXZlYWw6bm90KC5oYXMtaG9yaXpvbnRhbC1zbGlkZXMpIC5jb250cm9scyAubmF2aWdhdGUtZG93biB7XHJcbiAgcmlnaHQ6IDEuNGVtO1xyXG4gIGJvdHRvbTogMC41ZW07IH1cclxuXHJcbi5yZXZlYWwuaGFzLWRhcmstYmFja2dyb3VuZCAuY29udHJvbHMge1xyXG4gIGNvbG9yOiAjZmZmOyB9XHJcblxyXG4ucmV2ZWFsLmhhcy1saWdodC1iYWNrZ3JvdW5kIC5jb250cm9scyB7XHJcbiAgY29sb3I6ICMwMDA7IH1cclxuXHJcbi5yZXZlYWwubm8taG92ZXIgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzpob3ZlcjpiZWZvcmUsXHJcbi5yZXZlYWwubm8taG92ZXIgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzphY3RpdmU6YmVmb3JlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjVlbSkgdHJhbnNsYXRlWSgxLjU1ZW0pIHJvdGF0ZSg0NWRlZyk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMC41ZW0pIHRyYW5zbGF0ZVkoMS41NWVtKSByb3RhdGUoNDVkZWcpOyB9XHJcblxyXG4ucmV2ZWFsLm5vLWhvdmVyIC5jb250cm9scyAuY29udHJvbHMtYXJyb3c6aG92ZXI6YWZ0ZXIsXHJcbi5yZXZlYWwubm8taG92ZXIgLmNvbnRyb2xzIC5jb250cm9scy1hcnJvdzphY3RpdmU6YWZ0ZXIge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuNWVtKSB0cmFuc2xhdGVZKDEuNTVlbSkgcm90YXRlKC00NWRlZyk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMC41ZW0pIHRyYW5zbGF0ZVkoMS41NWVtKSByb3RhdGUoLTQ1ZGVnKTsgfVxyXG5cclxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHtcclxuICAucmV2ZWFsIC5jb250cm9sc1tkYXRhLWNvbnRyb2xzLWxheW91dD1cImVkZ2VzXCJdIHtcclxuICAgIHRvcDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogMDsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtbGF5b3V0PVwiZWRnZXNcIl0gLm5hdmlnYXRlLWxlZnQsXHJcbiAgLnJldmVhbCAuY29udHJvbHNbZGF0YS1jb250cm9scy1sYXlvdXQ9XCJlZGdlc1wiXSAubmF2aWdhdGUtcmlnaHQsXHJcbiAgLnJldmVhbCAuY29udHJvbHNbZGF0YS1jb250cm9scy1sYXlvdXQ9XCJlZGdlc1wiXSAubmF2aWdhdGUtdXAsXHJcbiAgLnJldmVhbCAuY29udHJvbHNbZGF0YS1jb250cm9scy1sYXlvdXQ9XCJlZGdlc1wiXSAubmF2aWdhdGUtZG93biB7XHJcbiAgICBib3R0b206IGF1dG87XHJcbiAgICByaWdodDogYXV0bzsgfVxyXG4gIC5yZXZlYWwgLmNvbnRyb2xzW2RhdGEtY29udHJvbHMtbGF5b3V0PVwiZWRnZXNcIl0gLm5hdmlnYXRlLWxlZnQge1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBsZWZ0OiA4cHg7XHJcbiAgICBtYXJnaW4tdG9wOiAtMS44ZW07IH1cclxuICAucmV2ZWFsIC5jb250cm9sc1tkYXRhLWNvbnRyb2xzLWxheW91dD1cImVkZ2VzXCJdIC5uYXZpZ2F0ZS1yaWdodCB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiA4cHg7XHJcbiAgICBtYXJnaW4tdG9wOiAtMS44ZW07IH1cclxuICAucmV2ZWFsIC5jb250cm9sc1tkYXRhLWNvbnRyb2xzLWxheW91dD1cImVkZ2VzXCJdIC5uYXZpZ2F0ZS11cCB7XHJcbiAgICB0b3A6IDhweDtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMS44ZW07IH1cclxuICAucmV2ZWFsIC5jb250cm9sc1tkYXRhLWNvbnRyb2xzLWxheW91dD1cImVkZ2VzXCJdIC5uYXZpZ2F0ZS1kb3duIHtcclxuICAgIGJvdHRvbTogOHB4O1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjhlbTsgfSB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFBST0dSRVNTIEJBUlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4ucmV2ZWFsIC5wcm9ncmVzcyB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbiAgaGVpZ2h0OiAzcHg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgei1pbmRleDogMTA7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG4gIGNvbG9yOiAjZmZmOyB9XHJcblxyXG4ucmV2ZWFsIC5wcm9ncmVzczphZnRlciB7XHJcbiAgY29udGVudDogJyc7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGhlaWdodDogMTBweDtcclxuICB3aWR0aDogMTAwJTtcclxuICB0b3A6IC0xMHB4OyB9XHJcblxyXG4ucmV2ZWFsIC5wcm9ncmVzcyBzcGFuIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgd2lkdGg6IDBweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XHJcbiAgdHJhbnNpdGlvbjogd2lkdGggODAwbXMgY3ViaWMtYmV6aWVyKDAuMjYsIDAuODYsIDAuNDQsIDAuOTg1KTsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTTElERSBOVU1CRVJcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAuc2xpZGUtbnVtYmVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgcmlnaHQ6IDhweDtcclxuICBib3R0b206IDhweDtcclxuICB6LWluZGV4OiAzMTtcclxuICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG4gIGZvbnQtc2l6ZTogMTJweDtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBjb2xvcjogI2ZmZjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNCk7XHJcbiAgcGFkZGluZzogNXB4OyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZS1udW1iZXIgYSB7XHJcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGUtbnVtYmVyLWRlbGltaXRlciB7XHJcbiAgbWFyZ2luOiAwIDNweDsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTTElERVNcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIC1tcy10b3VjaC1hY3Rpb246IHBpbmNoLXpvb207XHJcbiAgICAgIHRvdWNoLWFjdGlvbjogcGluY2gtem9vbTsgfVxyXG5cclxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xyXG4gIC5yZXZlYWwudWEtaXBob25lIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDsgfSB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgdG9wOiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIG1hcmdpbjogYXV0bztcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICBvdmVyZmxvdzogdmlzaWJsZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAtd2Via2l0LXBlcnNwZWN0aXZlOiA2MDBweDtcclxuICAgICAgICAgIHBlcnNwZWN0aXZlOiA2MDBweDtcclxuICAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogNTAlIDQwJTtcclxuICAgICAgICAgIHBlcnNwZWN0aXZlLW9yaWdpbjogNTAlIDQwJTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiB7XHJcbiAgLW1zLXBlcnNwZWN0aXZlOiA2MDBweDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbixcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIHBhZGRpbmc6IDIwcHggMHB4O1xyXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xyXG4gIHotaW5kZXg6IDEwO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBmbGF0O1xyXG4gICAgICAgICAgdHJhbnNmb3JtLXN0eWxlOiBmbGF0O1xyXG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbiA4MDBtcyBjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpLCAtd2Via2l0LXRyYW5zZm9ybSA4MDBtcyBjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpLCB2aXNpYmlsaXR5IDgwMG1zIGN1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSksIG9wYWNpdHkgODAwbXMgY3ViaWMtYmV6aWVyKDAuMjYsIDAuODYsIDAuNDQsIDAuOTg1KTtcclxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0tb3JpZ2luIDgwMG1zIGN1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSksIHRyYW5zZm9ybSA4MDBtcyBjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpLCB2aXNpYmlsaXR5IDgwMG1zIGN1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSksIG9wYWNpdHkgODAwbXMgY3ViaWMtYmV6aWVyKDAuMjYsIDAuODYsIDAuNDQsIDAuOTg1KTsgfVxyXG5cclxuLyogR2xvYmFsIHRyYW5zaXRpb24gc3BlZWQgc2V0dGluZ3MgKi9cclxuLnJldmVhbFtkYXRhLXRyYW5zaXRpb24tc3BlZWQ9XCJmYXN0XCJdIC5zbGlkZXMgc2VjdGlvbiB7XHJcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNDAwbXM7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS10cmFuc2l0aW9uLXNwZWVkPVwic2xvd1wiXSAuc2xpZGVzIHNlY3Rpb24ge1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDEyMDBtczsgfVxyXG5cclxuLyogU2xpZGUtc3BlY2lmaWMgdHJhbnNpdGlvbiBzcGVlZCBvdmVycmlkZXMgKi9cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uLXNwZWVkPVwiZmFzdFwiXSB7XHJcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNDAwbXM7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbi1zcGVlZD1cInNsb3dcIl0ge1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDEyMDBtczsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbi5zdGFjayB7XHJcbiAgcGFkZGluZy10b3A6IDA7XHJcbiAgcGFkZGluZy1ib3R0b206IDA7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24ucHJlc2VudCxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb24ucHJlc2VudCB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgei1pbmRleDogMTE7XHJcbiAgb3BhY2l0eTogMTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbjplbXB0eSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb246ZW1wdHksXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS1iYWNrZ3JvdW5kLWludGVyYWN0aXZlXSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS1iYWNrZ3JvdW5kLWludGVyYWN0aXZlXSB7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwuY2VudGVyLFxyXG4ucmV2ZWFsLmNlbnRlciAuc2xpZGVzLFxyXG4ucmV2ZWFsLmNlbnRlciAuc2xpZGVzIHNlY3Rpb24ge1xyXG4gIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsgfVxyXG5cclxuLyogRG9uJ3QgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCBpbnZpc2libGUgc2xpZGVzICovXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbi5mdXR1cmUsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24ucGFzdCxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb24ucGFzdCB7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyA+IHNlY3Rpb24sXHJcbi5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uIHtcclxuICBwb2ludGVyLWV2ZW50czogYXV0bzsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbi5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb24ucGFzdCxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb24uZnV0dXJlIHtcclxuICBvcGFjaXR5OiAwOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIE1peGlucyBmb3IgcmVhZGFiaWxpdHkgb2YgdHJhbnNpdGlvbnNcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTTElERSBUUkFOU0lUSU9OXHJcbiAqIEFsaWFzZWQgJ2xpbmVhcicgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi5yZXZlYWwuc2xpZGUgc2VjdGlvbiB7XHJcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPXNsaWRlXS5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49c2xpZGUtb3V0XS5wYXN0LFxyXG4ucmV2ZWFsLnNsaWRlIC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTUwJSwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTUwJSwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPXNsaWRlXS5mdXR1cmUsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1zbGlkZS1pbl0uZnV0dXJlLFxyXG4ucmV2ZWFsLnNsaWRlIC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkuZnV0dXJlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE1MCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTUwJSwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1zbGlkZV0ucGFzdCxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1zbGlkZS1vdXRdLnBhc3QsXHJcbi5yZXZlYWwuc2xpZGUgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTUwJSk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTUwJSk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1zbGlkZV0uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PXNsaWRlLWluXS5mdXR1cmUsXHJcbi5yZXZlYWwuc2xpZGUgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkuZnV0dXJlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDE1MCUpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMTUwJSk7IH1cclxuXHJcbi5yZXZlYWwubGluZWFyIHNlY3Rpb24ge1xyXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1saW5lYXJdLnBhc3QsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1saW5lYXItb3V0XS5wYXN0LFxyXG4ucmV2ZWFsLmxpbmVhciAuc2xpZGVzID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLnBhc3Qge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTE1MCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTE1MCUsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1saW5lYXJdLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWxpbmVhci1pbl0uZnV0dXJlLFxyXG4ucmV2ZWFsLmxpbmVhciAuc2xpZGVzID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLmZ1dHVyZSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNTAlLCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE1MCUsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249bGluZWFyXS5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWxpbmVhci1vdXRdLnBhc3QsXHJcbi5yZXZlYWwubGluZWFyIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLnBhc3Qge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTE1MCUpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTE1MCUpOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249bGluZWFyXS5mdXR1cmUsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49bGluZWFyLWluXS5mdXR1cmUsXHJcbi5yZXZlYWwubGluZWFyIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLmZ1dHVyZSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAxNTAlKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDE1MCUpOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIENPTlZFWCBUUkFOU0lUSU9OXHJcbiAqIEFsaWFzZWQgJ2RlZmF1bHQnIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbltkYXRhLXRyYW5zaXRpb249ZGVmYXVsdF0uc3RhY2ssXHJcbi5yZXZlYWwuZGVmYXVsdCAuc2xpZGVzIHNlY3Rpb24uc3RhY2sge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcclxuICAgICAgICAgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWRlZmF1bHRdLnBhc3QsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1kZWZhdWx0LW91dF0ucGFzdCxcclxuLnJldmVhbC5kZWZhdWx0IC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249ZGVmYXVsdF0uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49ZGVmYXVsdC1pbl0uZnV0dXJlLFxyXG4ucmV2ZWFsLmRlZmF1bHQgLnNsaWRlcyA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5mdXR1cmUge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkgcm90YXRlWSg5MGRlZykgdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1kZWZhdWx0XS5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWRlZmF1bHQtb3V0XS5wYXN0LFxyXG4ucmV2ZWFsLmRlZmF1bHQgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0zMDBweCwgMCkgcm90YXRlWCg3MGRlZykgdHJhbnNsYXRlM2QoMCwgLTMwMHB4LCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTMwMHB4LCAwKSByb3RhdGVYKDcwZGVnKSB0cmFuc2xhdGUzZCgwLCAtMzAwcHgsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249ZGVmYXVsdF0uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWRlZmF1bHQtaW5dLmZ1dHVyZSxcclxuLnJldmVhbC5kZWZhdWx0IC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLmZ1dHVyZSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDMwMHB4LCAwKSByb3RhdGVYKC03MGRlZykgdHJhbnNsYXRlM2QoMCwgMzAwcHgsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAzMDBweCwgMCkgcm90YXRlWCgtNzBkZWcpIHRyYW5zbGF0ZTNkKDAsIDMwMHB4LCAwKTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWNvbnZleF0uc3RhY2ssXHJcbi5yZXZlYWwuY29udmV4IC5zbGlkZXMgc2VjdGlvbi5zdGFjayB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xyXG4gICAgICAgICAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249Y29udmV4XS5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49Y29udmV4LW91dF0ucGFzdCxcclxuLnJldmVhbC5jb252ZXggLnNsaWRlcyA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIHJvdGF0ZVkoLTkwZGVnKSB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1jb252ZXhdLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWNvbnZleC1pbl0uZnV0dXJlLFxyXG4ucmV2ZWFsLmNvbnZleCAuc2xpZGVzID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLmZ1dHVyZSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIHJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWNvbnZleF0ucGFzdCxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1jb252ZXgtb3V0XS5wYXN0LFxyXG4ucmV2ZWFsLmNvbnZleCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTMwMHB4LCAwKSByb3RhdGVYKDcwZGVnKSB0cmFuc2xhdGUzZCgwLCAtMzAwcHgsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMzAwcHgsIDApIHJvdGF0ZVgoNzBkZWcpIHRyYW5zbGF0ZTNkKDAsIC0zMDBweCwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1jb252ZXhdLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1jb252ZXgtaW5dLmZ1dHVyZSxcclxuLnJldmVhbC5jb252ZXggLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkuZnV0dXJlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMzAwcHgsIDApIHJvdGF0ZVgoLTcwZGVnKSB0cmFuc2xhdGUzZCgwLCAzMDBweCwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDMwMHB4LCAwKSByb3RhdGVYKC03MGRlZykgdHJhbnNsYXRlM2QoMCwgMzAwcHgsIDApOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIENPTkNBVkUgVFJBTlNJVElPTlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbltkYXRhLXRyYW5zaXRpb249Y29uY2F2ZV0uc3RhY2ssXHJcbi5yZXZlYWwuY29uY2F2ZSAuc2xpZGVzIHNlY3Rpb24uc3RhY2sge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcclxuICAgICAgICAgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWNvbmNhdmVdLnBhc3QsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj1jb25jYXZlLW91dF0ucGFzdCxcclxuLnJldmVhbC5jb25jYXZlIC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWNvbmNhdmVdLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWNvbmNhdmUtaW5dLmZ1dHVyZSxcclxuLnJldmVhbC5jb25jYXZlIC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkuZnV0dXJlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKSByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbj1jb25jYXZlXS5wYXN0LFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWNvbmNhdmUtb3V0XS5wYXN0LFxyXG4ucmV2ZWFsLmNvbmNhdmUgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC04MCUsIDApIHJvdGF0ZVgoLTcwZGVnKSB0cmFuc2xhdGUzZCgwLCAtODAlLCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTgwJSwgMCkgcm90YXRlWCgtNzBkZWcpIHRyYW5zbGF0ZTNkKDAsIC04MCUsIDApOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249Y29uY2F2ZV0uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb25+PWNvbmNhdmUtaW5dLmZ1dHVyZSxcclxuLnJldmVhbC5jb25jYXZlIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbjpub3QoW2RhdGEtdHJhbnNpdGlvbl0pLmZ1dHVyZSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDgwJSwgMCkgcm90YXRlWCg3MGRlZykgdHJhbnNsYXRlM2QoMCwgODAlLCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgODAlLCAwKSByb3RhdGVYKDcwZGVnKSB0cmFuc2xhdGUzZCgwLCA4MCUsIDApOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFpPT00gVFJBTlNJVElPTlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4ucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbltkYXRhLXRyYW5zaXRpb249em9vbV0sXHJcbi5yZXZlYWwuem9vbSAuc2xpZGVzIHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKSB7XHJcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPXpvb21dLnBhc3QsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj16b29tLW91dF0ucGFzdCxcclxuLnJldmVhbC56b29tIC5zbGlkZXMgPiBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkucGFzdCB7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxNik7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDE2KTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbltkYXRhLXRyYW5zaXRpb249em9vbV0uZnV0dXJlLFxyXG4ucmV2ZWFsIC5zbGlkZXMgPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49em9vbS1pbl0uZnV0dXJlLFxyXG4ucmV2ZWFsLnpvb20gLnNsaWRlcyA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5mdXR1cmUge1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4yKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4yKTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPXpvb21dLnBhc3QsXHJcbi5yZXZlYWwgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uW2RhdGEtdHJhbnNpdGlvbn49em9vbS1vdXRdLnBhc3QsXHJcbi5yZXZlYWwuem9vbSAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xNTAlKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xNTAlKTsgfVxyXG5cclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPXpvb21dLmZ1dHVyZSxcclxuLnJldmVhbCAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb25bZGF0YS10cmFuc2l0aW9ufj16b29tLWluXS5mdXR1cmUsXHJcbi5yZXZlYWwuem9vbSAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKS5mdXR1cmUge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMTUwJSk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAxNTAlKTsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBDVUJFIFRSQU5TSVRJT05cclxuICpcclxuICogV0FSTklORzpcclxuICogdGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYVxyXG4gKiBmdXR1cmUgdmVyc2lvbi5cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbC5jdWJlIC5zbGlkZXMge1xyXG4gIC13ZWJraXQtcGVyc3BlY3RpdmU6IDEzMDBweDtcclxuICAgICAgICAgIHBlcnNwZWN0aXZlOiAxMzAwcHg7IH1cclxuXHJcbi5yZXZlYWwuY3ViZSAuc2xpZGVzIHNlY3Rpb24ge1xyXG4gIHBhZGRpbmc6IDMwcHg7XHJcbiAgbWluLWhlaWdodDogNzAwcHg7XHJcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkOyB9XHJcblxyXG4ucmV2ZWFsLmNlbnRlci5jdWJlIC5zbGlkZXMgc2VjdGlvbiB7XHJcbiAgbWluLWhlaWdodDogMDsgfVxyXG5cclxuLnJldmVhbC5jdWJlIC5zbGlkZXMgc2VjdGlvbjpub3QoLnN0YWNrKTpiZWZvcmUge1xyXG4gIGNvbnRlbnQ6ICcnO1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgbGVmdDogMDtcclxuICB0b3A6IDA7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigtMjBweCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTIwcHgpOyB9XHJcblxyXG4ucmV2ZWFsLmN1YmUgLnNsaWRlcyBzZWN0aW9uOm5vdCguc3RhY2spOmFmdGVyIHtcclxuICBjb250ZW50OiAnJztcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgd2lkdGg6IDkwJTtcclxuICBoZWlnaHQ6IDMwcHg7XHJcbiAgbGVmdDogNSU7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgei1pbmRleDogMTtcclxuICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgYm94LXNoYWRvdzogMHB4IDk1cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMik7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTkwcHgpIHJvdGF0ZVgoNjVkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC05MHB4KSByb3RhdGVYKDY1ZGVnKTsgfVxyXG5cclxuLnJldmVhbC5jdWJlIC5zbGlkZXMgPiBzZWN0aW9uLnN0YWNrIHtcclxuICBwYWRkaW5nOiAwO1xyXG4gIGJhY2tncm91bmQ6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwuY3ViZSAuc2xpZGVzID4gc2VjdGlvbi5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMCU7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDAlO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpOyB9XHJcblxyXG4ucmV2ZWFsLmN1YmUgLnNsaWRlcyA+IHNlY3Rpb24uZnV0dXJlIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAlIDAlO1xyXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMCU7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIHJvdGF0ZVkoOTBkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKTsgfVxyXG5cclxuLnJldmVhbC5jdWJlIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbi5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAxMDAlO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCkgcm90YXRlWCg5MGRlZyk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKSByb3RhdGVYKDkwZGVnKTsgfVxyXG5cclxuLnJldmVhbC5jdWJlIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbi5mdXR1cmUge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCUgMCU7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAwJTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCkgcm90YXRlWCgtOTBkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKSByb3RhdGVYKC05MGRlZyk7IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogUEFHRSBUUkFOU0lUSU9OXHJcbiAqXHJcbiAqIFdBUk5JTkc6XHJcbiAqIHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFcclxuICogZnV0dXJlIHZlcnNpb24uXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi5yZXZlYWwucGFnZSAuc2xpZGVzIHtcclxuICAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogMCUgNTAlO1xyXG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiAwJSA1MCU7XHJcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMzAwMHB4O1xyXG4gICAgICAgICAgcGVyc3BlY3RpdmU6IDMwMDBweDsgfVxyXG5cclxuLnJldmVhbC5wYWdlIC5zbGlkZXMgc2VjdGlvbiB7XHJcbiAgcGFkZGluZzogMzBweDtcclxuICBtaW4taGVpZ2h0OiA3MDBweDtcclxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcclxuICAgICAgICAgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7IH1cclxuXHJcbi5yZXZlYWwucGFnZSAuc2xpZGVzIHNlY3Rpb24ucGFzdCB7XHJcbiAgei1pbmRleDogMTI7IH1cclxuXHJcbi5yZXZlYWwucGFnZSAuc2xpZGVzIHNlY3Rpb246bm90KC5zdGFjayk6YmVmb3JlIHtcclxuICBjb250ZW50OiAnJztcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGxlZnQ6IDA7XHJcbiAgdG9wOiAwO1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigtMjBweCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTIwcHgpOyB9XHJcblxyXG4ucmV2ZWFsLnBhZ2UgLnNsaWRlcyBzZWN0aW9uOm5vdCguc3RhY2spOmFmdGVyIHtcclxuICBjb250ZW50OiAnJztcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgd2lkdGg6IDkwJTtcclxuICBoZWlnaHQ6IDMwcHg7XHJcbiAgbGVmdDogNSU7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgei1pbmRleDogMTtcclxuICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgYm94LXNoYWRvdzogMHB4IDk1cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMik7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTkwcHgpIHJvdGF0ZVgoNjVkZWcpOyB9XHJcblxyXG4ucmV2ZWFsLnBhZ2UgLnNsaWRlcyA+IHNlY3Rpb24uc3RhY2sge1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgYmFja2dyb3VuZDogbm9uZTsgfVxyXG5cclxuLnJldmVhbC5wYWdlIC5zbGlkZXMgPiBzZWN0aW9uLnBhc3Qge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCUgMCU7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAwJTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTQwJSwgMCwgMCkgcm90YXRlWSgtODBkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNDAlLCAwLCAwKSByb3RhdGVZKC04MGRlZyk7IH1cclxuXHJcbi5yZXZlYWwucGFnZSAuc2xpZGVzID4gc2VjdGlvbi5mdXR1cmUge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMCU7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxyXG5cclxuLnJldmVhbC5wYWdlIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbi5wYXN0IHtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAlIDAlO1xyXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMCU7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC00MCUsIDApIHJvdGF0ZVgoODBkZWcpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtNDAlLCAwKSByb3RhdGVYKDgwZGVnKTsgfVxyXG5cclxuLnJldmVhbC5wYWdlIC5zbGlkZXMgPiBzZWN0aW9uID4gc2VjdGlvbi5mdXR1cmUge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBGQURFIFRSQU5TSVRJT05cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPWZhZGVdLFxyXG4ucmV2ZWFsLmZhZGUgLnNsaWRlcyBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSksXHJcbi5yZXZlYWwuZmFkZSAuc2xpZGVzID4gc2VjdGlvbiA+IHNlY3Rpb246bm90KFtkYXRhLXRyYW5zaXRpb25dKSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XHJcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOyB9XHJcblxyXG4ucmV2ZWFsLmZhZGUub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uLFxyXG4ucmV2ZWFsLmZhZGUub3ZlcnZpZXcgLnNsaWRlcyA+IHNlY3Rpb24gPiBzZWN0aW9uIHtcclxuICB0cmFuc2l0aW9uOiBub25lOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIE5PIFRSQU5TSVRJT05cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAuc2xpZGVzIHNlY3Rpb25bZGF0YS10cmFuc2l0aW9uPW5vbmVdLFxyXG4ucmV2ZWFsLm5vbmUgLnNsaWRlcyBzZWN0aW9uOm5vdChbZGF0YS10cmFuc2l0aW9uXSkge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xyXG4gIHRyYW5zaXRpb246IG5vbmU7IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogUEFVU0VEIE1PREVcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAucGF1c2Utb3ZlcmxheSB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kOiBibGFjaztcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgb3BhY2l0eTogMDtcclxuICB6LWluZGV4OiAxMDA7XHJcbiAgdHJhbnNpdGlvbjogYWxsIDFzIGVhc2U7IH1cclxuXHJcbi5yZXZlYWwgLnBhdXNlLW92ZXJsYXkgLnJlc3VtZS1idXR0b24ge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBib3R0b206IDIwcHg7XHJcbiAgcmlnaHQ6IDIwcHg7XHJcbiAgY29sb3I6ICNjY2M7XHJcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xyXG4gIHBhZGRpbmc6IDZweCAxNHB4O1xyXG4gIGJvcmRlcjogMnB4IHNvbGlkICNjY2M7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gIGN1cnNvcjogcG9pbnRlcjsgfVxyXG4gIC5yZXZlYWwgLnBhdXNlLW92ZXJsYXkgLnJlc3VtZS1idXR0b246aG92ZXIge1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBib3JkZXItY29sb3I6ICNmZmY7IH1cclxuXHJcbi5yZXZlYWwucGF1c2VkIC5wYXVzZS1vdmVybGF5IHtcclxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gIG9wYWNpdHk6IDE7IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogRkFMTEJBQ0tcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLm5vLXRyYW5zZm9ybXMge1xyXG4gIG92ZXJmbG93LXk6IGF1dG87IH1cclxuXHJcbi5uby10cmFuc2Zvcm1zIC5yZXZlYWwgLnNsaWRlcyB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHdpZHRoOiA4MCU7XHJcbiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDUwJTtcclxuICBtYXJnaW46IDA7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XHJcblxyXG4ubm8tdHJhbnNmb3JtcyAucmV2ZWFsIC5jb250cm9scyxcclxuLm5vLXRyYW5zZm9ybXMgLnJldmVhbCAucHJvZ3Jlc3Mge1xyXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxyXG5cclxuLm5vLXRyYW5zZm9ybXMgLnJldmVhbCAuc2xpZGVzIHNlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XHJcbiAgb3BhY2l0eTogMSAhaW1wb3J0YW50O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG4gIGhlaWdodDogYXV0bztcclxuICBtaW4taGVpZ2h0OiAwO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAtNTAlO1xyXG4gIG1hcmdpbjogNzBweCAwO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiBub25lOyB9XHJcblxyXG4ubm8tdHJhbnNmb3JtcyAucmV2ZWFsIC5zbGlkZXMgc2VjdGlvbiBzZWN0aW9uIHtcclxuICBsZWZ0OiAwOyB9XHJcblxyXG4ucmV2ZWFsIC5uby10cmFuc2l0aW9uLFxyXG4ucmV2ZWFsIC5uby10cmFuc2l0aW9uICoge1xyXG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBQRVItU0xJREUgQkFDS0dST1VORFNcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAuYmFja2dyb3VuZHMge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNjAwcHg7XHJcbiAgICAgICAgICBwZXJzcGVjdGl2ZTogNjAwcHg7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlLWJhY2tncm91bmQge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvcGFjaXR5OiAwO1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gIHRyYW5zaXRpb246IGFsbCA4MDBtcyBjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZS1iYWNrZ3JvdW5kLWNvbnRlbnQge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtcclxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlLWJhY2tncm91bmQuc3RhY2sge1xyXG4gIGRpc3BsYXk6IGJsb2NrOyB9XHJcblxyXG4ucmV2ZWFsIC5zbGlkZS1iYWNrZ3JvdW5kLnByZXNlbnQge1xyXG4gIG9wYWNpdHk6IDE7XHJcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICB6LWluZGV4OiAyOyB9XHJcblxyXG4ucHJpbnQtcGRmIC5yZXZlYWwgLnNsaWRlLWJhY2tncm91bmQge1xyXG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcclxuICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7IH1cclxuXHJcbi8qIFZpZGVvIGJhY2tncm91bmRzICovXHJcbi5yZXZlYWwgLnNsaWRlLWJhY2tncm91bmQgdmlkZW8ge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiBub25lO1xyXG4gIG1heC1oZWlnaHQ6IG5vbmU7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgLW8tb2JqZWN0LWZpdDogY292ZXI7XHJcbiAgICAgb2JqZWN0LWZpdDogY292ZXI7IH1cclxuXHJcbi5yZXZlYWwgLnNsaWRlLWJhY2tncm91bmRbZGF0YS1iYWNrZ3JvdW5kLXNpemU9XCJjb250YWluXCJdIHZpZGVvIHtcclxuICAtby1vYmplY3QtZml0OiBjb250YWluO1xyXG4gICAgIG9iamVjdC1maXQ6IGNvbnRhaW47IH1cclxuXHJcbi8qIEltbWVkaWF0ZSB0cmFuc2l0aW9uIHN0eWxlICovXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249bm9uZV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQsXHJcbi5yZXZlYWwgPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmRbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249bm9uZV0ge1xyXG4gIHRyYW5zaXRpb246IG5vbmU7IH1cclxuXHJcbi8qIFNsaWRlICovXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPXNsaWRlXSB7XHJcbiAgb3BhY2l0eTogMTtcclxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfVxyXG5cclxuLnJldmVhbFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1zbGlkZV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQucGFzdCxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5wYXN0W2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPXNsaWRlXSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSwgMCk7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLmZ1dHVyZSxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmVbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwJSwgMCk7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQucGFzdCxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZCA+IC5zbGlkZS1iYWNrZ3JvdW5kLnBhc3RbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTsgfVxyXG5cclxuLnJldmVhbFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1zbGlkZV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmUsXHJcbi5yZXZlYWwgPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmVbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249c2xpZGVdIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDEwMCUpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMTAwJSk7IH1cclxuXHJcbi8qIENvbnZleCAqL1xyXG4ucmV2ZWFsW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbnZleF0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQucGFzdCxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5wYXN0W2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbnZleF0ge1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTsgfVxyXG5cclxuLnJldmVhbFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1jb252ZXhdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLmZ1dHVyZSxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmVbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249Y29udmV4XSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkgcm90YXRlWSg5MGRlZykgdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIHJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApOyB9XHJcblxyXG4ucmV2ZWFsW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbnZleF0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5wYXN0LFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQucGFzdFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1jb252ZXhdIHtcclxuICBvcGFjaXR5OiAwO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCkgcm90YXRlWCg5MGRlZykgdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCkgcm90YXRlWCg5MGRlZykgdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApOyB9XHJcblxyXG4ucmV2ZWFsW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbnZleF0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmUsXHJcbi5yZXZlYWwgPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5mdXR1cmVbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249Y29udmV4XSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCkgcm90YXRlWCgtOTBkZWcpIHRyYW5zbGF0ZTNkKDAsIDEwMCUsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKSByb3RhdGVYKC05MGRlZykgdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCk7IH1cclxuXHJcbi8qIENvbmNhdmUgKi9cclxuLnJldmVhbFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1jb25jYXZlXSA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5wYXN0LFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLnBhc3RbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249Y29uY2F2ZV0ge1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSByb3RhdGVZKDkwZGVnKSB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249Y29uY2F2ZV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlLFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLmZ1dHVyZVtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1jb25jYXZlXSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkgcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKSByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249Y29uY2F2ZV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5wYXN0LFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQucGFzdFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj1jb25jYXZlXSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApIHJvdGF0ZVgoLTkwZGVnKSB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKSByb3RhdGVYKC05MGRlZykgdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApOyB9XHJcblxyXG4ucmV2ZWFsW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbmNhdmVdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlLFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPWNvbmNhdmVdIHtcclxuICBvcGFjaXR5OiAwO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKSByb3RhdGVYKDkwZGVnKSB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCkgcm90YXRlWCg5MGRlZykgdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCk7IH1cclxuXHJcbi8qIFpvb20gKi9cclxuLnJldmVhbFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj16b29tXSA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZCxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj16b29tXSB7XHJcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249em9vbV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQucGFzdCxcclxuLnJldmVhbCA+IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZC5wYXN0W2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPXpvb21dIHtcclxuICBvcGFjaXR5OiAwO1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMTYpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxNik7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249em9vbV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlLFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLmZ1dHVyZVtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj16b29tXSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMik7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMik7IH1cclxuXHJcbi5yZXZlYWxbZGF0YS1iYWNrZ3JvdW5kLXRyYW5zaXRpb249em9vbV0gPiAuYmFja2dyb3VuZHMgLnNsaWRlLWJhY2tncm91bmQgPiAuc2xpZGUtYmFja2dyb3VuZC5wYXN0LFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQucGFzdFtkYXRhLWJhY2tncm91bmQtdHJhbnNpdGlvbj16b29tXSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDE2KTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMTYpOyB9XHJcblxyXG4ucmV2ZWFsW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPXpvb21dID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlLFxyXG4ucmV2ZWFsID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kID4gLnNsaWRlLWJhY2tncm91bmQuZnV0dXJlW2RhdGEtYmFja2dyb3VuZC10cmFuc2l0aW9uPXpvb21dIHtcclxuICBvcGFjaXR5OiAwO1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4yKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4yKTsgfVxyXG5cclxuLyogR2xvYmFsIHRyYW5zaXRpb24gc3BlZWQgc2V0dGluZ3MgKi9cclxuLnJldmVhbFtkYXRhLXRyYW5zaXRpb24tc3BlZWQ9XCJmYXN0XCJdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kIHtcclxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA0MDBtczsgfVxyXG5cclxuLnJldmVhbFtkYXRhLXRyYW5zaXRpb24tc3BlZWQ9XCJzbG93XCJdID4gLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kIHtcclxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAxMjAwbXM7IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogT1ZFUlZJRVdcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbC5vdmVydmlldyB7XHJcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW46IDUwJSA1MCU7XHJcbiAgICAgICAgICBwZXJzcGVjdGl2ZS1vcmlnaW46IDUwJSA1MCU7XHJcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNzAwcHg7XHJcbiAgICAgICAgICBwZXJzcGVjdGl2ZTogNzAwcHg7IH1cclxuICAucmV2ZWFsLm92ZXJ2aWV3IC5zbGlkZXMge1xyXG4gICAgLW1vei10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkOyB9XHJcbiAgLnJldmVhbC5vdmVydmlldyAuc2xpZGVzIHNlY3Rpb24ge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgdG9wOiAwICFpbXBvcnRhbnQ7XHJcbiAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uOmhvdmVyLFxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uLnByZXNlbnQge1xyXG4gICAgb3V0bGluZTogMTBweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuNCk7XHJcbiAgICBvdXRsaW5lLW9mZnNldDogMTBweDsgfVxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uIC5mcmFnbWVudCB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG4gICAgdHJhbnNpdGlvbjogbm9uZTsgfVxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uOmFmdGVyLFxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLnNsaWRlcyBzZWN0aW9uOmJlZm9yZSB7XHJcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cclxuICAucmV2ZWFsLm92ZXJ2aWV3IC5zbGlkZXMgPiBzZWN0aW9uLnN0YWNrIHtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcclxuICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IH1cclxuICAucmV2ZWFsLm92ZXJ2aWV3IC5iYWNrZ3JvdW5kcyB7XHJcbiAgICAtd2Via2l0LXBlcnNwZWN0aXZlOiBpbmhlcml0O1xyXG4gICAgICAgICAgICBwZXJzcGVjdGl2ZTogaW5oZXJpdDtcclxuICAgIC1tb3otdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDsgfVxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgb3V0bGluZTogMTBweCBzb2xpZCByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMSk7XHJcbiAgICBvdXRsaW5lLW9mZnNldDogMTBweDsgfVxyXG4gIC5yZXZlYWwub3ZlcnZpZXcgLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kLnN0YWNrIHtcclxuICAgIG92ZXJmbG93OiB2aXNpYmxlOyB9XHJcblxyXG4ucmV2ZWFsLm92ZXJ2aWV3IC5zbGlkZXMgc2VjdGlvbixcclxuLnJldmVhbC5vdmVydmlldy1kZWFjdGl2YXRpbmcgLnNsaWRlcyBzZWN0aW9uIHtcclxuICB0cmFuc2l0aW9uOiBub25lOyB9XHJcblxyXG4ucmV2ZWFsLm92ZXJ2aWV3IC5iYWNrZ3JvdW5kcyAuc2xpZGUtYmFja2dyb3VuZCxcclxuLnJldmVhbC5vdmVydmlldy1kZWFjdGl2YXRpbmcgLmJhY2tncm91bmRzIC5zbGlkZS1iYWNrZ3JvdW5kIHtcclxuICB0cmFuc2l0aW9uOiBub25lOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFJUTCBTVVBQT1JUXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDEsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDIsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDMsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDQsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDUsXHJcbi5yZXZlYWwucnRsIC5zbGlkZXMgaDYge1xyXG4gIGRpcmVjdGlvbjogcnRsO1xyXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyB9XHJcblxyXG4ucmV2ZWFsLnJ0bCBwcmUsXHJcbi5yZXZlYWwucnRsIGNvZGUge1xyXG4gIGRpcmVjdGlvbjogbHRyOyB9XHJcblxyXG4ucmV2ZWFsLnJ0bCBvbCxcclxuLnJldmVhbC5ydGwgdWwge1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XHJcblxyXG4ucmV2ZWFsLnJ0bCAucHJvZ3Jlc3Mgc3BhbiB7XHJcbiAgZmxvYXQ6IHJpZ2h0OyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFBBUkFMTEFYIEJBQ0tHUk9VTkRcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbC5oYXMtcGFyYWxsYXgtYmFja2dyb3VuZCAuYmFja2dyb3VuZHMge1xyXG4gIHRyYW5zaXRpb246IGFsbCAwLjhzIGVhc2U7IH1cclxuXHJcbi8qIEdsb2JhbCB0cmFuc2l0aW9uIHNwZWVkIHNldHRpbmdzICovXHJcbi5yZXZlYWwuaGFzLXBhcmFsbGF4LWJhY2tncm91bmRbZGF0YS10cmFuc2l0aW9uLXNwZWVkPVwiZmFzdFwiXSAuYmFja2dyb3VuZHMge1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDQwMG1zOyB9XHJcblxyXG4ucmV2ZWFsLmhhcy1wYXJhbGxheC1iYWNrZ3JvdW5kW2RhdGEtdHJhbnNpdGlvbi1zcGVlZD1cInNsb3dcIl0gLmJhY2tncm91bmRzIHtcclxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAxMjAwbXM7IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogTElOSyBQUkVWSUVXIE9WRVJMQVlcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAub3ZlcmxheSB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICB6LWluZGV4OiAxMDAwO1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45KTtcclxuICBvcGFjaXR5OiAwO1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5LnZpc2libGUge1xyXG4gIG9wYWNpdHk6IDE7XHJcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheSAuc3Bpbm5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHRvcDogNTAlO1xyXG4gIGxlZnQ6IDUwJTtcclxuICB3aWR0aDogMzJweDtcclxuICBoZWlnaHQ6IDMycHg7XHJcbiAgbWFyZ2luOiAtMTZweCAwIDAgLTE2cHg7XHJcbiAgei1pbmRleDogMTA7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaElBQWdBUE1BQUptWm1mJTJGJTJGJTJGNiUyQnZyOG5KeWJXMXRjREF3T2pvNk52YjI2aW9xS09qbzdPenMlMkZMeTh2ejglMkZBQUFBQUFBQUFBQUFDSCUyRkMwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaCUyRmhwRGNtVmhkR1ZrSUhkcGRHZ2dZV3BoZUd4dllXUXVhVzVtYndBaCUyQlFRSkNnQUFBQ3dBQUFBQUlBQWdBQUFFNXhESVNXbGhwZXJONTJKTGhTU2RSZ3dWbzFJQ1FaUlVzaXdIcFRKVDRpb3dOUzh2eVcyaWNDRjZrOEhNTUJrQ0VEc2t4VEJEQVp3dUFra3FJZnhJUXloQlFCRnZBUVNESVRNNVZEVzZYTkU0S2FnTmg2Qmd3ZTYwc21RVUIzZDRSejFaQkFwbkZBU0RkMGhpaGgxMkJrRTlrakFKVmx5Y1hJZzdDUUlGQTZTbG5KODdwYXFiU0tpS29xdXNuYk1kbURDMnRYUWxrVWh6aVl0eVdUeElmeTZCRThXSnQ1WUp2cEppdnhOYUdtTEhUMFZuT2dTWWYwZFpYUzdBUGRwQjMwOVJuSE9HNWdEcVhHTERhQzQ1N0QxelolMkZWJTJGbm1PTTgyWGlIUkxZS2hLUDFvWm1BRGRFQUFBaCUyQlFRSkNnQUFBQ3dBQUFBQUlBQWdBQUFFNmhESVNXbFpwT3JOcDFsR05SU2RScERVb2xJR3c1UlVZaGhIdWtxRnU4RHNyRXlxbldUaEd2QW1oVmx0ZUJ2b2pwVEREQlVFSUZ3TUZCUkFtQmtTZ09yQkZab2dDQVN3QkRFWSUyRkNaU2c3R1NFMGdTQ2pRQk1WRzAyM3hXQmhrbEFub0VkaFFFZnlOcU1JY0tqaFJzakVkbmV6QiUyQkE0azhnVHdKaEZ1aVc0ZG9rWGlsb1VlcEJBcDVxYUtwcDYlMkJIbzdhV1c1NHdsN29idkVlMGtSdW9wbENHZXB3U3gyakp2cUhFbUd0NndoSnBHcGZKQ0htT29OSEthSHg2MVdpU1I5MkU0bGJGb3ElMkJCNlFEdHVldGNhQlBuVzYlMkJPN3dESHBJaUs5U2FWSzVHZ1Y1NDN0empnR2NnaEFnQWglMkJRUUpDZ0FBQUN3QUFBQUFJQUFnQUFBRTdoRElTU2t4cE9yTjV6RkhOV1JkaFNpVm9WTEhzcFJVTW95VWFreUVlOFBUUENBVFc5QTE0RTBVdnVBS01OQVpLWVVaQ2lCTXVCYWtTUUtHOEcyRnpVV294MkFVdEFRRmNCS2xWUW9MZ1FSZVpoUWxDSUplc1FYSTVCMENCblVNT3hNQ2Vub0NmVENFV0JzSkNvbFRNQU5sZHgxNUJHczhCNXdsQ1o5UG82T0prd21ScG5xa3FudVNyYXlxZkttcXBMYWpvaVc1SEpxN0ZMMUdyMm1NTWNLVU1JaUpnSWVteTd4WnRKc1Rtc000eEhpS3Y1S01DWHFmeVVDSkVvblhQTjJyQU9JQW1zZkIzdVBvQUslMkIlMkJHJTJCdzQ4ZWRaUEslMkJNNmhMSnBRZzQ4NGVuWElkUUZTUzF1NlVoa3NFTkVRQUFJZmtFQ1FvQUFBQXNBQUFBQUNBQUlBQUFCT2NReUVtcEdLTHF6V2NaUlZVUW5aWWcxYUJTaDJHVVZFSVEyYVFPRSUyQkclMkJjRDRudHBXa1pRajFKSWlaSW9nREZGeUhJMFV4UXdGdWdNU09GSVBKZnRmVkFFb1pMQmJjTEVGaGxRaXFHcDFWZDE0MEFVa2xVTjNlQ0E1MUMxRVdNek1DZXpDQkJta3hWSVZIQldkM0hIbDlKUU9JSlNkU25KMFRES0NoQ3dVSmpvV01QYUdxREthbm5hc01vNlduTTU2MlI1WWx1WlJ3dXIwd3BncVpFN05LVW0lMkJGTlJQSWhqQkp4S1p0ZVd1SUJNTjR6Uk1JVkloZmZjZ29qd0NGMTE3aTRubExuWTV6dFJMc25PayUyQmFWJTJCb0pZN1Y3bTc2UGRrUzR0cktjZGcwWmMwdFRjS2tSQUFBSWZrRUNRb0FBQUFzQUFBQUFDQUFJQUFBQk80UXlFa3BLcWpxelNjcFJhVmtYWldRRXhpbXcxQlNDVUVJbERvaHJmdDZjcEtDazV4aWQ1TU5KVGFBSWtla0tHUWtXeUtIa3ZoS3NSN0FSbWl0a0FZRFlSSWJVUVJRaldCd0pSekNoaTlDUmxCY1kxVU40ZzAlMkZWTkIwQWxjdmNBWUhSeVpQZEVRRllWOGNjd1I1SFd4RUowMlltUk1MbkoxeENZcDBZNWlkcFF1aG9wbW1DMktnb2pLYXNVUURrNUJOQXd3TU9oMlJ0UnE1dVF1UFpLR0lKUUlHd0F3R2Y2STBKWE1wQzhDN2tYV0RCSU5GTXhTNERLTUFXVldBR1lzQWROcVc1dWFSeGtTS0pPWkthVTN0UE9CWjREdUsyTEFUZ0poa1BKTWdUd0tDZEZqeVBIRW5LeEZDRGhFQUFDSDVCQWtLQUFBQUxBQUFBQUFnQUNBQUFBVHpFTWhKYVZLcDZzMm5Ja29sSUoyV2tCU2hwa1ZSV3FxUXJoTFNFdTlNWkpLSzl5MVpycVlLOVdpQ2xtdm9VYUY4Z0lRU05lRjFFcjRNTkZuNFNSU0RBUldyb0FJRVRnMWlWd3VIallCMWtZYzFtd3J1d1hLQzlnbXNKWGxpR3hjJTJCWGlVQ2J5OXlkaDFzT1NkTWtwTVRCcGFYQnpzZmhvYzVsNThHbTV5VG9BYVpoYU9VcWprRGdDV05IQVVMQ3dPTGFUbXpzd2FkRXFnZ1F3Z0h1UXNISW9aQ0hRTU1RZ1FHdWJWRWN4T1BGQWNNREFZVUE4NWVXQVJtZlNSUUNkY01lMHplUDFBQXlnd0xsSnRQTkFBTDE5REFSZFB6Qk9XU20xYnJKQmk0NXNvUkFXUUFBa3JRSXlrU2hROXdWaEhDd0NRQ0FDSDVCQWtLQUFBQUxBQUFBQUFnQUNBQUFBVHJFTWhKYVZLcDZzMm5Ja3FGWkYyVklCV2hVc0phVG9rcVVDb0JxJTJCRTcxU1JRZXlxVVRvTEE3VnhGMEpEeUlRaCUyRk1WVlBNdDFFQ1psZmNqWko5bUlLb2FUbDFNUklsNW80Q1VLWE93bXlyQ0luQ0txY1d0dmFkTDJTWWh5QVN5TkRKMHVJaVJNRGpJMEZkMzAlMkZpSTJVQTVHU1M1VURqMmw2Tm9xZ09nTjRna3NFQmdZRmYwRkRxS2dIbnlaOU9YOEhyZ1lIZEhwY0hRVUxYQVMycUtwRU5SZzdlQU1MQzdrVEJhaXhVWUZrS0F6V0FBbkxDN0ZMVnhMV0RCTEtDd2FLVFVMZ0V3YkxBNGhKdE9rU0JOcUlUVDN4RWdmTHBCdHpFJTJGaml1TDA0UkdFQmd3V2hTaFJnUUV4SEJBQWglMkJRUUpDZ0FBQUN3QUFBQUFJQUFnQUFBRTd4RElTV2xTcWVyTnB5SktoV1JkbFNBVm9WTENXazZKS2xBcUFhdmhPOVVrVUhzcWxFNkN3TzFjUmRDUThpRUlmekZWVHpMZFJBbVpYM0kyU2ZaaUNxR2s1ZFRFU0plYU9BbENsenNKc3F3aUp3aXFuRnJiMm5TOWttSWNnRXNqUXlkTGlJbEhlaGhwZWphSWp6aDllb21TalpSJTJCaXBzbFdJUkxBZ01ET1IyRE9xS29nVEI5cENVSkJhZ0RCWFI2WEIwRUJrSUlzYVJzR0dNTUF4b0RCZ1lIVEtKaVVZRUdEQXpIQzlFQUNjVUdrSWdGemd3WjBRc1NCY1hIaVF2T3dnRGRFd2ZGczBzRHp0NFM2Qks0eFlqa0RPem4wdW5GZUJ6T0JpakltMURnbWc1WUZRd3NDTWpwMW9KOEx5SUFBQ0g1QkFrS0FBQUFMQUFBQUFBZ0FDQUFBQVR3RU1oSmFWS3A2czJuSWtxRlpGMlZJQldoVXNKYVRva3FVQ29CcSUyQkU3MVNSUWV5cVVUb0xBN1Z4RjBKRHlJUWglMkZNVlZQTXQxRUNabGZjalpKOW1JS29hVGwxTVJJbDVvNENVS1hPd215ckNJbkNLcWNXdHZhZEwyU1loeUFTeU5ESjB1SWlVZDZHR2w2Tm9pUE9IMTZpWktObEg2S215V0ZPZ2dIaEVFdkF3d01BME45R0JzRUM2YW1oblZjRXdhdkRBYXpHd0lEYUgxaXBhWUxCVVRDR2dRREE4TmRIejBGcHFnVEJ3c0xxQWJXQUFuSUE0RldLZE1MR2RZR0VncmFpZ2JUME9JVEJjZzVRd1BUNHhMclJPWkw2QXVRQVBVUzdieExwb1dpZFkwSnR4TEhLaHd3TUpCVEhnUEtkRVFBQUNINUJBa0tBQUFBTEFBQUFBQWdBQ0FBQUFUckVNaEphVktwNnMybklrcUZaRjJWSUJXaFVzSmFUb2txVUNvQnElMkJFNzFTUlFleXFVVG9MQTdWeEYwSkR5SVFoJTJGTVZWUE10MUVDWmxmY2paSjltSUtvYVRsMU1SSWw1bzRDVUtYT3dteXJDSW5DS3FjV3R2YWRMMlNZaHlBU3lOREowdUlpVWQ2R0FVTERKQ1JpWG8xQ3BHWERKT1VqWSUyQllpcDlEaFRvSkE0UkJMd01MQ3dWRGZSZ2JCQWFxcW9aMVhCTUhzd3NIdHh0RmFIMWlxYW9HTmdBSXhScGJGQWdmUFFTcXBiZ0dCcVVEMXdCWGVDWXAxQVlaMTlKSk9ZZ0gxS3dBNFVCdlF3WFVCeFBxVkQ5TDNzYnAyQk5rMnh2dkZQSmQlMkJNRkNONkhBQUlLZ05nZ1kwS3RFQkFBaCUyQlFRSkNnQUFBQ3dBQUFBQUlBQWdBQUFFNkJESVNXbFNxZXJOcHlKS2hXUmRsU0FWb1ZMQ1drNkpLbEFxQWF2aE85VWtVSHNxbEU2Q3dPMWNSZENROGlFSWZ6RlZUekxkUkFtWlgzSTJTZllJRE1hQUZkVEVTSmVhRURBSU14WUZxck9VYU5XNEU0T2JZY0NYYWlCVkVnVUxlME5KYXh4dFlrc2poMk5Ma1pJU2dEZ0poSHRoa3BVNG1XNmJsUmlZbVpPbGg0SldrRHFJTHdVR0JuRTZUWUViQ2dldnIwTjFnSDRBdDdnSGlScEZhTE5ycnE4SE5nQUpBNzBBV3hRSUgxJTJCdnNZTURBelpRUEM5VkNOa0RXVWhHa3VFNVB4Sk53aVVLNFVmTHpPbEQ0V3Z6QUhhb0c5bnhQaTVkJTJCallVcWZBaGh5a09Gd0pXaUFBQUlma0VDUW9BQUFBc0FBQUFBQ0FBSUFBQUJQQVF5RWxwVXFucXphY2lTb1ZrWFZVTUZhRlN3bHBPQ2NNWWxFckFhdmhPTW5OTE5vOEtzWnNNWkl0SkVJRElGU2tMR1FvUVROaElzRmVoUnd3MkNRTEtGMHRZR0tZU2clMkJ5Z3NaSXVOcUprc0tnYmZnSUdlcE5vMmNJVUIzVjFCM0l2TmlCWU5RYURTVHRmaGh4MEN3VlBJMFVKZTAlMkJibTRnNVZnY0dvcU9jbmptanFEU2RuaGdFb2FtY3NadVhPMWFXUXk4S0F3T0F1VFlZR3dpN3c1aCUyQktyMFNKOE1GaWhwTmJ4JTJCNEVycTdCWUJ1enNkaUgxakNBem9TZmwwclZpck5iUlhsQkJsTFglMkJCUDBYSkxBUEd6VGtBdUFPcWIwV1Q1QUg3T2NkQ201QjhUZ1J3U1JLSUhRdGFMQ3dnMVJBQUFPd0FBQUFBQUFBQUFBQSUzRCUzRCk7XHJcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICBvcGFjaXR5OiAwLjY7XHJcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheSBoZWFkZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDQwcHg7XHJcbiAgei1pbmRleDogMjtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzIyMjsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheSBoZWFkZXIgYSB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHdpZHRoOiA0MHB4O1xyXG4gIGhlaWdodDogNDBweDtcclxuICBsaW5lLWhlaWdodDogMzZweDtcclxuICBwYWRkaW5nOiAwIDEwcHg7XHJcbiAgZmxvYXQ6IHJpZ2h0O1xyXG4gIG9wYWNpdHk6IDAuNjtcclxuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5IGhlYWRlciBhOmhvdmVyIHtcclxuICBvcGFjaXR5OiAxOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5IGhlYWRlciBhIC5pY29uIHtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgd2lkdGg6IDIwcHg7XHJcbiAgaGVpZ2h0OiAyMHB4O1xyXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xyXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkgaGVhZGVyIGEuY2xvc2UgLmljb24ge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFCa2tsRVFWUllSOFdYNFZIRE1BeEc2d25vSnJBQlpRUFlCQ2FCVFdBRDJnMWdFNWdnNk9Pc1h1eElscjQwZDgxZGZyU0o5VjRjMlZMSzdzcEh1VEovNXdwTTA3UVh1WGM1WDBvcFgydEVKY2Fkakh1VjgwbGkvRmd4VElFSy81UUJDSUNCRDZ4RWhTTUdIZ1FQZ0JnTGlZVkFCMWRwU3FLRGF3eFRvaEZ3NEpTRUEzY2x6Z0lCUENVUndFMkp1Y0JSN3JoUEpKdjVPcEp3RFgrU2ZEamd4MXdBQ1FlSkcxYUNoUDlLL0lNbWRaOER0RVNWMVd5UDNCdDRNd002c2o0Tk14TVlpcVVXSFF1NEtZQS9TWWtJak9zbTNCWFlXTUtGRHdVMmtoakNRNEVMSlVKNFNtQ2xSQXJPQ21TWEd1S21hMGZZRDVDYnpIeEZwQ1NHQWhmQVZTU1VHRFVrMkJXWmFmZjJnNkdFMTVCc0JROW53bXBJR0RpeUhRZGR3TlRNS2tiWmFmOWZhalhRY2ExRVg0NHB1SlpVc25ZME9iR21JVEUzR1ZMQ2JFaFFVakdWdDE0Nmo2b2FzV04rNDlWcGgydzFwWjVFYW5zTlpxS0JtMXR4YlU1N2lSUmNaODZSV01EZFd0QkpVSEJId29RUGkxR1YrSkNibnRtdm9rN2lUWDQvVXA5bWd5VGMvRkpZRFRjbmRnSC9BQTVBL0NIc3lFa1ZBQUFBQUVsRlRrU3VRbUNDKTsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheSBoZWFkZXIgYS5leHRlcm5hbCAuaWNvbiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFjRWxFUVZSWVIrMldTUW9BSVF3RXpmOGY3WGlPTWtVUXhVUGxHa00zaFZtaVFmUVI5R1luSDFTc0FRbEk0RGlCcWtDTW9OYjl5MmU5MElBRUpQQWNnZHpuVTkrZW5nTWFlSjdBemg1WTFVNjdnQWhvNERxQnFtQjFidUFmME1CMUFsVkJlazgzWlBrbUpNR2Mxd0FSK0FBcW9kL0I5N1RScFFBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5IC52aWV3cG9ydCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgdG9wOiA0MHB4O1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5Lm92ZXJsYXktcHJldmlldyAudmlld3BvcnQgaWZyYW1lIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgYm9yZGVyOiAwO1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkub3ZlcmxheS1wcmV2aWV3LmxvYWRlZCAudmlld3BvcnQgaWZyYW1lIHtcclxuICBvcGFjaXR5OiAxO1xyXG4gIHZpc2liaWxpdHk6IHZpc2libGU7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkub3ZlcmxheS1wcmV2aWV3LmxvYWRlZCAudmlld3BvcnQtaW5uZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB6LWluZGV4OiAtMTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogNDUlO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5Lm92ZXJsYXktcHJldmlldyAueC1mcmFtZS1lcnJvciB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSAwLjNzOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5Lm92ZXJsYXktcHJldmlldy5sb2FkZWQgLngtZnJhbWUtZXJyb3Ige1xyXG4gIG9wYWNpdHk6IDE7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkub3ZlcmxheS1wcmV2aWV3LmxvYWRlZCAuc3Bpbm5lciB7XHJcbiAgb3BhY2l0eTogMDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMik7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMik7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkub3ZlcmxheS1oZWxwIC52aWV3cG9ydCB7XHJcbiAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgY29sb3I6ICNmZmY7IH1cclxuXHJcbi5yZXZlYWwgLm92ZXJsYXkub3ZlcmxheS1oZWxwIC52aWV3cG9ydCAudmlld3BvcnQtaW5uZXIge1xyXG4gIHdpZHRoOiA2MDBweDtcclxuICBtYXJnaW46IGF1dG87XHJcbiAgcGFkZGluZzogMjBweCAyMHB4IDgwcHggMjBweDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheS5vdmVybGF5LWhlbHAgLnZpZXdwb3J0IC52aWV3cG9ydC1pbm5lciAudGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMjBweDsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheS5vdmVybGF5LWhlbHAgLnZpZXdwb3J0IC52aWV3cG9ydC1pbm5lciB0YWJsZSB7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcclxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gIGZvbnQtc2l6ZTogMTZweDsgfVxyXG5cclxuLnJldmVhbCAub3ZlcmxheS5vdmVybGF5LWhlbHAgLnZpZXdwb3J0IC52aWV3cG9ydC1pbm5lciB0YWJsZSB0aCxcclxuLnJldmVhbCAub3ZlcmxheS5vdmVybGF5LWhlbHAgLnZpZXdwb3J0IC52aWV3cG9ydC1pbm5lciB0YWJsZSB0ZCB7XHJcbiAgd2lkdGg6IDIwMHB4O1xyXG4gIHBhZGRpbmc6IDE0cHg7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XHJcblxyXG4ucmV2ZWFsIC5vdmVybGF5Lm92ZXJsYXktaGVscCAudmlld3BvcnQgLnZpZXdwb3J0LWlubmVyIHRhYmxlIHRoIHtcclxuICBwYWRkaW5nLXRvcDogMjBweDtcclxuICBwYWRkaW5nLWJvdHRvbTogMjBweDsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBQTEFZQkFDSyBDT01QT05FTlRcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAucGxheWJhY2sge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAxNXB4O1xyXG4gIGJvdHRvbTogMjBweDtcclxuICB6LWluZGV4OiAzMDtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgdHJhbnNpdGlvbjogYWxsIDQwMG1zIGVhc2U7XHJcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsgfVxyXG5cclxuLnJldmVhbC5vdmVydmlldyAucGxheWJhY2sge1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuOyB9XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFJPTExJTkcgTElOS1NcclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnJldmVhbCAucm9sbCB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gIC13ZWJraXQtcGVyc3BlY3RpdmU6IDQwMHB4O1xyXG4gICAgICAgICAgcGVyc3BlY3RpdmU6IDQwMHB4O1xyXG4gIC13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luOiA1MCUgNTAlO1xyXG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiA1MCUgNTAlOyB9XHJcblxyXG4ucmV2ZWFsIC5yb2xsOmhvdmVyIHtcclxuICBiYWNrZ3JvdW5kOiBub25lO1xyXG4gIHRleHQtc2hhZG93OiBub25lOyB9XHJcblxyXG4ucmV2ZWFsIC5yb2xsIHNwYW4ge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBwYWRkaW5nOiAwIDJweDtcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICB0cmFuc2l0aW9uOiBhbGwgNDAwbXMgZWFzZTtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xyXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XHJcblxyXG4ucmV2ZWFsIC5yb2xsOmhvdmVyIHNwYW4ge1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIC00NXB4KSByb3RhdGVYKDkwZGVnKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIC00NXB4KSByb3RhdGVYKDkwZGVnKTsgfVxyXG5cclxuLnJldmVhbCAucm9sbCBzcGFuOmFmdGVyIHtcclxuICBjb250ZW50OiBhdHRyKGRhdGEtdGl0bGUpO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICBwYWRkaW5nOiAwIDJweDtcclxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcclxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAxMTAlLCAwcHgpIHJvdGF0ZVgoLTkwZGVnKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAxMTAlLCAwcHgpIHJvdGF0ZVgoLTkwZGVnKTsgfVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTUEVBS0VSIE5PVEVTXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi5yZXZlYWwgYXNpZGUubm90ZXMge1xyXG4gIGRpc3BsYXk6IG5vbmU7IH1cclxuXHJcbi5yZXZlYWwgLnNwZWFrZXItbm90ZXMge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHdpZHRoOiAyNXZ3O1xyXG4gIGhlaWdodDogMTAwJTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMTAwJTtcclxuICBwYWRkaW5nOiAxNHB4IDE4cHggMTRweCAxOHB4O1xyXG4gIHotaW5kZXg6IDE7XHJcbiAgZm9udC1zaXplOiAxOHB4O1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcclxuICBjb2xvcjogIzIyMjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgdGV4dC1hbGlnbjogbGVmdDtcclxuICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgfVxyXG4gIC5yZXZlYWwgLnNwZWFrZXItbm90ZXMgLm5vdGVzLXBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiAjY2NjO1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljOyB9XHJcbiAgLnJldmVhbCAuc3BlYWtlci1ub3Rlczpmb2N1cyB7XHJcbiAgICBvdXRsaW5lOiBub25lOyB9XHJcbiAgLnJldmVhbCAuc3BlYWtlci1ub3RlczpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1NwZWFrZXIgbm90ZXMnO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgb3BhY2l0eTogMC41OyB9XHJcblxyXG4ucmV2ZWFsLnNob3ctbm90ZXMge1xyXG4gIG1heC13aWR0aDogNzV2dztcclxuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxyXG5cclxuLnJldmVhbC5zaG93LW5vdGVzIC5zcGVha2VyLW5vdGVzIHtcclxuICBkaXNwbGF5OiBibG9jazsgfVxyXG5cclxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTYwMHB4KSB7XHJcbiAgLnJldmVhbCAuc3BlYWtlci1ub3RlcyB7XHJcbiAgICBmb250LXNpemU6IDIwcHg7IH0gfVxyXG5cclxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XHJcbiAgLnJldmVhbC5zaG93LW5vdGVzIHtcclxuICAgIGJvcmRlci1sZWZ0OiAwO1xyXG4gICAgbWF4LXdpZHRoOiBub25lO1xyXG4gICAgbWF4LWhlaWdodDogNzAlO1xyXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IH1cclxuICAucmV2ZWFsLnNob3ctbm90ZXMgLnNwZWFrZXItbm90ZXMge1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiA0Mi44NTcxNDI4NTcxJTsgfSB9XHJcblxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweCkge1xyXG4gIC5yZXZlYWwuc2hvdy1ub3RlcyB7XHJcbiAgICBtYXgtaGVpZ2h0OiA2MCU7IH1cclxuICAucmV2ZWFsLnNob3ctbm90ZXMgLnNwZWFrZXItbm90ZXMge1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiA2Ni42NjY2NjY2NjY3JTsgfVxyXG4gIC5yZXZlYWwgLnNwZWFrZXItbm90ZXMge1xyXG4gICAgZm9udC1zaXplOiAxNHB4OyB9IH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogWk9PTSBQTFVHSU5cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLnpvb21lZCAucmV2ZWFsICosXHJcbi56b29tZWQgLnJldmVhbCAqOmJlZm9yZSxcclxuLnpvb21lZCAucmV2ZWFsICo6YWZ0ZXIge1xyXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50OyB9XHJcblxyXG4uem9vbWVkIC5yZXZlYWwgLnByb2dyZXNzLFxyXG4uem9vbWVkIC5yZXZlYWwgLmNvbnRyb2xzIHtcclxuICBvcGFjaXR5OiAwOyB9XHJcblxyXG4uem9vbWVkIC5yZXZlYWwgLnJvbGwgc3BhbiB7XHJcbiAgYmFja2dyb3VuZDogbm9uZTsgfVxyXG5cclxuLnpvb21lZCAucmV2ZWFsIC5yb2xsIHNwYW46YWZ0ZXIge1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjsgfVxyXG4iLG51bGwsIi8qIVxuICogIEZvbnQgQXdlc29tZSA0LjcuMCBieSBAZGF2ZWdhbmR5IC0gaHR0cDovL2ZvbnRhd2Vzb21lLmlvIC0gQGZvbnRhd2Vzb21lXG4gKiAgTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqL1xuLyogRk9OVCBQQVRIXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICBzcmM6IHVybCgnLi4vZm9udC9mb250LWF3ZXNvbWUvZm9udC9mb250YXdlc29tZS13ZWJmb250LmVvdD92PTQuNy4wJyk7XG4gIHNyYzogdXJsKCcuLi9mb250L2ZvbnQtYXdlc29tZS9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjcuMCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgXG4gICAgICAgdXJsKCcuLi9mb250L2ZvbnQtYXdlc29tZS9mb250YXdlc29tZS13ZWJmb250LndvZmYyP3Y9NC43LjAnKSBmb3JtYXQoJ3dvZmYyJyksIFxuICAgICAgIHVybCgnLi4vZm9udC9mb250LWF3ZXNvbWUvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9NC43LjAnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoJy4uL2ZvbnQvZm9udC1hd2Vzb21lL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9NC43LjAnKSBmb3JtYXQoJ3RydWV0eXBlJyksIFxuICAgICAgIHVybCgnLi4vZm9udC9mb250LWF3ZXNvbWUvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmc/dj00LjcuMCNmb250YXdlc29tZXJlZ3VsYXInKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi5mYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi8qIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyICovXG4uZmEtbGcge1xuICBmb250LXNpemU6IDEuMzMzMzMzMzNlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNzVlbTtcbiAgdmVydGljYWwtYWxpZ246IC0xNSU7XG59XG4uZmEtMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5mYS0zeCB7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuLmZhLTR4IHtcbiAgZm9udC1zaXplOiA0ZW07XG59XG4uZmEtNXgge1xuICBmb250LXNpemU6IDVlbTtcbn1cbi5mYS1mdyB7XG4gIHdpZHRoOiAxLjI4NTcxNDI5ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mYS11bCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWxlZnQ6IDIuMTQyODU3MTRlbTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLmZhLXVsID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZmEtbGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0yLjE0Mjg1NzE0ZW07XG4gIHdpZHRoOiAyLjE0Mjg1NzE0ZW07XG4gIHRvcDogMC4xNDI4NTcxNGVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtbGkuZmEtbGcge1xuICBsZWZ0OiAtMS44NTcxNDI4NmVtO1xufVxuLmZhLWJvcmRlciB7XG4gIHBhZGRpbmc6IC4yZW0gLjI1ZW0gLjE1ZW07XG4gIGJvcmRlcjogc29saWQgMC4wOGVtICNlZWVlZWU7XG4gIGJvcmRlci1yYWRpdXM6IC4xZW07XG59XG4uZmEtcHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmEtcHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5mYS5mYS1wdWxsLWxlZnQge1xuICBtYXJnaW4tcmlnaHQ6IC4zZW07XG59XG4uZmEuZmEtcHVsbC1yaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiAuM2VtO1xufVxuLyogRGVwcmVjYXRlZCBhcyBvZiA0LjQuMCAqL1xuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmEucHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAuM2VtO1xufVxuLmZhLnB1bGwtcmlnaHQge1xuICBtYXJnaW4tbGVmdDogLjNlbTtcbn1cbi5mYS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBhbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xufVxuLmZhLXB1bHNlIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7XG4gIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTtcbn1cbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG4uZmEtcm90YXRlLTkwIHtcbiAgLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVwiO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xufVxuLmZhLXJvdGF0ZS0xODAge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIpXCI7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4uZmEtcm90YXRlLTI3MCB7XG4gIC1tcy1maWx0ZXI6IFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MylcIjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cbi5mYS1mbGlwLWhvcml6b250YWwge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTAsIG1pcnJvcj0xKVwiO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xufVxuLmZhLWZsaXAtdmVydGljYWwge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIsIG1pcnJvcj0xKVwiO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xufVxuOnJvb3QgLmZhLXJvdGF0ZS05MCxcbjpyb290IC5mYS1yb3RhdGUtMTgwLFxuOnJvb3QgLmZhLXJvdGF0ZS0yNzAsXG46cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLFxuOnJvb3QgLmZhLWZsaXAtdmVydGljYWwge1xuICBmaWx0ZXI6IG5vbmU7XG59XG4uZmEtc3RhY2sge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDJlbTtcbiAgaGVpZ2h0OiAyZW07XG4gIGxpbmUtaGVpZ2h0OiAyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uZmEtc3RhY2stMXgsXG4uZmEtc3RhY2stMngge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtc3RhY2stMXgge1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cbi5mYS1zdGFjay0yeCB7XG4gIGZvbnQtc2l6ZTogMmVtO1xufVxuLmZhLWludmVyc2Uge1xuICBjb2xvcjogI2ZmZmZmZjtcbn1cbi8qIEZvbnQgQXdlc29tZSB1c2VzIHRoZSBVbmljb2RlIFByaXZhdGUgVXNlIEFyZWEgKFBVQSkgdG8gZW5zdXJlIHNjcmVlblxuICAgcmVhZGVycyBkbyBub3QgcmVhZCBvZmYgcmFuZG9tIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgaWNvbnMgKi9cbi5mYS1nbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwMFwiO1xufVxuLmZhLW11c2ljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAxXCI7XG59XG4uZmEtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAyXCI7XG59XG4uZmEtZW52ZWxvcGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwM1wiO1xufVxuLmZhLWhlYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA0XCI7XG59XG4uZmEtc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNVwiO1xufVxuLmZhLXN0YXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNlwiO1xufVxuLmZhLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDdcIjtcbn1cbi5mYS1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA4XCI7XG59XG4uZmEtdGgtbGFyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDlcIjtcbn1cbi5mYS10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwYVwiO1xufVxuLmZhLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGJcIjtcbn1cbi5mYS1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwY1wiO1xufVxuLmZhLXJlbW92ZTpiZWZvcmUsXG4uZmEtY2xvc2U6YmVmb3JlLFxuLmZhLXRpbWVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDBkXCI7XG59XG4uZmEtc2VhcmNoLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGVcIjtcbn1cbi5mYS1zZWFyY2gtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTBcIjtcbn1cbi5mYS1wb3dlci1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTFcIjtcbn1cbi5mYS1zaWduYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTJcIjtcbn1cbi5mYS1nZWFyOmJlZm9yZSxcbi5mYS1jb2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTNcIjtcbn1cbi5mYS10cmFzaC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE0XCI7XG59XG4uZmEtaG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNVwiO1xufVxuLmZhLWZpbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNlwiO1xufVxuLmZhLWNsb2NrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTdcIjtcbn1cbi5mYS1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE4XCI7XG59XG4uZmEtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTlcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDFhXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWJcIjtcbn1cbi5mYS1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxY1wiO1xufVxuLmZhLXBsYXktY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWRcIjtcbn1cbi5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLFxuLmZhLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxZVwiO1xufVxuLmZhLXJlZnJlc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjFcIjtcbn1cbi5mYS1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyMlwiO1xufVxuLmZhLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjNcIjtcbn1cbi5mYS1mbGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI0XCI7XG59XG4uZmEtaGVhZHBob25lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyNVwiO1xufVxuLmZhLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjZcIjtcbn1cbi5mYS12b2x1bWUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyN1wiO1xufVxuLmZhLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOFwiO1xufVxuLmZhLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOVwiO1xufVxuLmZhLWJhcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmFcIjtcbn1cbi5mYS10YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmJcIjtcbn1cbi5mYS10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJjXCI7XG59XG4uZmEtYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyZFwiO1xufVxuLmZhLWJvb2ttYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJlXCI7XG59XG4uZmEtcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmZcIjtcbn1cbi5mYS1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzBcIjtcbn1cbi5mYS1mb250OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDMxXCI7XG59XG4uZmEtYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzMlwiO1xufVxuLmZhLWl0YWxpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzM1wiO1xufVxuLmZhLXRleHQtaGVpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDM0XCI7XG59XG4uZmEtdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzNVwiO1xufVxuLmZhLWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzZcIjtcbn1cbi5mYS1hbGlnbi1jZW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzdcIjtcbn1cbi5mYS1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzOFwiO1xufVxuLmZhLWFsaWduLWp1c3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzlcIjtcbn1cbi5mYS1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNhXCI7XG59XG4uZmEtZGVkZW50OmJlZm9yZSxcbi5mYS1vdXRkZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNiXCI7XG59XG4uZmEtaW5kZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNjXCI7XG59XG4uZmEtdmlkZW8tY2FtZXJhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNkXCI7XG59XG4uZmEtcGhvdG86YmVmb3JlLFxuLmZhLWltYWdlOmJlZm9yZSxcbi5mYS1waWN0dXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2VcIjtcbn1cbi5mYS1wZW5jaWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDBcIjtcbn1cbi5mYS1tYXAtbWFya2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQxXCI7XG59XG4uZmEtYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQyXCI7XG59XG4uZmEtdGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0M1wiO1xufVxuLmZhLWVkaXQ6YmVmb3JlLFxuLmZhLXBlbmNpbC1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0NFwiO1xufVxuLmZhLXNoYXJlLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ1XCI7XG59XG4uZmEtY2hlY2stc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDZcIjtcbn1cbi5mYS1hcnJvd3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDdcIjtcbn1cbi5mYS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ4XCI7XG59XG4uZmEtZmFzdC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0OVwiO1xufVxuLmZhLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRhXCI7XG59XG4uZmEtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0YlwiO1xufVxuLmZhLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRjXCI7XG59XG4uZmEtc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0ZFwiO1xufVxuLmZhLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNGVcIjtcbn1cbi5mYS1mYXN0LWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTBcIjtcbn1cbi5mYS1zdGVwLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTFcIjtcbn1cbi5mYS1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1MlwiO1xufVxuLmZhLWNoZXZyb24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xufVxuLmZhLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTRcIjtcbn1cbi5mYS1wbHVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NVwiO1xufVxuLmZhLW1pbnVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1N1wiO1xufVxuLmZhLWNoZWNrLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OFwiO1xufVxuLmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OVwiO1xufVxuLmZhLWluZm8tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVhXCI7XG59XG4uZmEtY3Jvc3NoYWlyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1YlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVjXCI7XG59XG4uZmEtY2hlY2stY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWRcIjtcbn1cbi5mYS1iYW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWVcIjtcbn1cbi5mYS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDYwXCI7XG59XG4uZmEtYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjFcIjtcbn1cbi5mYS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2MlwiO1xufVxuLmZhLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjNcIjtcbn1cbi5mYS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxuLmZhLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY0XCI7XG59XG4uZmEtZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY1XCI7XG59XG4uZmEtY29tcHJlc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjZcIjtcbn1cbi5mYS1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY3XCI7XG59XG4uZmEtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjhcIjtcbn1cbi5mYS1hc3RlcmlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2OVwiO1xufVxuLmZhLWV4Y2xhbWF0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2YVwiO1xufVxuLmZhLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNmJcIjtcbn1cbi5mYS1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZjXCI7XG59XG4uZmEtZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZFwiO1xufVxuLmZhLWV5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZVwiO1xufVxuLmZhLWV5ZS1zbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3MFwiO1xufVxuLmZhLXdhcm5pbmc6YmVmb3JlLFxuLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDcxXCI7XG59XG4uZmEtcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzJcIjtcbn1cbi5mYS1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3M1wiO1xufVxuLmZhLXJhbmRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3NFwiO1xufVxuLmZhLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzVcIjtcbn1cbi5mYS1tYWduZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzZcIjtcbn1cbi5mYS1jaGV2cm9uLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc3XCI7XG59XG4uZmEtY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc4XCI7XG59XG4uZmEtcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3OVwiO1xufVxuLmZhLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2FcIjtcbn1cbi5mYS1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2JcIjtcbn1cbi5mYS1mb2xkZXItb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3Y1wiO1xufVxuLmZhLWFycm93cy12OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDdkXCI7XG59XG4uZmEtYXJyb3dzLWg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2VcIjtcbn1cbi5mYS1iYXItY2hhcnQtbzpiZWZvcmUsXG4uZmEtYmFyLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDgwXCI7XG59XG4uZmEtdHdpdHRlci1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODFcIjtcbn1cbi5mYS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODJcIjtcbn1cbi5mYS1jYW1lcmEtcmV0cm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODNcIjtcbn1cbi5mYS1rZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODRcIjtcbn1cbi5mYS1nZWFyczpiZWZvcmUsXG4uZmEtY29nczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4NVwiO1xufVxuLmZhLWNvbW1lbnRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg2XCI7XG59XG4uZmEtdGh1bWJzLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODdcIjtcbn1cbi5mYS10aHVtYnMtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg4XCI7XG59XG4uZmEtc3Rhci1oYWxmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg5XCI7XG59XG4uZmEtaGVhcnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4YVwiO1xufVxuLmZhLXNpZ24tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhiXCI7XG59XG4uZmEtbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhjXCI7XG59XG4uZmEtdGh1bWItdGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4ZFwiO1xufVxuLmZhLWV4dGVybmFsLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbn1cbi5mYS1zaWduLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkwXCI7XG59XG4uZmEtdHJvcGh5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkxXCI7XG59XG4uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5MlwiO1xufVxuLmZhLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5M1wiO1xufVxuLmZhLWxlbW9uLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTRcIjtcbn1cbi5mYS1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5NVwiO1xufVxuLmZhLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk2XCI7XG59XG4uZmEtYm9va21hcmstbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5N1wiO1xufVxuLmZhLXBob25lLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5OFwiO1xufVxuLmZhLXR3aXR0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTlcIjtcbn1cbi5mYS1mYWNlYm9vay1mOmJlZm9yZSxcbi5mYS1mYWNlYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YVwiO1xufVxuLmZhLWdpdGh1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YlwiO1xufVxuLmZhLXVubG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5Y1wiO1xufVxuLmZhLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDlkXCI7XG59XG4uZmEtZmVlZDpiZWZvcmUsXG4uZmEtcnNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDllXCI7XG59XG4uZmEtaGRkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTBcIjtcbn1cbi5mYS1idWxsaG9ybjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMVwiO1xufVxuLmZhLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjNcIjtcbn1cbi5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhM1wiO1xufVxuLmZhLWhhbmQtby1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhNFwiO1xufVxuLmZhLWhhbmQtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE1XCI7XG59XG4uZmEtaGFuZC1vLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE2XCI7XG59XG4uZmEtaGFuZC1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTdcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhYVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGFiXCI7XG59XG4uZmEtZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWNcIjtcbn1cbi5mYS13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWRcIjtcbn1cbi5mYS10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhZVwiO1xufVxuLmZhLWZpbHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMFwiO1xufVxuLmZhLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMVwiO1xufVxuLmZhLWFycm93cy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYjJcIjtcbn1cbi5mYS1ncm91cDpiZWZvcmUsXG4uZmEtdXNlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzBcIjtcbn1cbi5mYS1jaGFpbjpiZWZvcmUsXG4uZmEtbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjMVwiO1xufVxuLmZhLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGMyXCI7XG59XG4uZmEtZmxhc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzNcIjtcbn1cbi5mYS1jdXQ6YmVmb3JlLFxuLmZhLXNjaXNzb3JzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM0XCI7XG59XG4uZmEtY29weTpiZWZvcmUsXG4uZmEtZmlsZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNVwiO1xufVxuLmZhLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNlwiO1xufVxuLmZhLXNhdmU6YmVmb3JlLFxuLmZhLWZsb3BweS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM3XCI7XG59XG4uZmEtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM4XCI7XG59XG4uZmEtbmF2aWNvbjpiZWZvcmUsXG4uZmEtcmVvcmRlcjpiZWZvcmUsXG4uZmEtYmFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjOVwiO1xufVxuLmZhLWxpc3QtdWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwY2FcIjtcbn1cbi5mYS1saXN0LW9sOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNiXCI7XG59XG4uZmEtc3RyaWtldGhyb3VnaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjY1wiO1xufVxuLmZhLXVuZGVybGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjZFwiO1xufVxuLmZhLXRhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNlXCI7XG59XG4uZmEtbWFnaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDBcIjtcbn1cbi5mYS10cnVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMVwiO1xufVxuLmZhLXBpbnRlcmVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMlwiO1xufVxuLmZhLXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDNcIjtcbn1cbi5mYS1nb29nbGUtcGx1cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDRcIjtcbn1cbi5mYS1nb29nbGUtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkNVwiO1xufVxuLmZhLW1vbmV5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ2XCI7XG59XG4uZmEtY2FyZXQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmZhLWNhcmV0LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ4XCI7XG59XG4uZmEtY2FyZXQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkOVwiO1xufVxuLmZhLWNhcmV0LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4uZmEtY29sdW1uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkYlwiO1xufVxuLmZhLXVuc29ydGVkOmJlZm9yZSxcbi5mYS1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRjXCI7XG59XG4uZmEtc29ydC1kb3duOmJlZm9yZSxcbi5mYS1zb3J0LWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGRcIjtcbn1cbi5mYS1zb3J0LXVwOmJlZm9yZSxcbi5mYS1zb3J0LWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkZVwiO1xufVxuLmZhLWVudmVsb3BlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGUwXCI7XG59XG4uZmEtbGlua2VkaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTFcIjtcbn1cbi5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsXG4uZmEtdW5kbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlMlwiO1xufVxuLmZhLWxlZ2FsOmJlZm9yZSxcbi5mYS1nYXZlbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlM1wiO1xufVxuLmZhLWRhc2hib2FyZDpiZWZvcmUsXG4uZmEtdGFjaG9tZXRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNFwiO1xufVxuLmZhLWNvbW1lbnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNVwiO1xufVxuLmZhLWNvbW1lbnRzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTZcIjtcbn1cbi5mYS1mbGFzaDpiZWZvcmUsXG4uZmEtYm9sdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlN1wiO1xufVxuLmZhLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZThcIjtcbn1cbi5mYS11bWJyZWxsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlOVwiO1xufVxuLmZhLXBhc3RlOmJlZm9yZSxcbi5mYS1jbGlwYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWFcIjtcbn1cbi5mYS1saWdodGJ1bGItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlYlwiO1xufVxuLmZhLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGVjXCI7XG59XG4uZmEtY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWRcIjtcbn1cbi5mYS1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWVcIjtcbn1cbi5mYS11c2VyLW1kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGYwXCI7XG59XG4uZmEtc3RldGhvc2NvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjFcIjtcbn1cbi5mYS1zdWl0Y2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmMlwiO1xufVxuLmZhLWJlbGwtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMlwiO1xufVxuLmZhLWNvZmZlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNFwiO1xufVxuLmZhLWN1dGxlcnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjVcIjtcbn1cbi5mYS1maWxlLXRleHQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNlwiO1xufVxuLmZhLWJ1aWxkaW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjdcIjtcbn1cbi5mYS1ob3NwaXRhbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY4XCI7XG59XG4uZmEtYW1idWxhbmNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY5XCI7XG59XG4uZmEtbWVka2l0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZhXCI7XG59XG4uZmEtZmlnaHRlci1qZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmJcIjtcbn1cbi5mYS1iZWVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZjXCI7XG59XG4uZmEtaC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmRcIjtcbn1cbi5mYS1wbHVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmZVwiO1xufVxuLmZhLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAwXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAxXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAyXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDNcIjtcbn1cbi5mYS1hbmdsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA0XCI7XG59XG4uZmEtYW5nbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDVcIjtcbn1cbi5mYS1hbmdsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwNlwiO1xufVxuLmZhLWFuZ2xlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDdcIjtcbn1cbi5mYS1kZXNrdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA4XCI7XG59XG4uZmEtbGFwdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA5XCI7XG59XG4uZmEtdGFibGV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBhXCI7XG59XG4uZmEtbW9iaWxlLXBob25lOmJlZm9yZSxcbi5mYS1tb2JpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGJcIjtcbn1cbi5mYS1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwY1wiO1xufVxuLmZhLXF1b3RlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGRcIjtcbn1cbi5mYS1xdW90ZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwZVwiO1xufVxuLmZhLXNwaW5uZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTBcIjtcbn1cbi5mYS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTFcIjtcbn1cbi5mYS1tYWlsLXJlcGx5OmJlZm9yZSxcbi5mYS1yZXBseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMlwiO1xufVxuLmZhLWdpdGh1Yi1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTNcIjtcbn1cbi5mYS1mb2xkZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExNFwiO1xufVxuLmZhLWZvbGRlci1vcGVuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTVcIjtcbn1cbi5mYS1zbWlsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE4XCI7XG59XG4uZmEtZnJvd24tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExOVwiO1xufVxuLmZhLW1laC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFhXCI7XG59XG4uZmEtZ2FtZXBhZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExYlwiO1xufVxuLmZhLWtleWJvYXJkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWNcIjtcbn1cbi5mYS1mbGFnLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWRcIjtcbn1cbi5mYS1mbGFnLWNoZWNrZXJlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExZVwiO1xufVxuLmZhLXRlcm1pbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIwXCI7XG59XG4uZmEtY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyMVwiO1xufVxuLmZhLW1haWwtcmVwbHktYWxsOmJlZm9yZSxcbi5mYS1yZXBseS1hbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjJcIjtcbn1cbi5mYS1zdGFyLWhhbGYtZW1wdHk6YmVmb3JlLFxuLmZhLXN0YXItaGFsZi1mdWxsOmJlZm9yZSxcbi5mYS1zdGFyLWhhbGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyM1wiO1xufVxuLmZhLWxvY2F0aW9uLWFycm93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI0XCI7XG59XG4uZmEtY3JvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNVwiO1xufVxuLmZhLWNvZGUtZm9yazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNlwiO1xufVxuLmZhLXVubGluazpiZWZvcmUsXG4uZmEtY2hhaW4tYnJva2VuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI3XCI7XG59XG4uZmEtcXVlc3Rpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjhcIjtcbn1cbi5mYS1pbmZvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI5XCI7XG59XG4uZmEtZXhjbGFtYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMmFcIjtcbn1cbi5mYS1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyYlwiO1xufVxuLmZhLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyY1wiO1xufVxuLmZhLWVyYXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZFwiO1xufVxuLmZhLXB1enpsZS1waWVjZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZVwiO1xufVxuLmZhLW1pY3JvcGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzBcIjtcbn1cbi5mYS1taWNyb3Bob25lLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMxXCI7XG59XG4uZmEtc2hpZWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMyXCI7XG59XG4uZmEtY2FsZW5kYXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzM1wiO1xufVxuLmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM0XCI7XG59XG4uZmEtcm9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM1XCI7XG59XG4uZmEtbWF4Y2RuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM2XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzN1wiO1xufVxuLmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM4XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzlcIjtcbn1cbi5mYS1jaGV2cm9uLWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNhXCI7XG59XG4uZmEtaHRtbDU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2JcIjtcbn1cbi5mYS1jc3MzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNjXCI7XG59XG4uZmEtYW5jaG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNkXCI7XG59XG4uZmEtdW5sb2NrLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzZVwiO1xufVxuLmZhLWJ1bGxzZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQwXCI7XG59XG4uZmEtZWxsaXBzaXMtaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0MVwiO1xufVxuLmZhLWVsbGlwc2lzLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDJcIjtcbn1cbi5mYS1yc3Mtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQzXCI7XG59XG4uZmEtcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDRcIjtcbn1cbi5mYS10aWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDVcIjtcbn1cbi5mYS1taW51cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDZcIjtcbn1cbi5mYS1taW51cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0N1wiO1xufVxuLmZhLWxldmVsLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ4XCI7XG59XG4uZmEtbGV2ZWwtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0OVwiO1xufVxuLmZhLWNoZWNrLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0YVwiO1xufVxuLmZhLXBlbmNpbC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGJcIjtcbn1cbi5mYS1leHRlcm5hbC1saW5rLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0Y1wiO1xufVxuLmZhLXNoYXJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0ZFwiO1xufVxuLmZhLWNvbXBhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGVcIjtcbn1cbi5mYS10b2dnbGUtZG93bjpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MFwiO1xufVxuLmZhLXRvZ2dsZS11cDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTFcIjtcbn1cbi5mYS10b2dnbGUtcmlnaHQ6YmVmb3JlLFxuLmZhLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUyXCI7XG59XG4uZmEtZXVybzpiZWZvcmUsXG4uZmEtZXVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUzXCI7XG59XG4uZmEtZ2JwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU0XCI7XG59XG4uZmEtZG9sbGFyOmJlZm9yZSxcbi5mYS11c2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTVcIjtcbn1cbi5mYS1ydXBlZTpiZWZvcmUsXG4uZmEtaW5yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU2XCI7XG59XG4uZmEtY255OmJlZm9yZSxcbi5mYS1ybWI6YmVmb3JlLFxuLmZhLXllbjpiZWZvcmUsXG4uZmEtanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU3XCI7XG59XG4uZmEtcnVibGU6YmVmb3JlLFxuLmZhLXJvdWJsZTpiZWZvcmUsXG4uZmEtcnViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU4XCI7XG59XG4uZmEtd29uOmJlZm9yZSxcbi5mYS1rcnc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTlcIjtcbn1cbi5mYS1iaXRjb2luOmJlZm9yZSxcbi5mYS1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWFcIjtcbn1cbi5mYS1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTViXCI7XG59XG4uZmEtZmlsZS10ZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTVjXCI7XG59XG4uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWRcIjtcbn1cbi5mYS1zb3J0LWFscGhhLWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWVcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjBcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYxXCI7XG59XG4uZmEtc29ydC1udW1lcmljLWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MlwiO1xufVxuLmZhLXNvcnQtbnVtZXJpYy1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYzXCI7XG59XG4uZmEtdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY0XCI7XG59XG4uZmEtdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjVcIjtcbn1cbi5mYS15b3V0dWJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2NlwiO1xufVxuLmZhLXlvdXR1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjdcIjtcbn1cbi5mYS14aW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY4XCI7XG59XG4uZmEteGluZy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjlcIjtcbn1cbi5mYS15b3V0dWJlLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmFcIjtcbn1cbi5mYS1kcm9wYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTZiXCI7XG59XG4uZmEtc3RhY2stb3ZlcmZsb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmNcIjtcbn1cbi5mYS1pbnN0YWdyYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmRcIjtcbn1cbi5mYS1mbGlja3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmVcIjtcbn1cbi5mYS1hZG46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzBcIjtcbn1cbi5mYS1iaXRidWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzFcIjtcbn1cbi5mYS1iaXRidWNrZXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTcyXCI7XG59XG4uZmEtdHVtYmxyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTczXCI7XG59XG4uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NFwiO1xufVxuLmZhLWxvbmctYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NVwiO1xufVxuLmZhLWxvbmctYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzZcIjtcbn1cbi5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzdcIjtcbn1cbi5mYS1sb25nLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTc4XCI7XG59XG4uZmEtYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzlcIjtcbn1cbi5mYS13aW5kb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdhXCI7XG59XG4uZmEtYW5kcm9pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3YlwiO1xufVxuLmZhLWxpbnV4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdjXCI7XG59XG4uZmEtZHJpYmJibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2RcIjtcbn1cbi5mYS1za3lwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3ZVwiO1xufVxuLmZhLWZvdXJzcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODBcIjtcbn1cbi5mYS10cmVsbG86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODFcIjtcbn1cbi5mYS1mZW1hbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODJcIjtcbn1cbi5mYS1tYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTgzXCI7XG59XG4uZmEtZ2l0dGlwOmJlZm9yZSxcbi5mYS1ncmF0aXBheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4NFwiO1xufVxuLmZhLXN1bi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg1XCI7XG59XG4uZmEtbW9vbi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg2XCI7XG59XG4uZmEtYXJjaGl2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4N1wiO1xufVxuLmZhLWJ1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4OFwiO1xufVxuLmZhLXZrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg5XCI7XG59XG4uZmEtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGFcIjtcbn1cbi5mYS1yZW5yZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGJcIjtcbn1cbi5mYS1wYWdlbGluZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGNcIjtcbn1cbi5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4ZFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMThlXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5MFwiO1xufVxuLmZhLXRvZ2dsZS1sZWZ0OmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkxXCI7XG59XG4uZmEtZG90LWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkyXCI7XG59XG4uZmEtd2hlZWxjaGFpcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5M1wiO1xufVxuLmZhLXZpbWVvLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NFwiO1xufVxuLmZhLXR1cmtpc2gtbGlyYTpiZWZvcmUsXG4uZmEtdHJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk1XCI7XG59XG4uZmEtcGx1cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NlwiO1xufVxuLmZhLXNwYWNlLXNodXR0bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTdcIjtcbn1cbi5mYS1zbGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OFwiO1xufVxuLmZhLWVudmVsb3BlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OVwiO1xufVxuLmZhLXdvcmRwcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YVwiO1xufVxuLmZhLW9wZW5pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YlwiO1xufVxuLmZhLWluc3RpdHV0aW9uOmJlZm9yZSxcbi5mYS1iYW5rOmJlZm9yZSxcbi5mYS11bml2ZXJzaXR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTljXCI7XG59XG4uZmEtbW9ydGFyLWJvYXJkOmJlZm9yZSxcbi5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5ZFwiO1xufVxuLmZhLXlhaG9vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTllXCI7XG59XG4uZmEtZ29vZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEwXCI7XG59XG4uZmEtcmVkZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWExXCI7XG59XG4uZmEtcmVkZGl0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhMlwiO1xufVxuLmZhLXN0dW1ibGV1cG9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhM1wiO1xufVxuLmZhLXN0dW1ibGV1cG9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE0XCI7XG59XG4uZmEtZGVsaWNpb3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE1XCI7XG59XG4uZmEtZGlnZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhNlwiO1xufVxuLmZhLXBpZWQtcGlwZXItcHA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTdcIjtcbn1cbi5mYS1waWVkLXBpcGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOFwiO1xufVxuLmZhLWRydXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOVwiO1xufVxuLmZhLWpvb21sYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhYVwiO1xufVxuLmZhLWxhbmd1YWdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFiXCI7XG59XG4uZmEtZmF4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFjXCI7XG59XG4uZmEtYnVpbGRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWRcIjtcbn1cbi5mYS1jaGlsZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhZVwiO1xufVxuLmZhLXBhdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMFwiO1xufVxuLmZhLXNwb29uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIxXCI7XG59XG4uZmEtY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMlwiO1xufVxuLmZhLWN1YmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIzXCI7XG59XG4uZmEtYmVoYW5jZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiNFwiO1xufVxuLmZhLWJlaGFuY2Utc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI1XCI7XG59XG4uZmEtc3RlYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjZcIjtcbn1cbi5mYS1zdGVhbS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjdcIjtcbn1cbi5mYS1yZWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI4XCI7XG59XG4uZmEtYXV0b21vYmlsZTpiZWZvcmUsXG4uZmEtY2FyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI5XCI7XG59XG4uZmEtY2FiOmJlZm9yZSxcbi5mYS10YXhpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJhXCI7XG59XG4uZmEtdHJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiYlwiO1xufVxuLmZhLXNwb3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmNcIjtcbn1cbi5mYS1kZXZpYW50YXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJkXCI7XG59XG4uZmEtc291bmRjbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiZVwiO1xufVxuLmZhLWRhdGFiYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMwXCI7XG59XG4uZmEtZmlsZS1wZGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjMVwiO1xufVxuLmZhLWZpbGUtd29yZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMyXCI7XG59XG4uZmEtZmlsZS1leGNlbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMzXCI7XG59XG4uZmEtZmlsZS1wb3dlcnBvaW50LW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzRcIjtcbn1cbi5mYS1maWxlLXBob3RvLW86YmVmb3JlLFxuLmZhLWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcbi5mYS1maWxlLWltYWdlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzVcIjtcbn1cbi5mYS1maWxlLXppcC1vOmJlZm9yZSxcbi5mYS1maWxlLWFyY2hpdmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNlwiO1xufVxuLmZhLWZpbGUtc291bmQtbzpiZWZvcmUsXG4uZmEtZmlsZS1hdWRpby1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM3XCI7XG59XG4uZmEtZmlsZS1tb3ZpZS1vOmJlZm9yZSxcbi5mYS1maWxlLXZpZGVvLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzhcIjtcbn1cbi5mYS1maWxlLWNvZGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjOVwiO1xufVxuLmZhLXZpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2FcIjtcbn1cbi5mYS1jb2RlcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNiXCI7XG59XG4uZmEtanNmaWRkbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2NcIjtcbn1cbi5mYS1saWZlLWJvdXk6YmVmb3JlLFxuLmZhLWxpZmUtYnVveTpiZWZvcmUsXG4uZmEtbGlmZS1zYXZlcjpiZWZvcmUsXG4uZmEtc3VwcG9ydDpiZWZvcmUsXG4uZmEtbGlmZS1yaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNkXCI7XG59XG4uZmEtY2lyY2xlLW8tbm90Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2VcIjtcbn1cbi5mYS1yYTpiZWZvcmUsXG4uZmEtcmVzaXN0YW5jZTpiZWZvcmUsXG4uZmEtcmViZWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDBcIjtcbn1cbi5mYS1nZTpiZWZvcmUsXG4uZmEtZW1waXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQxXCI7XG59XG4uZmEtZ2l0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkMlwiO1xufVxuLmZhLWdpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkM1wiO1xufVxuLmZhLXktY29tYmluYXRvci1zcXVhcmU6YmVmb3JlLFxuLmZhLXljLXNxdWFyZTpiZWZvcmUsXG4uZmEtaGFja2VyLW5ld3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDRcIjtcbn1cbi5mYS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ1XCI7XG59XG4uZmEtcXE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDZcIjtcbn1cbi5mYS13ZWNoYXQ6YmVmb3JlLFxuLmZhLXdlaXhpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkN1wiO1xufVxuLmZhLXNlbmQ6YmVmb3JlLFxuLmZhLXBhcGVyLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ4XCI7XG59XG4uZmEtc2VuZC1vOmJlZm9yZSxcbi5mYS1wYXBlci1wbGFuZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ5XCI7XG59XG4uZmEtaGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkYVwiO1xufVxuLmZhLWNpcmNsZS10aGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRiXCI7XG59XG4uZmEtaGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRjXCI7XG59XG4uZmEtcGFyYWdyYXBoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRkXCI7XG59XG4uZmEtc2xpZGVyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkZVwiO1xufVxuLmZhLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlMFwiO1xufVxuLmZhLXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTFcIjtcbn1cbi5mYS1ib21iOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUyXCI7XG59XG4uZmEtc29jY2VyLWJhbGwtbzpiZWZvcmUsXG4uZmEtZnV0Ym9sLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTNcIjtcbn1cbi5mYS10dHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTRcIjtcbn1cbi5mYS1iaW5vY3VsYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU1XCI7XG59XG4uZmEtcGx1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNlwiO1xufVxuLmZhLXNsaWRlc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTdcIjtcbn1cbi5mYS10d2l0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZThcIjtcbn1cbi5mYS15ZWxwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU5XCI7XG59XG4uZmEtbmV3c3BhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWFcIjtcbn1cbi5mYS13aWZpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWViXCI7XG59XG4uZmEtY2FsY3VsYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlY1wiO1xufVxuLmZhLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlZFwiO1xufVxuLmZhLWdvb2dsZS13YWxsZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWVcIjtcbn1cbi5mYS1jYy12aXNhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYwXCI7XG59XG4uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmMVwiO1xufVxuLmZhLWNjLWRpc2NvdmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYyXCI7XG59XG4uZmEtY2MtYW1leDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmM1wiO1xufVxuLmZhLWNjLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNFwiO1xufVxuLmZhLWNjLXN0cmlwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNVwiO1xufVxuLmZhLWJlbGwtc2xhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjZcIjtcbn1cbi5mYS1iZWxsLXNsYXNoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjdcIjtcbn1cbi5mYS10cmFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOFwiO1xufVxuLmZhLWNvcHlyaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOVwiO1xufVxuLmZhLWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZhXCI7XG59XG4uZmEtZXllZHJvcHBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmYlwiO1xufVxuLmZhLXBhaW50LWJydXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZjXCI7XG59XG4uZmEtYmlydGhkYXktY2FrZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZFwiO1xufVxuLmZhLWFyZWEtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmVcIjtcbn1cbi5mYS1waWUtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDBcIjtcbn1cbi5mYS1saW5lLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAxXCI7XG59XG4uZmEtbGFzdGZtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAyXCI7XG59XG4uZmEtbGFzdGZtLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwM1wiO1xufVxuLmZhLXRvZ2dsZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDRcIjtcbn1cbi5mYS10b2dnbGUtb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDVcIjtcbn1cbi5mYS1iaWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA2XCI7XG59XG4uZmEtYnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA3XCI7XG59XG4uZmEtaW94aG9zdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOFwiO1xufVxuLmZhLWFuZ2VsbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOVwiO1xufVxuLmZhLWNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBhXCI7XG59XG4uZmEtc2hla2VsOmJlZm9yZSxcbi5mYS1zaGVxZWw6YmVmb3JlLFxuLmZhLWlsczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwYlwiO1xufVxuLmZhLW1lYW5wYXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBjXCI7XG59XG4uZmEtYnV5c2VsbGFkczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwZFwiO1xufVxuLmZhLWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBlXCI7XG59XG4uZmEtZGFzaGN1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTBcIjtcbn1cbi5mYS1mb3J1bWJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxMVwiO1xufVxuLmZhLWxlYW5wdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTJcIjtcbn1cbi5mYS1zZWxsc3k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTNcIjtcbn1cbi5mYS1zaGlydHNpbmJ1bGs6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTRcIjtcbn1cbi5mYS1zaW1wbHlidWlsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNVwiO1xufVxuLmZhLXNreWF0bGFzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE2XCI7XG59XG4uZmEtY2FydC1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE3XCI7XG59XG4uZmEtY2FydC1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE4XCI7XG59XG4uZmEtZGlhbW9uZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxOVwiO1xufVxuLmZhLXNoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWFcIjtcbn1cbi5mYS11c2VyLXNlY3JldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxYlwiO1xufVxuLmZhLW1vdG9yY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWNcIjtcbn1cbi5mYS1zdHJlZXQtdmlldzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZFwiO1xufVxuLmZhLWhlYXJ0YmVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZVwiO1xufVxuLmZhLXZlbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIxXCI7XG59XG4uZmEtbWFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyMlwiO1xufVxuLmZhLW1lcmN1cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjNcIjtcbn1cbi5mYS1pbnRlcnNleDpiZWZvcmUsXG4uZmEtdHJhbnNnZW5kZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjRcIjtcbn1cbi5mYS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjVcIjtcbn1cbi5mYS12ZW51cy1kb3VibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjZcIjtcbn1cbi5mYS1tYXJzLWRvdWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyN1wiO1xufVxuLmZhLXZlbnVzLW1hcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjhcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyOVwiO1xufVxuLmZhLW1hcnMtc3Ryb2tlLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmFcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJiXCI7XG59XG4uZmEtbmV1dGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJjXCI7XG59XG4uZmEtZ2VuZGVybGVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyZFwiO1xufVxuLmZhLWZhY2Vib29rLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjMwXCI7XG59XG4uZmEtcGludGVyZXN0LXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzFcIjtcbn1cbi5mYS13aGF0c2FwcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzMlwiO1xufVxuLmZhLXNlcnZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzM1wiO1xufVxuLmZhLXVzZXItcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzNFwiO1xufVxuLmZhLXVzZXItdGltZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzVcIjtcbn1cbi5mYS1ob3RlbDpiZWZvcmUsXG4uZmEtYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM2XCI7XG59XG4uZmEtdmlhY29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzN1wiO1xufVxuLmZhLXRyYWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM4XCI7XG59XG4uZmEtc3Vid2F5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM5XCI7XG59XG4uZmEtbWVkaXVtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNhXCI7XG59XG4uZmEteWM6YmVmb3JlLFxuLmZhLXktY29tYmluYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzYlwiO1xufVxuLmZhLW9wdGluLW1vbnN0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2NcIjtcbn1cbi5mYS1vcGVuY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZFwiO1xufVxuLmZhLWV4cGVkaXRlZHNzbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZVwiO1xufVxuLmZhLWJhdHRlcnktNDpiZWZvcmUsXG4uZmEtYmF0dGVyeTpiZWZvcmUsXG4uZmEtYmF0dGVyeS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQwXCI7XG59XG4uZmEtYmF0dGVyeS0zOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQxXCI7XG59XG4uZmEtYmF0dGVyeS0yOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDJcIjtcbn1cbi5mYS1iYXR0ZXJ5LTE6YmVmb3JlLFxuLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0M1wiO1xufVxuLmZhLWJhdHRlcnktMDpiZWZvcmUsXG4uZmEtYmF0dGVyeS1lbXB0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NFwiO1xufVxuLmZhLW1vdXNlLXBvaW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDVcIjtcbn1cbi5mYS1pLWN1cnNvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NlwiO1xufVxuLmZhLW9iamVjdC1ncm91cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0N1wiO1xufVxuLmZhLW9iamVjdC11bmdyb3VwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ4XCI7XG59XG4uZmEtc3RpY2t5LW5vdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDlcIjtcbn1cbi5mYS1zdGlja3ktbm90ZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRhXCI7XG59XG4uZmEtY2MtamNiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRiXCI7XG59XG4uZmEtY2MtZGluZXJzLWNsdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGNcIjtcbn1cbi5mYS1jbG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0ZFwiO1xufVxuLmZhLWJhbGFuY2Utc2NhbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGVcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MFwiO1xufVxuLmZhLWhvdXJnbGFzcy0xOmJlZm9yZSxcbi5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTFcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMjpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTJcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1M1wiO1xufVxuLmZhLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NFwiO1xufVxuLmZhLWhhbmQtZ3JhYi1vOmJlZm9yZSxcbi5mYS1oYW5kLXJvY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NVwiO1xufVxuLmZhLWhhbmQtc3RvcC1vOmJlZm9yZSxcbi5mYS1oYW5kLXBhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTZcIjtcbn1cbi5mYS1oYW5kLXNjaXNzb3JzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTdcIjtcbn1cbi5mYS1oYW5kLWxpemFyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU4XCI7XG59XG4uZmEtaGFuZC1zcG9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU5XCI7XG59XG4uZmEtaGFuZC1wb2ludGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWFcIjtcbn1cbi5mYS1oYW5kLXBlYWNlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWJcIjtcbn1cbi5mYS10cmFkZW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWNcIjtcbn1cbi5mYS1yZWdpc3RlcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVkXCI7XG59XG4uZmEtY3JlYXRpdmUtY29tbW9uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1ZVwiO1xufVxuLmZhLWdnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYwXCI7XG59XG4uZmEtZ2ctY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYxXCI7XG59XG4uZmEtdHJpcGFkdmlzb3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjJcIjtcbn1cbi5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYzXCI7XG59XG4uZmEtb2Rub2tsYXNzbmlraS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjRcIjtcbn1cbi5mYS1nZXQtcG9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY1XCI7XG59XG4uZmEtd2lraXBlZGlhLXc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjZcIjtcbn1cbi5mYS1zYWZhcmk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjdcIjtcbn1cbi5mYS1jaHJvbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjhcIjtcbn1cbi5mYS1maXJlZm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY5XCI7XG59XG4uZmEtb3BlcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmFcIjtcbn1cbi5mYS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2YlwiO1xufVxuLmZhLXR2OmJlZm9yZSxcbi5mYS10ZWxldmlzaW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZjXCI7XG59XG4uZmEtY29udGFvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZkXCI7XG59XG4uZmEtNTAwcHg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmVcIjtcbn1cbi5mYS1hbWF6b246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzBcIjtcbn1cbi5mYS1jYWxlbmRhci1wbHVzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzFcIjtcbn1cbi5mYS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjcyXCI7XG59XG4uZmEtY2FsZW5kYXItdGltZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3M1wiO1xufVxuLmZhLWNhbGVuZGFyLWNoZWNrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzRcIjtcbn1cbi5mYS1pbmR1c3RyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3NVwiO1xufVxuLmZhLW1hcC1waW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzZcIjtcbn1cbi5mYS1tYXAtc2lnbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzdcIjtcbn1cbi5mYS1tYXAtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OFwiO1xufVxuLmZhLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OVwiO1xufVxuLmZhLWNvbW1lbnRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2FcIjtcbn1cbi5mYS1jb21tZW50aW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2JcIjtcbn1cbi5mYS1ob3V6ejpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3Y1wiO1xufVxuLmZhLXZpbWVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdkXCI7XG59XG4uZmEtYmxhY2stdGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdlXCI7XG59XG4uZmEtZm9udGljb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgwXCI7XG59XG4uZmEtcmVkZGl0LWFsaWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgxXCI7XG59XG4uZmEtZWRnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4MlwiO1xufVxuLmZhLWNyZWRpdC1jYXJkLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4M1wiO1xufVxuLmZhLWNvZGllcGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg0XCI7XG59XG4uZmEtbW9keDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4NVwiO1xufVxuLmZhLWZvcnQtYXdlc29tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4NlwiO1xufVxuLmZhLXVzYjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4N1wiO1xufVxuLmZhLXByb2R1Y3QtaHVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4OFwiO1xufVxuLmZhLW1peGNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg5XCI7XG59XG4uZmEtc2NyaWJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhhXCI7XG59XG4uZmEtcGF1c2UtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhiXCI7XG59XG4uZmEtcGF1c2UtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGNcIjtcbn1cbi5mYS1zdG9wLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4ZFwiO1xufVxuLmZhLXN0b3AtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGVcIjtcbn1cbi5mYS1zaG9wcGluZy1iYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTBcIjtcbn1cbi5mYS1zaG9wcGluZy1iYXNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTFcIjtcbn1cbi5mYS1oYXNodGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjkyXCI7XG59XG4uZmEtYmx1ZXRvb3RoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjkzXCI7XG59XG4uZmEtYmx1ZXRvb3RoLWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTRcIjtcbn1cbi5mYS1wZXJjZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjk1XCI7XG59XG4uZmEtZ2l0bGFiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjk2XCI7XG59XG4uZmEtd3BiZWdpbm5lcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5N1wiO1xufVxuLmZhLXdwZm9ybXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOThcIjtcbn1cbi5mYS1lbnZpcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTlcIjtcbn1cbi5mYS11bml2ZXJzYWwtYWNjZXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlhXCI7XG59XG4uZmEtd2hlZWxjaGFpci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOWJcIjtcbn1cbi5mYS1xdWVzdGlvbi1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5Y1wiO1xufVxuLmZhLWJsaW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlkXCI7XG59XG4uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOWVcIjtcbn1cbi5mYS12b2x1bWUtY29udHJvbC1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhMFwiO1xufVxuLmZhLWJyYWlsbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTFcIjtcbn1cbi5mYS1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTJcIjtcbn1cbi5mYS1hc2wtaW50ZXJwcmV0aW5nOmJlZm9yZSxcbi5mYS1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhM1wiO1xufVxuLmZhLWRlYWZuZXNzOmJlZm9yZSxcbi5mYS1oYXJkLW9mLWhlYXJpbmc6YmVmb3JlLFxuLmZhLWRlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTRcIjtcbn1cbi5mYS1nbGlkZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhNVwiO1xufVxuLmZhLWdsaWRlLWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTZcIjtcbn1cbi5mYS1zaWduaW5nOmJlZm9yZSxcbi5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmE3XCI7XG59XG4uZmEtbG93LXZpc2lvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhOFwiO1xufVxuLmZhLXZpYWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhOVwiO1xufVxuLmZhLXZpYWRlby1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYWFcIjtcbn1cbi5mYS1zbmFwY2hhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhYlwiO1xufVxuLmZhLXNuYXBjaGF0LWdob3N0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFjXCI7XG59XG4uZmEtc25hcGNoYXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFkXCI7XG59XG4uZmEtcGllZC1waXBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhZVwiO1xufVxuLmZhLWZpcnN0LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmIwXCI7XG59XG4uZmEteW9hc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjFcIjtcbn1cbi5mYS10aGVtZWlzbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjJcIjtcbn1cbi5mYS1nb29nbGUtcGx1cy1jaXJjbGU6YmVmb3JlLFxuLmZhLWdvb2dsZS1wbHVzLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmIzXCI7XG59XG4uZmEtZmE6YmVmb3JlLFxuLmZhLWZvbnQtYXdlc29tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNFwiO1xufVxuLmZhLWhhbmRzaGFrZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmI1XCI7XG59XG4uZmEtZW52ZWxvcGUtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNlwiO1xufVxuLmZhLWVudmVsb3BlLW9wZW4tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiN1wiO1xufVxuLmZhLWxpbm9kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiOFwiO1xufVxuLmZhLWFkZHJlc3MtYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiOVwiO1xufVxuLmZhLWFkZHJlc3MtYm9vay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJhXCI7XG59XG4uZmEtdmNhcmQ6YmVmb3JlLFxuLmZhLWFkZHJlc3MtY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiYlwiO1xufVxuLmZhLXZjYXJkLW86YmVmb3JlLFxuLmZhLWFkZHJlc3MtY2FyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJjXCI7XG59XG4uZmEtdXNlci1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYmRcIjtcbn1cbi5mYS11c2VyLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJlXCI7XG59XG4uZmEtdXNlci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmMwXCI7XG59XG4uZmEtaWQtYmFkZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzFcIjtcbn1cbi5mYS1kcml2ZXJzLWxpY2Vuc2U6YmVmb3JlLFxuLmZhLWlkLWNhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzJcIjtcbn1cbi5mYS1kcml2ZXJzLWxpY2Vuc2UtbzpiZWZvcmUsXG4uZmEtaWQtY2FyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmMzXCI7XG59XG4uZmEtcXVvcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzRcIjtcbn1cbi5mYS1mcmVlLWNvZGUtY2FtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjNVwiO1xufVxuLmZhLXRlbGVncmFtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmM2XCI7XG59XG4uZmEtdGhlcm1vbWV0ZXItNDpiZWZvcmUsXG4uZmEtdGhlcm1vbWV0ZXI6YmVmb3JlLFxuLmZhLXRoZXJtb21ldGVyLWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzdcIjtcbn1cbi5mYS10aGVybW9tZXRlci0zOmJlZm9yZSxcbi5mYS10aGVybW9tZXRlci10aHJlZS1xdWFydGVyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjOFwiO1xufVxuLmZhLXRoZXJtb21ldGVyLTI6YmVmb3JlLFxuLmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzlcIjtcbn1cbi5mYS10aGVybW9tZXRlci0xOmJlZm9yZSxcbi5mYS10aGVybW9tZXRlci1xdWFydGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNhXCI7XG59XG4uZmEtdGhlcm1vbWV0ZXItMDpiZWZvcmUsXG4uZmEtdGhlcm1vbWV0ZXItZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2JcIjtcbn1cbi5mYS1zaG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2NcIjtcbn1cbi5mYS1iYXRodHViOmJlZm9yZSxcbi5mYS1zMTU6YmVmb3JlLFxuLmZhLWJhdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2RcIjtcbn1cbi5mYS1wb2RjYXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNlXCI7XG59XG4uZmEtd2luZG93LW1heGltaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQwXCI7XG59XG4uZmEtd2luZG93LW1pbmltaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQxXCI7XG59XG4uZmEtd2luZG93LXJlc3RvcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDJcIjtcbn1cbi5mYS10aW1lcy1yZWN0YW5nbGU6YmVmb3JlLFxuLmZhLXdpbmRvdy1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkM1wiO1xufVxuLmZhLXRpbWVzLXJlY3RhbmdsZS1vOmJlZm9yZSxcbi5mYS13aW5kb3ctY2xvc2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNFwiO1xufVxuLmZhLWJhbmRjYW1wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQ1XCI7XG59XG4uZmEtZ3JhdjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNlwiO1xufVxuLmZhLWV0c3k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDdcIjtcbn1cbi5mYS1pbWRiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQ4XCI7XG59XG4uZmEtcmF2ZWxyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkOVwiO1xufVxuLmZhLWVlcmNhc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGFcIjtcbn1cbi5mYS1taWNyb2NoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGJcIjtcbn1cbi5mYS1zbm93Zmxha2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkY1wiO1xufVxuLmZhLXN1cGVycG93ZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmRkXCI7XG59XG4uZmEtd3BleHBsb3JlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkZVwiO1xufVxuLmZhLW1lZXR1cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlMFwiO1xufVxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IC0xcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGJvcmRlcjogMDtcbn1cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsXG4uc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuIiwiLyogYm9yaW5nIExlZ2FsIFN0dWZmXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuQ29weXJpZ2h0IChjKSAyMDEyIEZyZWRlcmljayBDLiBGZWliZWxcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxudGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGVcblNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksXG5tb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbmZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzXG5vciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcbklOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXG5QQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbkNPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUlxuSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIGRlZmF1bHQgJiBSZXZlYWwuanMgPCAxLjQgKGR1ZSB0byB0aGUgdXNhZ2Ugb2YgYW4gSUQgb24gdGhlIGJvZHkpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbiNwcmVzZW50YWJsZS10b2Mge1xuICAgIGhlaWdodDogNjAwcHg7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbiNyZXZlYWwgI3ByZXNlbnRhYmxlLXRvYyBvbCxcbiNwcmVzZW50YWJsZS10b2Mgb2wge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMC42ZW0gMCAxLjJlbSAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbiNyZXZlYWwgI3ByZXNlbnRhYmxlLXRvYyBvbCwgI3JldmVhbCAjcHJlc2VudGFibGUtdG9jIHVsLFxuI3ByZXNlbnRhYmxlLXRvYyBvbCwgI3ByZXNlbnRhYmxlLXRvYyB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuI3JldmVhbCAjcHJlc2VudGFibGUtdG9jIG9sIHVsLCAjcmV2ZWFsICNwcmVzZW50YWJsZS10b2Mgb2wgb2wsXG4jcHJlc2VudGFibGUtdG9jIG9sIHVsLCAjcHJlc2VudGFibGUtdG9jIG9sIG9se1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgIG1hcmdpbi10b3A6IDAuNWVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjVlbTtcbn1cblxuI3JldmVhbCAjcHJlc2VudGFibGUtdG9jIGxpLFxuI3ByZXNlbnRhYmxlLXRvYyBsaSB7XG4gICAgbWFyZ2luOiAwIDAgMC4yZW07XG4gICAgcGFkZGluZzogMDtcbn1cblxuI3ByZXNlbnRhYmxlLXRvYyBsaTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IG5vcm1hbDtcbn1cblxuI3ByZXNlbnRhYmxlLXRvYyBsaSBkaXYge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2ZmZjtcbiAgICB3aWR0aDogOTglO1xufVxuXG4jcHJlc2VudGFibGUtdG9jIGxpIC5wYWdlIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbiNyZXZlYWwgI3ByZXNlbnRhYmxlLXRvYyBsaSBhLFxuI3ByZXNlbnRhYmxlLXRvYyBsaSBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbiNwcmVzZW50YWJsZS1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMHB4O1xuICAgIGxlZnQ6IDEwcHg7XG59XG5cbiNwcmVzZW50YWJsZS1pY29uIGEge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5cbiNwcmVzZW50YWJsZS1pY29uIGltZyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4vKiBSZXZlYWwuanMgYWxsXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbiNyZXZlYWwgLnNsaWRlcyAuZnV0dXJlLFxuLnJldmVhbCAuc2xpZGVzIC5mdXR1cmUge1xuICAgIC8qIFdpdGhvdXQgdGhpcyBhbmNob3IgdGFncyBhcmUgY2xpY2stYWJsZSBpbiBmdXR1cmUgc2xpZGVzIGV2ZW4gdGhvdWdoIHRoZXkgY2Fubm90IGFjdHVhbGx5IGJlIHNlZW4gKi9cbiAgICAvKnZpc2liaWxpdHk6IGhpZGRlbjsqL1xufVxuXG4jcmV2ZWFsICNwcmVzZW50YWJsZS1pY29uLFxuLnJldmVhbCAjcHJlc2VudGFibGUtaWNvbiB7XG4gICAgei1pbmRleDogMzA7XG59XG5cbiNyZXZlYWwgI3ByZXNlbnRhYmxlLWljb24gYTpob3ZlciBpbWcsXG4ucmV2ZWFsICNwcmVzZW50YWJsZS1pY29uIGE6aG92ZXIgaW1nIHtcbiAgICBib3JkZXItY29sb3I6ICMxM2RhZWM7XG59XG5cblxuLyogaHRtbDVzbGlkZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuI3ByZXNlbnRhYmxlLXRvYy5odG1sNXNsaWRlcyB7XG4gICAgaGVpZ2h0OiA1NDBweDtcbn1cblxuI3ByZXNlbnRhYmxlLXRvYy5odG1sNXNsaWRlcyBsaSBkaXYge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgIzAwMDtcbn1cblxuLyogaW8yMDEyc2xpZGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbiNwcmVzZW50YWJsZS10b2MuaW8yMDEyc2xpZGVzIHtcbiAgICBoZWlnaHQ6IDUwMHB4O1xufVxuXG4jcHJlc2VudGFibGUtdG9jLmlvMjAxMnNsaWRlcyBsaSBkaXYge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgIzAwMDtcbn1cblxuI3ByZXNlbnRhYmxlLXRvYy5pbzIwMTJzbGlkZXMgbGkgYSB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLyogc2hvd2VyXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbiNwcmVzZW50YWJsZS10b2Muc2hvd2VyIHtcbiAgICBoZWlnaHQ6IDM0MHB4O1xuICAgIGZvbnQtc2l6ZTogODAlO1xufVxuXG4jcHJlc2VudGFibGUtdG9jLnNob3dlciBvbCBsaSwgI3ByZXNlbnRhYmxlLXRvYy5zaG93ZXIgdWwgbGkge1xuICAgIHRleHQtaW5kZW50OiAwO1xufVxuXG4jcHJlc2VudGFibGUtdG9jLnNob3dlciBsaSBkaXYge1xuICAgIGJvcmRlci1jb2xvcjogIzAwMDtcbn1cblxuI3ByZXNlbnRhYmxlLXRvYy5zaG93ZXIgYSB7XG4gICAgLyogU2hvd2VyIHY/IH4yMDEzLTEwLTE4ICovXG4gICAgYm9yZGVyOiBub25lO1xuICAgIC8qIFNob3dlciB+djIuMS40IDIwMTYtMTAtMTggKi9cbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8qIEl0IGlzIGFuIGFtYXppbmcgY29pbmNpZGVuY2UgdGhhdCBJIGhhcHBlbmVkIHRvIHVwZGF0ZSBzaG93ZXIgYWZ0ZXIgMyB5ZWFycyB0byB0aGUgZGF5ISAqL1xufVxuXG4jcHJlc2VudGFibGUtaWNvbiB7XG4gICAgei1pbmRleDogMVxufVxuXG4uY292ZXIgI3ByZXNlbnRhYmxlLWljb24uc2hvd2VyLFxuLmxpc3QgI3ByZXNlbnRhYmxlLWljb24uc2hvd2VyIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jcHJlc2VudGFibGUtaWNvbi5zaG93ZXIgaW1nIHtcbiAgICBib3JkZXItY29sb3I6ICNiYmI7XG59XG5cbi8qIGltcHJlc3MuanNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuI3ByZXNlbnRhYmxlLWljb24uaW1wcmVzc2pzIHtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuI3ByZXNlbnRhYmxlLWljb24uaW1wcmVzc2pzIGEge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG59XG5cbiNwcmVzZW50YWJsZS10b2MuaW1wcmVzc2pzIGRpdiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbiNwcmVzZW50YWJsZS10b2MuaW1wcmVzc2pzIGxpIC50aXRsZSB7XG4gICAgZm9udC1zaXplOiAzNXB4O1xufVxuIiwiLypcclxuICogVmlzdWFsIFN0dWRpbyAyMDE1IGRhcmsgc3R5bGVcclxuICogQXV0aG9yOiBOaWNvbGFzIExMT0JFUkEgPG5sbG9iZXJhQGdtYWlsLmNvbT5cclxuICovXHJcblxyXG4gLmhsanMge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIG92ZXJmbG93LXg6IGF1dG87XHJcbiAgcGFkZGluZzogMC41ZW07XHJcbiAgYmFja2dyb3VuZDogIzFFMUUxRTtcclxuICBjb2xvcjogI0RDRENEQztcclxufVxyXG5cclxuLmhsanMta2V5d29yZCxcclxuLmhsanMtbGl0ZXJhbCxcclxuLmhsanMtc3ltYm9sLFxyXG4uaGxqcy1uYW1lIHtcclxuICBjb2xvcjogIzU2OUNENjtcclxufVxyXG4uaGxqcy1saW5rIHtcclxuICBjb2xvcjogIzU2OUNENjtcclxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxufVxyXG5cclxuLmhsanMtYnVpbHRfaW4sXHJcbi5obGpzLXR5cGUge1xyXG4gIGNvbG9yOiAjNEVDOUIwO1xyXG59XHJcblxyXG4uaGxqcy1udW1iZXIsXHJcbi5obGpzLWNsYXNzIHtcclxuICBjb2xvcjogI0I4RDdBMztcclxufVxyXG5cclxuLmhsanMtc3RyaW5nLFxyXG4uaGxqcy1tZXRhLXN0cmluZyB7XHJcbiAgY29sb3I6ICNENjlEODU7XHJcbn1cclxuXHJcbi5obGpzLXJlZ2V4cCxcclxuLmhsanMtdGVtcGxhdGUtdGFnIHtcclxuICBjb2xvcjogIzlBNTMzNDtcclxufVxyXG5cclxuLmhsanMtc3Vic3QsXHJcbi5obGpzLWZ1bmN0aW9uLFxyXG4uaGxqcy1wYXJhbXMsXHJcbi5obGpzLWZvcm11bGEge1xyXG4gIGNvbG9yOiAjRENEQ0RDO1xyXG59XHJcblxyXG4uaGxqcy10aXRsZSB7XHJcbiAgY29sb3I6ICM0RUM5QjA7XHJcbn1cclxuXHJcbi5obGpzLWJ1aWx0aW4tbmFtZVxyXG57XHJcbiAgY29sb3I6ICM0RUM5QjA7XHJcbn1cclxuXHJcbi5obGpzLWNvbW1lbnQsXHJcbi5obGpzLXF1b3RlIHtcclxuICBjb2xvcjogIzU3QTY0QTtcclxuICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbn1cclxuXHJcbi5obGpzLWRvY3RhZyB7XHJcbiAgY29sb3I6ICM2MDhCNEU7XHJcbn1cclxuXHJcbi5obGpzLW1ldGEsXHJcbi5obGpzLW1ldGEta2V5d29yZCxcclxuLmhsanMtdGFnIHtcclxuICBjb2xvcjogIzlCOUI5QjtcclxufVxyXG5cclxuLmhsanMtdmFyaWFibGUsXHJcbi5obGpzLXRlbXBsYXRlLXZhcmlhYmxlIHtcclxuICBjb2xvcjogI0JENjNDNTtcclxufVxyXG5cclxuLmhsanMtYXR0cixcclxuLmhsanMtYXR0cmlidXRlIHtcclxuICBjb2xvcjogIzlDRENGRTtcclxufVxyXG5cclxuXHJcbi5obGpzLXNlY3Rpb24ge1xyXG4gIGNvbG9yOiBnb2xkO1xyXG59XHJcblxyXG4uaGxqcy1lbXBoYXNpcyB7XHJcbiAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4uaGxqcy1zdHJvbmcge1xyXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4uaGxqcy1jb2RlIHtcclxuICBmb250LWZhbWlseTonTW9ub3NwYWNlJztcclxufVxyXG5cclxuLmhsanMtYnVsbGV0LFxyXG4uaGxqcy1zZWxlY3Rvci10YWcsXHJcbi5obGpzLXNlbGVjdG9yLWlkLFxyXG4uaGxqcy1zZWxlY3Rvci1jbGFzcyxcclxuLmhsanMtc2VsZWN0b3ItYXR0cixcclxuLmhsanMtc2VsZWN0b3ItcHNldWRvIHtcclxuICBjb2xvcjogI0Q3QkE3RDtcclxufVxyXG5cclxuLmhsanMtYWRkaXRpb24ge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNDQyMTI7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uaGxqcy1kZWxldGlvbiB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYwMDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn0iXX0= */ diff --git a/dist/css/completed/10/style.css b/dist/css/completed/10/style.css deleted file mode 100644 index d08e9ec..0000000 --- a/dist/css/completed/10/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Comfortaa:400,700&subset=cyrillic);body,html{height:100%;width:100%;margin:0}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;background-color:#5bc0eb}.welcome{height:auto;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:4vw;font-family:Comfortaa,sans-serif;font-weight:700;text-align:center;color:#fff}.welcome>p{margin:0}.welcome>p:first-child{margin-bottom:20px}.welcome .name{color:#e55934}.welcome+div{height:25%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.button{margin:0 40px;outline:0;border:none;font-family:Comfortaa,sans-serif;font-weight:400;font-size:5vh;padding:20px 40px;cursor:pointer;border-radius:20px;border:#000 solid 2px;background-color:#fff}.select{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.select>p{font-size:4vw;font-family:Comfortaa,sans-serif;font-weight:700;text-align:center;color:#fff}.select>ul{width:600px;padding:0;margin:0;list-style:none;background-color:#7e64cc;text-align:center;font-size:3rem;font-family:Comfortaa,sans-serif;font-weight:700;color:#4f4f69;border-radius:30px;border:4px solid #7e64cc;overflow:hidden}.select li{height:100px;line-height:100px;background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.select li:not(:first-child){margin-top:4px}.select li:hover{background-color:orange}.animal{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.reload{-webkit-box-sizing:border-box;box-sizing:border-box;height:5vw;width:5vw;padding:1vw;outline:0;border:none;cursor:pointer;border-radius:50%;-webkit-box-shadow:1px 1px 1px 0 #000;box-shadow:1px 1px 1px 0 #000;margin-bottom:40px;background-color:#fff}.reload>img{width:100%;height:100%}.animal>img{height:60%;-webkit-box-shadow:20px 20px 0 0 #f1f068;box-shadow:20px 20px 0 0 #f1f068}.animal>p{text-align:center;font-size:3rem;font-family:Comfortaa,sans-serif;font-weight:400;text-shadow:1px 1px 0 #fff} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC8xMC9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUZBQ0EsS0FBQSxLQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsT0FBQSxFQUVKLEtBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0EsbUJBQUEsT0FBQSxjQUFBLE9BQ0EsaUJBQUEsUUFFSixTQUNJLE9BQUEsS0FDQSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0EsVUFBQSxJQUNBLFlBQUEsU0FBQSxDQUFBLFdBQ0EsWUFBQSxJQUNBLFdBQUEsT0FDQSxNQUFBLEtBRUosV0FDSSxPQUFBLEVBRUosdUJBQ0ksY0FBQSxLQUVKLGVBQ0ksTUFBQSxRQUVKLGFBQ0ksT0FBQSxJQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGtCQUFBLE1BQUEsZUFBQSxNQUFBLFlBQUEsV0FDQSxpQkFBQSxPQUFBLGNBQUEsT0FBQSxnQkFBQSxPQUVKLFFBQ0ksT0FBQSxFQUFBLEtBQ0EsUUFBQSxFQUNBLE9BQUEsS0FDQSxZQUFBLFNBQUEsQ0FBQSxXQUNBLFlBQUEsSUFDQSxVQUFBLElBQ0EsUUFBQSxLQUFBLEtBQ0EsT0FBQSxRQUNBLGNBQUEsS0FDQSxPQUFBLEtBQUEsTUFBQSxJQUNBLGlCQUFBLEtBR0osUUFDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLFVBQ0ksVUFBQSxJQUNBLFlBQUEsU0FBQSxDQUFBLFdBQ0EsWUFBQSxJQUNBLFdBQUEsT0FDQSxNQUFBLEtBRUosV0FDSSxNQUFBLE1BQ0EsUUFBQSxFQUNBLE9BQUEsRUFDQSxXQUFBLEtBQ0EsaUJBQUEsUUFDQSxXQUFBLE9BQ0EsVUFBQSxLQUNBLFlBQUEsU0FBQSxDQUFBLFdBQ0EsWUFBQSxJQUNBLE1BQUEsUUFDQSxjQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsUUFDQSxTQUFBLE9BRUosV0FDSSxPQUFBLE1BQ0EsWUFBQSxNQUVBLGlCQUFBLEtBQ0Esb0JBQUEsS0FBQSxpQkFBQSxLQUFBLGdCQUFBLEtBQUEsWUFBQSxLQUNBLE9BQUEsUUFFSiw2QkFDSSxXQUFBLElBRUosaUJBQ0ksaUJBQUEsT0FFSixRQUNJLE9BQUEsS0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BRUosUUFDSSxtQkFBQSxXQUFBLFdBQUEsV0FDQSxPQUFBLElBQ0EsTUFBQSxJQUNBLFFBQUEsSUFDQSxRQUFBLEVBQ0EsT0FBQSxLQUNBLE9BQUEsUUFDQSxjQUFBLElBQ0EsbUJBQUEsSUFBQSxJQUFBLElBQUEsRUFBQSxLQUFBLFdBQUEsSUFBQSxJQUFBLElBQUEsRUFBQSxLQUNBLGNBQUEsS0FDQSxpQkFBQSxLQUVKLFlBQ0ksTUFBQSxLQUNBLE9BQUEsS0FFSixZQUNJLE9BQUEsSUFDQSxtQkFBQSxLQUFBLEtBQUEsRUFBQSxFQUFBLFFBQUEsV0FBQSxLQUFBLEtBQUEsRUFBQSxFQUFBLFFBRUosVUFDSSxXQUFBLE9BQ0EsVUFBQSxLQUNBLFlBQUEsU0FBQSxDQUFBLFdBQ0EsWUFBQSxJQUNBLFlBQUEsSUFBQSxJQUFBLEVBQUEiLCJmaWxlIjoiY29tcGxldGVkLzEwL3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Q29tZm9ydGFhOjQwMCw3MDAmc3Vic2V0PWN5cmlsbGljJyk7XG5odG1sLCBib2R5IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xufVxuYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZWI7XG59XG4ud2VsY29tZSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiA0dnc7XG4gICAgZm9udC1mYW1pbHk6ICdDb21mb3J0YWEnLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cbi53ZWxjb21lID4gcCB7XG4gICAgbWFyZ2luOiAwO1xufVxuLndlbGNvbWUgPiBwOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLndlbGNvbWUgLm5hbWUge1xuICAgIGNvbG9yOiAjRTU1OTM0O1xufVxuLndlbGNvbWUgKyBkaXYge1xuICAgIGhlaWdodDogMjUlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgNDBweDtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LWZhbWlseTogJ0NvbWZvcnRhYScsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDV2aDtcbiAgICBwYWRkaW5nOiAyMHB4IDQwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgYm9yZGVyOiBibGFjayBzb2xpZCAycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG5cbi5zZWxlY3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uc2VsZWN0ID4gcCB7XG4gICAgZm9udC1zaXplOiA0dnc7XG4gICAgZm9udC1mYW1pbHk6ICdDb21mb3J0YWEnLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cbi5zZWxlY3QgPiB1bCB7XG4gICAgd2lkdGg6IDYwMHB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzdlNjRjYztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAzcmVtO1xuICAgIGZvbnQtZmFtaWx5OiAnQ29tZm9ydGFhJywgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiAjNGY0ZjY5O1xuICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgYm9yZGVyOiA0cHggc29saWQgIzdlNjRjYztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlbGVjdCBsaSB7XG4gICAgaGVpZ2h0OiAxMDBweDtcbiAgICBsaW5lLWhlaWdodDogMTAwcHg7XG4gICAgLyogcGFkZGluZy1yaWdodDogNjBweDsgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uc2VsZWN0IGxpOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG59XG4uc2VsZWN0IGxpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFuZ2U7XG59XG4uYW5pbWFsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5yZWxvYWQge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgaGVpZ2h0OiA1dnc7XG4gICAgd2lkdGg6IDV2dztcbiAgICBwYWRkaW5nOiAxdnc7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3gtc2hhZG93OiAxcHggMXB4IDFweCAwIGJsYWNrO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ucmVsb2FkID4gaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG4uYW5pbWFsID4gaW1nIHtcbiAgICBoZWlnaHQ6IDYwJTtcbiAgICBib3gtc2hhZG93OiAyMHB4IDIwcHggMCAwICNmMWYwNjg7XG59XG4uYW5pbWFsID4gcCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogM3JlbTtcbiAgICBmb250LWZhbWlseTogJ0NvbWZvcnRhYScsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAwIHdoaXRlO1xufSJdfQ== */ diff --git a/dist/css/completed/11/style.css b/dist/css/completed/11/style.css deleted file mode 100644 index 36bc6f9..0000000 --- a/dist/css/completed/11/style.css +++ /dev/null @@ -1,2 +0,0 @@ -body,html{margin:0;width:100%;height:100%}body{background-color:#87cefa;display:-webkit-box;display:-ms-flexbox;display:flex}body>div{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.text{font-size:4vw;text-align:center}.cube-outer{height:24vw;width:24vw;background-color:#000;padding:1.2vw;cursor:pointer;-webkit-box-shadow:0 0 20px 5px rgba(33,33,33,.6);box-shadow:0 0 20px 5px rgba(33,33,33,.6)}.cube-inner{border-radius:2vw;background-color:red;height:100%;width:100%;color:#e0e0e0;font-size:20vw;text-align:center;line-height:24vw;text-shadow:3px 3px 0 #000,-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}.cube-inner>span{-webkit-transition:opacity 4s ease-in 2s;transition:opacity 4s ease-in 2s} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC8xMS9zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsS0FBQSxLQUNJLE9BQUEsRUFDQSxNQUFBLEtBQ0EsT0FBQSxLQUVKLEtBQ0ksaUJBQUEsUUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FFSixTQUNJLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLE1BQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLE1BQ0ksVUFBQSxJQUNBLFdBQUEsT0FFSixZQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsaUJBQUEsS0FDQSxRQUFBLE1BQ0EsT0FBQSxRQUNBLG1CQUFBLEVBQUEsRUFBQSxLQUFBLElBQUEsa0JBQUEsV0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLGtCQUVKLFlBQ0ksY0FBQSxJQUNBLGlCQUFBLElBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxNQUFBLFFBQ0EsVUFBQSxLQUNBLFdBQUEsT0FDQSxZQUFBLEtBQ0EsWUFXSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQ2QsS0FBSyxLQUFLLEVBQUUsSUFBSSxDQUNoQixJQUFJLEtBQUssRUFBRSxJQUFJLENBQ2YsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUNmLElBQUksSUFBSSxFQUFFLEtBUmxCLGlCQUNJLG1CQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUEsV0FBQSxRQUFBLEdBQUEsUUFBQSIsImZpbGUiOiJjb21wbGV0ZWQvMTEvc3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiaHRtbCwgYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cbmJvZHkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0c2t5Ymx1ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuYm9keSA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi50ZXh0IHtcbiAgICBmb250LXNpemU6IDR2dztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uY3ViZS1vdXRlciB7XG4gICAgaGVpZ2h0OiAyNHZ3O1xuICAgIHdpZHRoOiAyNHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgIHBhZGRpbmc6IDEuMnZ3O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3gtc2hhZG93OiAwIDAgMjBweCA1cHggcmdiYSgzMywzMywzMywuNik7XG59XG4uY3ViZS1pbm5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMnZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgY29sb3I6IHJnYigyMjQsMjI0LDIyNCk7XG4gICAgZm9udC1zaXplOiAyMHZ3O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMjR2dztcbiAgICB0ZXh0LXNoYWRvdzpcbiAgICAgICAgM3B4IDNweCAwICMwMDAsXG4gICAgICAgIC0xcHggLTFweCAwICMwMDAsICBcbiAgICAgICAgMXB4IC0xcHggMCAjMDAwLFxuICAgICAgICAtMXB4IDFweCAwICMwMDAsXG4gICAgICAgIDFweCAxcHggMCAjMDAwO1xufVxuLmN1YmUtaW5uZXIgPiBzcGFuIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDRzIGVhc2UtaW4gMnM7XG59Il19 */ diff --git a/dist/css/completed/5/style.css b/dist/css/completed/5/style.css deleted file mode 100644 index a5b2086..0000000 --- a/dist/css/completed/5/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Playfair+Display+SC&subset=cyrillic);@import url(https://fonts.googleapis.com/css?family=Arimo&subset=cyrillic);body,html{height:100%;width:100%;margin:0;font-family:Arimo}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}body>header{height:60px;background-color:#7161ef}.content{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.content>aside{width:20%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dislike{background-color:#212121;color:#ececec}aside>div{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:12rem;-webkit-box-flex:1;-ms-flex:1;flex:1}aside>div::before{position:absolute;top:30px;height:140px;font-size:3rem}.dislike>div::before{content:'Dislike:'}.like>div::before{content:'Like:'}.content>section{-webkit-box-flex:1;-ms-flex:1;flex:1;background-color:#ffe7db}.header-d{text-align:center;height:80px;line-height:80px;font-size:1.8rem}section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.card{height:70%;width:auto;position:relative;-webkit-box-shadow:0 4px 16px 0 rgba(0,0,0,.2);box-shadow:0 4px 16px 0 rgba(0,0,0,.2);-webkit-transition:.3s ease-out;transition:.3s ease-out;border-radius:5px;cursor:pointer;text-align:center}.card:hover{-webkit-box-shadow:0 8px 32px 0 rgba(0,0,0,.4);box-shadow:0 8px 32px 0 rgba(0,0,0,.4);-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:scale(1.02,1.02);-ms-transform:scale(1.02,1.02);transform:scale(1.02,1.02)}.card>img{display:inline-block;border-radius:5px 5px 0 0;margin:0 auto;max-height:90%;max-width:100%}.description{display:block;height:10%;font-size:1.4rem}.description>p{margin:12px 0 0 0}.invisible-box{position:absolute;top:0;height:100%;width:100%;font-size:0}.left{display:inline-block;height:100%;width:50%}.right{display:inline-block;height:100%;width:50%} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC81L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5RkFDQSwyRUFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBQ0EsWUFBQSxNQUVKLEtBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUVKLFlBQ0ksT0FBQSxLQUNBLGlCQUFBLFFBRUosU0FDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUVKLGVBQ0ksTUFBQSxJQUNBLFdBQUEsT0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLFVBQUEsT0FDQSxpQkFBQSxPQUFBLGNBQUEsT0FBQSxnQkFBQSxPQUVKLFNBQ0ksaUJBQUEsUUFDQSxNQUFBLFFBR0osVUFDSSxTQUFBLFNBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsaUJBQUEsT0FBQSxjQUFBLE9BQUEsZ0JBQUEsT0FDQSxrQkFBQSxPQUFBLGVBQUEsT0FBQSxZQUFBLE9BQ0EsVUFBQSxNQUNBLGlCQUFBLEVBQUEsU0FBQSxFQUFBLEtBQUEsRUFFSixrQkFDSSxTQUFBLFNBQ0EsSUFBQSxLQUNBLE9BQUEsTUFDQSxVQUFBLEtBRUoscUJBQ0ksUUFBQSxXQUVKLGtCQUNJLFFBQUEsUUFFSixpQkFDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsaUJBQUEsUUFFSixVQUNJLFdBQUEsT0FDQSxPQUFBLEtBQ0EsWUFBQSxLQUNBLFVBQUEsT0FFSixRQUNJLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLE1BQ0ksT0FBQSxJQUNBLE1BQUEsS0FDQSxTQUFBLFNBQ0EsbUJBQUEsRUFBQSxJQUFBLEtBQUEsRUFBQSxlQUFBLFdBQUEsRUFBQSxJQUFBLEtBQUEsRUFBQSxlQUNBLG1CQUFBLElBQUEsU0FBQSxXQUFBLElBQUEsU0FDQSxjQUFBLElBQ0EsT0FBQSxRQUNBLFdBQUEsT0FFSixZQUNJLG1CQUFBLEVBQUEsSUFBQSxLQUFBLEVBQUEsZUFBQSxXQUFBLEVBQUEsSUFBQSxLQUFBLEVBQUEsZUFDQSx5QkFBQSxPQUFBLHFCQUFBLE9BQUEsaUJBQUEsT0FDQSxrQkFBQSxpQkFBQSxjQUFBLGlCQUFBLFVBQUEsaUJBRUosVUFDSSxRQUFBLGFBQ0EsY0FBQSxJQUFBLElBQUEsRUFBQSxFQUNBLE9BQUEsRUFBQSxLQUNBLFdBQUEsSUFDQSxVQUFBLEtBRUosYUFDSSxRQUFBLE1BQ0EsT0FBQSxJQUNBLFVBQUEsT0FFSixlQUNJLE9BQUEsS0FBQSxFQUFBLEVBQUEsRUFFSixlQUNJLFNBQUEsU0FDQSxJQUFBLEVBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxVQUFBLEVBRUosTUFDSSxRQUFBLGFBQ0EsT0FBQSxLQUNBLE1BQUEsSUFFSixPQUNJLFFBQUEsYUFDQSxPQUFBLEtBQ0EsTUFBQSIsImZpbGUiOiJjb21wbGV0ZWQvNS9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVBsYXlmYWlyK0Rpc3BsYXkrU0Mmc3Vic2V0PWN5cmlsbGljJyk7XHJcbkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9QXJpbW8mc3Vic2V0PWN5cmlsbGljJyk7XHJcbmJvZHksIGh0bWwge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBmb250LWZhbWlseTogJ0FyaW1vJztcclxufVxyXG5ib2R5IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbn1cclxuYm9keSA+IGhlYWRlciB7XHJcbiAgICBoZWlnaHQ6IDYwcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzE2MUVGO1xyXG59XHJcbi5jb250ZW50IHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG59XHJcbi5jb250ZW50ID4gYXNpZGUge1xyXG4gICAgd2lkdGg6IDIwJTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG59XHJcbi5kaXNsaWtlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTIxMjE7XHJcbiAgICBjb2xvcjogI0VDRUNFQztcclxuXHJcbn1cclxuYXNpZGUgPiBkaXYge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMTJyZW07XHJcbiAgICBmbGV4OiAxO1xyXG59XHJcbmFzaWRlID4gZGl2OjpiZWZvcmUge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAzMHB4O1xyXG4gICAgaGVpZ2h0OiAxNDBweDtcclxuICAgIGZvbnQtc2l6ZTogM3JlbTtcclxufVxyXG4uZGlzbGlrZSA+IGRpdjo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdEaXNsaWtlOic7XHJcbn1cclxuLmxpa2UgPiBkaXY6OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnTGlrZTonO1xyXG59XHJcbi5jb250ZW50ID4gc2VjdGlvbiB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRTdEQjtcclxufVxyXG4uaGVhZGVyLWQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiA4MHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDgwcHg7XHJcbiAgICBmb250LXNpemU6IDEuOHJlbTtcclxufVxyXG5zZWN0aW9uIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuLmNhcmQge1xyXG4gICAgaGVpZ2h0OiA3MCU7XHJcbiAgICB3aWR0aDogYXV0bztcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggMCByZ2JhKDAsMCwwLDAuMik7XHJcbiAgICB0cmFuc2l0aW9uOiAwLjNzIGVhc2Utb3V0O1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5jYXJkOmhvdmVyIHtcclxuICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggMCByZ2JhKDAsMCwwLDAuNCk7XHJcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIsIDEuMDIpO1xyXG59XHJcbi5jYXJkID4gaW1nIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwO1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBtYXgtaGVpZ2h0OiA5MCU7XHJcbiAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbn1cclxuLmRlc2NyaXB0aW9uIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgaGVpZ2h0OiAxMCU7XHJcbiAgICBmb250LXNpemU6IDEuNHJlbTtcclxufVxyXG4uZGVzY3JpcHRpb24gPiBwIHtcclxuICAgIG1hcmdpbjogMTJweCAwIDAgMDtcclxufVxyXG4uaW52aXNpYmxlLWJveCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGZvbnQtc2l6ZTogMDtcclxufVxyXG4ubGVmdCB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogNTAlO1xyXG59XHJcbi5yaWdodCB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogNTAlO1xyXG59Il19 */ diff --git a/dist/css/completed/6/style.css b/dist/css/completed/6/style.css deleted file mode 100644 index 91f31ab..0000000 --- a/dist/css/completed/6/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Yeseva+One&subset=cyrillic);@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic);body,html{height:100%;width:100%;margin:0}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;font-family:'Open Sans';font-weight:400}body>header{height:60px;background-color:#7161ef}.content{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.riddle{height:20%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#ffece4;border-bottom:1px solid #b2b2b2;color:rgba(0,0,0,.75);overflow:hidden}.riddle>p{margin:0 100px;font-size:2.8rem;text-align:center}.main-area{-webkit-box-sizing:border-box;box-sizing:border-box;height:44%;width:100%;background-color:#ffe7db;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:20px 100px;overflow:auto;font-family:'Yeseva One';text-align:center;font-size:5rem}.main-area>div{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(32,32,32,.8)),to(rgba(96,96,96,.7)));background-image:linear-gradient(rgba(32,32,32,.8),rgba(96,96,96,.7));width:12vh;height:12vh;line-height:12vh;margin:10px;border:2px solid #b2b2b2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent}.main-area>div.revealed{background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:linear-gradient(#eee,#fff);-webkit-transition:color 1.2s ease-out;transition:color 1.2s ease-out;color:rgba(0,0,0,.75);cursor:default}.manage{height:36%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;background-color:#ffece4;border-top:1px solid #b2b2b2}.guess{-webkit-box-flex:3;-ms-flex:3;flex:3;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:3rem;color:rgba(0,0,0,.75)}.guess>div{-webkit-box-sizing:border-box;box-sizing:border-box;height:120px;line-height:120px;padding:20px}.guess>label{width:500px;position:relative}.guess input{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:3rem;text-align:center;font-family:'Open Sans';padding:2px 10px;outline:0;border:none;background:0 0;border-bottom:2px solid #b2b2b2;color:#9e7b57}.guess span{position:absolute;bottom:0;left:0;width:0;height:2px;background-color:#7161ef;will-change:width;-webkit-transition:width .8s ease;transition:width .8s ease}input:focus+span{width:100%}.stats{-webkit-box-flex:2;-ms-flex:2;flex:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:rgba(0,0,0,.75)}.stats-score{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:80px}.stats-score>div:first-child{font-size:3rem}.stats-score>div:last-child{font-size:3.4rem;font-weight:600;font-style:italic;margin-top:-10px;color:#2aa9dc}.stats-count{text-align:center;font-size:1.2rem}.stats-count>span:last-child{font-style:italic}.letter{-webkit-box-flex:2;-ms-flex:2;flex:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.abc{-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:280px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;border:2px solid #b2b2b2;padding:6px;-webkit-box-shadow:-4px 4px 20px 0 rgba(0,0,0,.3);box-shadow:-4px 4px 20px 0 rgba(0,0,0,.3)}.abc>span{background:#fff;margin:6px;width:30px;height:30px;line-height:30px;text-align:center;font-size:1.2rem;font-weight:600;cursor:pointer;border-radius:2px;border:1px solid rgba(0,0,0,.75);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.green{cursor:default;background-color:#43af3c;color:#fff}span.red{cursor:default;background-color:#e23f3f;color:#fff} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC82L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRkFDQSw0RkFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBRUosS0FDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0EsWUFBQSxZQUNBLFlBQUEsSUFFSixZQUNJLE9BQUEsS0FDQSxpQkFBQSxRQUVKLFNBQ0ksaUJBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FFSixRQUNJLE9BQUEsSUFDQSxNQUFBLEtBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0EsaUJBQUEsUUFDQSxjQUFBLElBQUEsTUFBQSxRQUNBLE1BQUEsZ0JBQ0EsU0FBQSxPQUVKLFVBQ0ksT0FBQSxFQUFBLE1BQ0EsVUFBQSxPQUNBLFdBQUEsT0FFSixXQUNJLG1CQUFBLFdBQUEsV0FBQSxXQUNBLE9BQUEsSUFDQSxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLEtBQUEsVUFBQSxJQUFBLEtBQ0EsaUJBQUEsT0FBQSxjQUFBLE9BQUEsZ0JBQUEsT0FDQSxrQkFBQSxPQUFBLGVBQUEsT0FBQSxZQUFBLE9BQ0EsUUFBQSxLQUFBLE1BQ0EsU0FBQSxLQUNBLFlBQUEsYUFDQSxXQUFBLE9BQ0EsVUFBQSxLQUVKLGVBQ0ksaUJBQUEsNEZBQUEsaUJBQUEscURBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxZQUFBLEtBQ0EsT0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0Esb0JBQUEsS0FBQSxpQkFBQSxLQUFBLGdCQUFBLEtBQUEsWUFBQSxLQUNBLE1BQUEsWUFFSix3QkFDSSxpQkFBQSxrRUFBQSxpQkFBQSwyQkFDQSxtQkFBQSxNQUFBLEtBQUEsU0FBQSxXQUFBLE1BQUEsS0FBQSxTQUNBLE1BQUEsZ0JBQ0EsT0FBQSxRQUVKLFFBQ0ksT0FBQSxJQUNBLE1BQUEsS0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxpQkFBQSxRQUNBLFdBQUEsSUFBQSxNQUFBLFFBRUosT0FDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGtCQUFBLE9BQUEsZUFBQSxPQUFBLFlBQUEsT0FDQSxVQUFBLEtBQ0EsTUFBQSxnQkFFSixXQUNJLG1CQUFBLFdBQUEsV0FBQSxXQUNBLE9BQUEsTUFDQSxZQUFBLE1BQ0EsUUFBQSxLQUVKLGFBQ0ksTUFBQSxNQUNBLFNBQUEsU0FFSixhQUNJLG1CQUFBLFdBQUEsV0FBQSxXQUNBLE1BQUEsS0FDQSxVQUFBLEtBQ0EsV0FBQSxPQUNBLFlBQUEsWUFDQSxRQUFBLElBQUEsS0FDQSxRQUFBLEVBQ0EsT0FBQSxLQUNBLFdBQUEsSUFDQSxjQUFBLElBQUEsTUFBQSxRQUNBLE1BQUEsUUFFSixZQUNJLFNBQUEsU0FDQSxPQUFBLEVBQ0EsS0FBQSxFQUNBLE1BQUEsRUFDQSxPQUFBLElBQ0EsaUJBQUEsUUFDQSxZQUFBLE1BQ0EsbUJBQUEsTUFBQSxJQUFBLEtBQUEsV0FBQSxNQUFBLElBQUEsS0FFSixpQkFDSSxNQUFBLEtBRUosT0FDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxVQUFBLE9BQ0EsaUJBQUEsTUFBQSxjQUFBLE1BQUEsZ0JBQUEsV0FDQSxNQUFBLGdCQUVKLGFBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxVQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLFdBQUEsS0FFSiw2QkFDSSxVQUFBLEtBRUosNEJBQ0ksVUFBQSxPQUNBLFlBQUEsSUFDQSxXQUFBLE9BQ0EsV0FBQSxNQUNBLE1BQUEsUUFFSixhQUNJLFdBQUEsT0FDQSxVQUFBLE9BRUosNkJBQ0ksV0FBQSxPQUVKLFFBQ0ksaUJBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLEtBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsTUFBQSxNQUNBLE9BQUEsTUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLEtBQUEsVUFBQSxJQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsUUFDQSxRQUFBLElBQ0EsbUJBQUEsS0FBQSxJQUFBLEtBQUEsRUFBQSxlQUFBLFdBQUEsS0FBQSxJQUFBLEtBQUEsRUFBQSxlQUVKLFVBQ0ksV0FBQSxLQUNBLE9BQUEsSUFDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFlBQUEsS0FDQSxXQUFBLE9BQ0EsVUFBQSxPQUNBLFlBQUEsSUFDQSxPQUFBLFFBQ0EsY0FBQSxJQUNBLE9BQUEsSUFBQSxNQUFBLGdCQUNBLG9CQUFBLEtBQUEsaUJBQUEsS0FBQSxnQkFBQSxLQUFBLFlBQUEsS0FFSixXQUNJLE9BQUEsUUFDQSxpQkFBQSxRQUNBLE1BQUEsS0FFSixTQUNJLE9BQUEsUUFDQSxpQkFBQSxRQUNBLE1BQUEiLCJmaWxlIjoiY29tcGxldGVkLzYvc3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1ZZXNldmErT25lJnN1YnNldD1jeXJpbGxpYycpO1xyXG5AaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2Fuczo0MDAsNjAwLDYwMGkmc3Vic2V0PWN5cmlsbGljJyk7XHJcbmJvZHksIGh0bWwge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbn1cclxuYm9keSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxufVxyXG5ib2R5ID4gaGVhZGVyIHtcclxuICAgIGhlaWdodDogNjBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM3MTYxRUY7XHJcbn1cclxuLmNvbnRlbnQge1xyXG4gICAgZmxleDogMTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbn1cclxuLnJpZGRsZSB7XHJcbiAgICBoZWlnaHQ6IDIwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkVDRTQ7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0IyQjJCMjtcclxuICAgIGNvbG9yOiByZ2JhKDAsMCwwLC43NSk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcbi5yaWRkbGUgPiBwIHtcclxuICAgIG1hcmdpbjogMCAxMDBweDtcclxuICAgIGZvbnQtc2l6ZTogMi44cmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5tYWluLWFyZWEge1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIGhlaWdodDogNDQlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZFN0RCO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBwYWRkaW5nOiAyMHB4IDEwMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICBmb250LWZhbWlseTogJ1llc2V2YSBPbmUnO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiA1cmVtO1xyXG59XHJcbi5tYWluLWFyZWEgPiBkaXYge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoMzIsMzIsMzIsLjgpLCByZ2JhKDk2LDk2LDk2LC43KSk7XHJcbiAgICB3aWR0aDogMTJ2aDtcclxuICAgIGhlaWdodDogMTJ2aDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxMnZoO1xyXG4gICAgbWFyZ2luOiAxMHB4O1xyXG4gICAgYm9yZGVyOiAycHggc29saWQgI0IyQjJCMjtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcbi5tYWluLWFyZWEgPiBkaXYucmV2ZWFsZWQge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCNlZWUsICNmZmYpO1xyXG4gICAgdHJhbnNpdGlvbjogY29sb3IgMS4ycyBlYXNlLW91dDtcclxuICAgIGNvbG9yOiByZ2JhKDAsMCwwLC43NSk7XHJcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbn1cclxuLm1hbmFnZSB7XHJcbiAgICBoZWlnaHQ6IDM2JTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkVDRTQ7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0IyQjJCMjtcclxufVxyXG4uZ3Vlc3Mge1xyXG4gICAgZmxleDogMztcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAzcmVtO1xyXG4gICAgY29sb3I6IHJnYmEoMCwwLDAsLjc1KTtcclxufVxyXG4uZ3Vlc3MgPiBkaXYge1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIGhlaWdodDogMTIwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTIwcHg7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG59XHJcbi5ndWVzcyA+IGxhYmVsIHtcclxuICAgIHdpZHRoOiA1MDBweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4uZ3Vlc3MgaW5wdXQge1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZm9udC1zaXplOiAzcmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnO1xyXG4gICAgcGFkZGluZzogMnB4IDEwcHg7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2IyYjJiMjtcclxuICAgIGNvbG9yOiAjOWU3YjU3O1xyXG59XHJcbi5ndWVzcyBzcGFuIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMDtcclxuICAgIGhlaWdodDogMnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzcxNjFFRjtcclxuICAgIHdpbGwtY2hhbmdlOiB3aWR0aDtcclxuICAgIHRyYW5zaXRpb246IHdpZHRoIC44cyBlYXNlO1xyXG59XHJcbmlucHV0OmZvY3VzICsgc3BhbiB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG4uc3RhdHMge1xyXG4gICAgZmxleDogMjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIGNvbG9yOiByZ2JhKDAsMCwwLC43NSk7XHJcbn1cclxuLnN0YXRzLXNjb3JlIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tdG9wOiA4MHB4O1xyXG59XHJcbi5zdGF0cy1zY29yZSA+IGRpdjpmaXJzdC1jaGlsZCB7XHJcbiAgICBmb250LXNpemU6IDNyZW07XHJcbn1cclxuLnN0YXRzLXNjb3JlID4gZGl2Omxhc3QtY2hpbGQge1xyXG4gICAgZm9udC1zaXplOiAzLjRyZW07XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICBjb2xvcjogIzJhYTlkYztcclxufVxyXG4uc3RhdHMtY291bnQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAxLjJyZW07XHJcbn1cclxuLnN0YXRzLWNvdW50ID4gc3BhbjpsYXN0LWNoaWxkIHtcclxuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxufVxyXG4ubGV0dGVyIHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbi5hYmMge1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIHdpZHRoOiAyODBweDtcclxuICAgIGhlaWdodDogMjgwcHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgd3JhcDtcclxuICAgIGJvcmRlcjogMnB4IHNvbGlkICNiMmIyYjI7XHJcbiAgICBwYWRkaW5nOiA2cHg7XHJcbiAgICBib3gtc2hhZG93OiAtNHB4IDRweCAyMHB4IDAgcmdiYSgwLDAsMCwuMyk7XHJcbn1cclxuLmFiYyA+IHNwYW4ge1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICBtYXJnaW46IDZweDtcclxuICAgIHdpZHRoOiAzMHB4O1xyXG4gICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDMwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLC43NSk7XHJcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxufVxyXG5zcGFuLmdyZWVuIHtcclxuICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM0M2FmM2M7XHJcbiAgICBjb2xvcjogd2hpdGU7XHJcbn1cclxuc3Bhbi5yZWQge1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UyM2YzZjtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxufVxyXG4iXX0= */ diff --git a/dist/css/completed/7/loader.css b/dist/css/completed/7/loader.css deleted file mode 100644 index a9a8252..0000000 --- a/dist/css/completed/7/loader.css +++ /dev/null @@ -1,2 +0,0 @@ -#loader{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.loader-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.loader-box>div{height:32px;width:300px;background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-radius:20px;border:1px solid #000;overflow:hidden}.full{border-radius:20px 0 0 20px;background:#7161ef;-webkit-transition:width .1s linear;transition:width .1s linear}.empty{border-radius:0 20px 20px 0;background:0 0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC83L2xvYWRlci5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsUUFDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsaUJBQUEsT0FBQSxjQUFBLE9BQUEsZ0JBQUEsT0FDQSxrQkFBQSxPQUFBLGVBQUEsT0FBQSxZQUFBLE9BRUosWUFDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLGdCQUNJLE9BQUEsS0FDQSxNQUFBLE1BQ0EsV0FBQSxLQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFdBQUEsc0JBQUEsT0FBQSxjQUFBLElBQUEsT0FBQSxVQUFBLElBQUEsT0FDQSxjQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxTQUFBLE9BRUosTUFDSSxjQUFBLEtBQUEsRUFBQSxFQUFBLEtBQ0EsV0FBQSxRQUNBLG1CQUFBLE1BQUEsSUFBQSxPQUFBLFdBQUEsTUFBQSxJQUFBLE9BRUosT0FDSSxjQUFBLEVBQUEsS0FBQSxLQUFBLEVBQ0EsV0FBQSxJQUNBLGlCQUFBLEVBQUEsa0JBQUEsRUFBQSxVQUFBIiwiZmlsZSI6ImNvbXBsZXRlZC83L2xvYWRlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjbG9hZGVyIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbi5sb2FkZXItYm94IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbi5sb2FkZXItYm94ID4gZGl2IHtcclxuICAgIGhlaWdodDogMzJweDtcclxuICAgIHdpZHRoOiAzMDBweDtcclxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuLmZ1bGwge1xyXG4gICAgYm9yZGVyLXJhZGl1czogMjBweCAwIDAgMjBweDtcclxuICAgIGJhY2tncm91bmQ6ICM3MTYxRUY7XHJcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAuMXMgbGluZWFyO1xyXG59XHJcbi5lbXB0eSB7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwIDIwcHggMjBweCAwO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbn0iXX0= */ diff --git a/dist/css/completed/7/style.css b/dist/css/completed/7/style.css deleted file mode 100644 index 9d35a3c..0000000 --- a/dist/css/completed/7/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic);body,html{height:100%;width:100%;margin:0}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;font-family:'Open Sans';font-weight:400;background-image:linear-gradient(30deg,#fff,#f5f0ff)}body>header{height:60px;background-color:#7161ef}#page{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#page>div{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;border:1px solid #000;height:480px;width:640px;-webkit-box-shadow:10px -10px 0 0 #7161ef;box-shadow:10px -10px 0 0 #7161ef;padding:20px}section#frame_1{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#frame_1>p{font-size:3.2rem;text-align:center;margin-bottom:0}#frame_1>p>span{font-weight:600;color:#a09016}#frame_1>small{font-size:1rem;margin-top:30px;margin-bottom:100px}.active-button{background:#7161ef;color:#fff;cursor:pointer}.active-button:hover{background:#a397ff}.locked-button{background:#cdc6ff;cursor:default;color:#fff}#frame_1>button{width:200px;height:50px;margin-left:300px;font-size:1.3rem}button{border:unset}button:focus{outline:0}.invisible{display:none!important}section#frame_2{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative}.frame-header{font-size:1.1rem;margin-left:20px}#frame_2 .private-data{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;width:100%;padding:20px;padding-left:50px}#frame_2 .private-data>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}#frame_2 .private-data>div>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#frame_2 .private-data>div:not(:first-child){margin-top:10px}#frame_2 .private-data>div>div+div{margin-left:50px}main input[type=password],main input[type=text]{outline-color:#7161ef;font-size:1.1rem;border:none;outline:0;border-bottom:2px solid #7161ef}.buttons{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;width:100%;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;bottom:20px}.buttons>button{width:120px;height:36px;font-size:1.2rem;margin-left:10px}.buttons>button:last-child{margin-right:30px}section#frame_3{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative}#frame_3 .phone-data{margin:0 40px}#frame_3 .phone-data>p{font-size:.9rem}#frame_3 .phone-entry{margin-top:30px;margin-left:30px}#frame_3 .phone-entry>input{padding-left:20px;width:250px;font-size:1.4rem}#frame_3 input::-webkit-input-placeholder{color:#bebebe}#frame_3 input:-ms-input-placeholder{color:#bebebe}#frame_3 input::-ms-input-placeholder{color:#bebebe}#frame_3 input::placeholder{color:#bebebe}#frame_3 .phone-data button{margin-left:40px;height:30px;width:80px;border-radius:4px}#frame_3 .ver-code{margin-top:50px}#frame_3 .ver-code label{font-size:.9rem}#frame_3 .ver-code input{margin-left:30px;margin-top:10px;border:1px solid #7161ef;border-radius:5px;padding:4px;text-align:center;width:70px;font-size:1.2rem}#frame_3 .ver-code button{margin-left:20px;margin-bottom:1px}section#frame_4{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;position:relative}#frame_4 .credit-card{margin:0 40px}#frame_4 .credit-card>p{font-size:.9rem}#frame_4 .credit-card>div:nth-of-type(1){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;margin-left:40px;margin-top:40px}#frame_4 .credit-card>div:nth-of-type(2){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin-left:40px;margin-top:30px}#frame_4 .credit-card>div:nth-of-type(2)>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#frame_4 .credit-card>div:nth-of-type(2)>div:nth-of-type(2){margin-left:100px}#frame_4 label{font-size:.9rem}#fram_4 .credit-card>div:nth-of-type(1)>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}#frame_4 .credit-card>div:last-child{margin-top:40px;font-size:.5rem}#frame_4 .credit-card>div:last-child>input{padding-top:5px}#frame_4 .credit-card>div:last-child>label{font-size:.8rem;padding-left:10px}#frame_4 .credit-card>div:nth-of-type(1) input{width:46px;height:26px;padding-left:6px;font-size:1.2rem;margin-top:8px;border:2px solid #7161ef;background:#fbfaff;border-radius:6px;outline:0;caret-color:#7161ef}#frame_4 .credit-card>div:nth-of-type(1) input:not(:first-child){margin-left:3px}#frame_4 .credit-card>div:nth-of-type(2) input{width:100px;margin-top:8px;text-align:center}#frame_4 input::-webkit-input-placeholder{color:#bebebe}#frame_4 input:-ms-input-placeholder{color:#bebebe}#frame_4 input::-ms-input-placeholder{color:#bebebe}#frame_4 input::placeholder{color:#bebebe}#frame_4 input[type=checkbox]{cursor:pointer}section#frame_5{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}#frame_5>img{position:absolute;width:300px;left:calc(50% - 150px);z-index:1}#frame_5>p:nth-of-type(1){font-size:3rem;color:#7161ef;text-shadow:3px -3px 0 #e9c500;font-weight:600;z-index:2;margin-top:190px;text-align:center}#frame_5>p:nth-of-type(2){font-size:1.8rem;margin:0;z-index:2}#frame_5>p:nth-of-type(3){z-index:2;margin-top:10px;font-size:1.1rem}.indicator{position:absolute;bottom:48px;left:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.indicator>.step{height:16px;width:16px;border-radius:50%;border:1px solid #7161ef;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;z-index:3;background:#fff;font-size:.8rem;color:#000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.indicator>div.completed{background:#7161ef;color:#fff}.indicator>.step:not(:first-child){margin-left:20px}.indicator>.wire{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;width:calc(100% - 4px);height:8px;top:calc(50% - 4px);background:#fff;border:1px solid #7161ef;z-index:2;margin:0 2px}.indicator>.micro-wire-1{position:absolute;height:6px;width:27px;left:14px;top:calc(50% - 3px);z-index:4;background-color:#fff}.indicator>.micro-wire-2{position:absolute;height:6px;width:27px;left:52px;top:calc(50% - 3px);z-index:4;background-color:#fff} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC83L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0RkFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBRUosS0FDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0EsWUFBQSxZQUNBLFlBQUEsSUFDQSxpQkFBQSxvQ0FFSixZQUNJLE9BQUEsS0FDQSxpQkFBQSxRQUVKLE1BQ0ksaUJBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLFVBQ0ksU0FBQSxTQUNBLG1CQUFBLFdBQUEsV0FBQSxXQUNBLFdBQUEsS0FDQSxPQUFBLElBQUEsTUFBQSxLQUNBLE9BQUEsTUFDQSxNQUFBLE1BQ0EsbUJBQUEsS0FBQSxNQUFBLEVBQUEsRUFBQSxRQUFBLFdBQUEsS0FBQSxNQUFBLEVBQUEsRUFBQSxRQUNBLFFBQUEsS0FFSixnQkFDSSxPQUFBLEtBQ0EsTUFBQSxLQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FDQSxpQkFBQSxNQUFBLGNBQUEsTUFBQSxnQkFBQSxXQUNBLGtCQUFBLE9BQUEsZUFBQSxPQUFBLFlBQUEsT0FFSixXQUNJLFVBQUEsT0FDQSxXQUFBLE9BQ0EsY0FBQSxFQUVKLGdCQUNJLFlBQUEsSUFDQSxNQUFBLFFBRUosZUFDSSxVQUFBLEtBQ0EsV0FBQSxLQUNBLGNBQUEsTUFFSixlQUNJLFdBQUEsUUFDQSxNQUFBLEtBQ0EsT0FBQSxRQUVKLHFCQUNJLFdBQUEsUUFFSixlQUNJLFdBQUEsUUFDQSxPQUFBLFFBQ0EsTUFBQSxLQUVKLGdCQUNJLE1BQUEsTUFDQSxPQUFBLEtBQ0EsWUFBQSxNQUNBLFVBQUEsT0FFSixPQUNJLE9BQUEsTUFFSixhQUNJLFFBQUEsRUFFSixXQUNJLFFBQUEsZUFFSixnQkFDSSxPQUFBLEtBQ0EsTUFBQSxLQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FDQSxpQkFBQSxNQUFBLGNBQUEsTUFBQSxnQkFBQSxXQUNBLGtCQUFBLE1BQUEsZUFBQSxNQUFBLFlBQUEsV0FDQSxTQUFBLFNBRUosY0FDSSxVQUFBLE9BQ0EsWUFBQSxLQUVKLHVCQUNJLG1CQUFBLFdBQUEsV0FBQSxXQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FDQSxNQUFBLEtBQ0EsUUFBQSxLQUNBLGFBQUEsS0FFSiwyQkFDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BRUosK0JBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUVKLDZDQUNJLFdBQUEsS0FFSixtQ0FDSSxZQUFBLEtBb0RKLDBCQWxEQSxzQkFFSSxjQUFBLFFBQ0EsVUFBQSxPQUNBLE9BQUEsS0FDQSxRQUFBLEVBQ0EsY0FBQSxJQUFBLE1BQUEsUUFFSixTQUNJLFNBQUEsU0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BQ0EsTUFBQSxLQUNBLGlCQUFBLElBQUEsY0FBQSxJQUFBLGdCQUFBLFNBQ0EsT0FBQSxLQUVKLGdCQUNJLE1BQUEsTUFDQSxPQUFBLEtBQ0EsVUFBQSxPQUNBLFlBQUEsS0FFSiwyQkFDSSxhQUFBLEtBRUosZ0JBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0EsaUJBQUEsTUFBQSxjQUFBLE1BQUEsZ0JBQUEsV0FDQSxrQkFBQSxNQUFBLGVBQUEsTUFBQSxZQUFBLFdBQ0EsU0FBQSxTQUVKLHFCQUNJLE9BQUEsRUFBQSxLQUVKLHVCQUNJLFVBQUEsTUFFSixzQkFDSSxXQUFBLEtBQ0EsWUFBQSxLQUVKLDRCQUNJLGFBQUEsS0FDQSxNQUFBLE1BQ0EsVUFBQSxPQUVKLDBDQUNJLE1BQUEsUUFESixxQ0FDSSxNQUFBLFFBREosc0NBQ0ksTUFBQSxRQURKLDRCQUNJLE1BQUEsUUFFSiw0QkFDSSxZQUFBLEtBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxjQUFBLElBRUosbUJBQ0ksV0FBQSxLQUVKLHlCQUNJLFVBQUEsTUFFSix5QkFDSSxZQUFBLEtBQ0EsV0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0EsY0FBQSxJQUNBLFFBQUEsSUFDQSxXQUFBLE9BQ0EsTUFBQSxLQUNBLFVBQUEsT0FFSiwwQkFDSSxZQUFBLEtBQ0EsY0FBQSxJQUVKLGdCQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGlCQUFBLE1BQUEsY0FBQSxNQUFBLGdCQUFBLFdBQ0Esa0JBQUEsTUFBQSxlQUFBLE1BQUEsWUFBQSxXQUNBLFNBQUEsU0FFSixzQkFDSSxPQUFBLEVBQUEsS0FFSix3QkFDSSxVQUFBLE1BRUoseUNBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLFlBQUEsS0FDQSxXQUFBLEtBRUoseUNBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUNBLFlBQUEsS0FDQSxXQUFBLEtBRUosNkNBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUVKLDREQUNJLFlBQUEsTUFFSixlQUNJLFVBQUEsTUFFSiw0Q0FDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BRUoscUNBQ0ksV0FBQSxLQUNBLFVBQUEsTUFFSiwyQ0FDSSxZQUFBLElBRUosMkNBQ0ksVUFBQSxNQUNBLGFBQUEsS0FFSiwrQ0FDSSxNQUFBLEtBQ0EsT0FBQSxLQUNBLGFBQUEsSUFDQSxVQUFBLE9BQ0EsV0FBQSxJQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0EsV0FBQSxRQUNBLGNBQUEsSUFDQSxRQUFBLEVBQ0EsWUFBQSxRQVNKLGlFQUNJLFlBQUEsSUFFSiwrQ0FDSSxNQUFBLE1BQ0EsV0FBQSxJQUNBLFdBQUEsT0FFSiwwQ0FDSSxNQUFBLFFBREoscUNBQ0ksTUFBQSxRQURKLHNDQUNJLE1BQUEsUUFESiw0QkFDSSxNQUFBLFFBRUosOEJBQ0ksT0FBQSxRQUVKLGdCQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGlCQUFBLE1BQUEsY0FBQSxNQUFBLGdCQUFBLFdBQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLFNBQUEsU0FFSixhQUNJLFNBQUEsU0FDQSxNQUFBLE1BQ0EsS0FBQSxrQkFDQSxRQUFBLEVBRUosMEJBQ0ksVUFBQSxLQUNBLE1BQUEsUUFDQSxZQUFBLElBQUEsS0FBQSxFQUFBLFFBQ0EsWUFBQSxJQUNBLFFBQUEsRUFDQSxXQUFBLE1BQ0EsV0FBQSxPQUVKLDBCQUNJLFVBQUEsT0FDQSxPQUFBLEVBQ0EsUUFBQSxFQUVKLDBCQUNJLFFBQUEsRUFDQSxXQUFBLEtBQ0EsVUFBQSxPQUVKLFdBQ0ksU0FBQSxTQUNBLE9BQUEsS0FDQSxLQUFBLEtBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUVKLGlCQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsY0FBQSxJQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsaUJBQUEsT0FBQSxjQUFBLE9BQUEsZ0JBQUEsT0FDQSxrQkFBQSxPQUFBLGVBQUEsT0FBQSxZQUFBLE9BQ0EsU0FBQSxTQUNBLFFBQUEsRUFDQSxXQUFBLEtBQ0EsVUFBQSxNQUNBLE1BQUEsS0FDQSxvQkFBQSxLQUFBLGlCQUFBLEtBQUEsZ0JBQUEsS0FBQSxZQUFBLEtBRUoseUJBQ0ksV0FBQSxRQUNBLE1BQUEsS0FFSixtQ0FDSSxZQUFBLEtBRUosaUJBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsU0FBQSxTQUNBLE1BQUEsaUJBQ0EsT0FBQSxJQUNBLElBQUEsZ0JBQ0EsV0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0EsUUFBQSxFQUNBLE9BQUEsRUFBQSxJQUVKLHlCQUNJLFNBQUEsU0FDQSxPQUFBLElBQ0EsTUFBQSxLQUNBLEtBQUEsS0FDQSxJQUFBLGdCQUNBLFFBQUEsRUFDQSxpQkFBQSxLQUVKLHlCQUNJLFNBQUEsU0FDQSxPQUFBLElBQ0EsTUFBQSxLQUNBLEtBQUEsS0FDQSxJQUFBLGdCQUNBLFFBQUEsRUFDQSxpQkFBQSIsImZpbGUiOiJjb21wbGV0ZWQvNy9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2Fuczo0MDAsNjAwLDYwMGkmc3Vic2V0PWN5cmlsbGljJyk7XHJcbmJvZHksIGh0bWwge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbn1cclxuYm9keSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgzMGRlZywgI2ZmZmZmZiwjZjVmMGZmICk7XHJcbn1cclxuYm9keSA+IGhlYWRlciB7XHJcbiAgICBoZWlnaHQ6IDYwcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzE2MUVGO1xyXG59XHJcbiNwYWdlIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbiNwYWdlID4gZGl2IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xyXG4gICAgaGVpZ2h0OiA0ODBweDtcclxuICAgIHdpZHRoOiA2NDBweDtcclxuICAgIGJveC1zaGFkb3c6IDEwcHggLTEwcHggMCAwICM3MTYxRUY7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG59XHJcbnNlY3Rpb24jZnJhbWVfMSB7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbiNmcmFtZV8xID4gcCB7XHJcbiAgICBmb250LXNpemU6IDMuMnJlbTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbn1cclxuI2ZyYW1lXzEgPiBwID4gc3BhbiB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgY29sb3I6ICNhMDkwMTY7XHJcbn1cclxuI2ZyYW1lXzEgPiBzbWFsbCB7XHJcbiAgICBmb250LXNpemU6IDFyZW07XHJcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XHJcbn1cclxuLmFjdGl2ZS1idXR0b24ge1xyXG4gICAgYmFja2dyb3VuZDogIzcxNjFFRjtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4uYWN0aXZlLWJ1dHRvbjpob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjYTM5N2ZmO1xyXG59XHJcbi5sb2NrZWQtYnV0dG9uIHtcclxuICAgIGJhY2tncm91bmQ6ICNjZGM2ZmY7XHJcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICBjb2xvcjogd2hpdGU7XHJcbn1cclxuI2ZyYW1lXzEgPiBidXR0b24ge1xyXG4gICAgd2lkdGg6IDIwMHB4O1xyXG4gICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDMwMHB4O1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbn1cclxuYnV0dG9uIHtcclxuICAgIGJvcmRlcjogdW5zZXQ7XHJcbn1cclxuYnV0dG9uOmZvY3VzIHtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbn1cclxuLmludmlzaWJsZSB7XHJcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuc2VjdGlvbiNmcmFtZV8yIHtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcbi5mcmFtZS1oZWFkZXIge1xyXG4gICAgZm9udC1zaXplOiAxLjFyZW07XHJcbiAgICBtYXJnaW4tbGVmdDogMjBweDtcclxufVxyXG4jZnJhbWVfMiAucHJpdmF0ZS1kYXRhIHtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgcGFkZGluZy1sZWZ0OiA1MHB4O1xyXG59XHJcbiNmcmFtZV8yIC5wcml2YXRlLWRhdGEgPiBkaXYge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxufVxyXG4jZnJhbWVfMiAucHJpdmF0ZS1kYXRhID4gZGl2ID4gZGl2IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbn1cclxuI2ZyYW1lXzIgLnByaXZhdGUtZGF0YSA+IGRpdjpub3QoOmZpcnN0LWNoaWxkKSB7XHJcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG59XHJcbiNmcmFtZV8yIC5wcml2YXRlLWRhdGEgPiBkaXYgPiBkaXYgKyBkaXYge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDUwcHg7XHJcbn1cclxubWFpbiBpbnB1dFt0eXBlPVwidGV4dFwiXSxcclxubWFpbiBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xyXG4gICAgb3V0bGluZS1jb2xvcjogIzcxNjFFRjtcclxuICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNzE2MUVGO1xyXG59XHJcbi5idXR0b25zIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICBib3R0b206IDIwcHg7XHJcbn1cclxuLmJ1dHRvbnMgPiBidXR0b24ge1xyXG4gICAgd2lkdGg6IDEyMHB4O1xyXG4gICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgZm9udC1zaXplOiAxLjJyZW07XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxufVxyXG4uYnV0dG9ucyA+IGJ1dHRvbjpsYXN0LWNoaWxkIHsgXHJcbiAgICBtYXJnaW4tcmlnaHQ6IDMwcHg7XHJcbn1cclxuc2VjdGlvbiNmcmFtZV8zIHtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcbiNmcmFtZV8zIC5waG9uZS1kYXRhIHtcclxuICAgIG1hcmdpbjogMCA0MHB4O1xyXG59XHJcbiNmcmFtZV8zIC5waG9uZS1kYXRhID4gcCB7XHJcbiAgICBmb250LXNpemU6IC45cmVtO1xyXG59XHJcbiNmcmFtZV8zIC5waG9uZS1lbnRyeSB7XHJcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDMwcHg7XHJcbn1cclxuI2ZyYW1lXzMgLnBob25lLWVudHJ5ID4gaW5wdXQge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xyXG4gICAgd2lkdGg6IDI1MHB4O1xyXG4gICAgZm9udC1zaXplOiAxLjRyZW07XHJcbn1cclxuI2ZyYW1lXzMgaW5wdXQ6OnBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiAjYmViZWJlO1xyXG59XHJcbiNmcmFtZV8zIC5waG9uZS1kYXRhIGJ1dHRvbiB7XHJcbiAgICBtYXJnaW4tbGVmdDogNDBweDtcclxuICAgIGhlaWdodDogMzBweDtcclxuICAgIHdpZHRoOiA4MHB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG59XHJcbiNmcmFtZV8zIC52ZXItY29kZSB7XHJcbiAgICBtYXJnaW4tdG9wOiA1MHB4O1xyXG59XHJcbiNmcmFtZV8zIC52ZXItY29kZSBsYWJlbCB7XHJcbiAgICBmb250LXNpemU6IC45cmVtO1xyXG59XHJcbiNmcmFtZV8zIC52ZXItY29kZSBpbnB1dCB7XHJcbiAgICBtYXJnaW4tbGVmdDogMzBweDtcclxuICAgIG1hcmdpbi10b3A6IDEwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNzE2MUVGO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgcGFkZGluZzogNHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDcwcHg7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxufVxyXG4jZnJhbWVfMyAudmVyLWNvZGUgYnV0dG9uIHtcclxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXB4O1xyXG59XHJcbnNlY3Rpb24jZnJhbWVfNCB7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4jZnJhbWVfNCAuY3JlZGl0LWNhcmQge1xyXG4gICAgbWFyZ2luOiAwIDQwcHg7XHJcbn1cclxuI2ZyYW1lXzQgLmNyZWRpdC1jYXJkID4gcCB7XHJcbiAgICBmb250LXNpemU6IC45cmVtO1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgxKSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICBtYXJnaW4tdG9wOiA0MHB4O1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgyKSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgyKSA+IGRpdiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgyKSA+IGRpdjpudGgtb2YtdHlwZSgyKSB7XHJcbiAgICBtYXJnaW4tbGVmdDogMTAwcHg7XHJcbn1cclxuI2ZyYW1lXzQgbGFiZWwge1xyXG4gICAgZm9udC1zaXplOiAuOXJlbTtcclxufVxyXG4jZnJhbV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgxKSA+IGRpdiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpsYXN0LWNoaWxkIHtcclxuICAgIG1hcmdpbi10b3A6IDQwcHg7XHJcbiAgICBmb250LXNpemU6IC41cmVtO1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpsYXN0LWNoaWxkID4gaW5wdXQge1xyXG4gICAgcGFkZGluZy10b3A6IDVweDtcclxufVxyXG4jZnJhbWVfNCAuY3JlZGl0LWNhcmQgPiBkaXY6bGFzdC1jaGlsZCA+IGxhYmVsIHtcclxuICAgIGZvbnQtc2l6ZTogLjhyZW07XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XHJcbn1cclxuI2ZyYW1lXzQgLmNyZWRpdC1jYXJkID4gZGl2Om50aC1vZi10eXBlKDEpIGlucHV0IHtcclxuICAgIHdpZHRoOiA0NnB4O1xyXG4gICAgaGVpZ2h0OiAyNnB4O1xyXG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIG1hcmdpbi10b3A6IDhweDtcclxuICAgIGJvcmRlcjogMnB4IHNvbGlkICM3MTYxRUY7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmJmYWZmO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGNhcmV0LWNvbG9yOiAjNzE2MUVGO1xyXG59XHJcbi8qICNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgxKSBpbnB1dCB7XHJcbiAgICB3aWR0aDogMjc2cHg7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIG1hcmdpbi10b3A6IDhweDtcclxuICAgIGNhcmV0LWNvbG9yOiAjNzE2MUVGO1xyXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xyXG59ICovXHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgxKSBpbnB1dDpub3QoOmZpcnN0LWNoaWxkKSB7XHJcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xyXG59XHJcbiNmcmFtZV80IC5jcmVkaXQtY2FyZCA+IGRpdjpudGgtb2YtdHlwZSgyKSBpbnB1dCB7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICBtYXJnaW4tdG9wOiA4cHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuI2ZyYW1lXzQgaW5wdXQ6OnBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiAjYmViZWJlO1xyXG59XHJcbiNmcmFtZV80IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuc2VjdGlvbiNmcmFtZV81IHtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuI2ZyYW1lXzUgPiBpbWcge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgd2lkdGg6IDMwMHB4O1xyXG4gICAgbGVmdDogY2FsYyg1MCUgLSAxNTBweCk7XHJcbiAgICB6LWluZGV4OiAxO1xyXG59XHJcbiNmcmFtZV81ID4gcDpudGgtb2YtdHlwZSgxKSB7XHJcbiAgICBmb250LXNpemU6IDNyZW07XHJcbiAgICBjb2xvcjogIzcxNjFFRjtcclxuICAgIHRleHQtc2hhZG93OiAzcHggLTNweCAwICNlOWM1MDA7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIG1hcmdpbi10b3A6IDE5MHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbiNmcmFtZV81ID4gcDpudGgtb2YtdHlwZSgyKSB7XHJcbiAgICBmb250LXNpemU6IDEuOHJlbTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHotaW5kZXg6IDI7XHJcbn1cclxuI2ZyYW1lXzUgPiBwOm50aC1vZi10eXBlKDMpIHtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG4gICAgZm9udC1zaXplOiAxLjFyZW07XHJcbn1cclxuLmluZGljYXRvciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBib3R0b206IDQ4cHg7XHJcbiAgICBsZWZ0OiA1MHB4O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxufVxyXG4uaW5kaWNhdG9yID4gLnN0ZXAge1xyXG4gICAgaGVpZ2h0OiAxNnB4O1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNzE2MUVGO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDM7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgZm9udC1zaXplOiAuOHJlbTtcclxuICAgIGNvbG9yOiBibGFjaztcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcbi5pbmRpY2F0b3IgPiBkaXYuY29tcGxldGVkIHtcclxuICAgIGJhY2tncm91bmQ6ICM3MTYxRUY7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxufVxyXG4uaW5kaWNhdG9yID4gLnN0ZXA6bm90KDpmaXJzdC1jaGlsZCkge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XHJcbn1cclxuLmluZGljYXRvciA+IC53aXJlIHtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNHB4KTtcclxuICAgIGhlaWdodDogOHB4O1xyXG4gICAgdG9wOiBjYWxjKDUwJSAtIDRweCk7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzcxNjFFRjtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICBtYXJnaW46IDAgMnB4O1xyXG59XHJcbi5pbmRpY2F0b3IgPiAubWljcm8td2lyZS0xIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGhlaWdodDogNnB4O1xyXG4gICAgd2lkdGg6IDI3cHg7XHJcbiAgICBsZWZ0OiAxNHB4O1xyXG4gICAgdG9wOiBjYWxjKDUwJSAtIDNweCk7XHJcbiAgICB6LWluZGV4OiA0O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxufVxyXG4uaW5kaWNhdG9yID4gLm1pY3JvLXdpcmUtMiB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBoZWlnaHQ6IDZweDtcclxuICAgIHdpZHRoOiAyN3B4O1xyXG4gICAgbGVmdDogNTJweDtcclxuICAgIHRvcDogY2FsYyg1MCUgLSAzcHgpO1xyXG4gICAgei1pbmRleDogNDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbn0iXX0= */ diff --git a/dist/css/completed/8/hamburger.css b/dist/css/completed/8/hamburger.css deleted file mode 100644 index 7727614..0000000 --- a/dist/css/completed/8/hamburger.css +++ /dev/null @@ -1,2 +0,0 @@ -.hamburger{padding:15px 15px;display:inline-block;cursor:pointer;-webkit-transition-property:opacity,-webkit-filter;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;-webkit-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:linear;transition-timing-function:linear;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible}.hamburger:hover{opacity:.7}.hamburger.is-active:hover{opacity:.7}.hamburger.is-active .hamburger-inner,.hamburger.is-active .hamburger-inner::after,.hamburger.is-active .hamburger-inner::before{background-color:#534741}.hamburger-box{width:40px;height:24px;display:inline-block;position:relative}.hamburger-inner{display:block;top:50%;margin-top:-2px}.hamburger-inner,.hamburger-inner::after,.hamburger-inner::before{width:40px;height:4px;background-color:#534741;border-radius:4px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.hamburger-inner::after,.hamburger-inner::before{content:"";display:block}.hamburger-inner::before{top:-10px}.hamburger-inner::after{bottom:-10px}.hamburger--spring .hamburger-inner{top:2px;-webkit-transition:background-color 0s .13s linear;transition:background-color 0s .13s linear}.hamburger--spring .hamburger-inner::before{top:10px;-webkit-transition:top .1s .2s cubic-bezier(.33333,.66667,.66667,1),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .1s .2s cubic-bezier(.33333,.66667,.66667,1),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .1s .2s cubic-bezier(.33333,.66667,.66667,1),transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .1s .2s cubic-bezier(.33333,.66667,.66667,1),transform .13s cubic-bezier(.55,.055,.675,.19),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19)}.hamburger--spring .hamburger-inner::after{top:20px;-webkit-transition:top .2s .2s cubic-bezier(.33333,.66667,.66667,1),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .2s .2s cubic-bezier(.33333,.66667,.66667,1),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .2s .2s cubic-bezier(.33333,.66667,.66667,1),transform .13s cubic-bezier(.55,.055,.675,.19);transition:top .2s .2s cubic-bezier(.33333,.66667,.66667,1),transform .13s cubic-bezier(.55,.055,.675,.19),-webkit-transform .13s cubic-bezier(.55,.055,.675,.19)}.hamburger--spring.is-active .hamburger-inner{-webkit-transition-delay:.22s;transition-delay:.22s;background-color:transparent!important}.hamburger--spring.is-active .hamburger-inner::before{top:0;-webkit-transition:top .1s .15s cubic-bezier(.33333,0,.66667,.33333),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .1s .15s cubic-bezier(.33333,0,.66667,.33333),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .1s .15s cubic-bezier(.33333,0,.66667,.33333),transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .1s .15s cubic-bezier(.33333,0,.66667,.33333),transform .13s .22s cubic-bezier(.215,.61,.355,1),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,10px,0) rotate(45deg);transform:translate3d(0,10px,0) rotate(45deg)}.hamburger--spring.is-active .hamburger-inner::after{top:0;-webkit-transition:top .2s cubic-bezier(.33333,0,.66667,.33333),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .2s cubic-bezier(.33333,0,.66667,.33333),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .2s cubic-bezier(.33333,0,.66667,.33333),transform .13s .22s cubic-bezier(.215,.61,.355,1);transition:top .2s cubic-bezier(.33333,0,.66667,.33333),transform .13s .22s cubic-bezier(.215,.61,.355,1),-webkit-transform .13s .22s cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,10px,0) rotate(-45deg);transform:translate3d(0,10px,0) rotate(-45deg)} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC84L2hhbWJ1cmdlci5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FDSSxRQUFBLEtBQUEsS0FDQSxRQUFBLGFBQ0EsT0FBQSxRQUNBLDRCQUFBLE9BQUEsQ0FBQSxlQUFBLG9CQUFBLE9BQUEsQ0FBQSxlQUFBLG9CQUFBLE9BQUEsQ0FBQSxPQUFBLG9CQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsZUFDQSw0QkFBQSxLQUFBLG9CQUFBLEtBQ0EsbUNBQUEsT0FBQSwyQkFBQSxPQUNBLEtBQUEsUUFDQSxNQUFBLFFBQ0EsZUFBQSxLQUNBLGlCQUFBLFlBQ0EsT0FBQSxFQUNBLE9BQUEsRUFDQSxTQUFBLFFBR0osaUJBQ0ksUUFBQSxHQUdKLDJCQUNJLFFBQUEsR0FHSixzQ0FPQSw2Q0FEQSw4Q0FISSxpQkFBQSxRQUdKLGVBQ0ksTUFBQSxLQUNBLE9BQUEsS0FDQSxRQUFBLGFBQ0EsU0FBQSxTQUdKLGlCQUNJLFFBQUEsTUFDQSxJQUFBLElBQ0EsV0FBQSxLQUdKLGlCQU9BLHdCQURBLHlCQUhJLE1BQUEsS0FDQSxPQUFBLElBQ0EsaUJBQUEsUUFDQSxjQUFBLElBQ0EsU0FBQSxTQUNBLDRCQUFBLGtCQUFBLG9CQUFBLGtCQUFBLG9CQUFBLFVBQUEsb0JBQUEsU0FBQSxDQUFBLGtCQUNBLDRCQUFBLEtBQUEsb0JBQUEsS0FDQSxtQ0FBQSxLQUFBLDJCQUFBLEtBY0osd0JBWEEseUJBRUksUUFBQSxHQUNBLFFBQUEsTUFHSix5QkFDSSxJQUFBLE1BR0osd0JBQ0ksT0FBQSxNQU1KLG9DQUNJLElBQUEsSUFDQSxtQkFBQSxpQkFBQSxHQUFBLEtBQUEsT0FBQSxXQUFBLGlCQUFBLEdBQUEsS0FBQSxPQUdKLDRDQUNJLElBQUEsS0FDQSxtQkFBQSxJQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLGtCQUFBLEtBQUEsZ0NBQUEsV0FBQSxJQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLGtCQUFBLEtBQUEsZ0NBQUEsV0FBQSxJQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLFVBQUEsS0FBQSxnQ0FBQSxXQUFBLElBQUEsSUFBQSxJQUFBLG9DQUFBLENBQUEsVUFBQSxLQUFBLCtCQUFBLENBQUEsa0JBQUEsS0FBQSxnQ0FHSiwyQ0FDSSxJQUFBLEtBQ0EsbUJBQUEsSUFBQSxJQUFBLElBQUEsb0NBQUEsQ0FBQSxrQkFBQSxLQUFBLGdDQUFBLFdBQUEsSUFBQSxJQUFBLElBQUEsb0NBQUEsQ0FBQSxrQkFBQSxLQUFBLGdDQUFBLFdBQUEsSUFBQSxJQUFBLElBQUEsb0NBQUEsQ0FBQSxVQUFBLEtBQUEsZ0NBQUEsV0FBQSxJQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLFVBQUEsS0FBQSwrQkFBQSxDQUFBLGtCQUFBLEtBQUEsZ0NBR0osOENBQ0kseUJBQUEsS0FBQSxpQkFBQSxLQUNBLGlCQUFBLHNCQUdKLHNEQUNJLElBQUEsRUFDQSxtQkFBQSxJQUFBLElBQUEsS0FBQSxvQ0FBQSxDQUFBLGtCQUFBLEtBQUEsS0FBQSw4QkFBQSxXQUFBLElBQUEsSUFBQSxLQUFBLG9DQUFBLENBQUEsa0JBQUEsS0FBQSxLQUFBLDhCQUFBLFdBQUEsSUFBQSxJQUFBLEtBQUEsb0NBQUEsQ0FBQSxVQUFBLEtBQUEsS0FBQSw4QkFBQSxXQUFBLElBQUEsSUFBQSxLQUFBLG9DQUFBLENBQUEsVUFBQSxLQUFBLEtBQUEsNkJBQUEsQ0FBQSxrQkFBQSxLQUFBLEtBQUEsOEJBQ0Esa0JBQUEsc0JBQUEsY0FBQSxVQUFBLHNCQUFBLGNBR0oscURBQ0ksSUFBQSxFQUNBLG1CQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLGtCQUFBLEtBQUEsS0FBQSw4QkFBQSxXQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLGtCQUFBLEtBQUEsS0FBQSw4QkFBQSxXQUFBLElBQUEsSUFBQSxvQ0FBQSxDQUFBLFVBQUEsS0FBQSxLQUFBLDhCQUFBLFdBQUEsSUFBQSxJQUFBLG9DQUFBLENBQUEsVUFBQSxLQUFBLEtBQUEsNkJBQUEsQ0FBQSxrQkFBQSxLQUFBLEtBQUEsOEJBQ0Esa0JBQUEsc0JBQUEsZUFBQSxVQUFBLHNCQUFBIiwiZmlsZSI6ImNvbXBsZXRlZC84L2hhbWJ1cmdlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuaGFtYnVyZ2VyIHtcclxuICAgIHBhZGRpbmc6IDE1cHggMTVweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHksIGZpbHRlcjtcclxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzO1xyXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcclxuICAgIGZvbnQ6IGluaGVyaXQ7XHJcbiAgICBjb2xvcjogaW5oZXJpdDtcclxuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXI6IDA7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxufVxyXG5cclxuLmhhbWJ1cmdlcjpob3ZlciB7XHJcbiAgICBvcGFjaXR5OiAwLjc7XHJcbn1cclxuXHJcbi5oYW1idXJnZXIuaXMtYWN0aXZlOmhvdmVyIHtcclxuICAgIG9wYWNpdHk6IDAuNztcclxufVxyXG5cclxuLmhhbWJ1cmdlci5pcy1hY3RpdmUgLmhhbWJ1cmdlci1pbm5lcixcclxuLmhhbWJ1cmdlci5pcy1hY3RpdmUgLmhhbWJ1cmdlci1pbm5lcjo6YmVmb3JlLFxyXG4uaGFtYnVyZ2VyLmlzLWFjdGl2ZSAuaGFtYnVyZ2VyLWlubmVyOjphZnRlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM0NzQxO1xyXG59XHJcblxyXG4uaGFtYnVyZ2VyLWJveCB7XHJcbiAgICB3aWR0aDogNDBweDtcclxuICAgIGhlaWdodDogMjRweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmhhbWJ1cmdlci1pbm5lciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbWFyZ2luLXRvcDogLTJweDtcclxufVxyXG5cclxuLmhhbWJ1cmdlci1pbm5lcixcclxuLmhhbWJ1cmdlci1pbm5lcjo6YmVmb3JlLFxyXG4uaGFtYnVyZ2VyLWlubmVyOjphZnRlciB7XHJcbiAgICB3aWR0aDogNDBweDtcclxuICAgIGhlaWdodDogNHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzUzNDc0MTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcclxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzO1xyXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XHJcbn1cclxuXHJcbi5oYW1idXJnZXItaW5uZXI6OmJlZm9yZSxcclxuLmhhbWJ1cmdlci1pbm5lcjo6YWZ0ZXIge1xyXG4gICAgY29udGVudDogXCJcIjtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4uaGFtYnVyZ2VyLWlubmVyOjpiZWZvcmUge1xyXG4gICAgdG9wOiAtMTBweDtcclxufVxyXG5cclxuLmhhbWJ1cmdlci1pbm5lcjo6YWZ0ZXIge1xyXG4gICAgYm90dG9tOiAtMTBweDtcclxufVxyXG5cclxuLypcclxuICAgKiBTcHJpbmdcclxuICAgKi9cclxuLmhhbWJ1cmdlci0tc3ByaW5nIC5oYW1idXJnZXItaW5uZXIge1xyXG4gICAgdG9wOiAycHg7XHJcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDBzIDAuMTNzIGxpbmVhcjtcclxufVxyXG5cclxuLmhhbWJ1cmdlci0tc3ByaW5nIC5oYW1idXJnZXItaW5uZXI6OmJlZm9yZSB7XHJcbiAgICB0b3A6IDEwcHg7XHJcbiAgICB0cmFuc2l0aW9uOiB0b3AgMC4xcyAwLjJzIGN1YmljLWJlemllcigwLjMzMzMzLCAwLjY2NjY3LCAwLjY2NjY3LCAxKSwgdHJhbnNmb3JtIDAuMTNzIGN1YmljLWJlemllcigwLjU1LCAwLjA1NSwgMC42NzUsIDAuMTkpO1xyXG59XHJcblxyXG4uaGFtYnVyZ2VyLS1zcHJpbmcgLmhhbWJ1cmdlci1pbm5lcjo6YWZ0ZXIge1xyXG4gICAgdG9wOiAyMHB4O1xyXG4gICAgdHJhbnNpdGlvbjogdG9wIDAuMnMgMC4ycyBjdWJpYy1iZXppZXIoMC4zMzMzMywgMC42NjY2NywgMC42NjY2NywgMSksIHRyYW5zZm9ybSAwLjEzcyBjdWJpYy1iZXppZXIoMC41NSwgMC4wNTUsIDAuNjc1LCAwLjE5KTtcclxufVxyXG5cclxuLmhhbWJ1cmdlci0tc3ByaW5nLmlzLWFjdGl2ZSAuaGFtYnVyZ2VyLWlubmVyIHtcclxuICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMjJzO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmhhbWJ1cmdlci0tc3ByaW5nLmlzLWFjdGl2ZSAuaGFtYnVyZ2VyLWlubmVyOjpiZWZvcmUge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgdHJhbnNpdGlvbjogdG9wIDAuMXMgMC4xNXMgY3ViaWMtYmV6aWVyKDAuMzMzMzMsIDAsIDAuNjY2NjcsIDAuMzMzMzMpLCB0cmFuc2Zvcm0gMC4xM3MgMC4yMnMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDEwcHgsIDApIHJvdGF0ZSg0NWRlZyk7XHJcbn1cclxuXHJcbi5oYW1idXJnZXItLXNwcmluZy5pcy1hY3RpdmUgLmhhbWJ1cmdlci1pbm5lcjo6YWZ0ZXIge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgdHJhbnNpdGlvbjogdG9wIDAuMnMgY3ViaWMtYmV6aWVyKDAuMzMzMzMsIDAsIDAuNjY2NjcsIDAuMzMzMzMpLCB0cmFuc2Zvcm0gMC4xM3MgMC4yMnMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDEwcHgsIDApIHJvdGF0ZSgtNDVkZWcpO1xyXG59Il19 */ diff --git a/dist/css/completed/8/style.css b/dist/css/completed/8/style.css deleted file mode 100644 index 782efc9..0000000 --- a/dist/css/completed/8/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Press+Start+2P&subset=cyrillic);@import url(https://fonts.googleapis.com/css?family=Roboto);@font-face{font-family:'Izhitsa Cyrillic';src:url(../../completed/8/fonts/izhitsa-cyrillic.ttf)}body,html{margin:0;height:100%;width:100%;position:relative;font-family:Roboto,sans-serif;overflow:hidden}.header{background-color:#c2e9e9;height:50px;position:relative;z-index:3;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.header>img{margin:2px 0 2px 60px;cursor:pointer}.header>button{outline:0;margin-top:-2px}.new-game>svg{position:absolute;height:100%;width:100%;min-width:1920px;min-height:1080px;left:0;bottom:0;z-index:10}@media (max-width:1920px){.new-game>svg{left:calc((100vw - 1920px)/ 2)}}.go-up{-webkit-transition:bottom 3s ease;transition:bottom 3s ease;bottom:100%!important}.go-down{-webkit-transition:bottom 3s ease;transition:bottom 3s ease;bottom:-100%!important}.svg-bombs{position:absolute}.menu{position:absolute;height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:2;background-color:#006400;top:0;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.menu-shown{-webkit-transition:top .6s ease-out,background-color .3s linear .45s;transition:top .6s ease-out,background-color .3s linear .45s}.menu-hidden{top:-100%;background-color:transparent;-webkit-transition:top .6s ease-in,background-color .2s linear;transition:top .6s ease-in,background-color .2s linear}.menu>div{position:relative;height:450px;width:400px;background:#fff;border-radius:20px 20px 4px 4px;-webkit-box-shadow:0 0 32px 1px #000;box-shadow:0 0 32px 1px #000;background-image:url(../../completed/8/img/background.svg);background-repeat:no-repeat;background-position:center;background-origin:border-box;background-size:101%}.menu-close{position:absolute;color:#e02c2c;top:10px;right:8px;cursor:pointer}.menu-close:hover{color:#b12929}.menu-content{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;padding:50px;padding-bottom:20px}.menu-content>img{width:80%;-ms-flex-item-align:center;align-self:center;margin-top:-40px}.menu-content>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.area-size{margin-top:30px}.menu-content label{font-size:1.4rem}.area-size>label::before{content:"🗒️"}.area-size>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin:10px 0}.menu-content input{height:24px;width:30%;font-family:Roboto,sans-serif;font-size:1.2rem;text-align:center;-webkit-transform:scaleY(1.2);-ms-transform:scaleY(1.2);transform:scaleY(1.2)}.area-size>div>span{font-size:1.2rem;line-height:34px;margin:0 4px 0 6px;-webkit-transform:scaleY(1.2);-ms-transform:scaleY(1.2);transform:scaleY(1.2)}.bombs>label::before{content:"💣"}.menu-content .bombs>input{margin-top:10px}.menu-content>button{font-family:"Press Start 2P",cursive;font-size:1.4rem;height:60px;width:180px;-ms-flex-item-align:center;align-self:center;margin-top:30px;background:#af6f41;border:none;outline:0;cursor:pointer;border-radius:10px;-webkit-animation:heartbeat 3s ease-in-out infinite both;animation:heartbeat 3s ease-in-out infinite both}.menu-content>button:hover{background:#daa077}@-webkit-keyframes heartbeat{from{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:center center;transform-origin:center center;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}5%{-webkit-transform:scale(.91);transform:scale(.91);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}8%{-webkit-transform:scale(.98);transform:scale(.98);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}16%{-webkit-transform:scale(.87);transform:scale(.87);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}22%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes heartbeat{from{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:center center;transform-origin:center center;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}5%{-webkit-transform:scale(.91);transform:scale(.91);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}8%{-webkit-transform:scale(.98);transform:scale(.98);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}16%{-webkit-transform:scale(.87);transform:scale(.87);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}22%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.game{height:calc(100% - 50px);background:#fff4a3;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;-moz-user-select:none;position:relative}.game>span{font-size:8rem;color:#77a4c5;margin:0 40px;text-align:center}.board-container{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;width:100%;overflow:auto;position:relative;text-align:center;line-height:100%;white-space:nowrap}.board-container::before{content:"";display:inline-block;height:100%;vertical-align:middle}.game .board{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:100px}.game .board>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.board .cell{-webkit-box-sizing:border-box;box-sizing:border-box;height:26px;width:26px;-webkit-box-flex:0;-ms-flex:0 0 26px;flex:0 0 26px;line-height:26px;border:1px solid #444;text-align:center;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.board .unknown{background-color:#93ef81;-webkit-transition:background-color 1s linear;transition:background-color 1s linear}.board .unknown:hover:not([class*=flag]){background-color:#49af34;-webkit-transition:none;transition:none}.board .safely{background-color:#eebf8a;-webkit-transition:none;transition:none}.board .bomb{background-color:red;-webkit-transition:none;transition:none}.board .flag{background-color:#bebebe;-webkit-transition:none;transition:none}.invisible{display:none!important}.game-bar{height:60px;width:300px;border-radius:30px;border:1px solid #222;position:absolute;bottom:0;left:calc(50% - 150px);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#eee;font-size:1.4rem}.game-bar-drag{-webkit-box-sizing:border-box;box-sizing:border-box;padding:14px;width:52px;cursor:move}.game-bar-drag>img{width:21px}.game-over-popup{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:400px;height:140px;background:#c2e9e9;z-index:10;text-align:center;border-radius:20px;-webkit-box-shadow:0 0 10px 0 #000;box-shadow:0 0 10px 0 #000}.game-over-popup>span{font-family:Roboto,serif;font-size:2.4rem;margin-top:10px;margin-bottom:10px;color:#222}.game-over-popup>img{width:60px;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;cursor:pointer}.game-over-popup>img:hover{-webkit-transform:scale(1.04);-ms-transform:scale(1.04);transform:scale(1.04)}.game-win-popup{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:420px;height:120px;background:#8cc63f;z-index:10;text-align:center;border-radius:20px;-webkit-box-shadow:0 0 10px 0 #000;box-shadow:0 0 10px 0 #000;-webkit-box-sizing:border-box;box-sizing:border-box;padding:18px 0}.game-win-popup>span{font-family:Roboto,serif;font-size:2rem;color:#222} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC84L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRkFDQSw0REFDQSxXQUNJLFlBQUEsbUJBQ0EsSUFBQSxrREFJSixLQURBLEtBRUksT0FBQSxFQUNBLE9BQUEsS0FDQSxNQUFBLEtBQ0EsU0FBQSxTQUNBLFlBQUEsTUFBQSxDQUFBLFdBQ0EsU0FBQSxPQUVKLFFBQ0ksaUJBQUEsUUFDQSxPQUFBLEtBQ0EsU0FBQSxTQUNBLFFBQUEsRUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BQ0EsaUJBQUEsUUFBQSxjQUFBLFFBQUEsZ0JBQUEsY0FHSixZQUNJLE9BQUEsSUFBQSxFQUFBLElBQUEsS0FDQSxPQUFBLFFBR0osZUFDSSxRQUFBLEVBQ0EsV0FBQSxLQUVKLGNBQ0ksU0FBQSxTQUNBLE9BQUEsS0FDQSxNQUFBLEtBQ0EsVUFBQSxPQUNBLFdBQUEsT0FDQSxLQUFBLEVBQ0EsT0FBQSxFQUNBLFFBQUEsR0FFSiwwQkFDSSxjQUNJLEtBQUEsMkJBUVIsT0FDSSxtQkFBQSxPQUFBLEdBQUEsS0FBQSxXQUFBLE9BQUEsR0FBQSxLQUNBLE9BQUEsZUFFSixTQUNJLG1CQUFBLE9BQUEsR0FBQSxLQUFBLFdBQUEsT0FBQSxHQUFBLEtBQ0EsT0FBQSxnQkFFSixXQUNJLFNBQUEsU0FHSixNQUNJLFNBQUEsU0FDQSxPQUFBLEtBQ0EsTUFBQSxLQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLFFBQUEsRUFDQSxpQkFBQSxRQUNBLElBQUEsRUFDQSxpQkFBQSxLQUNBLG9CQUFBLEtBQUEsZ0JBQUEsS0FBQSxZQUFBLEtBRUosWUFDSSxtQkFBQSxJQUFBLElBQUEsUUFBQSxDQWtCSSxpQkFBaUIsSUFBSSxPQUFPLEtBbEJoQyxXQUFBLElBQUEsSUFBQSxRQUFBLENBb0JJLGlCQUFpQixJQUFJLE9BQU8sS0FoQnBDLGFBQ0ksSUFBQSxNQUNBLGlCQUFBLFlBQ0EsbUJBQUEsSUFBQSxJQUFBLE9BQUEsQ0FvQkksaUJBQWlCLElBQUksT0FwQnpCLFdBQUEsSUFBQSxJQUFBLE9BQUEsQ0FzQkksaUJBQWlCLElBQUksT0FsQjdCLFVBQ0ksU0FBQSxTQUNBLE9BQUEsTUFDQSxNQUFBLE1BQ0EsV0FBQSxLQUNBLGNBQUEsS0FBQSxLQUFBLElBQUEsSUFDQSxtQkFBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLEtBQUEsV0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLEtBQ0EsaUJBQUEsMENBQ0Esa0JBQUEsVUFDQSxvQkFBQSxPQUNBLGtCQUFBLFdBQ0EsZ0JBQUEsS0FHSixZQUNJLFNBQUEsU0FDQSxNQUFBLFFBQ0EsSUFBQSxLQUNBLE1BQUEsSUFDQSxPQUFBLFFBR0osa0JBQ0ksTUFBQSxRQUdKLGNBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0EsUUFBQSxLQUNBLGVBQUEsS0FHSixrQkFDSSxNQUFBLElBQ0Esb0JBQUEsT0FBQSxXQUFBLE9BQ0EsV0FBQSxNQUdKLGtCQUNJLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FHSixXQUNJLFdBQUEsS0FHSixvQkFDSSxVQUFBLE9BR0oseUJBQ0ksUUFBQSxNQUdKLGVBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUNBLE9BQUEsS0FBQSxFQUdKLG9CQUNJLE9BQUEsS0FDQSxNQUFBLElBQ0EsWUFBQSxNQUFBLENBQUEsV0FDQSxVQUFBLE9BQ0EsV0FBQSxPQUNBLGtCQUFBLFlBQUEsY0FBQSxZQUFBLFVBQUEsWUFHSixvQkFDSSxVQUFBLE9BQ0EsWUFBQSxLQUNBLE9BQUEsRUFBQSxJQUFBLEVBQUEsSUFDQSxrQkFBQSxZQUFBLGNBQUEsWUFBQSxVQUFBLFlBR0oscUJBQ0ksUUFBQSxLQUdKLDJCQUNJLFdBQUEsS0FHSixxQkFDSSxZQUFBLGdCQUFBLENBQUEsUUFDQSxVQUFBLE9BQ0EsT0FBQSxLQUNBLE1BQUEsTUFDQSxvQkFBQSxPQUFBLFdBQUEsT0FDQSxXQUFBLEtBQ0EsV0FBQSxRQUNBLE9BQUEsS0FDQSxRQUFBLEVBQ0EsT0FBQSxRQUNBLGNBQUEsS0FDQSxrQkFBQSxVQUFBLEdBQUEsWUFBQSxTQUFBLEtBQUEsVUFBQSxVQUFBLEdBQUEsWUFBQSxTQUFBLEtBR0osMkJBQ0ksV0FBQSxRQUdKLDZCQUNJLEtBQ0ksa0JBQUEsU0FBQSxVQUFBLFNBQ0EseUJBQUEsT0FBQSxPQUFBLGlCQUFBLE9BQUEsT0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFNBR0osR0FDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxRQUFBLDBCQUFBLFFBR0osR0FDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFNBR0osSUFDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxRQUFBLDBCQUFBLFFBR0osSUFDSSxrQkFBQSxTQUFBLFVBQUEsU0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFVBeEJSLHFCQUNJLEtBQ0ksa0JBQUEsU0FBQSxVQUFBLFNBQ0EseUJBQUEsT0FBQSxPQUFBLGlCQUFBLE9BQUEsT0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFNBR0osR0FDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxRQUFBLDBCQUFBLFFBR0osR0FDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFNBR0osSUFDSSxrQkFBQSxXQUFBLFVBQUEsV0FDQSxrQ0FBQSxRQUFBLDBCQUFBLFFBR0osSUFDSSxrQkFBQSxTQUFBLFVBQUEsU0FDQSxrQ0FBQSxTQUFBLDBCQUFBLFVBSVIsTUFDSSxPQUFBLGtCQUNBLFdBQUEsUUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxpQkFBQSxPQUFBLGNBQUEsT0FBQSxnQkFBQSxPQUNBLGtCQUFBLE9BQUEsZUFBQSxPQUFBLFlBQUEsT0FDQSxvQkFBQSxLQUFBLGdCQUFBLEtBQUEsWUFBQSxLQUNBLGlCQUFBLEtBQ0EsU0FBQSxTQUdKLFdBQ0ksVUFBQSxLQUNBLE1BQUEsUUFDQSxPQUFBLEVBQUEsS0FDQSxXQUFBLE9BR0osaUJBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxTQUFBLEtBQ0EsU0FBQSxTQUNBLFdBQUEsT0FDQSxZQUFBLEtBQ0EsWUFBQSxPQUVKLHlCQUNJLFFBQUEsR0FDQSxRQUFBLGFBQ0EsT0FBQSxLQUNBLGVBQUEsT0FFSixhQUNJLFFBQUEsbUJBQUEsUUFBQSxtQkFBQSxRQUFBLFlBQ0EsZUFBQSxPQUNBLG1CQUFBLFNBQUEsc0JBQUEsT0FBQSxjQUFBLE9BQUEsT0FBQSxVQUFBLE9BQUEsT0FDQSxpQkFBQSxPQUFBLGNBQUEsT0FBQSxnQkFBQSxPQUNBLGtCQUFBLE9BQUEsZUFBQSxPQUFBLFlBQUEsT0FDQSxPQUFBLE1BRUosaUJBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUdKLGFBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsT0FBQSxLQUNBLE1BQUEsS0FDQSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxFQUFBLEtBQUEsS0FBQSxFQUFBLEVBQUEsS0FDQSxZQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxXQUFBLE9BQ0EsaUJBQUEsS0FDQSxvQkFBQSxLQUFBLGdCQUFBLEtBQUEsWUFBQSxLQUVKLGdCQUNJLGlCQUFBLFFBQ0EsbUJBQUEsaUJBQUEsR0FBQSxPQUFBLFdBQUEsaUJBQUEsR0FBQSxPQUVKLHlDQUNJLGlCQUFBLFFBQ0EsbUJBQUEsS0FBQSxXQUFBLEtBRUosZUFDSSxpQkFBQSxRQUNBLG1CQUFBLEtBQUEsV0FBQSxLQUVKLGFBQ0ksaUJBQUEsSUFDQSxtQkFBQSxLQUFBLFdBQUEsS0FFSixhQUNJLGlCQUFBLFFBQ0EsbUJBQUEsS0FBQSxXQUFBLEtBR0osV0FDSSxRQUFBLGVBRUosVUFDSSxPQUFBLEtBQ0EsTUFBQSxNQUNBLGNBQUEsS0FDQSxPQUFBLElBQUEsTUFBQSxLQUNBLFNBQUEsU0FDQSxPQUFBLEVBQ0EsS0FBQSxrQkFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BQ0EsY0FBQSxXQUFBLGdCQUFBLGFBQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLGlCQUFBLEtBQ0EsVUFBQSxPQUVKLGVBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsUUFBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEtBRUosbUJBQ0ksTUFBQSxLQUVKLGlCQUNJLFNBQUEsU0FDQSxLQUFBLElBQ0EsSUFBQSxJQUNBLGtCQUFBLHFCQUFBLGNBQUEscUJBQUEsVUFBQSxxQkFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUNBLE1BQUEsTUFDQSxPQUFBLE1BQ0EsV0FBQSxRQUNBLFFBQUEsR0FDQSxXQUFBLE9BQ0EsY0FBQSxLQUNBLG1CQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsS0FBQSxXQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsS0FFSixzQkFDSSxZQUFBLE1BQUEsQ0FBQSxNQUNBLFVBQUEsT0FDQSxXQUFBLEtBQ0EsY0FBQSxLQUNBLE1BQUEsS0FFSixxQkFDSSxNQUFBLEtBQ0EseUJBQUEsT0FBQSxxQkFBQSxPQUFBLGlCQUFBLE9BQ0EsT0FBQSxRQUVKLDJCQUNJLGtCQUFBLFlBQUEsY0FBQSxZQUFBLFVBQUEsWUFFSixnQkFDSSxTQUFBLFNBQ0EsS0FBQSxJQUNBLElBQUEsSUFDQSxrQkFBQSxxQkFBQSxjQUFBLHFCQUFBLFVBQUEscUJBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGtCQUFBLE9BQUEsZUFBQSxPQUFBLFlBQUEsT0FDQSxpQkFBQSxRQUFBLGNBQUEsUUFBQSxnQkFBQSxjQUNBLE1BQUEsTUFDQSxPQUFBLE1BQ0EsV0FBQSxRQUNBLFFBQUEsR0FDQSxXQUFBLE9BQ0EsY0FBQSxLQUNBLG1CQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsS0FBQSxXQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsS0FDQSxtQkFBQSxXQUFBLFdBQUEsV0FDQSxRQUFBLEtBQUEsRUFFSixxQkFDSSxZQUFBLE1BQUEsQ0FBQSxNQUNBLFVBQUEsS0FDQSxNQUFBIiwiZmlsZSI6ImNvbXBsZXRlZC84L3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9UHJlc3MrU3RhcnQrMlAmc3Vic2V0PWN5cmlsbGljJyk7XHJcbkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvJyk7XHJcbkBmb250LWZhY2Uge1xyXG4gICAgZm9udC1mYW1pbHk6ICdJemhpdHNhIEN5cmlsbGljJztcclxuICAgIHNyYzogdXJsKCdmb250cy9pemhpdHNhLWN5cmlsbGljLnR0ZicpO1xyXG59XHJcblxyXG5odG1sLFxyXG5ib2R5IHtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG4uaGVhZGVyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNjMmU5ZTk7XHJcbiAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAzO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxufVxyXG5cclxuLmhlYWRlciA+IGltZyB7XHJcbiAgICBtYXJnaW46IDJweCAwIDJweCA2MHB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4uaGVhZGVyPmJ1dHRvbiB7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgbWFyZ2luLXRvcDogLTJweDtcclxufVxyXG4ubmV3LWdhbWUgPiBzdmcge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtaW4td2lkdGg6IDE5MjBweDtcclxuICAgIG1pbi1oZWlnaHQ6IDEwODBweDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICB6LWluZGV4OiAxMDtcclxufVxyXG5AbWVkaWEgKG1heC13aWR0aDogMTkyMHB4KSB7XHJcbiAgICAubmV3LWdhbWUgPiBzdmcge1xyXG4gICAgICAgIGxlZnQ6IGNhbGMoKDEwMHZ3IC0gMTkyMHB4KSAvIDIpO1xyXG4gICAgfVxyXG4gfVxyXG4vKiBAbWVkaWEgKG1heC1oZWlnaHQ6IDcyMHB4KSB7XHJcbiAgICAubmV3LWdhbWUge1xyXG4gICAgICAgIGJvdHRvbTogY2FsYygoMTAwdmggLSAxMDgwcHgpIC8gMik7XHJcbiAgICB9XHJcbn0gKi9cclxuLmdvLXVwIHtcclxuICAgIHRyYW5zaXRpb246IGJvdHRvbSAzcyBlYXNlO1xyXG4gICAgYm90dG9tOiAxMDAlICFpbXBvcnRhbnQ7XHJcbn1cclxuLmdvLWRvd24ge1xyXG4gICAgdHJhbnNpdGlvbjogYm90dG9tIDNzIGVhc2U7XHJcbiAgICBib3R0b206IC0xMDAlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnN2Zy1ib21icyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbn1cclxuXHJcbi5tZW51IHsgXHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB6LWluZGV4OiAyO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2dyZWVuO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcbi5tZW51LXNob3duIHtcclxuICAgIHRyYW5zaXRpb246IHRvcCAuNnMgZWFzZS1vdXQsXHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAuM3MgbGluZWFyIC40NXM7XHJcblxyXG59XHJcbi5tZW51LWhpZGRlbiB7XHJcbiAgICB0b3A6IC0xMDAlO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICB0cmFuc2l0aW9uOiB0b3AgLjZzIGVhc2UtaW4sXHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAuMnMgbGluZWFyO1xyXG59XHJcblxyXG4ubWVudT5kaXYge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgaGVpZ2h0OiA0NTBweDtcclxuICAgIHdpZHRoOiA0MDBweDtcclxuICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4IDIwcHggNHB4IDRweDtcclxuICAgIGJveC1zaGFkb3c6IDAgMCAzMnB4IDFweCBibGFjaztcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltZy9iYWNrZ3JvdW5kLnN2Z1wiKTtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogYm9yZGVyLWJveDtcclxuICAgIGJhY2tncm91bmQtc2l6ZTogMTAxJTtcclxufVxyXG5cclxuLm1lbnUtY2xvc2Uge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgY29sb3I6ICNlMDJjMmM7XHJcbiAgICB0b3A6IDEwcHg7XHJcbiAgICByaWdodDogOHB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4ubWVudS1jbG9zZTpob3ZlciB7XHJcbiAgICBjb2xvcjogI2IxMjkyOTtcclxufVxyXG5cclxuLm1lbnUtY29udGVudCB7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgcGFkZGluZzogNTBweDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xyXG59XHJcblxyXG4ubWVudS1jb250ZW50PmltZyB7XHJcbiAgICB3aWR0aDogODAlO1xyXG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xyXG4gICAgbWFyZ2luLXRvcDogLTQwcHg7XHJcbn1cclxuXHJcbi5tZW51LWNvbnRlbnQ+ZGl2IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbn1cclxuXHJcbi5hcmVhLXNpemUge1xyXG4gICAgbWFyZ2luLXRvcDogMzBweDtcclxufVxyXG5cclxuLm1lbnUtY29udGVudCBsYWJlbCB7XHJcbiAgICBmb250LXNpemU6IDEuNHJlbTtcclxufVxyXG5cclxuLmFyZWEtc2l6ZT5sYWJlbDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwi8J+Xku+4j1wiO1xyXG59XHJcblxyXG4uYXJlYS1zaXplPmRpdiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gICAgbWFyZ2luOiAxMHB4IDA7XHJcbn1cclxuXHJcbi5tZW51LWNvbnRlbnQgaW5wdXQge1xyXG4gICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgd2lkdGg6IDMwJTtcclxuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjtcclxuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZVkoMS4yKTtcclxufVxyXG5cclxuLmFyZWEtc2l6ZT5kaXY+c3BhbiB7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xyXG4gICAgbWFyZ2luOiAwIDRweCAwIDZweDtcclxuICAgIHRyYW5zZm9ybTogc2NhbGVZKDEuMik7XHJcbn1cclxuXHJcbi5ib21icz5sYWJlbDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwi8J+So1wiO1xyXG59XHJcblxyXG4ubWVudS1jb250ZW50IC5ib21icz5pbnB1dCB7XHJcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG59XHJcblxyXG4ubWVudS1jb250ZW50PmJ1dHRvbiB7XHJcbiAgICBmb250LWZhbWlseTogXCJQcmVzcyBTdGFydCAyUFwiLCBjdXJzaXZlO1xyXG4gICAgZm9udC1zaXplOiAxLjRyZW07XHJcbiAgICBoZWlnaHQ6IDYwcHg7XHJcbiAgICB3aWR0aDogMTgwcHg7XHJcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG4gICAgYmFja2dyb3VuZDogI2FmNmY0MTtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgYW5pbWF0aW9uOiBoZWFydGJlYXQgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGUgYm90aDtcclxufVxyXG5cclxuLm1lbnUtY29udGVudD5idXR0b246aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZDogI2RhYTA3NztcclxufVxyXG5cclxuQGtleWZyYW1lcyBoZWFydGJlYXQge1xyXG4gICAgZnJvbSB7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcclxuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xyXG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIDUlIHtcclxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTEpO1xyXG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47XHJcbiAgICB9XHJcblxyXG4gICAgOCUge1xyXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7XHJcbiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgMTYlIHtcclxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuODcpO1xyXG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47XHJcbiAgICB9XHJcblxyXG4gICAgMjIlIHtcclxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xyXG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xyXG4gICAgfVxyXG59XHJcblxyXG4uZ2FtZSB7XHJcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDUwcHgpO1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZjRhMztcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5nYW1lPnNwYW4ge1xyXG4gICAgZm9udC1zaXplOiA4cmVtO1xyXG4gICAgY29sb3I6ICM3N2E0YzU7XHJcbiAgICBtYXJnaW46IDAgNDBweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG5cclxuLmJvYXJkLWNvbnRhaW5lciB7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGxpbmUtaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxufVxyXG4uYm9hcmQtY29udGFpbmVyOjpiZWZvcmUge1xyXG4gICAgY29udGVudDogXCJcIjtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgfVxyXG4uZ2FtZSAuYm9hcmQge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luOiAxMDBweDtcclxufVxyXG4uZ2FtZSAuYm9hcmQgPiBkaXYge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG5cclxuLmJvYXJkIC5jZWxsIHtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBoZWlnaHQ6IDI2cHg7XHJcbiAgICB3aWR0aDogMjZweDtcclxuICAgIGZsZXg6IDAgMCAyNnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcbi5ib2FyZCAudW5rbm93biB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTNFRjgxO1xyXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxcyBsaW5lYXI7XHJcbn1cclxuLmJvYXJkIC51bmtub3duOmhvdmVyOm5vdChbY2xhc3MqPVwiZmxhZ1wiXSkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDczLCAxNzUsIDUyKTtcclxuICAgIHRyYW5zaXRpb246IG5vbmU7XHJcbn1cclxuLmJvYXJkIC5zYWZlbHkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMTkxLCAxMzgpO1xyXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcclxufVxyXG4uYm9hcmQgLmJvbWIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcclxufVxyXG4uYm9hcmQgLmZsYWcge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE5MCwgMTkwLCAxOTApO1xyXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcclxufVxyXG5cclxuLmludmlzaWJsZSB7XHJcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuLmdhbWUtYmFyIHtcclxuICAgIGhlaWdodDogNjBweDtcclxuICAgIHdpZHRoOiAzMDBweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjMjIyO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogY2FsYyg1MCUgLSAxNTBweCk7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcclxuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xyXG59XHJcbi5nYW1lLWJhci1kcmFnIHtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBwYWRkaW5nOiAxNHB4O1xyXG4gICAgd2lkdGg6IDUycHg7XHJcbiAgICBjdXJzb3I6IG1vdmU7XHJcbn1cclxuLmdhbWUtYmFyLWRyYWcgPiBpbWcge1xyXG4gICAgd2lkdGg6IDIxcHg7XHJcbn1cclxuLmdhbWUtb3Zlci1wb3B1cCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB3aWR0aDogNDAwcHg7XHJcbiAgICBoZWlnaHQ6IDE0MHB4O1xyXG4gICAgYmFja2dyb3VuZDogI2MyZTllOTtcclxuICAgIHotaW5kZXg6IDEwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcclxuICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IDAgYmxhY2s7XHJcbn1cclxuLmdhbWUtb3Zlci1wb3B1cCA+IHNwYW4ge1xyXG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIHNlcmlmO1xyXG4gICAgZm9udC1zaXplOiAyLjRyZW07XHJcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgIGNvbG9yOiAjMjIyO1xyXG59XHJcbi5nYW1lLW92ZXItcG9wdXAgPiBpbWcge1xyXG4gICAgd2lkdGg6IDYwcHg7XHJcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuLmdhbWUtb3Zlci1wb3B1cCA+IGltZzpob3ZlciB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDQpO1xyXG59XHJcbi5nYW1lLXdpbi1wb3B1cCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICB3aWR0aDogNDIwcHg7XHJcbiAgICBoZWlnaHQ6IDEyMHB4O1xyXG4gICAgYmFja2dyb3VuZDogIzhjYzYzZjtcclxuICAgIHotaW5kZXg6IDEwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcclxuICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IDAgYmxhY2s7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgcGFkZGluZzogMThweCAwO1xyXG59XHJcbi5nYW1lLXdpbi1wb3B1cCA+IHNwYW4ge1xyXG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIHNlcmlmO1xyXG4gICAgZm9udC1zaXplOiAycmVtO1xyXG4gICAgY29sb3I6ICMyMjI7XHJcbn0iXX0= */ diff --git a/dist/css/completed/8/svg-style.css b/dist/css/completed/8/svg-style.css deleted file mode 100644 index 3e8cfb0..0000000 --- a/dist/css/completed/8/svg-style.css +++ /dev/null @@ -1,2 +0,0 @@ -svg text{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}#back_down>g:nth-child(11)>g:nth-child(2){cursor:pointer}#back_down>g:nth-child(11)>g.z>g{stroke:rgba(255,255,255,.9);fill:rgba(255,255,255,.9);-webkit-animation:highlight 7s linear 2s infinite normal;animation:highlight 7s linear 2s infinite normal}@-webkit-keyframes highlight{0%{-webkit-transform:translateX(0);transform:translateX(0)}13%{-webkit-transform:translateX(300px);transform:translateX(300px)}100%{-webkit-transform:translateX(300px);transform:translateX(300px)}}@keyframes highlight{0%{-webkit-transform:translateX(0);transform:translateX(0)}13%{-webkit-transform:translateX(300px);transform:translateX(300px)}100%{-webkit-transform:translateX(300px);transform:translateX(300px)}}#back_down>g:nth-child(11){-webkit-transform-origin:50% 77%;-ms-transform-origin:50% 77%;transform-origin:50% 77%;-webkit-transition:-webkit-transform .1s ease-out;transition:-webkit-transform .1s ease-out;transition:transform .1s ease-out;transition:transform .1s ease-out,-webkit-transform .1s ease-out}#back_down>g:nth-child(11):hover{-webkit-transform:rotateZ(2deg);-ms-transform:rotate(2deg);transform:rotateZ(2deg)}#back_down>g:nth-child(11)>g:nth-child(2)>path.y{-webkit-transition:fill .2s ease-out;transition:fill .2s ease-out}#back_down>g:nth-child(11):hover>g:nth-child(2)>path.y{fill:#fffeb5}#back_up>g>g:nth-of-type(1){-webkit-animation:fly-cloud-1 234s linear infinite normal;animation:fly-cloud-1 234s linear infinite normal;-webkit-animation-delay:-170s;animation-delay:-170s}@-webkit-keyframes fly-cloud-1{0%{-webkit-transform:translate(96%,30px);transform:translate(96%,30px)}100%{-webkit-transform:translate(-30%,30px);transform:translate(-30%,30px)}}@keyframes fly-cloud-1{0%{-webkit-transform:translate(96%,30px);transform:translate(96%,30px)}100%{-webkit-transform:translate(-30%,30px);transform:translate(-30%,30px)}}#back_up>g>g:nth-of-type(2){-webkit-animation:fly-cloud-2 100s linear infinite normal;animation:fly-cloud-2 100s linear infinite normal;-webkit-animation-delay:-26s;animation-delay:-26s}@-webkit-keyframes fly-cloud-2{0%{-webkit-transform:translate(54%,-50px);transform:translate(54%,-50px)}100%{-webkit-transform:translate(-74%,-50px);transform:translate(-74%,-50px)}}@keyframes fly-cloud-2{0%{-webkit-transform:translate(54%,-50px);transform:translate(54%,-50px)}100%{-webkit-transform:translate(-74%,-50px);transform:translate(-74%,-50px)}}#back_up>g>g:nth-of-type(3){-webkit-animation:fly-cloud-3 140s linear infinite normal;animation:fly-cloud-3 140s linear infinite normal;-webkit-animation-delay:-15s;animation-delay:-15s}@-webkit-keyframes fly-cloud-3{0%{-webkit-transform:translate(19%,120px);transform:translate(19%,120px)}100%{-webkit-transform:translate(-99%,120px);transform:translate(-99%,120px)}}@keyframes fly-cloud-3{0%{-webkit-transform:translate(19%,120px);transform:translate(19%,120px)}100%{-webkit-transform:translate(-99%,120px);transform:translate(-99%,120px)}}#back_up>g>rect{-webkit-animation:day-night 360s linear infinite alternate;animation:day-night 360s linear infinite alternate}@-webkit-keyframes day-night{0%{fill:#a9cbff}100%{fill:#243246}}@keyframes day-night{0%{fill:#a9cbff}100%{fill:#243246}}foreignObject>input{height:100%;width:70px;border:none;padding:0;font-size:1.5rem;font-family:"Izhitsa Cyrillic",sans-serif;background:0 0;outline:0;text-align:center;color:#333} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC84L3N2Zy1zdHlsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FDSSxpQkFBQSxLQUNBLG9CQUFBLEtBQUEsZ0JBQUEsS0FBQSxZQUFBLEtBRUosMENBQ0ksT0FBQSxRQUVKLGlDQUNJLE9BQUEscUJBQ0EsS0FBQSxxQkFDQSxrQkFBQSxVQUFBLEdBQUEsT0FBQSxHQUFBLFNBQUEsT0FBQSxVQUFBLFVBQUEsR0FBQSxPQUFBLEdBQUEsU0FBQSxPQUdKLDZCQUNJLEdBQ0ksa0JBQUEsY0FBQSxVQUFBLGNBRUosSUFDSSxrQkFBQSxrQkFBQSxVQUFBLGtCQUVKLEtBQ0ksa0JBQUEsa0JBQUEsVUFBQSxtQkFSUixxQkFDSSxHQUNJLGtCQUFBLGNBQUEsVUFBQSxjQUVKLElBQ0ksa0JBQUEsa0JBQUEsVUFBQSxrQkFFSixLQUNJLGtCQUFBLGtCQUFBLFVBQUEsbUJBSVIsMkJBQ0kseUJBQUEsSUFBQSxJQUFBLHFCQUFBLElBQUEsSUFBQSxpQkFBQSxJQUFBLElBQ0EsbUJBQUEsa0JBQUEsSUFBQSxTQUFBLFdBQUEsa0JBQUEsSUFBQSxTQUFBLFdBQUEsVUFBQSxJQUFBLFNBQUEsV0FBQSxVQUFBLElBQUEsUUFBQSxDQUFBLGtCQUFBLElBQUEsU0FFSixpQ0FDSSxrQkFBQSxjQUFBLGNBQUEsYUFBQSxVQUFBLGNBRUosaURBQ0ksbUJBQUEsS0FBQSxJQUFBLFNBQUEsV0FBQSxLQUFBLElBQUEsU0FFSix1REFDSSxLQUFBLFFBR0osNEJBQ0ksa0JBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUFBLFVBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUNBLHdCQUFBLE1BQUEsZ0JBQUEsTUFHSiwrQkFDSSxHQUFLLGtCQUFBLG9CQUFBLFVBQUEsb0JBQ0wsS0FBTyxrQkFBQSxxQkFBQSxVQUFBLHNCQUZYLHVCQUNJLEdBQUssa0JBQUEsb0JBQUEsVUFBQSxvQkFDTCxLQUFPLGtCQUFBLHFCQUFBLFVBQUEsc0JBR1gsNEJBQ0ksa0JBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUFBLFVBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUNBLHdCQUFBLEtBQUEsZ0JBQUEsS0FHSiwrQkFDSSxHQUFLLGtCQUFBLHFCQUFBLFVBQUEscUJBQ0wsS0FBTyxrQkFBQSxzQkFBQSxVQUFBLHVCQUZYLHVCQUNJLEdBQUssa0JBQUEscUJBQUEsVUFBQSxxQkFDTCxLQUFPLGtCQUFBLHNCQUFBLFVBQUEsdUJBR1gsNEJBQ0ksa0JBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUFBLFVBQUEsWUFBQSxLQUFBLE9BQUEsU0FBQSxPQUNBLHdCQUFBLEtBQUEsZ0JBQUEsS0FHSiwrQkFDSSxHQUFLLGtCQUFBLHFCQUFBLFVBQUEscUJBQ0wsS0FBTyxrQkFBQSxzQkFBQSxVQUFBLHVCQUZYLHVCQUNJLEdBQUssa0JBQUEscUJBQUEsVUFBQSxxQkFDTCxLQUFPLGtCQUFBLHNCQUFBLFVBQUEsdUJBRVgsZ0JBQ0ksa0JBQUEsVUFBQSxLQUFBLE9BQUEsU0FBQSxVQUFBLFVBQUEsVUFBQSxLQUFBLE9BQUEsU0FBQSxVQUdKLDZCQUNJLEdBQUssS0FBQSxRQUNMLEtBQU8sS0FBQSxTQUZYLHFCQUNJLEdBQUssS0FBQSxRQUNMLEtBQU8sS0FBQSxTQUdYLG9CQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLFFBQUEsRUFDQSxVQUFBLE9BQ0EsWUFBQSxrQkFBQSxDQUFBLFdBQ0EsV0FBQSxJQUNBLFFBQUEsRUFDQSxXQUFBLE9BQ0EsTUFBQSIsImZpbGUiOiJjb21wbGV0ZWQvOC9zdmctc3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsic3ZnIHRleHQge1xyXG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcbiNiYWNrX2Rvd24gPiBnOm50aC1jaGlsZCgxMSkgPiBnOm50aC1jaGlsZCgyKSB7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXJcclxufVxyXG4jYmFja19kb3duID4gZzpudGgtY2hpbGQoMTEpID4gZy56ID4gZyB7XHJcbiAgICBzdHJva2U6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjkpO1xyXG4gICAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAuOSk7XHJcbiAgICBhbmltYXRpb246IGhpZ2hsaWdodCA3cyBsaW5lYXIgMnMgaW5maW5pdGUgbm9ybWFsO1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGhpZ2hsaWdodCB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xyXG4gICAgfVxyXG4gICAgMTMlIHtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzAwcHgpO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDMwMHB4KTtcclxuICAgIH1cclxufVxyXG5cclxuI2JhY2tfZG93biA+IGc6bnRoLWNoaWxkKDExKSB7XHJcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNzclO1xyXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xcyBlYXNlLW91dDtcclxufVxyXG4jYmFja19kb3duID4gZzpudGgtY2hpbGQoMTEpOmhvdmVyIHtcclxuICAgIHRyYW5zZm9ybTogcm90YXRlWigyZGVnKTtcclxufVxyXG4jYmFja19kb3duID4gZzpudGgtY2hpbGQoMTEpID4gZzpudGgtY2hpbGQoMikgPiBwYXRoLnkge1xyXG4gICAgdHJhbnNpdGlvbjogZmlsbCAuMnMgZWFzZS1vdXQ7XHJcbn1cclxuI2JhY2tfZG93biA+IGc6bnRoLWNoaWxkKDExKTpob3ZlciA+IGc6bnRoLWNoaWxkKDIpID4gcGF0aC55IHtcclxuICAgIGZpbGw6ICNmZmZlYjU7XHJcbn1cclxuXHJcbiNiYWNrX3VwID4gZyA+IGc6bnRoLW9mLXR5cGUoMSkge1xyXG4gICAgYW5pbWF0aW9uOiBmbHktY2xvdWQtMSAyMzRzIGxpbmVhciBpbmZpbml0ZSBub3JtYWw7XHJcbiAgICBhbmltYXRpb24tZGVsYXk6IC0xNzBzO1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGZseS1jbG91ZC0xIHtcclxuICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoOTYlLCAzMHB4KTsgfVxyXG4gICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCUsIDMwcHgpOyB9XHJcbn1cclxuXHJcbiNiYWNrX3VwID4gZyA+IGc6bnRoLW9mLXR5cGUoMikge1xyXG4gICAgYW5pbWF0aW9uOiBmbHktY2xvdWQtMiAxMDBzIGxpbmVhciBpbmZpbml0ZSBub3JtYWw7XHJcbiAgICBhbmltYXRpb24tZGVsYXk6IC0yNnM7XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgZmx5LWNsb3VkLTIge1xyXG4gICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1NCUsIC01MHB4KTsgfVxyXG4gICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC03NCUsIC01MHB4KTsgfVxyXG59XHJcblxyXG4jYmFja191cCA+IGcgPiBnOm50aC1vZi10eXBlKDMpIHtcclxuICAgIGFuaW1hdGlvbjogZmx5LWNsb3VkLTMgMTQwcyBsaW5lYXIgaW5maW5pdGUgbm9ybWFsO1xyXG4gICAgYW5pbWF0aW9uLWRlbGF5OiAtMTVzO1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGZseS1jbG91ZC0zIHtcclxuICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTklLCAxMjBweCk7IH1cclxuICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtOTklLCAxMjBweCk7IH1cclxufVxyXG4jYmFja191cCA+IGcgPiByZWN0IHtcclxuICAgIGFuaW1hdGlvbjogZGF5LW5pZ2h0IDM2MHMgbGluZWFyIGluZmluaXRlIGFsdGVybmF0ZTtcclxufVxyXG5cclxuQGtleWZyYW1lcyBkYXktbmlnaHQge1xyXG4gICAgMCUgeyBmaWxsOiAjYTljYmZmOyB9XHJcbiAgICAxMDAlIHsgZmlsbDogIzI0MzI0NjsgfVxyXG59XHJcblxyXG5mb3JlaWduT2JqZWN0ID4gaW5wdXQge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDcwcHg7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICBmb250LWZhbWlseTogXCJJemhpdHNhIEN5cmlsbGljXCIsIHNhbnMtc2VyaWY7XHJcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG59Il19 */ diff --git a/dist/css/completed/9/style.css b/dist/css/completed/9/style.css deleted file mode 100644 index e1ad5e4..0000000 --- a/dist/css/completed/9/style.css +++ /dev/null @@ -1,2 +0,0 @@ -body,html{height:100%;width:100%;margin:0}header{height:60px;background-color:#9a8c98}main{height:calc(100% - 60px);width:100%}.toolbar{height:40px;width:100%;background-color:#c9ada7}.canvas{-webkit-box-sizing:border-box;box-sizing:border-box;height:calc(100% - 40px);width:100%;background-color:#f2e9e4;padding:4vw 10vw 6vw 10vw;overflow:auto}.workspace{position:relative;background-color:#fff;height:100%;width:100%}.workspace>.circle{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;border-radius:50%;border:1px solid #22223b;background-color:#197dcf}.grabbing{cursor:grabbing!important;cursor:-webkit-grabbing!important}.grab{cursor:grab!important;cursor:-webkit-grab!important} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBsZXRlZC85L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBRUosT0FDSSxPQUFBLEtBQ0EsaUJBQUEsUUFFSixLQUNJLE9BQUEsa0JBQ0EsTUFBQSxLQUVKLFNBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxpQkFBQSxRQUVKLFFBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsT0FBQSxrQkFDQSxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxRQUFBLElBQUEsS0FBQSxJQUFBLEtBQ0EsU0FBQSxLQUVKLFdBQ0ksU0FBQSxTQUNBLGlCQUFBLEtBQ0EsT0FBQSxLQUNBLE1BQUEsS0FFSixtQkFDSSxtQkFBQSxXQUFBLFdBQUEsV0FDQSxTQUFBLFNBQ0EsY0FBQSxJQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0EsaUJBQUEsUUFHSixVQUNJLE9BQUEsbUJBRUEsT0FBQSwyQkFFSixNQUNJLE9BQUEsZUFFQSxPQUFBIiwiZmlsZSI6ImNvbXBsZXRlZC85L3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImh0bWwsIGJvZHkge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG59XG5oZWFkZXIge1xuICAgIGhlaWdodDogNjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOUE4Qzk4O1xufVxubWFpbiB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA2MHB4KTtcbiAgICB3aWR0aDogMTAwJTtcbn1cbi50b29sYmFyIHtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0M5QURBNztcbn1cbi5jYW52YXMge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjJFOUU0O1xuICAgIHBhZGRpbmc6IDR2dyAxMHZ3IDZ2dyAxMHZ3O1xuICAgIG92ZXJmbG93OiBhdXRvO1xufVxuLndvcmtzcGFjZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuLndvcmtzcGFjZSA+IC5jaXJjbGUge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjMjIyMjNCO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNSwgMTI1LCAyMDcpO1xufVxuXG4uZ3JhYmJpbmcge1xuICAgIGN1cnNvcjogZ3JhYmJpbmcgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IC1tb3otZ3JhYmJpbmcgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmcgIWltcG9ydGFudDtcbn1cbi5ncmFiIHtcbiAgICBjdXJzb3I6IGdyYWIgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IC1tb3otZ3JhYiAhaW1wb3J0YW50O1xuICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiICFpbXBvcnRhbnQ7XG59Il19 */ diff --git a/dist/css/custom.css b/dist/css/custom.css deleted file mode 100644 index 5f44163..0000000 --- a/dist/css/custom.css +++ /dev/null @@ -1,281 +0,0 @@ -#presentable-icon-close { - position: absolute; - top: 15px; - right: 15px; -} - - -.icon-button { - border-radius: 1.8rem; - cursor: pointer; - display: inline-block; - font-size: 0.9rem; - height: 1.8rem; - line-height: 1.8rem; - margin: 0 2px; - position: relative; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - width: 1.8rem; -} - -.icon-button.facebook { - background-color: #3B5998; -} - -.icon-button.github { - background-color: #24292E; -} - -/* Circle */ -.icon-button span { - border-radius: 0; - display: block; - height: 0; - left: 50%; - margin: 0; - position: absolute; - top: 50%; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; - width: 0; -} - -.icon-button:hover.facebook span { - width: 1.8rem; - height: 1.8rem; - border-radius: 1.8rem; - margin: -0.9rem; -} - -.icon-button:hover.github span { - width: 1.5rem; - height: 1.5rem; - border-radius: 1.5rem; - margin: -0.7rem; -} - -.facebook span { - background-color: white; -} - -.github span { - background-color: white; -} - -/* Icons */ -.icon-button i { - background: none; - height: 1.8rem; - left: 0; - line-height: 1.8rem; - position: absolute; - top: 0; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; - width: 1.8rem; - z-index: 10; -} - -.icon-button .fa-facebook { - font-size: 1.2rem; - color: white; -} - -.icon-button:hover .fa-facebook { - color: #3B5998; -} - -.icon-button .fa-github { - font-size: 1.95rem; - color: white; -} - -.icon-button:hover .fa-github { - color: #24292E; -} - -.blue { - color: #3F8FD6; -} - -.purple { - color: #BD63C5; -} - -.red { - color: rgb(211, 76, 76); -} - -.dark { - color: #1e1e1e; -} - -.code_back { - background: #3f3f3f; - padding: 4px; -} - -.turquoise { - color: #4EC9B0; -} - -.light-blue { - color: #92CAF4; -} - -.flex { - display: flex; - flex-flow: row nowrap; -} - -.separator { - min-width: 10px; - cursor: col-resize; -} -.separator:hover { - background-color: rgba(60, 60, 60, .7); -} -.c1 { - flex: 1; - max-width: 50%; -} - -.c2 { - flex: 2 1 50%; -} - -.c3 { - flex: 3; -} - -div.reveal { - font-size: 30px; -} -.reveal .flex pre { - width: 100%; - -} - -table.centred-table td { - vertical-align: middle; - border: none; -} - -.no-border { - border: unset !important; -} - -.no-shadow { - box-shadow: unset !important; -} - -.color-1 { - color: #405a45; -} -.color-2 { - color: rgb(148, 204, 158); -} -.color-3 { - color: rgb(130, 207, 226); -} -.color-4 { - color: rgb(31, 143, 126); -} -.color-5 { - color: rgb(95, 109, 172); -} -.color-6 { - color: rgb(55, 45, 145); -} -#presentable-theme-picker { - position: relative; - left: 0; - bottom: 0; -} - -#selected-theme { - position: absolute; - left: 10px; - bottom: 10px; - z-index: 3; -} - -#hidden-bar { - position: absolute; - left: 0; - bottom: 0; - box-shadow: 0 0 16px 0 rgba(0,0,0,0.75); - background-color: rgb(209, 180, 127); - width: 410px; - border-radius: 20px 20px 20px 0; - z-index: 2; - transform-origin: 15px 100px; - transition: transform 0.6s ease-out; -} - -#hidden-bar > div { - box-sizing: border-box; - display: flex; - flex-flow: row wrap; - padding-left: 70px; - margin-bottom: 10px; - width: 100%; -} - -#hidden-bar > div > div { - margin: 10px 5px 0 5px; -} - -.theme-circle { - border-radius: 50%; - border: 3px solid black; - cursor: pointer; - width: 40px; - height: 40px; -} - -.invisible { - transform: scale(0); -} - -.theme-beige { - background-color: #bea873; -} -.theme-black { - background-color: #222222; -} -.theme-blood { - background-color: #a72034; -} -.theme-league { - background-color: #54595d; -} -.theme-moon { - background-color: #042b35; -} -.theme-night { - background-color: #111111; -} -.theme-serif { - background-color: #f0f1eb; -} -.theme-simple { - background-color: #fff; -} -.theme-sky { - background-color: #b7dde6; -} -.theme-solarized { - background-color: #fdf6e4; -} -.theme-white { - background-color: #fff; -} \ No newline at end of file diff --git a/dist/css/font/league-gothic/league-gothic.css b/dist/css/font/league-gothic/league-gothic.css deleted file mode 100644 index b74f134..0000000 --- a/dist/css/font/league-gothic/league-gothic.css +++ /dev/null @@ -1,2 +0,0 @@ -@font-face{font-family:'League Gothic';src:url(league-gothic.eot);src:url(league-gothic.eot?#iefix) format('embedded-opentype'),url(league-gothic.woff) format('woff'),url(league-gothic.ttf) format('truetype');font-weight:400;font-style:normal} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnQvbGVhZ3VlLWdvdGhpYy9sZWFndWUtZ290aGljLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUNJLFlBQUEsZ0JBQ0EsSUFBQSx1QkFDQSxJQUFBLDhCQUFBLDJCQUFBLENBQ0ssd0JBQTBCLGNBQWMsQ0FDeEMsdUJBQXlCLG1CQUU5QixZQUFBLElBQ0EsV0FBQSIsImZpbGUiOiJmb250L2xlYWd1ZS1nb3RoaWMvbGVhZ3VlLWdvdGhpYy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAZm9udC1mYWNlIHtcclxuICAgIGZvbnQtZmFtaWx5OiAnTGVhZ3VlIEdvdGhpYyc7XHJcbiAgICBzcmM6IHVybCgnbGVhZ3VlLWdvdGhpYy5lb3QnKTtcclxuICAgIHNyYzogdXJsKCdsZWFndWUtZ290aGljLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXHJcbiAgICAgICAgIHVybCgnbGVhZ3VlLWdvdGhpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICAgICAgIHVybCgnbGVhZ3VlLWdvdGhpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XHJcblxyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxufSJdfQ== */ diff --git a/dist/css/font/source-sans-pro/source-sans-pro.css b/dist/css/font/source-sans-pro/source-sans-pro.css deleted file mode 100644 index 895fe3c..0000000 --- a/dist/css/font/source-sans-pro/source-sans-pro.css +++ /dev/null @@ -1,2 +0,0 @@ -@font-face{font-family:'Source Sans Pro';src:url(../source-sans-pro/source-sans-pro-regular.eot);src:url(../source-sans-pro/source-sans-pro-regular.eot?#iefix) format('embedded-opentype'),url(../source-sans-pro/source-sans-pro-regular.woff) format('woff'),url(../source-sans-pro/source-sans-pro-regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:'Source Sans Pro';src:url(../source-sans-pro/source-sans-pro-italic.eot);src:url(../source-sans-pro/source-sans-pro-italic.eot?#iefix) format('embedded-opentype'),url(../source-sans-pro/source-sans-pro-italic.woff) format('woff'),url(../source-sans-pro/source-sans-pro-italic.ttf) format('truetype');font-weight:400;font-style:italic}@font-face{font-family:'Source Sans Pro';src:url(../source-sans-pro/source-sans-pro-semibold.eot);src:url(../source-sans-pro/source-sans-pro-semibold.eot?#iefix) format('embedded-opentype'),url(../source-sans-pro/source-sans-pro-semibold.woff) format('woff'),url(../source-sans-pro/source-sans-pro-semibold.ttf) format('truetype');font-weight:600;font-style:normal}@font-face{font-family:'Source Sans Pro';src:url(../source-sans-pro/source-sans-pro-semibolditalic.eot);src:url(../source-sans-pro/source-sans-pro-semibolditalic.eot?#iefix) format('embedded-opentype'),url(../source-sans-pro/source-sans-pro-semibolditalic.woff) format('woff'),url(../source-sans-pro/source-sans-pro-semibolditalic.ttf) format('truetype');font-weight:600;font-style:italic} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnQvc291cmNlLXNhbnMtcHJvL3NvdXJjZS1zYW5zLXByby5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FDSSxZQUFBLGtCQUNBLElBQUEsb0RBQ0EsSUFBQSwyREFBQSwyQkFBQSxDQUNLLHFEQUFvQyxjQUFjLENBQ2xELG9EQUFtQyxtQkFDeEMsWUFBQSxJQUNBLFdBQUEsT0FHSixXQUNJLFlBQUEsa0JBQ0EsSUFBQSxtREFDQSxJQUFBLDBEQUFBLDJCQUFBLENBQ0ssb0RBQW1DLGNBQWMsQ0FDakQsbURBQWtDLG1CQUN2QyxZQUFBLElBQ0EsV0FBQSxPQUdKLFdBQ0ksWUFBQSxrQkFDQSxJQUFBLHFEQUNBLElBQUEsNERBQUEsMkJBQUEsQ0FDSyxzREFBcUMsY0FBYyxDQUNuRCxxREFBb0MsbUJBQ3pDLFlBQUEsSUFDQSxXQUFBLE9BR0osV0FDSSxZQUFBLGtCQUNBLElBQUEsMkRBQ0EsSUFBQSxrRUFBQSwyQkFBQSxDQUNLLDREQUEyQyxjQUFjLENBQ3pELDJEQUEwQyxtQkFDL0MsWUFBQSxJQUNBLFdBQUEiLCJmaWxlIjoiZm9udC9zb3VyY2Utc2Fucy1wcm8vc291cmNlLXNhbnMtcHJvLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBmb250LWZhY2Uge1xyXG4gICAgZm9udC1mYW1pbHk6ICdTb3VyY2UgU2FucyBQcm8nO1xyXG4gICAgc3JjOiB1cmwoJ3NvdXJjZS1zYW5zLXByby1yZWd1bGFyLmVvdCcpO1xyXG4gICAgc3JjOiB1cmwoJ3NvdXJjZS1zYW5zLXByby1yZWd1bGFyLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXHJcbiAgICAgICAgIHVybCgnc291cmNlLXNhbnMtcHJvLXJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLFxyXG4gICAgICAgICB1cmwoJ3NvdXJjZS1zYW5zLXByby1yZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcclxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XHJcbn1cclxuXHJcbkBmb250LWZhY2Uge1xyXG4gICAgZm9udC1mYW1pbHk6ICdTb3VyY2UgU2FucyBQcm8nO1xyXG4gICAgc3JjOiB1cmwoJ3NvdXJjZS1zYW5zLXByby1pdGFsaWMuZW90Jyk7XHJcbiAgICBzcmM6IHVybCgnc291cmNlLXNhbnMtcHJvLWl0YWxpYy5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxyXG4gICAgICAgICB1cmwoJ3NvdXJjZS1zYW5zLXByby1pdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpLFxyXG4gICAgICAgICB1cmwoJ3NvdXJjZS1zYW5zLXByby1pdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxufVxyXG5cclxuQGZvbnQtZmFjZSB7XHJcbiAgICBmb250LWZhbWlseTogJ1NvdXJjZSBTYW5zIFBybyc7XHJcbiAgICBzcmM6IHVybCgnc291cmNlLXNhbnMtcHJvLXNlbWlib2xkLmVvdCcpO1xyXG4gICAgc3JjOiB1cmwoJ3NvdXJjZS1zYW5zLXByby1zZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxyXG4gICAgICAgICB1cmwoJ3NvdXJjZS1zYW5zLXByby1zZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICAgICAgIHVybCgnc291cmNlLXNhbnMtcHJvLXNlbWlib2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XHJcbn1cclxuXHJcbkBmb250LWZhY2Uge1xyXG4gICAgZm9udC1mYW1pbHk6ICdTb3VyY2UgU2FucyBQcm8nO1xyXG4gICAgc3JjOiB1cmwoJ3NvdXJjZS1zYW5zLXByby1zZW1pYm9sZGl0YWxpYy5lb3QnKTtcclxuICAgIHNyYzogdXJsKCdzb3VyY2Utc2Fucy1wcm8tc2VtaWJvbGRpdGFsaWMuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcclxuICAgICAgICAgdXJsKCdzb3VyY2Utc2Fucy1wcm8tc2VtaWJvbGRpdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpLFxyXG4gICAgICAgICB1cmwoJ3NvdXJjZS1zYW5zLXByby1zZW1pYm9sZGl0YWxpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59Il19 */ diff --git a/dist/css/print/paper.css b/dist/css/print/paper.css deleted file mode 100644 index 27d19dd..0000000 --- a/dist/css/print/paper.css +++ /dev/null @@ -1,203 +0,0 @@ -/* Default Print Stylesheet Template - by Rob Glazebrook of CSSnewbie.com - Last Updated: June 4, 2008 - - Feel free (nay, compelled) to edit, append, and - manipulate this file as you see fit. */ - - -@media print { - - /* SECTION 1: Set default width, margin, float, and - background. This prevents elements from extending - beyond the edge of the printed page, and prevents - unnecessary background images from printing */ - html { - background: #fff; - width: auto; - height: auto; - overflow: visible; - } - body { - background: #fff; - font-size: 20pt; - width: auto; - height: auto; - border: 0; - margin: 0 5%; - padding: 0; - overflow: visible; - float: none !important; - } - - /* SECTION 2: Remove any elements not needed in print. - This would include navigation, ads, sidebars, etc. */ - .nestedarrow, - .controls, - .fork-reveal, - .share-reveal, - .state-background, - .reveal .progress, - .reveal .backgrounds, - .reveal .slide-number { - display: none !important; - } - - /* SECTION 3: Set body font face, size, and color. - Consider using a serif font for readability. */ - body, p, td, li, div { - font-size: 20pt!important; - font-family: Georgia, "Times New Roman", Times, serif !important; - color: #000; - } - - /* SECTION 4: Set heading font face, sizes, and color. - Differentiate your headings from your body text. - Perhaps use a large sans-serif for distinction. */ - h1,h2,h3,h4,h5,h6 { - color: #000!important; - height: auto; - line-height: normal; - font-family: Georgia, "Times New Roman", Times, serif !important; - text-shadow: 0 0 0 #000 !important; - text-align: left; - letter-spacing: normal; - } - /* Need to reduce the size of the fonts for printing */ - h1 { font-size: 28pt !important; } - h2 { font-size: 24pt !important; } - h3 { font-size: 22pt !important; } - h4 { font-size: 22pt !important; font-variant: small-caps; } - h5 { font-size: 21pt !important; } - h6 { font-size: 20pt !important; font-style: italic; } - - /* SECTION 5: Make hyperlinks more usable. - Ensure links are underlined, and consider appending - the URL to the end of the link for usability. */ - a:link, - a:visited { - color: #000 !important; - font-weight: bold; - text-decoration: underline; - } - /* - .reveal a:link:after, - .reveal a:visited:after { - content: " (" attr(href) ") "; - color: #222 !important; - font-size: 90%; - } - */ - - - /* SECTION 6: more reveal.js specific additions by @skypanther */ - ul, ol, div, p { - visibility: visible; - position: static; - width: auto; - height: auto; - display: block; - overflow: visible; - margin: 0; - text-align: left !important; - } - .reveal pre, - .reveal table { - margin-left: 0; - margin-right: 0; - } - .reveal pre code { - padding: 20px; - border: 1px solid #ddd; - } - .reveal blockquote { - margin: 20px 0; - } - .reveal .slides { - position: static !important; - width: auto !important; - height: auto !important; - - left: 0 !important; - top: 0 !important; - margin-left: 0 !important; - margin-top: 0 !important; - padding: 0 !important; - zoom: 1 !important; - - overflow: visible !important; - display: block !important; - - text-align: left !important; - -webkit-perspective: none; - -moz-perspective: none; - -ms-perspective: none; - perspective: none; - - -webkit-perspective-origin: 50% 50%; - -moz-perspective-origin: 50% 50%; - -ms-perspective-origin: 50% 50%; - perspective-origin: 50% 50%; - } - .reveal .slides section { - visibility: visible !important; - position: static !important; - width: auto !important; - height: auto !important; - display: block !important; - overflow: visible !important; - - left: 0 !important; - top: 0 !important; - margin-left: 0 !important; - margin-top: 0 !important; - padding: 60px 20px !important; - z-index: auto !important; - - opacity: 1 !important; - - page-break-after: always !important; - - -webkit-transform-style: flat !important; - -moz-transform-style: flat !important; - -ms-transform-style: flat !important; - transform-style: flat !important; - - -webkit-transform: none !important; - -moz-transform: none !important; - -ms-transform: none !important; - transform: none !important; - - -webkit-transition: none !important; - -moz-transition: none !important; - -ms-transition: none !important; - transition: none !important; - } - .reveal .slides section.stack { - padding: 0 !important; - } - .reveal section:last-of-type { - page-break-after: avoid !important; - } - .reveal section .fragment { - opacity: 1 !important; - visibility: visible !important; - - -webkit-transform: none !important; - -moz-transform: none !important; - -ms-transform: none !important; - transform: none !important; - } - .reveal section img { - display: block; - margin: 15px 0px; - background: rgba(255,255,255,1); - border: 1px solid #666; - box-shadow: none; - } - - .reveal section small { - font-size: 0.8em; - } - -} diff --git a/dist/css/print/pdf.css b/dist/css/print/pdf.css deleted file mode 100644 index fe7bbfb..0000000 --- a/dist/css/print/pdf.css +++ /dev/null @@ -1,165 +0,0 @@ -/** - * This stylesheet is used to print reveal.js - * presentations to PDF. - * - * https://github.com/hakimel/reveal.js#pdf-export - */ - -* { - -webkit-print-color-adjust: exact; -} - -body { - margin: 0 auto !important; - border: 0; - padding: 0; - float: none !important; - overflow: visible; -} - -html { - width: 100%; - height: 100%; - overflow: visible; -} - -/* Remove any elements not needed in print. */ -.nestedarrow, -.reveal .controls, -.controls, -.reveal .progress, -.reveal .playback, -.reveal.overview, -.fork-reveal, -.share-reveal, -.state-background { - display: none !important; -} - -h1, h2, h3, h4, h5, h6 { - text-shadow: 0 0 0 #000 !important; -} - -.reveal pre code { - overflow: hidden !important; - font-family: Courier, 'Courier New', monospace !important; -} - -ul, ol, div, p { - visibility: visible; - position: static; - width: auto; - height: auto; - display: block; - overflow: visible; - margin: auto; -} -.reveal { - width: auto !important; - height: auto !important; - overflow: hidden !important; -} -.reveal .slides { - position: static; - width: 100% !important; - height: auto !important; - zoom: 1 !important; - - left: auto; - top: auto; - margin: 0 !important; - padding: 0 !important; - - overflow: visible; - display: block; - - perspective: none; - perspective-origin: 50% 50%; -} - -.reveal .slides .pdf-page { - position: relative; - overflow: hidden; - z-index: 1; - - page-break-after: always; -} - -.reveal .slides section { - visibility: visible !important; - display: block !important; - position: absolute !important; - - margin: 0 !important; - padding: 0 !important; - box-sizing: border-box !important; - min-height: 1px; - - opacity: 1 !important; - - transform-style: flat !important; - transform: none !important; -} - -.reveal section.stack { - position: relative !important; - margin: 0 !important; - padding: 0 !important; - page-break-after: avoid !important; - height: auto !important; - min-height: auto !important; -} - -.reveal img { - box-shadow: none; -} - -.reveal .roll { - overflow: visible; - line-height: 1em; -} - -/* Slide backgrounds are placed inside of their slide when exporting to PDF */ -.reveal .slide-background { - display: block !important; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: auto !important; -} - -/* Display slide speaker notes when 'showNotes' is enabled */ -.reveal.show-notes { - max-width: none; - max-height: none; -} -.reveal .speaker-notes-pdf { - display: block; - width: 100%; - height: auto; - max-height: none; - top: auto; - right: auto; - bottom: auto; - left: auto; - z-index: 100; -} - -/* Layout option which makes notes appear on a separate page */ -.reveal .speaker-notes-pdf[data-layout="separate-page"] { - position: relative; - color: inherit; - background-color: transparent; - padding: 20px; - page-break-after: always; - border: 0; -} - -/* Display slide numbers when 'slideNumber' is enabled */ -.reveal .slide-number-pdf { - display: block; - position: absolute; - font-size: 14px; -} diff --git a/dist/css/task/task_5/first/style.css b/dist/css/task/task_5/first/style.css deleted file mode 100644 index b271150..0000000 --- a/dist/css/task/task_5/first/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Arimo&subset=cyrillic);body,html{height:100%;width:100%;margin:0;font-family:Arimo}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}body>header{height:60px;background-color:#7161ef}.content{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.content>aside{width:30%}.content>section{-webkit-box-flex:1;-ms-flex:1;flex:1;background-color:#ffe7db}.header-d{text-align:center;height:80px;line-height:80px;font-size:1.8rem}.display{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.card{height:36vh;width:30vh;margin:20px 40px;-webkit-box-shadow:0 4px 16px 0 rgba(0,0,0,.2);box-shadow:0 4px 16px 0 rgba(0,0,0,.2);-webkit-transition:.3s ease-out;transition:.3s ease-out;background-color:#fff;border-radius:5px;cursor:pointer}.card:hover{-webkit-box-shadow:0 8px 32px 0 rgba(0,0,0,.4);box-shadow:0 8px 32px 0 rgba(0,0,0,.4);-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:scale(1.02,1.02);-ms-transform:scale(1.02,1.02);transform:scale(1.02,1.02)}.card>img{width:30vh;height:30vh;border-radius:5px 5px 0 0}.description{padding:0 16px;text-align:center;font-size:1.1rem} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2svdGFza181L2ZpcnN0L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRUFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBQ0EsWUFBQSxNQUVKLEtBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUVKLFlBQ0ksT0FBQSxLQUNBLGlCQUFBLFFBRUosU0FDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxPQUFBLFVBQUEsSUFBQSxPQUVKLGVBQ0ksTUFBQSxJQUVKLGlCQUNJLGlCQUFBLEVBQUEsU0FBQSxFQUFBLEtBQUEsRUFDQSxpQkFBQSxRQUVKLFVBQ0ksV0FBQSxPQUNBLE9BQUEsS0FDQSxZQUFBLEtBQ0EsVUFBQSxPQUVKLFNBQ0ksUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsV0FBQSxzQkFBQSxPQUFBLGNBQUEsSUFBQSxLQUFBLFVBQUEsSUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsTUFBQSxlQUFBLE1BQUEsWUFBQSxXQUVKLE1BQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEtBQUEsS0FDQSxtQkFBQSxFQUFBLElBQUEsS0FBQSxFQUFBLGVBQUEsV0FBQSxFQUFBLElBQUEsS0FBQSxFQUFBLGVBQ0EsbUJBQUEsSUFBQSxTQUFBLFdBQUEsSUFBQSxTQUNBLGlCQUFBLEtBQ0EsY0FBQSxJQUNBLE9BQUEsUUFFSixZQUNJLG1CQUFBLEVBQUEsSUFBQSxLQUFBLEVBQUEsZUFBQSxXQUFBLEVBQUEsSUFBQSxLQUFBLEVBQUEsZUFDQSx5QkFBQSxPQUFBLHFCQUFBLE9BQUEsaUJBQUEsT0FDQSxrQkFBQSxpQkFBQSxjQUFBLGlCQUFBLFVBQUEsaUJBRUosVUFDSSxNQUFBLEtBQ0EsT0FBQSxLQUNBLGNBQUEsSUFBQSxJQUFBLEVBQUEsRUFFSixhQUNJLFFBQUEsRUFBQSxLQUNBLFdBQUEsT0FDQSxVQUFBIiwiZmlsZSI6InRhc2svdGFza181L2ZpcnN0L3N0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9QXJpbW8mc3Vic2V0PWN5cmlsbGljJyk7XHJcbmJvZHksIGh0bWwge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBmb250LWZhbWlseTogJ0FyaW1vJztcclxufVxyXG5ib2R5IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbn1cclxuYm9keSA+IGhlYWRlciB7XHJcbiAgICBoZWlnaHQ6IDYwcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzE2MUVGO1xyXG59XHJcbi5jb250ZW50IHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG59XHJcbi5jb250ZW50ID4gYXNpZGUge1xyXG4gICAgd2lkdGg6IDMwJTtcclxufVxyXG4uY29udGVudCA+IHNlY3Rpb24ge1xyXG4gICAgZmxleDogMTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkU3REI7XHJcbn1cclxuLmhlYWRlci1kIHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGhlaWdodDogODBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiA4MHB4O1xyXG4gICAgZm9udC1zaXplOiAxLjhyZW07XHJcbn1cclxuLmRpc3BsYXkge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG59XHJcbi5jYXJkIHtcclxuICAgIGhlaWdodDogMzZ2aDtcclxuICAgIHdpZHRoOiAzMHZoO1xyXG4gICAgbWFyZ2luOiAyMHB4IDQwcHg7XHJcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IDAgcmdiYSgwLDAsMCwwLjIpO1xyXG4gICAgdHJhbnNpdGlvbjogMC4zcyBlYXNlLW91dDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi5jYXJkOmhvdmVyIHtcclxuICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggMCByZ2JhKDAsMCwwLDAuNCk7XHJcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIsIDEuMDIpO1xyXG59XHJcbi5jYXJkID4gaW1nIHtcclxuICAgIHdpZHRoOiAzMHZoO1xyXG4gICAgaGVpZ2h0OiAzMHZoO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7XHJcbn1cclxuLmRlc2NyaXB0aW9uIHtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xyXG59Il19 */ diff --git a/dist/css/task/task_6/first/style.css b/dist/css/task/task_6/first/style.css deleted file mode 100644 index 83d8fcb..0000000 --- a/dist/css/task/task_6/first/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Yeseva+One&subset=cyrillic);body,html{height:100%;width:100%;margin:0}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}body>header{height:60px;background-color:#7161ef}.content{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.main-area{-webkit-box-flex:1;-ms-flex:1;flex:1;background-color:#ffe7db;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:20px 100px;overflow:auto;font-family:'Yeseva One';text-align:center;font-size:5rem}.main-area>div{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(32,32,32,.8)),to(rgba(96,96,96,.7)));background-image:linear-gradient(rgba(32,32,32,.8),rgba(96,96,96,.7));width:16vh;height:16vh;line-height:16vh;margin:10px;border:2px solid #b2b2b2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:transparent;cursor:pointer}.main-area>div.revealed{background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:linear-gradient(#eee,#fff);-webkit-transition:color 1.2s ease-out;transition:color 1.2s ease-out;color:rgba(0,0,0,.75);cursor:default} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2svdGFza182L2ZpcnN0L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRkFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBRUosS0FDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BRUosWUFDSSxPQUFBLEtBQ0EsaUJBQUEsUUFFSixTQUNJLGlCQUFBLEVBQUEsU0FBQSxFQUFBLEtBQUEsRUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLE9BQUEsVUFBQSxJQUFBLE9BRUosV0FDSSxpQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQ0EsaUJBQUEsUUFDQSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxXQUFBLHNCQUFBLE9BQUEsY0FBQSxJQUFBLEtBQUEsVUFBQSxJQUFBLEtBQ0EsaUJBQUEsT0FBQSxjQUFBLE9BQUEsZ0JBQUEsT0FDQSxrQkFBQSxPQUFBLGVBQUEsT0FBQSxZQUFBLE9BQ0EsUUFBQSxLQUFBLE1BQ0EsU0FBQSxLQUNBLFlBQUEsYUFDQSxXQUFBLE9BQ0EsVUFBQSxLQUVKLGVBQ0ksaUJBQUEsNEZBQUEsaUJBQUEscURBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxZQUFBLEtBQ0EsT0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLFFBQ0Esb0JBQUEsS0FBQSxpQkFBQSxLQUFBLGdCQUFBLEtBQUEsWUFBQSxLQUNBLE1BQUEsWUFDQSxPQUFBLFFBRUosd0JBQ0ksaUJBQUEsa0VBQUEsaUJBQUEsMkJBQ0EsbUJBQUEsTUFBQSxLQUFBLFNBQUEsV0FBQSxNQUFBLEtBQUEsU0FDQSxNQUFBLGdCQUNBLE9BQUEiLCJmaWxlIjoidGFzay90YXNrXzYvZmlyc3Qvc3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1ZZXNldmErT25lJnN1YnNldD1jeXJpbGxpYycpO1xyXG5ib2R5LCBodG1sIHtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcbmJvZHkge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxufVxyXG5ib2R5ID4gaGVhZGVyIHtcclxuICAgIGhlaWdodDogNjBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM3MTYxRUY7XHJcbn1cclxuLmNvbnRlbnQge1xyXG4gICAgZmxleDogMTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XHJcbn1cclxuLm1haW4tYXJlYSB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRTdEQjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgcGFkZGluZzogMjBweCAxMDBweDtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgZm9udC1mYW1pbHk6ICdZZXNldmEgT25lJztcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogNXJlbTtcclxufVxyXG4ubWFpbi1hcmVhID4gZGl2IHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDMyLDMyLDMyLC44KSwgcmdiYSg5Niw5Niw5NiwuNykpO1xyXG4gICAgd2lkdGg6IDE2dmg7XHJcbiAgICBoZWlnaHQ6IDE2dmg7XHJcbiAgICBsaW5lLWhlaWdodDogMTZ2aDtcclxuICAgIG1hcmdpbjogMTBweDtcclxuICAgIGJvcmRlcjogMnB4IHNvbGlkICNCMkIyQjI7XHJcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4ubWFpbi1hcmVhID4gZGl2LnJldmVhbGVkIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgjZWVlLCAjZmZmKTtcclxuICAgIHRyYW5zaXRpb246IGNvbG9yIDEuMnMgZWFzZS1vdXQ7XHJcbiAgICBjb2xvcjogcmdiYSgwLDAsMCwuNzUpO1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xyXG59Il19 */ diff --git a/dist/css/task/task_7/first/style.css b/dist/css/task/task_7/first/style.css deleted file mode 100644 index 923f732..0000000 --- a/dist/css/task/task_7/first/style.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic);body,html{height:100%;width:100%;margin:0}body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;font-family:'Open Sans';font-weight:400;background-image:linear-gradient(30deg,#fff,#f5f0ff)}body>header{height:60px;background-color:#7161ef}#page{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#page>div{-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;border:1px solid #000;height:480px;width:640px;-webkit-box-shadow:10px -10px 0 0 #7161ef;box-shadow:10px -10px 0 0 #7161ef;padding:20px}section#frame_1{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#frame_1>p{font-size:3.2rem;text-align:center;margin-bottom:0}#frame_1>p>span{font-weight:600;color:#a09016}#frame_1>small{font-size:1rem;margin-top:30px;margin-bottom:100px}#frame_1>button{width:200px;height:50px;margin-left:300px;cursor:pointer;background:#7161ef;color:#fff;border:unset;font-size:1.3rem}#frame_1>button:focus{outline:0}#frame_1>button:hover{background:#a397ff} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhc2svdGFza183L2ZpcnN0L3N0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0RkFDQSxLQUFBLEtBQ0ksT0FBQSxLQUNBLE1BQUEsS0FDQSxPQUFBLEVBRUosS0FDSSxRQUFBLFlBQUEsUUFBQSxZQUFBLFFBQUEsS0FDQSxtQkFBQSxTQUFBLHNCQUFBLE9BQUEsY0FBQSxPQUFBLE9BQUEsVUFBQSxPQUFBLE9BQ0EsWUFBQSxZQUNBLFlBQUEsSUFDQSxpQkFBQSxvQ0FFSixZQUNJLE9BQUEsS0FDQSxpQkFBQSxRQUVKLE1BQ0ksaUJBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUNBLFFBQUEsWUFBQSxRQUFBLFlBQUEsUUFBQSxLQUNBLGlCQUFBLE9BQUEsY0FBQSxPQUFBLGdCQUFBLE9BQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLFVBQ0ksbUJBQUEsV0FBQSxXQUFBLFdBQ0EsV0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsT0FBQSxNQUNBLE1BQUEsTUFDQSxtQkFBQSxLQUFBLE1BQUEsRUFBQSxFQUFBLFFBQUEsV0FBQSxLQUFBLE1BQUEsRUFBQSxFQUFBLFFBQ0EsUUFBQSxLQUVKLGdCQUNJLE9BQUEsS0FDQSxNQUFBLEtBQ0EsUUFBQSxZQUFBLFFBQUEsWUFBQSxRQUFBLEtBQ0EsbUJBQUEsU0FBQSxzQkFBQSxPQUFBLGNBQUEsT0FBQSxPQUFBLFVBQUEsT0FBQSxPQUNBLGlCQUFBLE1BQUEsY0FBQSxNQUFBLGdCQUFBLFdBQ0Esa0JBQUEsT0FBQSxlQUFBLE9BQUEsWUFBQSxPQUVKLFdBQ0ksVUFBQSxPQUNBLFdBQUEsT0FDQSxjQUFBLEVBRUosZ0JBQ0ksWUFBQSxJQUNBLE1BQUEsUUFFSixlQUNJLFVBQUEsS0FDQSxXQUFBLEtBQ0EsY0FBQSxNQUVKLGdCQUNJLE1BQUEsTUFDQSxPQUFBLEtBQ0EsWUFBQSxNQUNBLE9BQUEsUUFDQSxXQUFBLFFBQ0EsTUFBQSxLQUNBLE9BQUEsTUFDQSxVQUFBLE9BRUosc0JBQ0ksUUFBQSxFQUVKLHNCQUNJLFdBQUEiLCJmaWxlIjoidGFzay90YXNrXzcvZmlyc3Qvc3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6NDAwLDYwMCw2MDBpJnN1YnNldD1jeXJpbGxpYycpO1xyXG5ib2R5LCBodG1sIHtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcbmJvZHkge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcclxuICAgIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJztcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMzBkZWcsICNmZmZmZmYsI2Y1ZjBmZiApO1xyXG59XHJcbmJvZHkgPiBoZWFkZXIge1xyXG4gICAgaGVpZ2h0OiA2MHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzcxNjFFRjtcclxufVxyXG4jcGFnZSB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG4jcGFnZSA+IGRpdiB7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuICAgIGhlaWdodDogNDgwcHg7XHJcbiAgICB3aWR0aDogNjQwcHg7XHJcbiAgICBib3gtc2hhZG93OiAxMHB4IC0xMHB4IDAgMCAjNzE2MUVGO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxufVxyXG5zZWN0aW9uI2ZyYW1lXzEge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG4jZnJhbWVfMSA+IHAge1xyXG4gICAgZm9udC1zaXplOiAzLjJyZW07XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG59XHJcbiNmcmFtZV8xID4gcCA+IHNwYW4ge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgIGNvbG9yOiAjYTA5MDE2O1xyXG59XHJcbiNmcmFtZV8xID4gc21hbGwge1xyXG4gICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgbWFyZ2luLXRvcDogMzBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDEwMHB4O1xyXG59XHJcbiNmcmFtZV8xID4gYnV0dG9uIHtcclxuICAgIHdpZHRoOiAyMDBweDtcclxuICAgIGhlaWdodDogNTBweDtcclxuICAgIG1hcmdpbi1sZWZ0OiAzMDBweDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGJhY2tncm91bmQ6ICM3MTYxRUY7XHJcbiAgICBjb2xvcjogd2hpdGU7XHJcbiAgICBib3JkZXI6IHVuc2V0O1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbn1cclxuI2ZyYW1lXzEgPiBidXR0b246Zm9jdXMge1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxufVxyXG4jZnJhbWVfMSA+IGJ1dHRvbjpob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjYTM5N2ZmO1xyXG59Il19 */ diff --git a/dist/css/theme/beige.css b/dist/css/theme/beige.css deleted file mode 100644 index a225779..0000000 --- a/dist/css/theme/beige.css +++ /dev/null @@ -1,282 +0,0 @@ -/** - * Beige theme for reveal.js. - * - * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se - */ -@import url(../../font/league-gothic/league-gothic.css); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #f7f2d3; - background: -moz-radial-gradient(center, circle farthest-corner, white 0%, #f7f2d3 100%); - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3)); - background: -webkit-radial-gradient(center, circle farthest-corner, white 0%, #f7f2d3 100%); - background: -o-radial-gradient(center, circle farthest-corner, white 0%, #f7f2d3 100%); - background: -ms-radial-gradient(center, circle farthest-corner, white 0%, #f7f2d3 100%); - background: radial-gradient(center, circle farthest-corner, white 0%, #f7f2d3 100%); - background-color: #f7f3de; } - -.reveal { - font-family: "Lato", sans-serif; - font-size: 40px; - font-weight: normal; - color: #333; } - -::selection { - color: #fff; - background: rgba(79, 64, 28, 0.99); - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: rgba(79, 64, 28, 0.99); - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #333; - font-family: "League Gothic", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #8b743d; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #c0a86e; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #564826; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #333; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #8b743d; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #8b743d; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #8b743d; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #f7f3de; } } - -#hidden-bar { - -} \ No newline at end of file diff --git a/dist/css/theme/black.css b/dist/css/theme/black.css deleted file mode 100644 index d996763..0000000 --- a/dist/css/theme/black.css +++ /dev/null @@ -1,274 +0,0 @@ -/** - * Black theme for reveal.js. This is the opposite of the 'white' theme. - * - * By Hakim El Hattab, http://hakim.se - */ -@import url(../../font/source-sans-pro/source-sans-pro.css); -section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { - color: #222; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #222; - background-color: #222; } - -.reveal { - font-family: "Source Sans Pro", Helvetica, sans-serif; - font-size: 32px; - font-weight: normal; - color: #fff; } - -::selection { - color: #fff; - background: #bee4fd; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #bee4fd; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #fff; - font-family: "Source Sans Pro", Helvetica, sans-serif; - font-weight: 600; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 100%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.4em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #42affa; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #8dcffc; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #068de9; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #fff; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #42affa; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #42affa; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #42affa; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #222; } } diff --git a/dist/css/theme/blood.css b/dist/css/theme/blood.css deleted file mode 100644 index 40f2d52..0000000 --- a/dist/css/theme/blood.css +++ /dev/null @@ -1,297 +0,0 @@ -/** - * Blood theme for reveal.js - * Author: Walther http://github.com/Walther - * - * Designed to be used with highlight.js theme - * "monokai_sublime.css" available from - * https://github.com/isagalaev/highlight.js/ - * - * For other themes, change $codeBackground accordingly. - * - */ -@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #222; - background-color: #222; } - -.reveal { - font-family: Ubuntu, "sans-serif"; - font-size: 40px; - font-weight: normal; - color: #eee; } - -::selection { - color: #fff; - background: #a23; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #a23; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #eee; - font-family: Ubuntu, "sans-serif"; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: 2px 2px 2px #222; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #a23; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #dd5566; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #6a1520; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #eee; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #a23; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #a23; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #a23; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #222; } } - -.reveal p { - font-weight: 300; - text-shadow: 1px 1px #222; } - -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - font-weight: 700; } - -.reveal p code { - background-color: #23241f; - display: inline-block; - border-radius: 7px; } - -.reveal small code { - vertical-align: baseline; } diff --git a/dist/css/theme/league.css b/dist/css/theme/league.css deleted file mode 100644 index 637b03d..0000000 --- a/dist/css/theme/league.css +++ /dev/null @@ -1,280 +0,0 @@ -/** - * League theme for reveal.js. - * - * This was the default theme pre-3.0.0. - * - * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se - */ -@import url(../../font/league-gothic/league-gothic.css); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #1c1e20; - background: -moz-radial-gradient(center, circle farthest-corner, #555a5f 0%, #1c1e20 100%); - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20)); - background: -webkit-radial-gradient(center, circle farthest-corner, #555a5f 0%, #1c1e20 100%); - background: -o-radial-gradient(center, circle farthest-corner, #555a5f 0%, #1c1e20 100%); - background: -ms-radial-gradient(center, circle farthest-corner, #555a5f 0%, #1c1e20 100%); - background: radial-gradient(center, circle farthest-corner, #555a5f 0%, #1c1e20 100%); - background-color: #2b2b2b; } - -.reveal { - font-family: "Lato", sans-serif; - font-size: 40px; - font-weight: normal; - color: #eee; } - -::selection { - color: #fff; - background: #FF5E99; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #FF5E99; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #eee; - font-family: "League Gothic", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #13DAEC; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #71e9f4; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #0d99a5; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #eee; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #13DAEC; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ - .reveal .controls, - .reveal { - color: #13DAEC; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #13DAEC; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #2b2b2b; } } diff --git a/dist/css/theme/moon.css b/dist/css/theme/moon.css deleted file mode 100644 index 1f104f3..0000000 --- a/dist/css/theme/moon.css +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Solarized Dark theme for reveal.js. - * Author: Achim Staebler - */ -@import url(../../font/league-gothic/league-gothic.css); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); -/** - * Solarized colors by Ethan Schoonover - */ -html * { - color-profile: sRGB; - rendering-intent: auto; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #002b36; - background-color: #002b36; } - -.reveal { - font-family: "Lato", sans-serif; - font-size: 40px; - font-weight: normal; - color: #93a1a1; } - -::selection { - color: #fff; - background: #d33682; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #d33682; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #eee8d5; - font-family: "League Gothic", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #268bd2; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #78b9e6; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #1a6091; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #93a1a1; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #268bd2; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #268bd2; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #268bd2; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #002b36; } } diff --git a/dist/css/theme/night.css b/dist/css/theme/night.css deleted file mode 100644 index 03d94f9..0000000 --- a/dist/css/theme/night.css +++ /dev/null @@ -1,272 +0,0 @@ -/** - * Black theme for reveal.js. - * - * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se - */ -@import url(https://fonts.googleapis.com/css?family=Montserrat:700); -@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #111; - background-color: #111; } - -.reveal { - font-family: "Open Sans", sans-serif; - font-size: 40px; - font-weight: normal; - color: #eee; } - -::selection { - color: #fff; - background: #e7ad52; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #e7ad52; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #eee; - font-family: "Montserrat", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: -0.03em; - text-transform: none; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #e7ad52; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #f3d7ac; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #d08a1d; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #eee; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #e7ad52; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #e7ad52; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #e7ad52; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #111; } } diff --git a/dist/css/theme/serif.css b/dist/css/theme/serif.css deleted file mode 100644 index bcf9712..0000000 --- a/dist/css/theme/serif.css +++ /dev/null @@ -1,274 +0,0 @@ -/** - * A simple theme for reveal.js presentations, similar - * to the default theme. The accent color is brown. - * - * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. - */ -.reveal a { - line-height: 1.3em; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #F0F1EB; - background-color: #F0F1EB; } - -.reveal { - font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; - font-size: 40px; - font-weight: normal; - color: #000; } - -::selection { - color: #fff; - background: #26351C; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #26351C; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #383D3D; - font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: none; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #51483D; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #8b7c69; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #25211c; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #000; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #51483D; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #51483D; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #51483D; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #F0F1EB; } } diff --git a/dist/css/theme/simple.css b/dist/css/theme/simple.css deleted file mode 100644 index 99e7848..0000000 --- a/dist/css/theme/simple.css +++ /dev/null @@ -1,277 +0,0 @@ -/** - * A simple theme for reveal.js presentations, similar - * to the default theme. The accent color is darkblue. - * - * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. - * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se - */ -@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); -section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { - color: #fff; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #fff; - background-color: #fff; } - -.reveal { - font-family: "Lato", sans-serif; - font-size: 40px; - font-weight: normal; - color: #000; } - -::selection { - color: #fff; - background: rgba(0, 0, 0, 0.99); - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: rgba(0, 0, 0, 0.99); - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #000; - font-family: "News Cycle", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: none; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #00008B; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #0000f1; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #00003f; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #000; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #00008B; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #00008B; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #00008B; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #fff; } } diff --git a/dist/css/theme/sky.css b/dist/css/theme/sky.css deleted file mode 100644 index 0ca8090..0000000 --- a/dist/css/theme/sky.css +++ /dev/null @@ -1,281 +0,0 @@ -/** - * Sky theme for reveal.js. - * - * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se - */ -@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); -@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); -.reveal a { - line-height: 1.3em; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #add9e4; - background: -moz-radial-gradient(center, circle farthest-corner, #f7fbfc 0%, #add9e4 100%); - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4)); - background: -webkit-radial-gradient(center, circle farthest-corner, #f7fbfc 0%, #add9e4 100%); - background: -o-radial-gradient(center, circle farthest-corner, #f7fbfc 0%, #add9e4 100%); - background: -ms-radial-gradient(center, circle farthest-corner, #f7fbfc 0%, #add9e4 100%); - background: radial-gradient(center, circle farthest-corner, #f7fbfc 0%, #add9e4 100%); - background-color: #f7fbfc; } - -.reveal { - font-family: "Open Sans", sans-serif; - font-size: 40px; - font-weight: normal; - color: #333; } - -::selection { - color: #fff; - background: #134674; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #134674; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #333; - font-family: "Quicksand", sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: -0.08em; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #3b759e; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #74a7cb; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #264c66; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #333; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #3b759e; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #3b759e; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #3b759e; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #f7fbfc; } } diff --git a/dist/css/theme/solarized.css b/dist/css/theme/solarized.css deleted file mode 100644 index e3cfcf2..0000000 --- a/dist/css/theme/solarized.css +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Solarized Light theme for reveal.js. - * Author: Achim Staebler - */ -@import url(../../font/league-gothic/league-gothic.css); -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); -/** - * Solarized colors by Ethan Schoonover - */ -html * { - color-profile: sRGB; - rendering-intent: auto; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #fdf6e3; - background-color: #fdf6e3; } - -.reveal { - font-family: "Lato", sans-serif; - font-size: 40px; - font-weight: normal; - color: #657b83; } - -::selection { - color: #fff; - background: #d33682; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #d33682; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #586e75; - font-family: "League Gothic", Impact, sans-serif; - font-weight: normal; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #268bd2; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #78b9e6; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #1a6091; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #657b83; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #268bd2; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #268bd2; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #268bd2; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #fdf6e3; } } diff --git a/dist/css/theme/white.css b/dist/css/theme/white.css deleted file mode 100644 index c190328..0000000 --- a/dist/css/theme/white.css +++ /dev/null @@ -1,274 +0,0 @@ -/** - * White theme for reveal.js. This is the opposite of the 'black' theme. - * - * By Hakim El Hattab, http://hakim.se - */ -@import url(../../font/source-sans-pro/source-sans-pro.css); -section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { - color: #fff; } - -/********************************************* - * GLOBAL STYLES - *********************************************/ -body { - background: #fff; - background-color: #fff; } - -.reveal { - font-family: "Source Sans Pro", Helvetica, sans-serif; - font-size: 42px; - font-weight: normal; - color: #222; } - -::selection { - color: #fff; - background: #98bdef; - text-shadow: none; } - -::-moz-selection { - color: #fff; - background: #98bdef; - text-shadow: none; } - -.reveal .slides section, -.reveal .slides section > section { - line-height: 1.3; - font-weight: inherit; } - -/********************************************* - * HEADERS - *********************************************/ -.reveal h1, -.reveal h2, -.reveal h3, -.reveal h4, -.reveal h5, -.reveal h6 { - margin: 0 0 20px 0; - color: #222; - font-family: "Source Sans Pro", Helvetica, sans-serif; - font-weight: 600; - line-height: 1.2; - letter-spacing: normal; - text-transform: uppercase; - text-shadow: none; - word-wrap: break-word; } - -.reveal h1 { - font-size: 2em; } - -.reveal h2 { - font-size: 1.7em; } - -.reveal h3 { - font-size: 1.3em; } - -.reveal h4 { - font-size: 1em; } - -.reveal h1 { - text-shadow: none; } - -/********************************************* - * OTHER - *********************************************/ -.reveal p { - margin: 20px 0; - line-height: 1.3; } - -/* Ensure certain elements are never larger than the slide itself */ -.reveal img, -.reveal video, -.reveal iframe { - max-width: 95%; - max-height: 95%; } - -.reveal strong, -.reveal b { - font-weight: bold; } - -.reveal em { - font-style: italic; } - -.reveal ol, -.reveal dl, -.reveal ul { - display: inline-block; - text-align: left; - margin: 0 0 0 1em; } - -.reveal ol { - list-style-type: decimal; } - -.reveal ul { - list-style-type: disc; } - -.reveal ul ul { - list-style-type: square; } - -.reveal ul ul ul { - list-style-type: circle; } - -.reveal ul ul, -.reveal ul ol, -.reveal ol ol, -.reveal ol ul { - display: block; - margin-left: 40px; } - -.reveal dt { - font-weight: bold; } - -.reveal dd { - margin-left: 40px; } - -.reveal blockquote { - display: block; - position: relative; - width: 70%; - margin: 20px auto; - padding: 5px; - font-style: italic; - background: rgba(255, 255, 255, 0.05); - box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } - -.reveal blockquote p:first-child, -.reveal blockquote p:last-child { - display: inline-block; } - -.reveal q { - font-style: italic; } - -.reveal pre { - display: block; - position: relative; - width: 90%; - margin: 0 auto; - text-align: left; - font-size: 0.55em; - font-family: monospace; - line-height: 1.2em; - word-wrap: break-word; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } - -.reveal code { - font-family: monospace; - text-transform: none; } - -.reveal pre code { - display: block; - padding: 5px; - overflow: auto; - max-height: 400px; - word-wrap: normal; } - -.reveal table { - margin: auto; - border-collapse: collapse; - border-spacing: 0; } - -.reveal table th { - font-weight: bold; } - -.reveal table th, -.reveal table td { - text-align: left; - padding: 0.2em 0.5em 0.2em 0.5em; - border-bottom: 1px solid; } - -.reveal table th[align="center"], -.reveal table td[align="center"] { - text-align: center; } - -.reveal table th[align="right"], -.reveal table td[align="right"] { - text-align: right; } - -.reveal table tbody tr:last-child th, -.reveal table tbody tr:last-child td { - border-bottom: none; } - -.reveal sup { - vertical-align: super; - font-size: smaller; } - -.reveal sub { - vertical-align: sub; - font-size: smaller; } - -.reveal small { - display: inline-block; - font-size: 0.6em; - line-height: 1.2em; - vertical-align: top; } - -.reveal small * { - vertical-align: top; } - -/********************************************* - * LINKS - *********************************************/ -.reveal a { - color: #2a76dd; - text-decoration: none; - -webkit-transition: color .15s ease; - -moz-transition: color .15s ease; - transition: color .15s ease; } - -.reveal a:hover { - color: #6ca0e8; - text-shadow: none; - border: none; } - -.reveal .roll span:after { - color: #fff; - background: #1a53a1; } - -/********************************************* - * IMAGES - *********************************************/ -.reveal section img { - margin: 15px 0px; - background: rgba(255, 255, 255, 0.12); - border: 4px solid #222; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } - -.reveal section img.plain { - border: 0; - box-shadow: none; } - -.reveal a img { - -webkit-transition: all .15s linear; - -moz-transition: all .15s linear; - transition: all .15s linear; } - -.reveal a:hover img { - background: rgba(255, 255, 255, 0.2); - border-color: #2a76dd; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } - -/********************************************* - * NAVIGATION CONTROLS - *********************************************/ -.reveal .controls, -.controls { - color: #2a76dd; } - -/********************************************* - * PROGRESS BAR - *********************************************/ -.reveal .progress { - background: rgba(0, 0, 0, 0.2); - color: #2a76dd; } - -.reveal .progress span { - -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); - transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } - -/********************************************* - * PRINT BACKGROUND - *********************************************/ -@media print { - .backgrounds { - background-color: #fff; } } diff --git a/dist/font/font-awesome/FontAwesome.otf b/dist/font/font-awesome/FontAwesome.otf deleted file mode 100644 index 401ec0f..0000000 Binary files a/dist/font/font-awesome/FontAwesome.otf and /dev/null differ diff --git a/dist/font/font-awesome/fontawesome-webfont.eot b/dist/font/font-awesome/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/dist/font/font-awesome/fontawesome-webfont.eot and /dev/null differ diff --git a/dist/font/font-awesome/fontawesome-webfont.svg b/dist/font/font-awesome/fontawesome-webfont.svg deleted file mode 100644 index 855c845..0000000 --- a/dist/font/font-awesome/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/font/font-awesome/fontawesome-webfont.ttf b/dist/font/font-awesome/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2..0000000 Binary files a/dist/font/font-awesome/fontawesome-webfont.ttf and /dev/null differ diff --git a/dist/font/font-awesome/fontawesome-webfont.woff b/dist/font/font-awesome/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/dist/font/font-awesome/fontawesome-webfont.woff and /dev/null differ diff --git a/dist/font/font-awesome/fontawesome-webfont.woff2 b/dist/font/font-awesome/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/dist/font/font-awesome/fontawesome-webfont.woff2 and /dev/null differ diff --git a/dist/font/league-gothic/league-gothic.css b/dist/font/league-gothic/league-gothic.css deleted file mode 100644 index 44a33a1..0000000 --- a/dist/font/league-gothic/league-gothic.css +++ /dev/null @@ -1,10 +0,0 @@ -@font-face { - font-family: 'League Gothic'; - src: url('league-gothic.eot'); - src: url('league-gothic.eot?#iefix') format('embedded-opentype'), - url('league-gothic.woff') format('woff'), - url('league-gothic.ttf') format('truetype'); - - font-weight: normal; - font-style: normal; -} \ No newline at end of file diff --git a/dist/font/league-gothic/league-gothic.eot b/dist/font/league-gothic/league-gothic.eot deleted file mode 100644 index f62619a..0000000 Binary files a/dist/font/league-gothic/league-gothic.eot and /dev/null differ diff --git a/dist/font/league-gothic/league-gothic.ttf b/dist/font/league-gothic/league-gothic.ttf deleted file mode 100644 index baa9a95..0000000 Binary files a/dist/font/league-gothic/league-gothic.ttf and /dev/null differ diff --git a/dist/font/league-gothic/league-gothic.woff b/dist/font/league-gothic/league-gothic.woff deleted file mode 100644 index 8c1227b..0000000 Binary files a/dist/font/league-gothic/league-gothic.woff and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-italic.eot b/dist/font/source-sans-pro/source-sans-pro-italic.eot deleted file mode 100644 index 32fe466..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-italic.eot and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-italic.ttf b/dist/font/source-sans-pro/source-sans-pro-italic.ttf deleted file mode 100644 index f9ac13f..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-italic.ttf and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-italic.woff b/dist/font/source-sans-pro/source-sans-pro-italic.woff deleted file mode 100644 index ceecbf1..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-italic.woff and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-regular.eot b/dist/font/source-sans-pro/source-sans-pro-regular.eot deleted file mode 100644 index 4d29dda..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-regular.eot and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-regular.ttf b/dist/font/source-sans-pro/source-sans-pro-regular.ttf deleted file mode 100644 index 00c833c..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-regular.ttf and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-regular.woff b/dist/font/source-sans-pro/source-sans-pro-regular.woff deleted file mode 100644 index 630754a..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-regular.woff and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibold.eot b/dist/font/source-sans-pro/source-sans-pro-semibold.eot deleted file mode 100644 index 1104e07..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibold.eot and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibold.ttf b/dist/font/source-sans-pro/source-sans-pro-semibold.ttf deleted file mode 100644 index 6d0253d..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibold.ttf and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibold.woff b/dist/font/source-sans-pro/source-sans-pro-semibold.woff deleted file mode 100644 index 8888cf8..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibold.woff and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.eot b/dist/font/source-sans-pro/source-sans-pro-semibolditalic.eot deleted file mode 100644 index cdf7334..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.eot and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.ttf b/dist/font/source-sans-pro/source-sans-pro-semibolditalic.ttf deleted file mode 100644 index 5644299..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.ttf and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.woff b/dist/font/source-sans-pro/source-sans-pro-semibolditalic.woff deleted file mode 100644 index 7c2d3c7..0000000 Binary files a/dist/font/source-sans-pro/source-sans-pro-semibolditalic.woff and /dev/null differ diff --git a/dist/font/source-sans-pro/source-sans-pro.css b/dist/font/source-sans-pro/source-sans-pro.css deleted file mode 100644 index 0707a4f..0000000 --- a/dist/font/source-sans-pro/source-sans-pro.css +++ /dev/null @@ -1,39 +0,0 @@ -@font-face { - font-family: 'Source Sans Pro'; - src: url('source-sans-pro-regular.eot'); - src: url('source-sans-pro-regular.eot?#iefix') format('embedded-opentype'), - url('source-sans-pro-regular.woff') format('woff'), - url('source-sans-pro-regular.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Source Sans Pro'; - src: url('source-sans-pro-italic.eot'); - src: url('source-sans-pro-italic.eot?#iefix') format('embedded-opentype'), - url('source-sans-pro-italic.woff') format('woff'), - url('source-sans-pro-italic.ttf') format('truetype'); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: 'Source Sans Pro'; - src: url('source-sans-pro-semibold.eot'); - src: url('source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'), - url('source-sans-pro-semibold.woff') format('woff'), - url('source-sans-pro-semibold.ttf') format('truetype'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Source Sans Pro'; - src: url('source-sans-pro-semibolditalic.eot'); - src: url('source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'), - url('source-sans-pro-semibolditalic.woff') format('woff'), - url('source-sans-pro-semibolditalic.ttf') format('truetype'); - font-weight: 600; - font-style: italic; -} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index 217db23..0000000 --- a/dist/index.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - Веб программирование - - - - - - - - - - - - - - - - - -
-
-
-
-

Веб программирование. Фронтенд

-
-

- Карпович Павел / -

- - - - -
-
-
-

Содержание

- -
-
-
-

Список лекций

- -
-
-

Список заданий

- -
- -
-
- - - - - - - \ No newline at end of file diff --git a/dist/js/bundle.min.js b/dist/js/bundle.min.js deleted file mode 100644 index 41d9603..0000000 --- a/dist/js/bundle.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"use strict";function n(e){A[A.length]=e}function r(e){var t=new RegExp(" ?\\b"+e+"\\b");x.className=x.className.replace(t,"")}function i(e,t){for(var n=0,r=e.length;ne?(S.screensCss.gt&&n("gt-"+e),S.screensCss.gte&&n("gte-"+e)):tt),l.feature("landscape",oy?(S.browserCss.gt&&n("gt-"+g+y),S.browserCss.gte&&n("gte-"+g+y)):p2&&this[r+1]!==t)r&&n(this.slice(r,r+1).join("-").toLowerCase()+S.section);else{var i=e||"index",o=i.indexOf(".");o>0&&(i=i.substring(0,o)),x.id=i.toLowerCase()+S.page,r||n("root"+S.section)}}),l.screen={height:e.screen.height,width:e.screen.width},o(),b=0,e.addEventListener?e.addEventListener("resize",a,!1):e.attachEvent("onresize",a)}(window),function(e,t){"use strict";function n(e){for(var n in e)if(o[e[n]]!==t)return!0;return!1}function r(e){var t=e.charAt(0).toUpperCase()+e.substr(1);return!!n((e+" "+s.join(t+" ")+t).split(" "))}var i=e.document.createElement("i"),o=i.style,a=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),s="Webkit Moz O ms Khtml".split(" "),l=e.head_conf&&e.head_conf.head||"head",c=e[l],d={gradient:function(){var e="background-image:";return o.cssText=(e+a.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+e)+a.join("linear-gradient(left top,#eee,#fff);"+e)).slice(0,-e.length),!!o.backgroundImage},rgba:function(){return o.cssText="background-color:rgba(0,0,0,0.5)",!!o.backgroundColor},opacity:function(){return""===i.style.opacity},textshadow:function(){return""===o.textShadow},multiplebgs:function(){o.cssText="background:url(https://),url(https://),red url(https://)";var e=(o.background||"").match(/url/g);return"[object Array]"===Object.prototype.toString.call(e)&&3===e.length},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in e},retina:function(){return e.devicePixelRatio>1},fontface:function(){var e=c.browser.name,t=c.browser.version;switch(e){case"ie":return t>=9;case"chrome":return t>=13;case"ff":return t>=6;case"ios":return t>=5;case"android":return!1;case"webkit":return t>=5.1;case"opera":return t>=10;default:return!1}}};for(var u in d)d[u]&&c.feature(u,d[u].call(),!0);c.feature()}(window),function(e,t){"use strict";function n(){}function r(e,t){if(e){"object"==typeof e&&(e=[].slice.call(e));for(var n=0,r=e.length;n"),S.progressbar=S.progress.querySelector("span"),S.controls=$(S.wrapper,"aside","controls",''),S.slideNumber=$(S.wrapper,"div","slide-number",""),S.speakerNotes=$(S.wrapper,"div","speaker-notes",null),S.speakerNotes.setAttribute("data-prevent-swipe",""),S.speakerNotes.setAttribute("tabindex","0"),S.pauseOverlay=$(S.wrapper,"div","pause-overlay",f.controls?'':null),S.wrapper.setAttribute("role","application"),S.controlsLeft=Q(document.querySelectorAll(".navigate-left")),S.controlsRight=Q(document.querySelectorAll(".navigate-right")),S.controlsUp=Q(document.querySelectorAll(".navigate-up")),S.controlsDown=Q(document.querySelectorAll(".navigate-down")),S.controlsPrev=Q(document.querySelectorAll(".navigate-prev")),S.controlsNext=Q(document.querySelectorAll(".navigate-next")),S.controlsRightArrow=S.controls.querySelector(".navigate-right"),S.controlsDownArrow=S.controls.querySelector(".navigate-down"),S.statusDiv=((r=document.getElementById("aria-status-div"))||((r=document.createElement("div")).style.position="absolute",r.style.height="1px",r.style.width="1px",r.style.overflow="hidden",r.style.clip="rect( 1px, 1px, 1px, 1px )",r.setAttribute("id","aria-status-div"),r.setAttribute("aria-live","polite"),r.setAttribute("aria-atomic","true"),S.wrapper.appendChild(r)),r),f.postMessage&&window.addEventListener("message",function(t){var n=t.data;"string"==typeof n&&"{"===n.charAt(0)&&"}"===n.charAt(n.length-1)&&(n=JSON.parse(n)).method&&"function"==typeof e[n.method]&&e[n.method].apply(e,n.args)},!1),setInterval(function(){0===S.wrapper.scrollTop&&0===S.wrapper.scrollLeft||(S.wrapper.scrollTop=0,S.wrapper.scrollLeft=0)},1e3),Q(S.wrapper.querySelectorAll(d)).forEach(function(e){var t=Q(e.querySelectorAll("section"));t.forEach(function(e,t){t>0&&(e.classList.remove("present"),e.classList.remove("past"),e.classList.add("future"),e.setAttribute("aria-hidden","true"))})}),Y(),it(),Xe(!0),setTimeout(function(){S.slides.classList.remove("no-transition"),S.wrapper.classList.add("ready"),le("ready",{indexh:t,indexv:n,currentSlide:i})},1),ae()&&(J(),"complete"===document.readyState?X():window.addEventListener("load",X))}function F(e,t){var n=document.createElement("script");n.type="text/javascript",n.async=!1,n.defer=!1,n.src=e,t&&(n.onload=n.onreadystatechange=function(e){("load"===e.type||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=n.onerror=null,t())},n.onerror=function(e){n.onload=n.onreadystatechange=n.onerror=null,t(new Error("Failed loading script: "+n.src+"\n"+e))});var r=document.querySelector("head");r.insertBefore(n,r.lastChild)}function U(e){var t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){var n=e.getAttribute("aria-hidden"),r="none"===window.getComputedStyle(e).display;"true"===n||r||Q(e.childNodes).forEach(function(e){t+=U(e)})}return t}function X(){var e=me(window.innerWidth,window.innerHeight),t=Math.floor(e.width*(1+f.margin)),n=Math.floor(e.height*(1+f.margin)),r=e.width,i=e.height;re("@page{size:"+t+"px "+n+"px; margin: 0px;}"),re(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+r+"px; max-height:"+i+"px}"),document.body.classList.add("print-pdf"),document.body.style.width=t+"px",document.body.style.height=n+"px",ge(r,i),Q(S.wrapper.querySelectorAll(d)).forEach(function(e,t){e.setAttribute("data-index-h",t),e.classList.contains("stack")&&Q(e.querySelectorAll("section")).forEach(function(e,n){e.setAttribute("data-index-h",t),e.setAttribute("data-index-v",n)})}),Q(S.wrapper.querySelectorAll(c)).forEach(function(e){if(!1===e.classList.contains("stack")){var o=(t-r)/2,a=(n-i)/2,s=e.scrollHeight,l=Math.max(Math.ceil(s/n),1);(1===(l=Math.min(l,f.pdfMaxPagesPerSlide))&&f.center||e.classList.contains("center"))&&(a=Math.max((n-s)/2,0));var c=document.createElement("div");if(c.className="pdf-page",c.style.height=(n+f.pdfPageHeightOffset)*l+"px",e.parentNode.insertBefore(c,e),c.appendChild(e),e.style.left=o+"px",e.style.top=a+"px",e.style.width=r+"px",e.slideBackgroundElement&&c.insertBefore(e.slideBackgroundElement,e),f.showNotes){var d=ut(e);if(d){var u="string"==typeof f.showNotes?f.showNotes:"inline",p=document.createElement("div");p.classList.add("speaker-notes"),p.classList.add("speaker-notes-pdf"),p.setAttribute("data-layout",u),p.innerHTML=d,"separate-page"===u?c.parentNode.insertBefore(p,c.nextSibling):(p.style.left="8px",p.style.bottom="8px",p.style.width=t-16+"px",c.appendChild(p))}}if(f.slideNumber&&/all|print/i.test(f.showSlideNumber)){var h=parseInt(e.getAttribute("data-index-h"),10)+1,g=parseInt(e.getAttribute("data-index-v"),10)+1,m=document.createElement("div");m.classList.add("slide-number"),m.classList.add("slide-number-pdf"),m.innerHTML=Fe(h,".",g),c.appendChild(m)}if(f.pdfSeparateFragments){var v,y,b=ht(c.querySelectorAll(".fragment"),!0);b.forEach(function(e){v&&v.forEach(function(e){e.classList.remove("current-fragment")}),e.forEach(function(e){e.classList.add("visible","current-fragment")});var t=c.cloneNode(!0);c.parentNode.insertBefore(t,(y||c).nextSibling),v=e,y=t}),b.forEach(function(e){e.forEach(function(e){e.classList.remove("visible","current-fragment")})})}else Q(c.querySelectorAll(".fragment:not(.fade-out)")).forEach(function(e){e.classList.add("visible")})}}),le("pdf-ready")}function $(e,t,n,r){for(var i=e.querySelectorAll("."+n),o=0;o1&&f.autoSlide&&f.autoSlideStoppable&&N.canvas&&N.requestAnimationFrame&&((l=new Qt(S.wrapper,function(){return Math.min(Math.max((Date.now()-O)/_,0),1)})).on("click",Zt),D=!1),!1===f.fragments&&Q(S.slides.querySelectorAll(".fragment")).forEach(function(e){e.classList.add("visible"),e.classList.remove("current-fragment")});var r="none";f.slideNumber&&!ae()&&("all"===f.showSlideNumber?r="block":"speaker"===f.showSlideNumber&&rt()&&(r="block")),S.slideNumber.style.display=r,"default"!==f.navigationMode?S.wrapper.setAttribute("data-navigation-mode",f.navigationMode):S.wrapper.removeAttribute("data-navigation-mode"),"linear"===f.navigationMode?(z["→ , ↓ , SPACE , N , L , J"]="Next slide",z["← , ↑ , P , H , K"]="Previous slide"):(z["N , SPACE"]="Next slide",z.P="Previous slide",z["← , H"]="Navigate left",z["→ , L"]="Navigate right",z["↑ , K"]="Navigate up",z["↓ , J"]="Navigate down"),z["Home , ⌘/CTRL ←"]="First slide",z["End , ⌘/CTRL →"]="Last slide",z["B , ."]="Pause",z.F="Fullscreen",z["ESC, O"]="Slide overview",Pe()}}function G(){var e;(M=!0,window.addEventListener("hashchange",Kt,!1),window.addEventListener("resize",Vt,!1),f.touch&&("onpointerdown"in window?(S.wrapper.addEventListener("pointerdown",Ot,!1),S.wrapper.addEventListener("pointermove",Dt,!1),S.wrapper.addEventListener("pointerup",Ht,!1)):window.navigator.msPointerEnabled?(S.wrapper.addEventListener("MSPointerDown",Ot,!1),S.wrapper.addEventListener("MSPointerMove",Dt,!1),S.wrapper.addEventListener("MSPointerUp",Ht,!1)):(S.wrapper.addEventListener("touchstart",Mt,!1),S.wrapper.addEventListener("touchmove",_t,!1),S.wrapper.addEventListener("touchend",Pt,!1))),f.keyboard&&(document.addEventListener("keydown",Rt,!1),document.addEventListener("keypress",qt,!1)),f.progress&&S.progress&&S.progress.addEventListener("click",Bt,!1),S.pauseOverlay.addEventListener("click",Ie,!1),f.focusBodyOnPageVisibilityChange)&&("hidden"in document?e="visibilitychange":"msHidden"in document?e="msvisibilitychange":"webkitHidden"in document&&(e="webkitvisibilitychange"),e&&document.addEventListener(e,Yt,!1));var t=["touchstart","click"];h.match(/android/gi)&&(t=["touchstart"]),t.forEach(function(e){S.controlsLeft.forEach(function(t){t.addEventListener(e,jt,!1)}),S.controlsRight.forEach(function(t){t.addEventListener(e,Wt,!1)}),S.controlsUp.forEach(function(t){t.addEventListener(e,Ft,!1)}),S.controlsDown.forEach(function(t){t.addEventListener(e,Ut,!1)}),S.controlsPrev.forEach(function(t){t.addEventListener(e,Xt,!1)}),S.controlsNext.forEach(function(t){t.addEventListener(e,$t,!1)})})}function J(){M=!1,document.removeEventListener("keydown",Rt,!1),document.removeEventListener("keypress",qt,!1),window.removeEventListener("hashchange",Kt,!1),window.removeEventListener("resize",Vt,!1),S.wrapper.removeEventListener("pointerdown",Ot,!1),S.wrapper.removeEventListener("pointermove",Dt,!1),S.wrapper.removeEventListener("pointerup",Ht,!1),S.wrapper.removeEventListener("MSPointerDown",Ot,!1),S.wrapper.removeEventListener("MSPointerMove",Dt,!1),S.wrapper.removeEventListener("MSPointerUp",Ht,!1),S.wrapper.removeEventListener("touchstart",Mt,!1),S.wrapper.removeEventListener("touchmove",_t,!1),S.wrapper.removeEventListener("touchend",Pt,!1),S.pauseOverlay.removeEventListener("click",Ie,!1),f.progress&&S.progress&&S.progress.removeEventListener("click",Bt,!1),["touchstart","click"].forEach(function(e){S.controlsLeft.forEach(function(t){t.removeEventListener(e,jt,!1)}),S.controlsRight.forEach(function(t){t.removeEventListener(e,Wt,!1)}),S.controlsUp.forEach(function(t){t.removeEventListener(e,Ft,!1)}),S.controlsDown.forEach(function(t){t.removeEventListener(e,Ut,!1)}),S.controlsPrev.forEach(function(t){t.removeEventListener(e,Xt,!1)}),S.controlsNext.forEach(function(t){t.removeEventListener(e,$t,!1)})})}function Z(e,t){for(var n in t)e[n]=t[n];return e}function Q(e){return Array.prototype.slice.call(e)}function ee(e){if("string"==typeof e){if("null"===e)return null;if("true"===e)return!0;if("false"===e)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e}function te(e,t){e.style.WebkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.transform=t}function ne(e){"string"==typeof e.layout&&(A.layout=e.layout),"string"==typeof e.overview&&(A.overview=e.overview),A.layout?te(S.slides,A.layout+" "+A.overview):te(S.slides,A.overview)}function re(e){var t=document.createElement("style");t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e)),document.getElementsByTagName("head")[0].appendChild(t)}function ie(e,t){for(var n=e.parentNode;n;){var r=n.matches||n.matchesSelector||n.msMatchesSelector;if(r&&r.call(n,t))return n;n=n.parentNode}return null}function oe(e){var t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};var n=e.match(/^#([0-9a-f]{6})$/i);if(n&&n[1])return n=n[1],{r:parseInt(n.substr(0,2),16),g:parseInt(n.substr(2,2),16),b:parseInt(n.substr(4,2),16)};var r=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(r)return{r:parseInt(r[1],10),g:parseInt(r[2],10),b:parseInt(r[3],10)};var i=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return i?{r:parseInt(i[1],10),g:parseInt(i[2],10),b:parseInt(i[3],10),a:parseFloat(i[4])}:null}function ae(){return/print-pdf/gi.test(window.location.search)}function se(){setTimeout(function(){window.scrollTo(0,1)},10)}function le(e,t){var n=document.createEvent("HTMLEvents",1,2);n.initEvent(e,!0,!0),Z(n,t),S.wrapper.dispatchEvent(n),f.postMessageEvents&&window.parent!==window.self&&window.parent.postMessage(JSON.stringify({namespace:"reveal",eventName:e,state:pt()}),"*")}function ce(e){Q(document.querySelectorAll(e||"a")).forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",Jt,!1)})}function de(e){Q(document.querySelectorAll(e||"a")).forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",Jt,!1)})}function ue(e){"boolean"==typeof e?e?pe():he():S.overlay?he():pe()}function pe(){if(f.help){he(),S.overlay=document.createElement("div"),S.overlay.classList.add("overlay"),S.overlay.classList.add("overlay-help"),S.wrapper.appendChild(S.overlay);var e='

Keyboard Shortcuts


';for(var t in e+="",z)e+="";for(var n in B)B[n].key&&B[n].description&&(e+="");e+="
KEYACTION
"+t+""+z[t]+"
"+B[n].key+""+B[n].description+"
",S.overlay.innerHTML=["
",'',"
",'
','
'+e+"
","
"].join(""),S.overlay.querySelector(".close").addEventListener("click",function(e){he(),e.preventDefault()},!1),setTimeout(function(){S.overlay.classList.add("visible")},1)}}function he(){S.overlay&&(S.overlay.parentNode.removeChild(S.overlay),S.overlay=null)}function fe(){if(S.wrapper&&!ae()){if(!f.disableLayout){a&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");var e=me(),t=x;ge(f.width,f.height),S.slides.style.width=e.width+"px",S.slides.style.height=e.height+"px",x=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),x=Math.max(x,f.minScale),1===(x=Math.min(x,f.maxScale))?(S.slides.style.zoom="",S.slides.style.left="",S.slides.style.top="",S.slides.style.bottom="",S.slides.style.right="",ne({layout:""})):x>1&&N.zoom?(S.slides.style.zoom=x,S.slides.style.left="",S.slides.style.top="",S.slides.style.bottom="",S.slides.style.right="",ne({layout:""})):(S.slides.style.zoom="",S.slides.style.left="50%",S.slides.style.top="50%",S.slides.style.bottom="auto",S.slides.style.right="auto",ne({layout:"translate(-50%, -50%) scale("+x+")"}));for(var n=Q(S.wrapper.querySelectorAll(c)),r=0,i=n.length;r .stretch")).forEach(function(n){var r=function(e,t){if(t=t||0,e){var n,r=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",n=t-e.parentNode.offsetHeight,e.style.height=r+"px",e.parentNode.style.removeProperty("height"),n}return t}(n,t);if(/(img|video)/gi.test(n.nodeName)){var i=n.naturalWidth||n.videoWidth,o=n.naturalHeight||n.videoHeight,a=Math.min(e/i,r/o);n.style.width=i*a+"px",n.style.height=o*a+"px"}else n.style.width=e+"px",n.style.height=r+"px"})}function me(e,t){var n={width:f.width,height:f.height,presentationWidth:e||S.wrapper.offsetWidth,presentationHeight:t||S.wrapper.offsetHeight};return n.presentationWidth-=n.presentationWidth*f.margin,n.presentationHeight-=n.presentationHeight*f.margin,"string"==typeof n.width&&/%$/.test(n.width)&&(n.width=parseInt(n.width,10)/100*n.presentationWidth),"string"==typeof n.height&&/%$/.test(n.height)&&(n.height=parseInt(n.height,10)/100*n.presentationHeight),n}function ve(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function ye(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){var t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function be(){if(f.overview&&!Ae()){v=!0,S.wrapper.classList.add("overview"),S.wrapper.classList.remove("overview-deactivating"),N.overviewTransitions&&setTimeout(function(){S.wrapper.classList.add("overview-animated")},1),bt(),S.slides.appendChild(S.background),Q(S.wrapper.querySelectorAll(c)).forEach(function(e){e.classList.contains("stack")||e.addEventListener("click",Gt,!0)});var e=me();y=e.width+70,b=e.height+70,f.rtl&&(y=-y),ze(),we(),ke(),fe(),le("overviewshown",{indexh:t,indexv:n,currentSlide:i})}}function we(){Q(S.wrapper.querySelectorAll(d)).forEach(function(e,t){e.setAttribute("data-index-h",t),te(e,"translate3d("+t*y+"px, 0, 0)"),e.classList.contains("stack")&&Q(e.querySelectorAll("section")).forEach(function(e,n){e.setAttribute("data-index-h",t),e.setAttribute("data-index-v",n),te(e,"translate3d(0, "+n*b+"px, 0)")})}),Q(S.background.childNodes).forEach(function(e,t){te(e,"translate3d("+t*y+"px, 0, 0)"),Q(e.querySelectorAll(".slide-background")).forEach(function(e,t){te(e,"translate3d(0, "+t*b+"px, 0)")})})}function ke(){var e=Math.min(window.innerWidth,window.innerHeight);ne({overview:["scale("+Math.max(e/5,150)/e+")","translateX("+-t*y+"px)","translateY("+-n*b+"px)"].join(" ")})}function Ee(){f.overview&&(v=!1,S.wrapper.classList.remove("overview"),S.wrapper.classList.remove("overview-animated"),S.wrapper.classList.add("overview-deactivating"),setTimeout(function(){S.wrapper.classList.remove("overview-deactivating")},1),S.wrapper.appendChild(S.background),Q(S.wrapper.querySelectorAll(c)).forEach(function(e){te(e,""),e.removeEventListener("click",Gt,!0)}),Q(S.background.querySelectorAll(".slide-background")).forEach(function(e){te(e,"")}),ne({overview:""}),_e(t,n),fe(),yt(),le("overviewhidden",{indexh:t,indexv:n,currentSlide:i}))}function xe(e){"boolean"==typeof e?e?be():Ee():Ae()?Ee():be()}function Ae(){return v}function Se(){var e,r="/",o=i?i.getAttribute("id"):null;if(o&&(o=encodeURIComponent(o)),f.fragmentInURL&&(e=at().f),"string"==typeof o&&o.length&&void 0===e)r="/"+o;else{var a=f.hashOneBasedIndex?1:0;(t>0||n>0||void 0!==e)&&(r+=t+a),(n>0||void 0!==e)&&(r+="/"+(n+a)),void 0!==e&&(r+="/"+e)}return r}function Le(e){return(e=e||i)&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Te(){q&&(q=!1,S.wrapper.style.cursor="")}function Ne(){!1===q&&(q=!0,S.wrapper.style.cursor="none")}function Ce(){if(f.pause){var e=S.wrapper.classList.contains("paused");bt(),S.wrapper.classList.add("paused"),!1===e&&le("paused")}}function Ie(){var e=S.wrapper.classList.contains("paused");S.wrapper.classList.remove("paused"),yt(),e&&le("resumed")}function qe(e){"boolean"==typeof e?e?Ce():Ie():Re()?Ie():Ce()}function Re(){return S.wrapper.classList.contains("paused")}function Me(e){"boolean"==typeof e?e?kt():wt():D?kt():wt()}function _e(e,o,a,s){r=i;var l=S.wrapper.querySelectorAll(d);if(0!==l.length){void 0!==o||Ae()||(o=ye(l[e])),r&&r.parentNode&&r.parentNode.classList.contains("stack")&&ve(r.parentNode,n);var c=E.concat();E.length=0;var h=t||0,f=n||0;t=He(d,void 0===e?t:e),n=He(u,void 0===o?n:o),ze(),fe(),Ae()&&ke();var g=l[t],m=g.querySelectorAll("section");i=m[n]||g,void 0!==a&>(a);var v=t!==h||n!==f;v||(r=null),r&&r!==i&&(r.classList.remove("present"),r.setAttribute("aria-hidden","true"),S.wrapper.querySelector(p).classList.contains("present")&&setTimeout(function(){var e,t=Q(S.wrapper.querySelectorAll(d+".stack"));for(e in t)t[e]&&ve(t[e],0)},0));e:for(var y=0,b=E.length;y0?S.wrapper.classList.add("show-notes"):S.wrapper.classList.remove("show-notes"),Be(),(e=function(e,t,n){Q(S.slides.querySelectorAll("iframe["+e+'*="'+t+'"]')).forEach(function(t){var r=t.getAttribute(e);r&&-1===r.indexOf(n)&&t.setAttribute(e,r+(/\?/.test(r)?"&":"?")+n)})})("src","youtube.com/embed/","enablejsapi=1"),e("data-src","youtube.com/embed/","enablejsapi=1"),e("src","player.vimeo.com/","api=1"),e("data-src","player.vimeo.com/","api=1"),!1===f.autoPlayMedia?et(i,{unloadIframes:!1}):Je(i),Ae()&&we()}function Oe(e){return ht((e=e||i).querySelectorAll(".fragment"))}function De(){var e=Q(S.wrapper.querySelectorAll(d));e.forEach(function(t){S.slides.insertBefore(t,e[Math.floor(Math.random()*e.length)])})}function He(e,t){var n=Q(S.wrapper.querySelectorAll(e)),r=n.length,i=ae();if(r){f.loop&&(t%=r)<0&&(t=r+t),t=Math.max(Math.min(t,r-1),0);for(var o=0;ot&&(a.classList.add(s?"past":"future"),f.fragments&&Q(a.querySelectorAll(".fragment.visible")).forEach(function(e){e.classList.remove("visible"),e.classList.remove("current-fragment")}))}n[t].classList.add("present"),n[t].removeAttribute("hidden"),n[t].removeAttribute("aria-hidden");var l=n[t].getAttribute("data-state");l&&(E=E.concat(l.split(" ")))}else t=0;return t}function ze(){var e,r=Q(S.wrapper.querySelectorAll(d)),i=r.length;if(i&&void 0!==t){var o=Ae()?10:f.viewDistance;a&&(o=Ae()?6:2),ae()&&(o=Number.MAX_VALUE);for(var s=0;ssection>section").length?S.wrapper.classList.add("has-vertical-slides"):S.wrapper.classList.remove("has-vertical-slides"),S.wrapper.querySelectorAll(".slides>section").length>1?S.wrapper.classList.add("has-horizontal-slides"):S.wrapper.classList.remove("has-horizontal-slides")}}function Be(){f.showNotes&&S.speakerNotes&&i&&!ae()&&(S.speakerNotes.innerHTML=ut()||'No notes on this slide.')}function je(){f.progress&&S.progressbar&&(S.progressbar.style.width=nt()*S.wrapper.offsetWidth+"px")}function We(){if(f.slideNumber&&S.slideNumber){var e,r="h.v";if("function"==typeof f.slideNumber)e=f.slideNumber();else switch("string"==typeof f.slideNumber&&(r=f.slideNumber),/c/.test(r)||1!==S.wrapper.querySelectorAll(d).length||(r="c"),e=[],r){case"c":e.push(tt()+1);break;case"c/t":e.push(tt()+1,"/",lt());break;case"h/v":e.push(t+1),Le()&&e.push("/",n+1);break;default:e.push(t+1),Le()&&e.push(".",n+1)}S.slideNumber.innerHTML=Fe(e[0],e[1],e[2])}}function Fe(e,t,n){var r="#"+Se();return"number"!=typeof n||isNaN(n)?''+e+"":''+e+''+t+''+n+""}function Ue(){var e=Ye(),t=Ge();S.controlsLeft.concat(S.controlsRight).concat(S.controlsUp).concat(S.controlsDown).concat(S.controlsPrev).concat(S.controlsNext).forEach(function(e){e.classList.remove("enabled"),e.classList.remove("fragmented"),e.setAttribute("disabled","disabled")}),e.left&&S.controlsLeft.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),e.right&&S.controlsRight.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),e.up&&S.controlsUp.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),e.down&&S.controlsDown.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),(e.left||e.up)&&S.controlsPrev.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),(e.right||e.down)&&S.controlsNext.forEach(function(e){e.classList.add("enabled"),e.removeAttribute("disabled")}),i&&(t.prev&&S.controlsPrev.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),t.next&&S.controlsNext.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),Le(i)?(t.prev&&S.controlsUp.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),t.next&&S.controlsDown.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})):(t.prev&&S.controlsLeft.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),t.next&&S.controlsRight.forEach(function(e){e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}))),f.controlsTutorial&&(!k&&e.down?S.controlsDownArrow.classList.add("highlight"):(S.controlsDownArrow.classList.remove("highlight"),!w&&e.right&&0===n?S.controlsRightArrow.classList.add("highlight"):S.controlsRightArrow.classList.remove("highlight")))}function Xe(e){var r=null,a=f.rtl?"future":"past",s=f.rtl?"past":"future";if(Q(S.background.childNodes).forEach(function(i,o){i.classList.remove("past"),i.classList.remove("present"),i.classList.remove("future"),ot?i.classList.add(s):(i.classList.add("present"),r=i),(e||o===t)&&Q(i.querySelectorAll(".slide-background")).forEach(function(e,i){e.classList.remove("past"),e.classList.remove("present"),e.classList.remove("future"),in?e.classList.add("future"):(e.classList.add("present"),o===t&&(r=e))})}),o&&et(o),r){Je(r);var l=r.querySelector(".slide-background-content");if(l){var c=l.style.backgroundImage||"";/\.gif/i.test(c)&&(l.style.backgroundImage="",window.getComputedStyle(l).opacity,l.style.backgroundImage=c)}var d=o?o.getAttribute("data-background-hash"):null,u=r.getAttribute("data-background-hash");u&&u===d&&r!==o&&S.background.classList.add("no-transition"),o=r}i&&["has-light-background","has-dark-background"].forEach(function(e){i.classList.contains(e)?S.wrapper.classList.add(e):S.wrapper.classList.remove(e)}),setTimeout(function(){S.background.classList.remove("no-transition")},1)}function $e(){if(f.parallaxBackgroundImage){var e,r,i=S.wrapper.querySelectorAll(d),o=S.wrapper.querySelectorAll(u),a=S.background.style.backgroundSize.split(" ");1===a.length?e=r=parseInt(a[0],10):(e=parseInt(a[0],10),r=parseInt(a[1],10));var s,l=S.background.offsetWidth,c=i.length;s=("number"==typeof f.parallaxBackgroundHorizontal?f.parallaxBackgroundHorizontal:c>1?(e-l)/(c-1):0)*t*-1;var p,h,g=S.background.offsetHeight,m=o.length;p="number"==typeof f.parallaxBackgroundVertical?f.parallaxBackgroundVertical:(r-g)/(m-1),h=m>0?p*n:0,S.background.style.backgroundPosition=s+"px "+-h+"px"}}function Ke(e,t){t=t||{},e.style.display=f.display,Q(e.querySelectorAll("img[data-src], video[data-src], audio[data-src], iframe[data-src]")).forEach(function(e){("IFRAME"!==e.tagName||function(e){var t=f.preloadIframes;return"boolean"!=typeof t&&(t=e.hasAttribute("data-preload")),t}(e))&&(e.setAttribute("src",e.getAttribute("data-src")),e.setAttribute("data-lazy-loaded",""),e.removeAttribute("data-src"))}),Q(e.querySelectorAll("video, audio")).forEach(function(e){var t=0;Q(e.querySelectorAll("source[data-src]")).forEach(function(e){e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src"),e.setAttribute("data-lazy-loaded",""),t+=1}),t>0&&e.load()});var n=e.slideBackgroundElement;if(n){n.style.display="block";var r=e.slideBackgroundContentElement;if(!1===n.hasAttribute("data-loaded")){n.setAttribute("data-loaded","true");var i=e.getAttribute("data-background-image"),o=e.getAttribute("data-background-video"),s=e.hasAttribute("data-background-video-loop"),l=e.hasAttribute("data-background-video-muted"),c=e.getAttribute("data-background-iframe");if(i)r.style.backgroundImage="url("+encodeURI(i)+")";else if(o&&!rt()){var d=document.createElement("video");s&&d.setAttribute("loop",""),l&&(d.muted=!0),a&&(d.muted=!0,d.autoplay=!0,d.setAttribute("playsinline","")),o.split(",").forEach(function(e){d.innerHTML+=''}),r.appendChild(d)}else if(c&&!0!==t.excludeIframes){var u=document.createElement("iframe");u.setAttribute("allowfullscreen",""),u.setAttribute("mozallowfullscreen",""),u.setAttribute("webkitallowfullscreen",""),/autoplay=(1|true|yes)/gi.test(c)?u.setAttribute("data-src",c):u.setAttribute("src",c),u.style.width="100%",u.style.height="100%",u.style.maxHeight="100%",u.style.maxWidth="100%",r.appendChild(u)}}}}function Ve(e){e.style.display="none";var t=dt(e);t&&(t.style.display="none"),Q(e.querySelectorAll("video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]")).forEach(function(e){e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")}),Q(e.querySelectorAll("video[data-lazy-loaded] source[src], audio source[src]")).forEach(function(e){e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")})}function Ye(){var e=S.wrapper.querySelectorAll(d),r=S.wrapper.querySelectorAll(u),i={left:t>0,right:t0,down:n1&&(i.left=!0,i.right=!0),r.length>1&&(i.up=!0,i.down=!0)),f.rtl){var o=i.left;i.left=i.right,i.right=o}return i}function Ge(){if(i&&f.fragments){var e=i.querySelectorAll(".fragment"),t=i.querySelectorAll(".fragment:not(.visible)");return{prev:e.length-t.length>0,next:!!t.length}}return{prev:!1,next:!1}}function Je(e){e&&!rt()&&(Q(e.querySelectorAll('img[src$=".gif"]')).forEach(function(e){e.setAttribute("src",e.getAttribute("src"))}),Q(e.querySelectorAll("video, audio")).forEach(function(e){if(!ie(e,".fragment")||ie(e,".fragment.visible")){var t=f.autoPlayMedia;if("boolean"!=typeof t&&(t=e.hasAttribute("data-autoplay")||!!ie(e,".slide-background")),t&&"function"==typeof e.play)if(e.readyState>1)Ze({target:e});else if(a){var n=e.play();n&&"function"==typeof n.catch&&!1===e.controls&&n.catch(function(){e.controls=!0,e.addEventListener("play",function(){e.controls=!1})})}else e.removeEventListener("loadeddata",Ze),e.addEventListener("loadeddata",Ze)}}),Q(e.querySelectorAll("iframe[src]")).forEach(function(e){ie(e,".fragment")&&!ie(e,".fragment.visible")||Qe({target:e})}),Q(e.querySelectorAll("iframe[data-src]")).forEach(function(e){ie(e,".fragment")&&!ie(e,".fragment.visible")||e.getAttribute("src")!==e.getAttribute("data-src")&&(e.removeEventListener("load",Qe),e.addEventListener("load",Qe),e.setAttribute("src",e.getAttribute("data-src")))}))}function Ze(e){var t=!!ie(e.target,"html"),n=!!ie(e.target,".present");t&&n&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener("loadeddata",Ze)}function Qe(e){var t=e.target;if(t&&t.contentWindow){var n=!!ie(e.target,"html"),r=!!ie(e.target,".present");if(n&&r){var i=f.autoPlayMedia;"boolean"!=typeof i&&(i=t.hasAttribute("data-autoplay")||!!ie(t,".slide-background")),/youtube\.com\/embed\//.test(t.getAttribute("src"))&&i?t.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*"):/player\.vimeo\.com\//.test(t.getAttribute("src"))&&i?t.contentWindow.postMessage('{"method":"play"}',"*"):t.contentWindow.postMessage("slide:start","*")}}}function et(e,t){t=Z({unloadIframes:!0},t||{}),e&&e.parentNode&&(Q(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-ignore")||"function"!=typeof e.pause||(e.setAttribute("data-paused-by-reveal",""),e.pause())}),Q(e.querySelectorAll("iframe")).forEach(function(e){e.contentWindow&&e.contentWindow.postMessage("slide:stop","*"),e.removeEventListener("load",Qe)}),Q(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")}),Q(e.querySelectorAll('iframe[src*="player.vimeo.com/"]')).forEach(function(e){!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"method":"pause"}',"*")}),!0===t.unloadIframes&&Q(e.querySelectorAll("iframe[data-src]")).forEach(function(e){e.setAttribute("src","about:blank"),e.removeAttribute("src")}))}function tt(){var e=Q(S.wrapper.querySelectorAll(d)),t=0;e:for(var n=0;n0){t+=i.querySelectorAll(".fragment.visible").length/n.length*.9}}return Math.min(t/(e-1),1)}function rt(){return!!window.location.search.match(/receiver/gi)}function it(){var r=window.location.hash,o=r.slice(2).split("/"),a=r.replace(/#|\//gi,"");if(!/^[0-9]*$/.test(o[0])&&a.length){var s;try{s=document.getElementById(decodeURIComponent(a))}catch(e){}var l=!!i&&i.getAttribute("id")===a;if(s){if(!l){var c=e.getIndices(s);_e(c.h,c.v)}}else _e(t||0,n||0)}else{var d,u=f.hashOneBasedIndex?1:0,p=parseInt(o[0],10)-u||0,h=parseInt(o[1],10)-u||0;f.fragmentInURL&&(d=parseInt(o[2],10),isNaN(d)&&(d=void 0)),p===t&&h===n&&void 0===d||_e(p,h,d)}}function ot(e){clearTimeout(I),"number"==typeof e?I=setTimeout(ot,e):i&&(f.history||!window.history?window.location.hash=Se():f.hash?window.history.replaceState(null,null,"#"+Se()):window.history.replaceState(null,null,window.location.pathname+window.location.search))}function at(e){var r,o=t,a=n;if(e){var s=Le(e),l=s?e.parentNode:e,c=Q(S.wrapper.querySelectorAll(d));o=Math.max(c.indexOf(l),0),a=void 0,s&&(a=Math.max(Q(e.parentNode.querySelectorAll("section")).indexOf(e),0))}if(!e&&i&&i.querySelectorAll(".fragment").length>0){var u=i.querySelector(".current-fragment");r=u&&u.hasAttribute("data-fragment-index")?parseInt(u.getAttribute("data-fragment-index"),10):i.querySelectorAll(".fragment.visible").length-1}return{h:o,v:a,f:r}}function st(){return Q(S.wrapper.querySelectorAll(c+":not(.stack)"))}function lt(){return st().length}function ct(e,t){var n=S.wrapper.querySelectorAll(d)[e],r=n&&n.querySelectorAll("section");return r&&r.length&&"number"==typeof t?r?r[t]:void 0:n}function dt(e,t){var n="number"==typeof e?ct(e,t):e;if(n)return n.slideBackgroundElement}function ut(e){if((e=e||i).hasAttribute("data-notes"))return e.getAttribute("data-notes");var t=e.querySelector("aside.notes");return t?t.innerHTML:null}function pt(){var e=at();return{indexh:e.h,indexv:e.v,indexf:e.f,paused:Re(),overview:Ae()}}function ht(e,t){e=Q(e);var n=[],r=[],i=[];e.forEach(function(e,t){if(e.hasAttribute("data-fragment-index")){var i=parseInt(e.getAttribute("data-fragment-index"),10);n[i]||(n[i]=[]),n[i].push(e)}else r.push([e])}),n=n.concat(r);var o=0;return n.forEach(function(e){e.forEach(function(e){i.push(e),e.setAttribute("data-fragment-index",o)}),o++}),!0===t?n:i}function ft(e,t){var n={shown:[],hidden:[]};if(i&&f.fragments&&(t=t||ht(i.querySelectorAll(".fragment"))).length){if("number"!=typeof e){var r=ht(i.querySelectorAll(".fragment.visible")).pop();r&&(e=parseInt(r.getAttribute("data-fragment-index")||0,10))}Q(t).forEach(function(t,r){t.hasAttribute("data-fragment-index")&&(r=parseInt(t.getAttribute("data-fragment-index"),10)),r<=e?(t.classList.contains("visible")||n.shown.push(t),t.classList.add("visible"),t.classList.remove("current-fragment"),S.statusDiv.textContent=U(t),r===e&&(t.classList.add("current-fragment"),Je(t))):(t.classList.contains("visible")&&n.hidden.push(t),t.classList.remove("visible"),t.classList.remove("current-fragment"))})}return n}function gt(e,t){if(i&&f.fragments){var n=ht(i.querySelectorAll(".fragment"));if(n.length){if("number"!=typeof e){var r=ht(i.querySelectorAll(".fragment.visible")).pop();e=r?parseInt(r.getAttribute("data-fragment-index")||0,10):-1}"number"==typeof t&&(e+=t);var o=ft(e,n);return o.hidden.length&&le("fragmenthidden",{fragment:o.hidden[0],fragments:o.hidden}),o.shown.length&&le("fragmentshown",{fragment:o.shown[0],fragments:o.shown}),Ue(),je(),f.fragmentInURL&&ot(),!(!o.shown.length&&!o.hidden.length)}}return!1}function mt(){return gt(null,1)}function vt(){return gt(null,-1)}function yt(){if(bt(),i&&!1!==f.autoSlide){var t=i.querySelector(".current-fragment");t||(t=i.querySelector(".fragment"));var n=t?t.getAttribute("data-autoslide"):null,r=i.parentNode?i.parentNode.getAttribute("data-autoslide"):null,o=i.getAttribute("data-autoslide");_=n?parseInt(n,10):o?parseInt(o,10):r?parseInt(r,10):f.autoSlide,0===i.querySelectorAll(".fragment").length&&Q(i.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-autoplay")&&_&&1e3*e.duration/e.playbackRate>_&&(_=1e3*e.duration/e.playbackRate+1e3)}),!_||D||Re()||Ae()||e.isLastSlide()&&!Ge().next&&!0!==f.loop||(P=setTimeout(function(){"function"==typeof f.autoSlideMethod?f.autoSlideMethod():Tt(),yt()},_),O=Date.now()),l&&l.setPlaying(-1!==P)}}function bt(){clearTimeout(P),P=-1}function wt(){_&&!D&&(D=!0,le("autoslidepaused"),clearTimeout(P),l&&l.setPlaying(!1))}function kt(){_&&D&&(D=!1,le("autoslideresumed"),yt())}function Et(){f.rtl?(Ae()||!1===mt())&&Ye().left&&_e(t+1,"grid"===f.navigationMode?n:void 0):(Ae()||!1===vt())&&Ye().left&&_e(t-1,"grid"===f.navigationMode?n:void 0)}function xt(){w=!0,f.rtl?(Ae()||!1===vt())&&Ye().right&&_e(t-1,"grid"===f.navigationMode?n:void 0):(Ae()||!1===mt())&&Ye().right&&_e(t+1,"grid"===f.navigationMode?n:void 0)}function At(){(Ae()||!1===vt())&&Ye().up&&_e(t,n-1)}function St(){k=!0,(Ae()||!1===mt())&&Ye().down&&_e(t,n+1)}function Lt(){var e;if(!1===vt())if(Ye().up)At();else if(e=f.rtl?Q(S.wrapper.querySelectorAll(d+".future")).pop():Q(S.wrapper.querySelectorAll(d+".past")).pop()){var n=e.querySelectorAll("section").length-1||void 0;_e(t-1,n)}}function Tt(){if(w=!0,k=!0,!1===mt()){var t=Ye();t.down&&t.right&&f.loop&&e.isLastVerticalSlide(i)&&(t.down=!1),t.down?St():f.rtl?Et():xt()}}function Nt(e){for(;e&&"function"==typeof e.hasAttribute;){if(e.hasAttribute("data-prevent-swipe"))return!0;e=e.parentNode}return!1}function Ct(e){f.autoSlideStoppable&&wt()}function It(e){Te(),clearTimeout(R),R=setTimeout(Ne,f.hideCursorTime)}function qt(e){e.shiftKey&&63===e.charCode&&ue()}function Rt(t){if("function"==typeof f.keyboardCondition&&!1===f.keyboardCondition(t))return!0;var n=t.keyCode,r=D;Ct();var i=document.activeElement&&"inherit"!==document.activeElement.contentEditable,o=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),a=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),s=t.shiftKey&&32===t.keyCode,l=(t.metaKey||t.ctrlKey)&&37===n,c=(t.metaKey||t.ctrlKey)&&39===n,d=!s&&!l&&!c&&(t.shiftKey||t.altKey||t.ctrlKey||t.metaKey);if(!(i||o||a||d)){var u,p=[66,86,190,191];if("object"==typeof f.keyboard)for(u in f.keyboard)"togglePause"===f.keyboard[u]&&p.push(parseInt(u,10));if(Re()&&-1===p.indexOf(n))return!1;var h,g,m=!1;if("object"==typeof f.keyboard)for(u in f.keyboard)if(parseInt(u,10)===n){var v=f.keyboard[u];"function"==typeof v?v.apply(null,[t]):"string"==typeof v&&"function"==typeof e[v]&&e[v].call(),m=!0}if(!1===m)for(u in B)if(parseInt(u,10)===n){var y=B[u].callback;"function"==typeof y?y.apply(null,[t]):"string"==typeof y&&"function"==typeof e[y]&&e[y].call(),m=!0}!1===m&&(m=!0,80===n||33===n?Lt():78===n||34===n?Tt():72===n||37===n?l?_e(0):Ae()||"linear"!==f.navigationMode?Et():Lt():76===n||39===n?c?_e(Number.MAX_VALUE):Ae()||"linear"!==f.navigationMode?xt():Tt():75===n||38===n?Ae()||"linear"!==f.navigationMode?At():Lt():74===n||40===n?Ae()||"linear"!==f.navigationMode?St():Tt():36===n?_e(0):35===n?_e(Number.MAX_VALUE):32===n?(Ae()&&Ee(),t.shiftKey?Lt():Tt()):58===n||59===n||66===n||86===n||190===n||191===n?qe():70===n?(h=document.documentElement,(g=h.requestFullscreen||h.webkitRequestFullscreen||h.webkitRequestFullScreen||h.mozRequestFullScreen||h.msRequestFullscreen)&&g.apply(h)):65===n?f.autoSlideStoppable&&Me(r):m=!1),m?t.preventDefault&&t.preventDefault():27!==n&&79!==n||!N.transforms3d||(S.overlay?he():xe(),t.preventDefault&&t.preventDefault()),yt()}}function Mt(e){if(Nt(e.target))return!0;H.startX=e.touches[0].clientX,H.startY=e.touches[0].clientY,H.startCount=e.touches.length}function _t(e){if(Nt(e.target))return!0;if(H.captured)h.match(/android/gi)&&e.preventDefault();else{Ct();var t=e.touches[0].clientX,n=e.touches[0].clientY;if(1===e.touches.length&&2!==H.startCount){var r=t-H.startX,o=n-H.startY;r>H.threshold&&Math.abs(r)>Math.abs(o)?(H.captured=!0,Et()):r<-H.threshold&&Math.abs(r)>Math.abs(o)?(H.captured=!0,xt()):o>H.threshold?(H.captured=!0,At()):o<-H.threshold&&(H.captured=!0,St()),f.embedded?(H.captured||Le(i))&&e.preventDefault():e.preventDefault()}}}function Pt(e){H.captured=!1}function Ot(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],Mt(e))}function Dt(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],_t(e))}function Ht(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],Pt())}function zt(e){if(Date.now()-C>600){C=Date.now();var t=e.detail||-e.wheelDelta;t>0?Tt():t<0&&Lt()}}function Bt(e){Ct(),e.preventDefault();var t=Q(S.wrapper.querySelectorAll(d)).length,n=Math.floor(e.clientX/S.wrapper.offsetWidth*t);f.rtl&&(n=t-n),_e(n)}function jt(e){e.preventDefault(),Ct(),"linear"===f.navigationMode?Lt():Et()}function Wt(e){e.preventDefault(),Ct(),"linear"===f.navigationMode?Tt():xt()}function Ft(e){e.preventDefault(),Ct(),At()}function Ut(e){e.preventDefault(),Ct(),St()}function Xt(e){e.preventDefault(),Ct(),Lt()}function $t(e){e.preventDefault(),Ct(),Tt()}function Kt(e){it()}function Vt(e){fe()}function Yt(e){!1===(document.webkitHidden||document.msHidden||document.hidden)&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Gt(e){if(M&&Ae()){e.preventDefault();for(var t=e.target;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled"))if(Ee(),t.nodeName.match(/section/gi))_e(parseInt(t.getAttribute("data-index-h"),10),parseInt(t.getAttribute("data-index-v"),10))}}function Jt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){var t=e.currentTarget.getAttribute("href");t&&(!function(e){he(),S.overlay=document.createElement("div"),S.overlay.classList.add("overlay"),S.overlay.classList.add("overlay-preview"),S.wrapper.appendChild(S.overlay),S.overlay.innerHTML=["
",'','',"
",'
','
','','','Unable to load iframe. This is likely due to the site\'s policy (x-frame-options).',"","
"].join(""),S.overlay.querySelector("iframe").addEventListener("load",function(e){S.overlay.classList.add("loaded")},!1),S.overlay.querySelector(".close").addEventListener("click",function(e){he(),e.preventDefault()},!1),S.overlay.querySelector(".external").addEventListener("click",function(e){he()},!1),setTimeout(function(){S.overlay.classList.add("visible")},1)}(t),e.preventDefault())}}function Zt(t){e.isLastSlide()&&!1===f.loop?(_e(0,0),kt()):D?kt():wt()}function Qt(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}return Qt.prototype.setPlaying=function(e){var t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()},Qt.prototype.animate=function(){var e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&N.requestAnimationFrameMethod.call(window,this.animate.bind(this))},Qt.prototype.render=function(){var e=this.playing?this.progress:0,t=this.diameter2-this.thickness,n=this.diameter2,r=this.diameter2;this.progressOffset+=.1*(1-this.progressOffset);var i=-Math.PI/2+e*(2*Math.PI),o=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(n,r,t+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(n,r,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(n,r,t,o,i,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(n-14,r-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,28),this.context.fillRect(18,0,10,28)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,28),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()},Qt.prototype.on=function(e,t){this.canvas.addEventListener(e,t,!1)},Qt.prototype.off=function(e,t){this.canvas.removeEventListener(e,t,!1)},Qt.prototype.destroy=function(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)},e={VERSION:"3.8.0",initialize:function(t){if(!0!==g)if(g=!0,function(){a=/(iphone|ipod|ipad|android)/gi.test(h),s=/chrome/i.test(h)&&!/edge/i.test(h);var e=document.createElement("div");N.transforms3d="WebkitPerspective"in e.style||"MozPerspective"in e.style||"msPerspective"in e.style||"OPerspective"in e.style||"perspective"in e.style,N.transforms2d="WebkitTransform"in e.style||"MozTransform"in e.style||"msTransform"in e.style||"OTransform"in e.style||"transform"in e.style,N.requestAnimationFrameMethod=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,N.requestAnimationFrame="function"==typeof N.requestAnimationFrameMethod,N.canvas=!!document.createElement("canvas").getContext,N.overviewTransitions=!/Version\/[\d\.]+.*Safari/.test(h),N.zoom="zoom"in e.style&&!a&&(s||/Version\/[\d\.]+.*Safari/.test(h))}(),N.transforms2d||N.transforms3d){S.wrapper=document.querySelector(".reveal"),S.slides=document.querySelector(".reveal .slides"),window.addEventListener("load",fe,!1);var n,r,i=e.getQueryHash();void 0!==i.dependencies&&delete i.dependencies,Z(f,t),Z(f,i),f.hideAddressBar&&a&&(window.addEventListener("load",se,!1),window.addEventListener("orientationchange",se,!1)),n=[],r=0,f.dependencies.forEach(function(e){e.condition&&!e.condition()||(e.async?T.push(e):n.push(e))}),n.length?(r=n.length,n.forEach(function(e){F(e.src,function(){"function"==typeof e.callback&&e.callback(),0==--r&&j()})})):j()}else{document.body.setAttribute("class","no-transforms");for(var o=Q(document.getElementsByTagName("img")),l=Q(document.getElementsByTagName("iframe")),c=o.concat(l),d=0,u=c.length;d[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:l,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};function t(t){this.tokens=[],this.tokens.links={},this.options=t||d.defaults,this.rules=e.normal,this.options.gfm&&(this.options.tables?this.rules=e.tables:this.rules=e.gfm)}e.bullet=/(?:[*+-]|\d+\.)/,e.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,e.item=s(e.item,"gm")(/bull/g,e.bullet)(),e.list=s(e.list)(/bull/g,e.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+e.def.source+")")(),e.blockquote=s(e.blockquote)("def",e.def)(),e._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",e.html=s(e.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,e._tag)(),e.paragraph=s(e.paragraph)("hr",e.hr)("heading",e.heading)("lheading",e.lheading)("blockquote",e.blockquote)("tag","<"+e._tag)("def",e.def)(),e.normal=c({},e),e.gfm=c({},e.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),e.gfm.paragraph=s(e.paragraph)("(?!","(?!"+e.gfm.fences.source.replace("\\1","\\2")+"|"+e.list.source.replace("\\1","\\3")+"|")(),e.tables=c({},e.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),t.rules=e,t.lex=function(e,n){return new t(n).lex(e)},t.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},t.prototype.token=function(t,n,r){var i,o,a,s,l,c,d,u,p;for(t=t.replace(/^ +$/gm,"");t;)if((a=this.rules.newline.exec(t))&&(t=t.substring(a[0].length),a[0].length>1&&this.tokens.push({type:"space"})),a=this.rules.code.exec(t))t=t.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?a:a.replace(/\n+$/,"")});else if(a=this.rules.fences.exec(t))t=t.substring(a[0].length),this.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=this.rules.heading.exec(t))t=t.substring(a[0].length),this.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(n&&(a=this.rules.nptable.exec(t))){for(t=t.substring(a[0].length),c={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/\n$/,"").split("\n")},u=0;u ?/gm,""),this.token(a,n,!0),this.tokens.push({type:"blockquote_end"});else if(a=this.rules.list.exec(t)){for(t=t.substring(a[0].length),s=a[2],this.tokens.push({type:"list_start",ordered:s.length>1}),i=!1,p=(a=a[0].match(this.rules.item)).length,u=0;u1&&l.length>1||(t=a.slice(u+1).join("\n")+t,u=p-1)),o=i||/\n\n(?!\s*$)/.test(c),u!==p-1&&(i="\n"===c.charAt(c.length-1),o||(o=i)),this.tokens.push({type:o?"loose_item_start":"list_item_start"}),this.token(c,!1,r),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(a=this.rules.html.exec(t))t=t.substring(a[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===a[1]||"script"===a[1]||"style"===a[1]),text:a[0]});else if(!r&&n&&(a=this.rules.def.exec(t)))t=t.substring(a[0].length),this.tokens.links[a[1].toLowerCase()]={href:a[2],title:a[3]};else if(n&&(a=this.rules.table.exec(t))){for(t=t.substring(a[0].length),c={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:l,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:l,text:/^[\s\S]+?(?=[\\/g,">").replace(/"/g,""").replace(/'/g,"'")}function s(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=(i=i.source||i).replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,i),n):new RegExp(e,t)}}function l(){}function c(e){for(var t,n,r=1;rAn error occured:

"+a(e.message+"",!0)+"
";throw e}}n._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/,n._href=/\s*?(?:\s+['"]([\s\S]*?)['"])?\s*/,n.link=s(n.link)("inside",n._inside)("href",n._href)(),n.reflink=s(n.reflink)("inside",n._inside)(),n.normal=c({},n),n.pedantic=c({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),n.gfm=c({},n.normal,{escape:s(n.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(n.text)("]|","~]|")("|","|https?://|")()}),n.breaks=c({},n.gfm,{br:s(n.br)("{2,}","*")(),text:s(n.gfm.text)("{2,}","*")()}),r.rules=n,r.output=function(e,t,n){return new r(t,n).output(e)},r.prototype.output=function(e){for(var t,n,r,i,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=i[1];else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),"@"===i[2]?(n=":"===i[1].charAt(6)?this.mangle(i[1].substring(7)):this.mangle(i[1]),r=this.mangle("mailto:")+n):r=n=a(i[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.tag.exec(e))!this.inLink&&/^/i.test(i[0])&&(this.inLink=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):a(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,o+=this.outputLink(i,{href:i[2],title:i[3]}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(a(i[2],!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),o+=this.renderer.text(a(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(i[0].length),r=n=a(i[1]),o+=this.renderer.link(r,null,n);return o},r.prototype.outputLink=function(e,t){var n=a(t.href),r=t.title?a(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,a(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
'+(n?e:a(e,!0))+"\n
\n":"
"+(n?e:a(e,!0))+"\n
"},i.prototype.blockquote=function(e){return"
\n"+e+"
\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n){return"'+e+"\n"},i.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},i.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"\n"},i.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},i.prototype.paragraph=function(e){return"

    "+e+"

    \n"},i.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},i.prototype.tablerow=function(e){return"\n"+e+"\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">")+e+"\n"},i.prototype.strong=function(e){return""+e+""},i.prototype.em=function(e){return""+e+""},i.prototype.codespan=function(e){return""+e+""},i.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},i.prototype.del=function(e){return""+e+""},i.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent((i=e,i.replace(/&([#\w]+);/g,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:"))return""}var i,o='
    "},i.prototype.image=function(e,t,n){var r=''+n+'":">"},i.prototype.text=function(e){return e},o.parse=function(e,t,n){return new o(t,n).parse(e)},o.prototype.parse=function(e){this.inline=new r(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},o.prototype.next=function(){return this.token=this.tokens.pop()},o.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},o.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},o.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e")).match(/^\n?(\s*)/)[1].length,r=t.match(/^\n?(\t*)/)[1].length;return r>0?t=t.replace(new RegExp("\\n?\\t{"+r+"}","g"),"\n"):n>1&&(t=t.replace(new RegExp("\\n? {"+n+"}","g"),"\n")),t}function s(e){for(var t=e.attributes,n=[],r=0,i=t.length;r'+e(r[1].trim())+""),'",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("vbscript",function(e){return{aliases:["vbs"],cI:!0,k:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},i:"//",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C(/'/,/$/,{r:0}),e.CNM]}});hljs.registerLanguage("vbscript-html",function(r){return{sL:"xml",c:[{b:"<%",e:"%>",sL:"vbscript"}]}});hljs.registerLanguage("typescript",function(e){var r={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"};return{aliases:["ts"],k:r,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:["self",e.CLCM,e.CBCM]}]}]}],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:r,c:["self",e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/%/,r:0},{bK:"constructor",e:/\{/,eE:!0,c:["self",{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}]},{b:/module\./,k:{built_in:"module"},r:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("bnf",function(e){return{c:[{cN:"attribute",b://},{b:/::=/,starts:{e:/$/,c:[{b://},e.CLCM,e.CBCM,e.ASM,e.QSM]}}]}});hljs.registerLanguage("moonscript",function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},r="[A-Za-z$_][0-9A-Za-z$_]*",s={cN:"subst",b:/#\{/,e:/}/,k:t},a=[e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'/,e:/'/,c:[e.BE]},{b:/"/,e:/"/,c:[e.BE,s]}]},{cN:"built_in",b:"@__"+e.IR},{b:"@"+e.IR},{b:e.IR+"\\\\"+e.IR}];s.c=a;var c=e.inherit(e.TM,{b:r}),n="(\\(.*\\))?\\s*\\B[-=]>",i={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(a)}]};return{aliases:["moon"],k:t,i:/\/\*/,c:a.concat([e.C("--","$"),{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+n,e:"[-=]>",rB:!0,c:[c,i]},{b:/[\(,:=]\s*/,r:0,c:[{cN:"function",b:n,e:"[-=]>",rB:!0,c:[i]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[c]},c]},{cN:"name",b:r+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("fsharp",function(e){var t={b:"<",e:">",c:[e.inherit(e.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],k:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",i:/\/\*/,c:[{cN:"keyword",b:/\b(yield|return|let|do)!/},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},{cN:"string",b:'"""',e:'"""'},e.C("\\(\\*","\\*\\)"),{cN:"class",bK:"type",e:"\\(|=|$",eE:!0,c:[e.UTM,t]},{cN:"meta",b:"\\[<",e:">\\]",r:10},{cN:"symbol",b:"\\B('[A-Za-z])\\b",c:[e.BE]},e.CLCM,e.inherit(e.QSM,{i:null}),e.CNM]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("lua",function(e){var t="\\[=*\\[",a="\\]=*\\]",r={b:t,e:a,c:["self"]},n=[e.C("--(?!"+t+")","$"),e.C("--"+t,a,{c:[r],r:10})];return{l:e.UIR,k:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},c:n.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:n}].concat(n)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:a,c:[r],r:5}])}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",b={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.C("%","$"),n={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},a={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={b:"{",e:"}",r:0},t={b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},f={b:"[A-Z][a-zA-Z0-9_]*",r:0},l={b:"#"+e.UIR,r:0,rB:!0,c:[{b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:b};s.c=[i,a,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,n,o,t,f,l];var u=[i,a,s,d,e.QSM,n,o,t,f,l];d.c[1].c=u,o.c=u,l.c[1].c=u;var h={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:b,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[h,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:b,c:u}},i,{b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[h]},n,e.QSM,l,t,f,o,{b:/\.$/}]}});hljs.registerLanguage("htmlbars",function(e){var a="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",t={i:/\}\}/,b:/[a-zA-Z0-9_]+=/,rB:!0,r:0,c:[{cN:"attr",b:/[a-zA-Z0-9_]+/}]},i=({i:/\}\}/,b:/\)/,e:/\)/,c:[{b:/[a-zA-Z\.\-]+/,k:{built_in:a},starts:{eW:!0,r:0,c:[e.QSM]}}]},{eW:!0,r:0,k:{keyword:"as",built_in:a},c:[e.QSM,t,e.NM]});return{cI:!0,sL:"xml",c:[e.C("{{!(--)?","(--)?}}"),{cN:"template-tag",b:/\{\{[#\/]/,e:/\}\}/,c:[{cN:"name",b:/[a-zA-Z\.\-]+/,k:{"builtin-name":a},starts:i}]},{cN:"template-variable",b:/\{\{[a-zA-Z][a-zA-Z\-]+/,e:/\}\}/,k:{keyword:"as",built_in:a},c:[e.QSM]}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"meta",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"selector-tag",b:"\\w+"},{cN:"selector-id",b:"#[\\w-]+"},{cN:"selector-class",b:"\\.[\\w-]+"},{b:"{\\s*",e:"\\s*}",c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{b:"^\\s*[=~]\\s*"},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("mizar",function(e){return{k:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",c:[e.C("::","$")]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("django",function(e){var t={b:/\|[A-Za-z]+:?/,k:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},c:[e.QSM,e.ASM]};return{aliases:["jinja"],cI:!0,sL:"xml",c:[e.C(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.C(/\{#/,/#}/),{cN:"template-tag",b:/\{%/,e:/%}/,c:[{cN:"name",b:/\w+/,k:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{eW:!0,k:"in by as",c:[t],r:0}}]},{cN:"template-variable",b:/\{\{/,e:/}}/,c:[t]}]}});hljs.registerLanguage("avrasm",function(r){return{cI:!0,l:"\\.?"+r.IR,k:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},c:[r.CBCM,r.C(";","$",{r:0}),r.CNM,r.BNM,{cN:"number",b:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},r.QSM,{cN:"string",b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"},{cN:"symbol",b:"^[A-Za-z0-9_.$]+:"},{cN:"meta",b:"#",e:"$"},{cN:"subst",b:"@[0-9]+"}]}});hljs.registerLanguage("q",function(e){var s={keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"};return{aliases:["k","kdb"],k:s,l:/(`?)[A-Za-z0-9_]+\b/,c:[e.CLCM,e.QSM,e.CNM]}});hljs.registerLanguage("brainfuck",function(r){var n={cN:"literal",b:"[\\+\\-]",r:0};return{aliases:["bf"],c:[r.C("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{rE:!0,r:0}),{cN:"title",b:"[\\[\\]]",r:0},{cN:"string",b:"[\\.,]",r:0},{b:/\+\+|\-\-/,rB:!0,c:[n]},n]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("excel",function(E){return{aliases:["xlsx","xls"],cI:!0,l:/[a-zA-Z][\w\.]*/,k:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF|0 IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},c:[{b:/^=/,e:/[^=]/,rE:!0,i:/=/,r:10},{cN:"symbol",b:/\b[A-Z]{1,2}\d+\b/,e:/[^\d]/,eE:!0,r:0},{cN:"symbol",b:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,r:0},E.BE,E.QSM,{cN:"number",b:E.NR+"(%)?",r:0},E.C(/\bN\(/,/\)/,{eB:!0,eE:!0,i:/\n/})]}});hljs.registerLanguage("aspectj",function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",i="get set args call";return{k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"aspect",e:/[{;=]/,eE:!0,i:/[:;"\[\]]/,c:[{bK:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UTM,{b:/\([^\)]*/,e:/[)]+/,k:t+" "+i,eE:!1}]},{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,r:0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"pointcut after before around throwing returning",e:/[)]/,eE:!1,i:/["\[\]]/,c:[{b:e.UIR+"\\s*\\(",rB:!0,c:[e.UTM]}]},{b:/[:]/,rB:!0,e:/[{;]/,r:0,eE:!1,k:t,i:/["\[\]]/,c:[{b:e.UIR+"\\s*\\(",k:t+" "+i,r:0},e.QSM]},{bK:"new throw",r:0},{cN:"function",b:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,rB:!0,e:/[{;=]/,k:t,eE:!0,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,r:0,k:t,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:a+r+":"},{b:a+'"'+r+'":'},{b:a+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:b,k:{literal:b}},e.CNM,l]}});hljs.registerLanguage("tap",function(b){return{cI:!0,c:[b.HCM,{cN:"meta",v:[{b:"^TAP version (\\d+)$"},{b:"^1\\.\\.(\\d+)$"}]},{b:"(s+)?---$",e:"\\.\\.\\.$",sL:"yaml",r:0},{cN:"number",b:" (\\d+) "},{cN:"symbol",v:[{b:"^ok"},{b:"^not ok"}]}]}});hljs.registerLanguage("stan",function(e){return{c:[e.HCM,e.CLCM,e.CBCM,{b:e.UIR,l:e.UIR,k:{name:"for in while repeat until if then else",symbol:"bernoulli bernoulli_logit binomial binomial_logit beta_binomial hypergeometric categorical categorical_logit ordered_logistic neg_binomial neg_binomial_2 neg_binomial_2_log poisson poisson_log multinomial normal exp_mod_normal skew_normal student_t cauchy double_exponential logistic gumbel lognormal chi_square inv_chi_square scaled_inv_chi_square exponential inv_gamma weibull frechet rayleigh wiener pareto pareto_type_2 von_mises uniform multi_normal multi_normal_prec multi_normal_cholesky multi_gp multi_gp_cholesky multi_student_t gaussian_dlm_obs dirichlet lkj_corr lkj_corr_cholesky wishart inv_wishart","selector-tag":"int real vector simplex unit_vector ordered positive_ordered row_vector matrix cholesky_factor_corr cholesky_factor_cov corr_matrix cov_matrix",title:"functions model data parameters quantities transformed generated",literal:"true false"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0}]}});hljs.registerLanguage("ebnf",function(a){var e=a.C(/\(\*/,/\*\)/),t={cN:"attribute",b:/^[ ]*[a-zA-Z][a-zA-Z-]*([\s-]+[a-zA-Z][a-zA-Z]*)*/},r={cN:"meta",b:/\?.*\?/},b={b:/=/,e:/;/,c:[e,r,a.ASM,a.QSM]};return{i:/\S/,c:[e,t,b]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a=r+"[+\\-]"+r+"i",i={"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"meta",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:a,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"symbol",b:"'"+t},d={eW:!0,r:0},m={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",c,s,l,u,p]}]},g={cN:"name",b:t,l:t,k:i},h={b:/lambda/,eW:!0,rB:!0,c:[g,{b:/\(/,e:/\)/,endsParent:!0,c:[u]}]},b={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[h,g,d]};return d.c=[c,l,s,u,p,m,b].concat(o),{i:/\S/,c:[n,l,s,p,m,b].concat(o)}});hljs.registerLanguage("mipsasm",function(s){return{cI:!0,aliases:["mips"],l:"\\.?"+s.IR,k:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},c:[{cN:"keyword",b:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",e:"\\s"},s.C("[;#]","$"),s.CBCM,s.QSM,{cN:"string",b:"'",e:"[^\\\\]'",r:0},{cN:"title",b:"\\|",e:"\\|",i:"\\n",r:0},{cN:"number",v:[{b:"0x[0-9a-f]+"},{b:"\\b-?\\d+"}],r:0},{cN:"symbol",v:[{b:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{b:"^\\s*[0-9]+:"},{b:"[0-9]+[bf]"}],r:0}],i:"/"}});hljs.registerLanguage("purebasic",function(e){var r={cN:"string",b:'(~)?"',e:'"',i:"\\n"},t={cN:"symbol",b:"#[a-zA-Z_]\\w*\\$?"};return{aliases:["pb","pbi"],k:"And As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect Continue Data DataSection EndDataSection Debug DebugLevel Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndEnumeration EndIf EndImport EndInterface EndMacro EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration Extends FakeReturn For Next ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface Macro NewList Not Or ProcedureReturn Protected Prototype PrototypeC Read ReDim Repeat Until Restore Return Select Shared Static Step Structure StructureUnion Swap To Wend While With XIncludeFile XOr Procedure ProcedureC ProcedureCDLL ProcedureDLL Declare DeclareC DeclareCDLL DeclareDLL",c:[e.C(";","$",{r:0}),{cN:"function",b:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",e:"\\(",eE:!0,rB:!0,c:[{cN:"keyword",b:"(Procedure|Declare)(C|CDLL|DLL)?",eE:!0},{cN:"type",b:"\\.\\w*"},e.UTM]},r,t]}});hljs.registerLanguage("jboss-cli",function(e){var a={b:/[\w-]+ *=/,rB:!0,r:0,c:[{cN:"attr",b:/[\w-]+/}]},r={cN:"params",b:/\(/,e:/\)/,c:[a],r:0},o={cN:"function",b:/:[\w\-.]+/,r:0},t={cN:"string",b:/\B(([\/.])[\w\-.\/=]+)+/},c={cN:"params",b:/--[\w\-=\/]+/};return{aliases:["wildfly-cli"],l:"[a-z-]+",k:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},c:[e.HCM,e.QSM,c,o,t,r]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("tex",function(c){var e={cN:"tag",b:/\\/,r:0,c:[{cN:"name",v:[{b:/[a-zA-Zа-яА-я]+[*]?/},{b:/[^a-zA-Zа-яА-я0-9]/}],starts:{eW:!0,r:0,c:[{cN:"string",v:[{b:/\[/,e:/\]/},{b:/\{/,e:/\}/}]},{b:/\s*=\s*/,eW:!0,r:0,c:[{cN:"number",b:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{c:[e,{cN:"formula",c:[e],r:0,v:[{b:/\$\$/,e:/\$\$/},{b:/\$/,e:/\$/}]},c.C("%","$",{r:0})]}});hljs.registerLanguage("profile",function(e){return{c:[e.CNM,{b:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",e:":",eE:!0},{b:"(ncalls|tottime|cumtime)",e:"$",k:"ncalls tottime|10 cumtime|10 filename",r:10},{b:"function calls",e:"$",c:[e.CNM],r:10},e.ASM,e.QSM,{cN:"string",b:"\\(",e:"\\)$",eB:!0,eE:!0,r:0}]}});hljs.registerLanguage("gherkin",function(e){return{aliases:["feature"],k:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",c:[{cN:"symbol",b:"\\*",r:0},{cN:"meta",b:"@[^@\\s]+"},{b:"\\|",e:"\\|\\w*$",c:[{cN:"string",b:"[^|]+"}]},{cN:"variable",b:"<",e:">"},e.HCM,{cN:"string",b:'"""',e:'"""'},e.QSM]}});hljs.registerLanguage("smalltalk",function(e){var s="[a-z][a-zA-Z0-9_]*",a={cN:"string",b:"\\$.{1}"},r={cN:"symbol",b:"#"+e.UIR};return{aliases:["st"],k:"self super nil true false thisContext",c:[e.C('"','"'),e.ASM,{cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},{b:s+":",r:0},e.CNM,r,a,{b:"\\|[ ]*"+s+"([ ]+"+s+")*[ ]*\\|",rB:!0,e:/\|/,i:/\S/,c:[{b:"(\\|[ ]*)?"+s}]},{b:"\\#\\(",e:"\\)",c:[e.ASM,a,e.CNM,r]}]}});hljs.registerLanguage("arduino",function(e){var t=e.getLanguage("cpp").exports;return{k:{keyword:"boolean byte word string String array "+t.k.keyword,built_in:"setup loop while catch for if do goto try switch case else default break continue return KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",literal:"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW"},c:[t.preprocessor,e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM]}});hljs.registerLanguage("mathematica",function(e){return{aliases:["mma"],l:"(\\$|\\b)"+e.IR+"\\b",k:"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber", -c:[{cN:"comment",b:/\(\*/,e:/\*\)/},e.ASM,e.QSM,e.CNM,{b:/\{/,e:/\}/,i:/:/}]}});hljs.registerLanguage("roboconf",function(a){var e="[a-zA-Z-_][^\\n{]+\\{",n={cN:"attribute",b:/[a-zA-Z-_]+/,e:/\s*:/,eE:!0,starts:{e:";",r:0,c:[{cN:"variable",b:/\.[a-zA-Z-_]+/},{cN:"keyword",b:/\(optional\)/}]}};return{aliases:["graph","instances"],cI:!0,k:"import",c:[{b:"^facet "+e,e:"}",k:"facet",c:[n,a.HCM]},{b:"^\\s*instance of "+e,e:"}",k:"name count channels instance-data instance-state instance of",i:/\S/,c:["self",n,a.HCM]},{b:"^"+e,e:"}",c:[n,a.HCM]},a.HCM]}});hljs.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},i:/;/,c:[e.NM,e.ASM,{cN:"string",b:/"(\\"|\n\\|[^"\n])*"/},e.C('"',"$"),{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",r:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"symbol",b:/<[\w-]+>/}]}});hljs.registerLanguage("d",function(e){var t={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},r="(0|[1-9][\\d_]*)",a="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",i="0[bB][01_]+",n="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",_="0[xX]"+n,c="([eE][+-]?"+a+")",d="("+a+"(\\.\\d*|"+c+")|\\d+\\."+a+a+"|\\."+r+c+"?)",o="(0[xX]("+n+"\\."+n+"|\\.?"+n+")[pP][+-]?"+a+")",s="("+r+"|"+i+"|"+_+")",l="("+o+"|"+d+")",u="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",b={cN:"number",b:"\\b"+s+"(L|u|U|Lu|LU|uL|UL)?",r:0},f={cN:"number",b:"\\b("+l+"([fF]|L|i|[fF]i|Li)?|"+s+"(i|[fF]i|Li))",r:0},g={cN:"string",b:"'("+u+"|.)",e:"'",i:"."},h={b:u,r:0},p={cN:"string",b:'"',c:[h],e:'"[cwd]?'},m={cN:"string",b:'[rq]"',e:'"[cwd]?',r:5},w={cN:"string",b:"`",e:"`[cwd]?"},N={cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',r:10},A={cN:"string",b:'q"\\{',e:'\\}"'},F={cN:"meta",b:"^#!",e:"$",r:5},y={cN:"meta",b:"#(line)",e:"$",r:5},L={cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"},v=e.C("\\/\\+","\\+\\/",{c:["self"],r:10});return{l:e.UIR,k:t,c:[e.CLCM,e.CBCM,v,N,p,m,w,A,f,b,g,F,y,L]}});hljs.registerLanguage("scilab",function(e){var s=[e.CNM,{cN:"string",b:"'|\"",e:"'|\"",c:[e.BE,{b:"''"}]}];return{aliases:["sci"],l:/%?\w+/,k:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},i:'("|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},{b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{b:"\\[",e:"\\]'*[\\.']*",r:0,c:s},e.C("//","$")].concat(s)}});hljs.registerLanguage("lisp",function(b){var e="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",r="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={cN:"meta",b:"^#!",e:"$"},l={cN:"literal",b:"\\b(t{1}|nil)\\b"},n={cN:"number",v:[{b:r,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+r+" +"+r,e:"\\)"}]},i=b.inherit(b.QSM,{i:null}),t=b.C(";","$",{r:0}),s={b:"\\*",e:"\\*"},u={cN:"symbol",b:"[:&]"+e},d={b:e,r:0},f={b:c},m={b:"\\(",e:"\\)",c:["self",l,i,n,d]},o={c:[n,i,s,u,m,d],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+c}]},v={v:[{b:"'"+e},{b:"#'"+e+"(::"+e+")*"}]},N={b:"\\(\\s*",e:"\\)"},A={eW:!0,r:0};return N.c=[{cN:"name",v:[{b:e},{b:c}]},A],A.c=[o,v,N,l,n,i,t,s,u,f,d],{i:/\S/,c:[n,a,l,i,t,o,v,N,d]}});hljs.registerLanguage("xquery",function(e){var t="for let if while then else return where group by xquery encoding versionmodule namespace boundary-space preserve strip default collation base-uri orderingcopy-namespaces order declare import schema namespace function option in allowing emptyat tumbling window sliding window start when only end when previous next stable ascendingdescending empty greatest least some every satisfies switch case typeswitch try catch andor to union intersect instance of treat as castable cast map array delete insert intoreplace value rename copy modify update",a="false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute",s={b:/\$[a-zA-Z0-9\-]+/},n={cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},r={cN:"string",v:[{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]},i={cN:"meta",b:"%\\w+"},c={cN:"comment",b:"\\(:",e:":\\)",r:10,c:[{cN:"doctag",b:"@\\w+"}]},o={b:"{",e:"}"},l=[s,r,n,c,i,o];return o.c=l,{aliases:["xpath","xq"],cI:!1,l:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,i:/(proc)|(abstract)|(extends)|(until)|(#)/,k:{keyword:t,literal:a},c:l}});hljs.registerLanguage("csp",function(r){return{cI:!1,l:"[a-zA-Z][a-zA-Z0-9_-]*",k:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},c:[{cN:"string",b:"'",e:"'"},{cN:"attribute",b:"^Content",e:":",eE:!0}]}});hljs.registerLanguage("twig",function(e){var t={cN:"params",b:"\\(",e:"\\)"},a="attribute block constant cycle date dump include max min parent random range source template_from_string",r={bK:a,k:{name:a},r:0,c:[t]},c={b:/\|[A-Za-z_]+:?/,k:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",c:[r]},s="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return s=s+" "+s.split(" ").map(function(e){return"end"+e}).join(" "),{aliases:["craftcms"],cI:!0,sL:"xml",c:[e.C(/\{#/,/#}/),{cN:"template-tag",b:/\{%/,e:/%}/,c:[{cN:"name",b:/\w+/,k:s,starts:{eW:!0,c:[c,r],r:0}}]},{cN:"template-variable",b:/\{\{/,e:/}}/,c:["self",c,r]}]}});hljs.registerLanguage("accesslog",function(T){return{c:[{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+\\b",r:0},{cN:"string",b:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',e:'"',k:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",i:"\\n",r:10},{cN:"string",b:/\[/,e:/\]/,i:"\\n"},{cN:"string",b:'"',e:'"',i:"\\n"}]}});hljs.registerLanguage("smali",function(t){var s=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"],e=["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"],r=["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"];return{aliases:["smali"],c:[{cN:"string",b:'"',e:'"',r:0},t.C("#","$",{r:0}),{cN:"keyword",v:[{b:"\\s*\\.end\\s[a-zA-Z0-9]*"},{b:"^[ ]*\\.[a-zA-Z]*",r:0},{b:"\\s:[a-zA-Z_0-9]*",r:0},{b:"\\s("+r.join("|")+")"}]},{cN:"built_in",v:[{b:"\\s("+s.join("|")+")\\s"},{b:"\\s("+s.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",r:10},{b:"\\s("+e.join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",r:10}]},{cN:"class",b:"L[^(;:\n]*;",r:0},{b:"[vp][0-9]+"}]}});hljs.registerLanguage("rsl",function(e){return{k:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},i:"\\<:\-,()$\[\]_.{}!+%^]+)+/,r:0}]};return{aliases:["gms"],cI:!0,k:a,c:[e.C(/^\$ontext/,/^\$offtext/),{cN:"meta",b:"^\\$[a-z0-9]+",e:"$",rB:!0,c:[{cN:"meta-keyword",b:"^\\$[a-z0-9]+"}]},e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,{bK:"set sets parameter parameters variable variables scalar scalars equation equations",e:";",c:[e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,i,l]},{bK:"table",e:";",rB:!0,c:[{bK:"table",e:"$",c:[l]},e.C("^\\*","$"),e.CLCM,e.CBCM,e.QSM,e.ASM,e.CNM]},{cN:"function",b:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,rB:!0,c:[{cN:"title",b:/^[a-z][a-z0-9_]+/},o,r]},e.CNM,r]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("thrift",function(e){var t="bool byte i16 i32 i64 double string binary";return{k:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:t,literal:"true false"},c:[e.QSM,e.NM,e.CLCM,e.CBCM,{cN:"class",bK:"struct enum service exception",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{b:"\\b(set|list|map)\\s*<",e:">",k:t,c:["self"]}]}});hljs.registerLanguage("gradle",function(e){return{cI:!0,k:{keyword:"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage("cmake",function(e){return{aliases:["cmake.in"],cI:!0,k:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or equal less greater strless strgreater strequal matches"},c:[{cN:"variable",b:"\\${",e:"}"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage("inform7",function(e){var r="\\[",o="\\]";return{aliases:["i7"],cI:!0,k:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},c:[{cN:"string",b:'"',e:'"',r:0,c:[{cN:"subst",b:r,e:o}]},{cN:"section",b:/^(Volume|Book|Part|Chapter|Section|Table)\b/,e:"$"},{b:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,e:":",c:[{b:"\\(This",e:"\\)"}]},{cN:"comment",b:r,e:o,c:["self"]}]}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while nameof add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",built_in:"Console Metro",literal:"null false true"},r={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},t=e.inherit(r,{i:/\n/}),a={cN:"subst",b:"{",e:"}",k:i},n=e.inherit(a,{i:/\n/}),c={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,n]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},a]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},n]});a.c=[s,c,r,e.ASM,e.QSM,e.CNM,e.CBCM],n.c=[o,c,t,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,c,r,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("clojure-repl",function(e){return{c:[{cN:"meta",b:/^([\w.-]+|\s*#_)=>/,starts:{e:/$/,sL:"clojure"}}]}});hljs.registerLanguage("zephir",function(e){var i={cN:"string",c:[e.BE],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["zep"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[e.BE]},{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e.CBCM,i,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,n]}});hljs.registerLanguage("nsis",function(e){var t={cN:"variable",b:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},i={cN:"variable",b:/\$+{[\w\.:-]+}/},n={cN:"variable",b:/\$+\w+/,i:/\(\){}/},r={cN:"variable",b:/\$+\([\w\^\.:-]+\)/},o={cN:"params",b:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},l={cN:"keyword",b:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)/},s={cN:"subst",b:/\$(\\[nrt]|\$)/},a={cN:"class",b:/\w+\:\:\w+/},S={cN:"string",v:[{b:'"',e:'"'},{b:"'",e:"'"},{b:"`",e:"`"}],i:/\n/,c:[s,t,i,n,r]};return{cI:!1,k:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},c:[e.HCM,e.CBCM,e.C(";","$",{r:0}),{cN:"function",bK:"Function PageEx Section SectionGroup",e:"$"},S,l,i,n,r,o,a,e.NM]}});hljs.registerLanguage("sqf",function(e){var t=e.getLanguage("cpp").exports,a={cN:"variable",b:/\b_+[a-zA-Z_]\w*/},o={cN:"title",b:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},r={cN:"string",v:[{b:'"',e:'"',c:[{b:'""',r:0}]},{b:"'",e:"'",c:[{b:"''",r:0}]}]};return{aliases:["sqf"],cI:!0,k:{keyword:"case catch default do else exit exitWith for forEach from if switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airportSide AISFinishHeal alive all3DENEntities allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSites allTurrets allUnits allUnitsUAV allVariables ammo and animate animateDoor animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular blufor boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility civilian className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configNull configProperties configSourceAddonList configSourceMod configSourceModList connectTerminalToUAV controlNull controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlType ctrlVisible curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayNull displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle driver drop east echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableUAVConnectability enableUAVWaypoints enableVehicleCargo endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllHitPointsDamage getAllOwnedMines getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getConnectedUAV getCustomAimingCoef getDammage getDescription getDir getDirVisual getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getFatigue getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSpeed getStamina getStatValue getSuppression getTerrainHeightASL getText getUnitLoadout getUnitTrait getVariable getVehicleCargo getWeaponCargo getWeaponSway getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit grpNull gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState independent inflame inflamed inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUniformAllowed isVehicleCargo isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbCurSel lbData lbDelete lbIsSelected lbPicture lbSelection lbSetColor lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineBreak lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationNull locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberToDate objectCurators objectFromNetId objectParent objNull objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openYoutubeVideo opfor or orderGetIn overcast overcastForecast owner param params parseNumber parseText parsingNamespace particlesQuality pi pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority private processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponGlobal removeWeaponTurret requiredVersion resetCamShake resetSubgroupDirection resistance resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scriptNull scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setAirportSide setAmmo setAmmoCargo setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTi setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDropInterval setEditorMode setEditorObjectScope setEffectCondition setFace setFaceAnimation setFatigue setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleTiPars setVehicleVarName setVelocity setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideAmbientLife sideChat sideEmpty sideEnemy sideFriendly sideLogic sideRadio sideUnknown simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskNull taskParent taskResult taskState taskType teamMember teamMemberNull teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCount tvCurSel tvData tvDelete tvExpand tvPicture tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorMultiply vectorNormalized vectorUp vectorUpVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD west WFSideText wind",literal:"true false nil"},c:[e.CLCM,e.CBCM,e.NM,a,o,r,t.preprocessor],i:/#/}});hljs.registerLanguage("dsconfig",function(e){var i={cN:"string",b:/"/,e:/"/},r={cN:"string",b:/'/,e:/'/},s={cN:"string",b:"[\\w-?]+:\\w+",e:"\\W",r:0},t={cN:"string",b:"\\w+-?\\w+",e:"\\W",r:0};return{k:"dsconfig",c:[{cN:"keyword",b:"^dsconfig",e:"\\s",eE:!0,r:10},{cN:"built_in",b:"(list|create|get|set|delete)-(\\w+)",e:"\\s",eE:!0,i:"!@#$%^&*()",r:10},{cN:"built_in",b:"--(\\w+)",e:"\\s",eE:!0},i,r,s,t,e.HCM]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("erb",function(e){return{sL:"xml",c:[e.C("<%#","%>"),{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0}]}});hljs.registerLanguage("gauss",function(e){var t={keyword:"and bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new not open or output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname threadBegin threadEnd threadEndFor threadFor threadJoin threadStat time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin strtrim sylvester",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS"},a={cN:"meta",b:"#",e:"$",k:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},c:[{b:/\\\n/,r:0},{bK:"include",e:"$",k:{"meta-keyword":"include"},c:[{cN:"meta-string",b:'"',e:'"',i:"\\n"}]},e.CLCM,e.CBCM]},r=e.UIR+"\\s*\\(?",o=[{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.CNM,e.CLCM,e.CBCM]}];return{aliases:["gss"],cI:!0,k:t,i:"(\\{[%#]|[%#]\\})",c:[e.CNM,e.CLCM,e.CBCM,e.C("@","@"),a,{cN:"string",b:'"',e:'"',c:[e.BE]},{cN:"function",bK:"proc keyword",e:";",eE:!0,k:t,c:[{b:r,rB:!0,c:[e.UTM],r:0},e.CNM,e.CLCM,e.CBCM,a].concat(o)},{cN:"function",bK:"fn",e:";",eE:!0,k:t,c:[{b:r+e.IR+"\\)?\\s*\\=\\s*",rB:!0,c:[e.UTM],r:0},e.CNM,e.CLCM,e.CBCM].concat(o)},{cN:"function",b:"\\bexternal (proc|keyword|fn)\\s+",e:";",eE:!0,k:t,c:[{b:r,rB:!0,c:[e.UTM],r:0},e.CLCM,e.CBCM]},{cN:"function",b:"\\bexternal (matrix|string|array|sparse matrix|struct "+e.IR+")\\s+",e:";",eE:!0,k:t,c:[e.CLCM,e.CBCM]}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("handlebars",function(e){var a={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield"};return{aliases:["hbs","html.hbs","html.handlebars"],cI:!0,sL:"xml",c:[e.C("{{!(--)?","(--)?}}"),{cN:"template-tag",b:/\{\{[#\/]/,e:/\}\}/,c:[{cN:"name",b:/[a-zA-Z\.-]+/,k:a,starts:{eW:!0,r:0,c:[e.QSM]}}]},{cN:"template-variable",b:/\{\{/,e:/\}\}/,k:a}]}});hljs.registerLanguage("mercury",function(e){var i={keyword:"module use_module import_module include_module end_module initialise mutable initialize finalize finalise interface implementation pred mode func type inst solver any_pred any_func is semidet det nondet multi erroneous failure cc_nondet cc_multi typeclass instance where pragma promise external trace atomic or_else require_complete_switch require_det require_semidet require_multi require_nondet require_cc_multi require_cc_nondet require_erroneous require_failure",meta:"inline no_inline type_spec source_file fact_table obsolete memo loop_check minimal_model terminates does_not_terminate check_termination promise_equivalent_clauses foreign_proc foreign_decl foreign_code foreign_type foreign_import_module foreign_export_enum foreign_export foreign_enum may_call_mercury will_not_call_mercury thread_safe not_thread_safe maybe_thread_safe promise_pure promise_semipure tabled_for_io local untrailed trailed attach_to_io_state can_pass_as_mercury_type stable will_not_throw_exception may_modify_trail will_not_modify_trail may_duplicate may_not_duplicate affects_liveness does_not_affect_liveness doesnt_affect_liveness no_sharing unknown_sharing sharing",built_in:"some all not if then else true fail false try catch catch_any semidet_true semidet_false semidet_fail impure_true impure semipure"},r=e.C("%","$"),t={cN:"number",b:"0'.\\|0[box][0-9a-fA-F]*"},_=e.inherit(e.ASM,{r:0}),n=e.inherit(e.QSM,{r:0}),a={cN:"subst",b:"\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]",r:0};n.c.push(a);var o={cN:"built_in",v:[{b:"<=>"},{b:"<=",r:0},{b:"=>",r:0},{b:"/\\\\"},{b:"\\\\/"}]},l={cN:"built_in",v:[{b:":-\\|-->"},{b:"=",r:0}]};return{aliases:["m","moo"],k:i,c:[o,l,r,e.CBCM,t,e.NM,_,n,{b:/:-/}]}});hljs.registerLanguage("dns",function(d){return{aliases:["bind","zone"],k:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},c:[d.C(";","$",{r:0}),{cN:"meta",b:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{cN:"number",b:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{cN:"number",b:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},d.inherit(d.NM,{b:/\b\d+[dhwm]?/})]}});hljs.registerLanguage("pony",function(e){var r={keyword:"actor addressof and as be break class compile_error compile_intrinsicconsume continue delegate digestof do else elseif embed end errorfor fun if ifdef in interface is isnt lambda let match new not objector primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},t={cN:"string",b:'"""',e:'"""',r:10},c={cN:"string",b:'"',e:'"',c:[e.BE]},i={cN:"string",b:"'",e:"'",c:[e.BE],r:0},n={cN:"type",b:"\\b_?[A-Z][\\w]*",r:0},s={b:e.IR+"'",r:0},a={cN:"class",bK:"class actor",e:"$",c:[e.TM,e.CLCM]},o={cN:"function",bK:"new fun",e:"=>",c:[e.TM,{b:/\(/,e:/\)/,c:[n,s,e.CNM,e.CBCM]},{b:/:/,eW:!0,c:[n]},e.CLCM]};return{k:r,c:[a,o,n,t,c,i,s,e.CNM,e.CLCM,e.CBCM]}});hljs.registerLanguage("leaf",function(e){return{c:[{cN:"function",b:"#+[A-Za-z_0-9]*\\(",e:" {",rB:!0,eE:!0,c:[{cN:"keyword",b:"#+"},{cN:"title",b:"[A-Za-z_][A-Za-z_0-9]*"},{cN:"params",b:"\\(",e:"\\)",endsParent:!0,c:[{cN:"string",b:'"',e:'"'},{cN:"variable",b:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}});hljs.registerLanguage("dust",function(e){var t="if eq ne lt lte gt gte select default math sep";return{aliases:["dst"],cI:!0,sL:"xml",c:[{cN:"template-tag",b:/\{[#\/]/,e:/\}/,i:/;/,c:[{cN:"name",b:/[a-zA-Z\.-]+/,starts:{eW:!0,r:0,c:[e.QSM]}}]},{cN:"template-variable",b:/\{/,e:/\}/,i:/;/,k:t}]}});hljs.registerLanguage("erlang-repl",function(e){return{k:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"meta",b:"^[0-9]+> ",r:10},e.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},e.ASM,e.QSM,{b:"\\?(::)?([A-Z]\\w*(::)?)+"},{b:"->"},{b:"ok"},{b:"!"},{b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{b:"[A-Z][a-zA-Z0-9_']*",r:0}]}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("delphi",function(e){var r="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",t=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],a={cN:"meta",v:[{b:/\{\$/,e:/\}/},{b:/\(\*\$/,e:/\*\)/}]},c={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},i={cN:"string",b:/(#\d+)+/},o={b:e.IR+"\\s*=\\s*class\\s*\\(",rB:!0,c:[e.TM]},n={cN:"function",bK:"function constructor destructor procedure",e:/[:;]/,k:"function constructor|10 destructor|10 procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:r,c:[c,i,a].concat(t)},a].concat(t)};return{aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],cI:!0,k:r,i:/"|\$[G-Zg-z]|\/\*|<\/|\|/,c:[c,i,e.NM,o,n,a].concat(t)}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert async await break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch sync this throw true try var void while with yield abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("step21",function(e){var i="[A-Z_][A-Z0-9_.]*",r={keyword:"HEADER ENDSEC DATA"},t={cN:"meta",b:"ISO-10303-21;",r:10},n={cN:"meta",b:"END-ISO-10303-21;",r:10};return{aliases:["p21","step","stp"],cI:!0,l:i,k:r,c:[t,n,e.CLCM,e.CBCM,e.C("/\\*\\*!","\\*/"),e.CNM,e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null}),{cN:"string",b:"'",e:"'"},{cN:"symbol",v:[{b:"#",e:"\\d+",i:"\\W"}]}]}});hljs.registerLanguage("cos",function(e){var t={cN:"string",v:[{b:'"',e:'"',c:[{b:'""',r:0}]}]},r={cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",r:0},s="property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii";return{cI:!0,aliases:["cos","cls"],k:s,c:[r,t,e.CLCM,e.CBCM,{cN:"comment",b:/;/,e:"$",r:0},{cN:"built_in",b:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{cN:"built_in",b:/\$\$\$[a-zA-Z]+/},{cN:"built_in",b:/%[a-z]+(?:\.[a-z]+)*/},{cN:"symbol",b:/\^%?[a-zA-Z][\w]*/},{cN:"keyword",b:/##class|##super|#define|#dim/},{b:/&sql\(/,e:/\)/,eB:!0,eE:!0,sL:"sql"},{b:/&(js|jscript|javascript)/,eB:!0,eE:!0,sL:"javascript"},{b:/&html<\s*\s*>/,sL:"xml"}]}});hljs.registerLanguage("maxima",function(e){var t="if then else elseif for thru do while unless step in and or not",a="true false unknown inf minf ind und %e %i %pi %phi %gamma",r=" abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type alias allroots alphacharp alphanumericp amortization %and annuity_fv annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2 applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method av average_degree backtrace bars barsplot barsplot_description base64 base64_decode bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description break bug_report build_info|10 buildq build_sample burn cabs canform canten cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2 charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps chinese cholesky christof chromatic_index chromatic_number cint circulant_graph clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse collectterms columnop columnspace columnswap columnvector combination combine comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph complete_graph complex_number_p components compose_functions concan concat conjugate conmetderiv connected_components connect_vertices cons constant constantp constituent constvalue cont2part content continuous_freq contortion contour_plot contract contract_edge contragrad contrib_ode convert coord copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1 covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate declare declare_constvalue declare_dimensions declare_fundamental_dimensions declare_fundamental_units declare_qty declare_translated declare_unit_conversion declare_units declare_weights decsym defcon define define_alt_display define_variable defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten delta demo demoivre denom depends derivdegree derivlist describe desolve determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export dimacs_import dimension dimensionless dimensions dimensions_as_list direct directory discrete_freq disjoin disjointp disolate disp dispcon dispform dispfun dispJordan display disprule dispterms distrib divide divisors divsum dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors euler ev eval_string evenp every evolution evolution2d evundiff example exp expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li expintegral_shi expintegral_si explicit explose exponentialize express expt exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge file_search file_type fillarray findde find_root find_root_abs find_root_error find_root_rel first fix flatten flength float floatnump floor flower_snark flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string get_pixel get_plot_option get_tex_environment get_tex_environment_default get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart imetric implicit implicit_derivative implicit_plot indexed_tensor indices induced_subgraph inferencep inference_result infix info_display init_atensor init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions integrate intersect intersection intervalp intopois intosum invariant1 invariant2 inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2 kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit Lindstedt linear linearinterpol linear_program linear_regression line_graph linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country make_polygon make_random_state make_rgb_picture makeset make_string_input_stream make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker max max_clique max_degree max_flow maximize_lp max_independent_set max_matching maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext newdet new_graph newline newton new_variable next_prime nicedummies niceindices ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst nthroot nullity nullspace num numbered_boundaries numberp number_to_octets num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin oid_to_octets op opena opena_binary openr openr_binary openw openw_binary operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface parg parGosper parse_string parse_timedate part part2cont partfrac partition partition_set partpol path_digraph path_graph pathname_directory pathname_name pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod powerseries powerset prefix prev_prime primep primes principal_components print printf printfile print_graph printpois printprops prodrac product properties propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2 quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan radius random random_bernoulli random_beta random_binomial random_bipartite_graph random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_graph random_graph1 random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_network random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_permutation random_poisson random_rayleigh random_regular_graph random_student_t random_tournament random_tree random_weibull range rank rat ratcoef ratdenom ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus rem remainder remarray rembox remcomps remcon remcoord remfun remfunction remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions remove_fundamental_units remove_plot_option remove_vertex rempart remrule remsym remvalue rename rename_file reset reset_displays residue resolvante resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann rinvariant risch rk rmdir rncombine romberg room rootscontract round row rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot starplot_description status std std1 std_bernoulli std_beta std_binomial std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull stemplot stirling stirling1 stirling2 strim striml strimr string stringout stringp strong_components struve_h struve_l sublis sublist sublist_indices submatrix subsample subset subsetp subst substinpart subst_parallel substpart substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext symbolp symmdifference symmetricp system take_channel take_inference tan tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference test_normality test_proportion test_proportions_difference test_rank_sum test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep totalfourier totient tpartpol trace tracematrix trace_options transform_sample translate translate_file transpose treefale tree_reduce treillis treinat triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget ultraspherical underlying_graph undiff union unique uniteigenvectors unitp units unit_step unitvector unorder unsum untellrat untimer untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table absboxchar activecontexts adapt_depth additive adim aform algebraic algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top azimuth background background_color backsubst berlefact bernstein_explicit besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest border boundaries_array box boxchar breakup %c capping cauchysum cbrange cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics colorbox columns commutative complex cone context contexts contour contour_levels cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp cube current_let_rule_package cylinder data_file_name debugmode decreasing default_let_rule_package delay dependencies derivabbrev derivsubst detout diagmetric diff dim dimensions dispflag display2d|10 display_format_internal distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart edge_color edge_coloring edge_partition edge_type edge_width %edispflag elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine factlim factorflag factorial_expand factors_only fb feature features file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10 file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color fill_density filled_func fixed_vertices flipflag float2bf font font_size fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both head_length head_type height hypergeometric_representation %iargs ibase icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued integrate_use_rootsof integration_constant integration_constant_counter interpolate_color intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10 maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties opsubst optimprefix optionset orientation origin orthopoly_returns_intervals outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart png_file pochhammer_max_index points pointsize point_size points_joined point_type poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list poly_secondary_elimination_order poly_top_reduction_only posfun position powerdisp pred prederror primep_number_of_tests product_use_gamma program programmode promote_float_to_bigfloat prompt proportional_axes props psexpand ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight simp simplified_output simplify_products simpproduct simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch tr track transcompile transform transform_xy translate_fast_arrays transparent transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest",i="_ __ %|0 %%|0";return{l:"[A-Za-z_%][0-9A-Za-z_%]*",k:{keyword:t,literal:a,built_in:r,symbol:i},c:[{cN:"comment",b:"/\\*",e:"\\*/",c:["self"]},e.QSM,{cN:"number",r:0,v:[{b:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Ee][-+]?\\d+\\b"},{b:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Bb][-+]?\\d+\\b",r:10},{b:"\\b(\\.\\d+|\\d+\\.\\d+)\\b"},{b:"\\b(\\d+|0[0-9A-Za-z]+)\\.?\\b"}]}],i:/@/}});hljs.registerLanguage("crystal",function(e){function r(e,r){var b=[{b:e,e:r}];return b[0].c=b,b}var b="(_[uif](8|16|32|64))?",c="[a-zA-Z_]\\w*[!?=]?",n="!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",i="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?",s={keyword:"abstract alias as asm begin break case class def do else elsif end ensure enum extend for fun if ifdef include instance_sizeof is_a? lib macro module next of out pointerof private protected rescue responds_to? return require self sizeof struct super then type typeof union unless until when while with yield __DIR__ __FILE__ __LINE__",literal:"false nil true"},t={cN:"subst",b:"#{",e:"}",k:s},a={cN:"template-variable",v:[{b:"\\{\\{",e:"\\}\\}"},{b:"\\{%",e:"%\\}"}],k:s},l={cN:"string",c:[e.BE,t],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%w?\\(",e:"\\)",c:r("\\(","\\)")},{b:"%w?\\[",e:"\\]",c:r("\\[","\\]")},{b:"%w?{",e:"}",c:r("{","}")},{b:"%w?<",e:">",c:r("<",">")},{b:"%w?/",e:"/"},{b:"%w?%",e:"%"},{b:"%w?-",e:"-"},{b:"%w?\\|",e:"\\|"}],r:0},u={b:"("+n+")\\s*",c:[{cN:"regexp",c:[e.BE,t],v:[{b:"//[a-z]*",r:0},{b:"/",e:"/[a-z]*"},{b:"%r\\(",e:"\\)",c:r("\\(","\\)")},{b:"%r\\[",e:"\\]",c:r("\\[","\\]")},{b:"%r{",e:"}",c:r("{","}")},{b:"%r<",e:">",c:r("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}]}],r:0},o={cN:"regexp",c:[e.BE,t],v:[{b:"%r\\(",e:"\\)",c:r("\\(","\\)")},{b:"%r\\[",e:"\\]",c:r("\\[","\\]")},{b:"%r{",e:"}",c:r("{","}")},{b:"%r<",e:">",c:r("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}],r:0},_={cN:"meta",b:"@\\[",e:"\\]",c:[e.inherit(e.QSM,{cN:"meta-string"})]},f=[a,l,u,o,_,e.HCM,{cN:"class",bK:"class module struct",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<"}]},{cN:"class",bK:"lib enum union",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],r:10},{cN:"function",bK:"def",e:/\B\b/,c:[e.inherit(e.TM,{b:i,endsParent:!0})]},{cN:"function",bK:"fun macro",e:/\B\b/,c:[e.inherit(e.TM,{b:i,endsParent:!0})],r:5},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[l,{b:i}],r:0},{cN:"number",v:[{b:"\\b0b([01_]*[01])"+b},{b:"\\b0o([0-7_]*[0-7])"+b},{b:"\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])"+b},{b:"\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)"+b}],r:0}];return t.c=f,a.c=f.slice(1),{aliases:["cr"],l:c,k:s,c:f}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"type",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*",r:0},e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("processing",function(e){return{k:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM]}});hljs.registerLanguage("1c",function(c){var e="[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*",n="возврат дата для если и или иначе иначеесли исключение конецесли конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл число экспорт",b="ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить стрколичествострок стрполучитьстроку стрчисловхождений сформироватьпозициюдокумента счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты установитьтана установитьтапо фиксшаблон формат цел шаблон",i={b:'""'},r={cN:"string",b:'"',e:'"|$',c:[i]},t={cN:"string",b:"\\|",e:'"|$',c:[i]};return{cI:!0,l:e,k:{keyword:n,built_in:b},c:[c.CLCM,c.NM,r,t,{cN:"function",b:"(процедура|функция)",e:"$",l:e,k:"процедура функция",c:[{b:"экспорт",eW:!0,l:e,k:"экспорт",c:[c.CLCM]},{cN:"params",b:"\\(",e:"\\)",l:e,k:"знач",c:[r,t]},c.CLCM,c.inherit(c.TM,{b:e})]},{cN:"meta",b:"#",e:"$"},{cN:"number",b:"'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})'"}]}});hljs.registerLanguage("julia",function(e){var r={keyword:"in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export finally for function global if immutable import importall let local macro module quote return try type typealias using while",literal:"true false ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e|0 eu|0 eulergamma golden im nothing pi γ π φ Inf64 NaN64 RoundNearestTiesAway RoundNearestTiesUp ",built_in:"ANY ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip AbstractChannel AbstractFloat AbstractString AssertionError Base64DecodePipe Base64EncodePipe BufferStream CapturedException CartesianIndex CartesianRange Channel Cintmax_t CompositeException Cstring Cuintmax_t Cwstring Date DateTime Dims Enum GenSym GlobalRef HTML InitError InvalidStateException Irrational LinSpace LowerTriangular NullException Nullable OutOfMemoryError Pair PartialQuickSort Pipe RandomDevice ReadOnlyMemoryError ReentrantLock Ref RemoteException SegmentationFault SerializationState SimpleVector TCPSocket Text Tuple UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UnicodeError Union UpperTriangular Val Void WorkerConfig AbstractMatrix AbstractSparseMatrix AbstractSparseVector AbstractVecOrMat AbstractVector DenseMatrix DenseVecOrMat DenseVector Matrix SharedMatrix SharedVector StridedArray StridedMatrix StridedVecOrMat StridedVector VecOrMat Vector "},t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",a={l:t,k:r,i:/<\//},n={cN:"type",b:/::/},o={cN:"type",b:/<:/},i={cN:"number",b:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,r:0},l={cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},c={cN:"subst",b:/\$\(/,e:/\)/,k:r},s={cN:"variable",b:"\\$"+t},d={cN:"string",c:[e.BE,c,s],v:[{b:/\w*"""/,e:/"""\w*/,r:10},{b:/\w*"/,e:/"\w*/}]},S={cN:"string",c:[e.BE,c,s],b:"`",e:"`"},u={cN:"meta",b:"@"+t},g={cN:"comment",v:[{b:"#=",e:"=#",r:10},{b:"#",e:"$"}]};return a.c=[i,l,n,o,d,S,u,g,e.HCM],c.c=a.c,a});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("mojolicious",function(e){return{sL:"xml",c:[{cN:"meta",b:"^__(END|DATA)__$"},{b:"^\\s*%{1,2}={0,2}",e:"$",sL:"perl"},{b:"<%{1,2}={0,2}",e:"={0,1}%>",sL:"perl",eB:!0,eE:!0}]}});hljs.registerLanguage("lsl",function(E){var T={cN:"subst",b:/\\[tn"\\]/},e={cN:"string",b:'"',e:'"',c:[T]},A={cN:"number",b:E.CNR},R={cN:"literal",v:[{b:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{b:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{b:"\\b(?:FALSE|TRUE)\\b"},{b:"\\b(?:ZERO_ROTATION)\\b"},{b:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{b:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},O={cN:"built_in",b:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"};return{i:":",c:[e,{cN:"comment",v:[E.C("//","$"),E.C("/\\*","\\*/")]},A,{cN:"section",v:[{b:"\\b(?:state|default)\\b"},{b:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},O,R,{cN:"type",b:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/^\s*@?rem\b/,/$/,{r:10}),t={cN:"symbol",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,i:/\/\*/,k:{keyword:"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq",built_in:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux shift cd dir echo setlocal endlocal set pause copy append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol ping net ipconfig taskkill xcopy ren del"},c:[{cN:"variable",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("puppet",function(e){var s={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},r=e.C("#","$"),a="([A-Za-z_]|::)(\\w|::)*",i=e.inherit(e.TM,{b:a}),o={cN:"variable",b:"\\$"+a},t={cN:"string",c:[e.BE,o],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]};return{aliases:["pp"],c:[r,o,t,{bK:"class",e:"\\{|;",i:/=/,c:[i,r]},{bK:"define",e:/\{/,c:[{cN:"section",b:e.IR,endsParent:!0}]},{b:e.IR+"\\s+\\{",rB:!0,e:/\S/,c:[{cN:"keyword",b:e.IR},{b:/\{/,e:/\}/,k:s,r:0,c:[t,r,{b:"[a-zA-Z_]+\\s*=>",rB:!0,e:"=>",c:[{cN:"attr",b:e.IR}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},o]}],r:0}]}});hljs.registerLanguage("swift",function(e){var t={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},i={cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:t,c:[]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[a],{k:t,c:[o,e.CLCM,n,i,a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,c:["self",a,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:t,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage("gcode",function(N){var e="[A-Z_][A-Z0-9_.]*",c="\\%",E="IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",i={cN:"meta",b:"([O])([0-9]+)"},n=[N.CLCM,N.CBCM,N.C(/\(/,/\)/),N.inherit(N.CNM,{b:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+N.CNR}),N.inherit(N.ASM,{i:null}),N.inherit(N.QSM,{i:null}),{cN:"name",b:"([G])([0-9]+\\.?[0-9]?)"},{cN:"name",b:"([M])([0-9]+\\.?[0-9]?)"},{cN:"attr",b:"(VC|VS|#)",e:"(\\d+)"},{cN:"attr",b:"(VZOFX|VZOFY|VZOFZ)"},{cN:"built_in",b:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",e:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{cN:"symbol",v:[{b:"N",e:"\\d+",i:"\\W"}]}];return{aliases:["nc"],cI:!0,l:e,k:E,c:[{cN:"meta",b:c},i].concat(n)}});hljs.registerLanguage("ceylon",function(e){var a="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",t="shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",s="doc by license see throws tagged",n={cN:"subst",eB:!0,eE:!0,b:/``/,e:/``/,k:a,r:10},r=[{cN:"string",b:'"""',e:'"""',r:10},{cN:"string",b:'"',e:'"',c:[n]},{cN:"string",b:"'",e:"'"},{cN:"number",b:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",r:0}];return n.c=r,{k:{keyword:a+" "+t,meta:s},i:"\\$[^01]|#[^0-9a-fA-F]",c:[e.CLCM,e.C("/\\*","\\*/",{c:["self"]}),{cN:"meta",b:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(r)}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\._]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]\n/,sL:"bash"}}],i:"",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("protobuf",function(e){return{k:{keyword:"package import option optional required repeated group",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},c:[e.QSM,e.NM,e.CLCM,{cN:"class",bK:"message enum service",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"function",bK:"rpc",e:/;/,eE:!0,k:"rpc returns"},{b:/^\s*[A-Z_]+/,e:/\s*=/,eE:!0}]}});hljs.registerLanguage("matlab",function(e){var a=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],s={r:0,c:[{b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},s.c[0]]},{b:"\\[",e:"\\]",c:a,r:0,starts:s},{b:"\\{",e:/}/,c:a,r:0,starts:s},{b:/\)/,r:0,starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(a)}});hljs.registerLanguage("irpf90",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"};return{cI:!0,k:n,i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),e.C("begin_doc","end_doc",{r:10}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}});hljs.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit initinterface annotation data sealed internal infix operator out by constructor super trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},r={cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},i={cN:"symbol",b:e.UIR+"@"},n={cN:"subst",v:[{b:"\\$"+e.UIR},{b:"\\${",e:"}",c:[e.ASM,e.CNM]}]},a={cN:"string",v:[{b:'"""',e:'"""',c:[n]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,n]}]},c={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},s={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(a,{cN:"meta-string"})]}]};return{k:t,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,r,i,c,s,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,r:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"type",b://,k:"reified",r:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,r:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[{cN:"type",b:e.UIR},e.CLCM,e.CBCM],r:0},e.CLCM,e.CBCM,c,s,a,e.CNM]},e.CBCM]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b://,eB:!0,eE:!0,r:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},c,s]},a,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},e.CNM]}});hljs.registerLanguage("crmsh",function(t){var e="primitive rsc_template",r="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml",s="property rsc_defaults op_defaults",a="params meta operations op rule attributes utilization",i="read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\",o="number string",n="Master Started Slave Stopped start promote demote stop monitor true false";return{aliases:["crm","pcmk"],cI:!0,k:{keyword:a+" "+i+" "+o,literal:n},c:[t.HCM,{bK:"node",starts:{e:"\\s*([\\w_-]+:)?",starts:{cN:"title",e:"\\s*[\\$\\w_][\\w_-]*"}}},{bK:e,starts:{cN:"title",e:"\\s*[\\$\\w_][\\w_-]*",starts:{e:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{b:"\\b("+r.split(" ").join("|")+")\\s+",k:r,starts:{cN:"title",e:"[\\$\\w_][\\w_-]*"}},{bK:s,starts:{cN:"title",e:"\\s*([\\w_-]+:)?"}},t.QSM,{cN:"meta",b:"(ocf|systemd|service|lsb):[\\w_:-]+",r:0},{cN:"number",b:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",r:0},{cN:"literal",b:"[-]?(infinity|inf)",r:0},{cN:"attr",b:/([A-Za-z\$_\#][\w_-]+)=/,r:0},{cN:"tag",b:"",r:0}]}});hljs.registerLanguage("haskell",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},a={cN:"meta",b:"{-#",e:"#-}"},l={cN:"meta",b:"^#",e:"$"},c={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={b:"\\(",e:"\\)",i:'"',c:[a,l,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"}),i]},s={b:"{",e:"}",c:n.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{bK:"module",e:"where",k:"module where",c:[n,i],i:"\\W\\.|;"},{b:"\\bimport\\b",e:"$",k:"import qualified as hiding",c:[n,i],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[c,n,i]},{cN:"class",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,c,n,s,i]},{bK:"default",e:"$",c:[c,n,i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[c,e.QSM,i]},{cN:"meta",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}]}});hljs.registerLanguage("flix",function(e){var t={cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i={cN:"string",v:[{b:'"',e:'"'}]},n={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/},c={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[n]};return{k:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},c:[e.CLCM,e.CBCM,t,i,c,e.CNM]}});hljs.registerLanguage("scala",function(e){var t={cN:"meta",b:"@[A-Za-z]+"},a={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},r={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',r:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,a]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[a],r:10}]},c={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},i={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},s={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},n={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",r:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,r:0,c:[i]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,r:0,c:[i]},s]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[s]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,r,c,i,l,n,e.CNM,t]}});hljs.registerLanguage("powershell",function(e){var t={b:"`[\\s\\S]",r:0},o={cN:"variable",v:[{b:/\$[\w\d][\w\d_:]*/}]},r={cN:"literal",b:/\$(null|true|false)\b/},n={cN:"string",v:[{b:/"/,e:/"/},{b:/@"/,e:/^"@/}],c:[t,o,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},a={cN:"string",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},i={cN:"doctag",v:[{b:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]},s=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[i]});return{aliases:["ps"],l:/-?[A-z\.\-]+/,cI:!0,k:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",built_in:"Add-Computer Add-Content Add-History Add-JobTrigger Add-Member Add-PSSnapin Add-Type Checkpoint-Computer Clear-Content Clear-EventLog Clear-History Clear-Host Clear-Item Clear-ItemProperty Clear-Variable Compare-Object Complete-Transaction Connect-PSSession Connect-WSMan Convert-Path ConvertFrom-Csv ConvertFrom-Json ConvertFrom-SecureString ConvertFrom-StringData ConvertTo-Csv ConvertTo-Html ConvertTo-Json ConvertTo-SecureString ConvertTo-Xml Copy-Item Copy-ItemProperty Debug-Process Disable-ComputerRestore Disable-JobTrigger Disable-PSBreakpoint Disable-PSRemoting Disable-PSSessionConfiguration Disable-WSManCredSSP Disconnect-PSSession Disconnect-WSMan Disable-ScheduledJob Enable-ComputerRestore Enable-JobTrigger Enable-PSBreakpoint Enable-PSRemoting Enable-PSSessionConfiguration Enable-ScheduledJob Enable-WSManCredSSP Enter-PSSession Exit-PSSession Export-Alias Export-Clixml Export-Console Export-Counter Export-Csv Export-FormatData Export-ModuleMember Export-PSSession ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-ComputerRestorePoint Get-Content Get-ControlPanelItem Get-Counter Get-Credential Get-Culture Get-Date Get-Event Get-EventLog Get-EventSubscriber Get-ExecutionPolicy Get-FormatData Get-Host Get-HotFix Get-Help Get-History Get-IseSnippet Get-Item Get-ItemProperty Get-Job Get-JobTrigger Get-Location Get-Member Get-Module Get-PfxCertificate Get-Process Get-PSBreakpoint Get-PSCallStack Get-PSDrive Get-PSProvider Get-PSSession Get-PSSessionConfiguration Get-PSSnapin Get-Random Get-ScheduledJob Get-ScheduledJobOption Get-Service Get-TraceSource Get-Transaction Get-TypeData Get-UICulture Get-Unique Get-Variable Get-Verb Get-WinEvent Get-WmiObject Get-WSManCredSSP Get-WSManInstance Group-Object Import-Alias Import-Clixml Import-Counter Import-Csv Import-IseSnippet Import-LocalizedData Import-PSSession Import-Module Invoke-AsWorkflow Invoke-Command Invoke-Expression Invoke-History Invoke-Item Invoke-RestMethod Invoke-WebRequest Invoke-WmiMethod Invoke-WSManAction Join-Path Limit-EventLog Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Event New-EventLog New-IseSnippet New-Item New-ItemProperty New-JobTrigger New-Object New-Module New-ModuleManifest New-PSDrive New-PSSession New-PSSessionConfigurationFile New-PSSessionOption New-PSTransportOption New-PSWorkflowExecutionOption New-PSWorkflowSession New-ScheduledJobOption New-Service New-TimeSpan New-Variable New-WebServiceProxy New-WinEvent New-WSManInstance New-WSManSessionOption Out-Default Out-File Out-GridView Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Receive-Job Register-EngineEvent Register-ObjectEvent Register-PSSessionConfiguration Register-ScheduledJob Register-WmiEvent Remove-Computer Remove-Event Remove-EventLog Remove-Item Remove-ItemProperty Remove-Job Remove-JobTrigger Remove-Module Remove-PSBreakpoint Remove-PSDrive Remove-PSSession Remove-PSSnapin Remove-TypeData Remove-Variable Remove-WmiObject Remove-WSManInstance Rename-Computer Rename-Item Rename-ItemProperty Reset-ComputerMachinePassword Resolve-Path Restart-Computer Restart-Service Restore-Computer Resume-Job Resume-Service Save-Help Select-Object Select-String Select-Xml Send-MailMessage Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-JobTrigger Set-Location Set-PSBreakpoint Set-PSDebug Set-PSSessionConfiguration Set-ScheduledJob Set-ScheduledJobOption Set-Service Set-StrictMode Set-TraceSource Set-Variable Set-WmiInstance Set-WSManInstance Set-WSManQuickConfig Show-Command Show-ControlPanelItem Show-EventLog Sort-Object Split-Path Start-Job Start-Process Start-Service Start-Sleep Start-Transaction Start-Transcript Stop-Computer Stop-Job Stop-Process Stop-Service Stop-Transcript Suspend-Job Suspend-Service Tee-Object Test-ComputerSecureChannel Test-Connection Test-ModuleManifest Test-Path Test-PSSessionConfigurationFile Trace-Command Unblock-File Undo-Transaction Unregister-Event Unregister-PSSessionConfiguration Unregister-ScheduledJob Update-FormatData Update-Help Update-List Update-TypeData Use-Transaction Wait-Event Wait-Job Wait-Process Where-Object Write-Debug Write-Error Write-EventLog Write-Host Write-Output Write-Progress Write-Verbose Write-Warning Add-MDTPersistentDrive Disable-MDTMonitorService Enable-MDTMonitorService Get-MDTDeploymentShareStatistics Get-MDTMonitorData Get-MDTOperatingSystemCatalog Get-MDTPersistentDrive Import-MDTApplication Import-MDTDriver Import-MDTOperatingSystem Import-MDTPackage Import-MDTTaskSequence New-MDTDatabase Remove-MDTMonitorData Remove-MDTPersistentDrive Restore-MDTPersistentDrive Set-MDTMonitorData Test-MDTDeploymentShare Test-MDTMonitorData Update-MDTDatabaseSchema Update-MDTDeploymentShare Update-MDTLinkedDS Update-MDTMedia Update-MDTMedia Add-VamtProductKey Export-VamtData Find-VamtManagedMachine Get-VamtConfirmationId Get-VamtProduct Get-VamtProductKey Import-VamtData Initialize-VamtData Install-VamtConfirmationId Install-VamtProductActivation Install-VamtProductKey Update-VamtProduct",nomarkup:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},c:[t,e.NM,n,a,r,o,s]}});hljs.registerLanguage("cal",function(e){var r="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",t="false true",c=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],n={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},o={cN:"string",b:/(#\d+)+/},a={cN:"number",b:"\\b\\d+(\\.\\d+)?(DT|D|T)",r:0},i={cN:"string",b:'"',e:'"'},d={cN:"function",bK:"procedure",e:/[:;]/,k:"procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:r,c:[n,o]}].concat(c)},s={cN:"class",b:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",rB:!0,c:[e.TM,d]};return{cI:!0,k:{keyword:r,literal:t},i:/\/\*/,c:[n,o,a,i,e.NM,s,d]}});hljs.registerLanguage("openscad",function(e){var r={cN:"keyword",b:"\\$(f[asn]|t|vp[rtd]|children)"},n={cN:"literal",b:"false|true|PI|undef"},o={cN:"number",b:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",r:0},i=e.inherit(e.QSM,{i:null}),t={cN:"meta",k:{"meta-keyword":"include use"},b:"include|use <",e:">"},s={cN:"params",b:"\\(",e:"\\)",c:["self",o,i,r,n]},c={b:"[*!#%]",r:0},a={cN:"function",bK:"module function",e:"\\=|\\{",c:[s,e.UTM]};return{aliases:["scad"],k:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},c:[e.CLCM,e.CBCM,o,t,i,r,c,a]}});hljs.registerLanguage("dts",function(e){var a={cN:"string",v:[e.inherit(e.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[e.BE]},{b:"'\\\\?.",e:"'",i:"."}]},c={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:e.CNR}],r:0},b={cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef ifdef ifndef"},c:[{b:/\\\n/,r:0},{bK:"include",e:"$",k:{"meta-keyword":"include"},c:[e.inherit(a,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"}]},a,e.CLCM,e.CBCM]},i={cN:"variable",b:"\\&[a-z\\d_]*\\b"},r={cN:"meta-keyword",b:"/[a-z][a-z\\d-]*/"},d={cN:"symbol",b:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},n={cN:"params",b:"<",e:">",c:[c,i]},s={cN:"class",b:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,e:/[{;=]/,rB:!0,eE:!0},t={cN:"class",b:"/\\s*{",e:"};",r:10,c:[i,r,d,s,n,e.CLCM,e.CBCM,c,a]};return{k:"",c:[t,i,r,d,s,n,e.CLCM,e.CBCM,c,a,b,{b:e.IR+"::",k:""}]}});hljs.registerLanguage("sml",function(e){return{aliases:["ml"],k:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:/\[(\|\|)?\]|\(\)/,r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"type",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("verilog",function(e){var n={keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"};return{aliases:["v","sv","svh"],cI:!1,k:n,l:/[\w\$]+/,c:[e.CBCM,e.CLCM,e.QSM,{cN:"number",c:[e.BE],v:[{b:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{b:"\\b([0-9_])+",r:0}]},{cN:"variable",v:[{b:"#\\((?!parameter).+\\)"},{b:"\\.\\w+",r:0}]},{cN:"meta",b:"`",e:"$",k:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},r:0}]}});hljs.registerLanguage("hsp",function(e){return{cI:!0,l:/[\w\._]+/,k:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",c:[e.CLCM,e.CBCM,e.QSM,e.ASM,{cN:"string",b:'{"',e:'"}',c:[e.BE]},e.C(";","$",{r:0}),{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},c:[e.inherit(e.QSM,{cN:"meta-string"}),e.NM,e.CNM,e.CLCM,e.CBCM]},{cN:"symbol",b:"^\\*(\\w+|@)"},e.NM,e.CNM]}});hljs.registerLanguage("rib",function(e){return{k:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",i:""}]}});hljs.registerLanguage("elixir",function(e){var r="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",c={cN:"subst",b:"#\\{",e:"}",l:r,k:b},a={cN:"string",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]},i={cN:"function",bK:"def defp defmacro",e:/\B\b/,c:[e.inherit(e.TM,{b:r,endsParent:!0})]},l=e.inherit(i,{cN:"class",bK:"defimpl defmodule defprotocol defrecord",e:/\bdo\b|$|;/}),s=[a,e.HCM,l,i,{cN:"symbol",b:":(?!\\s)",c:[a,{b:n}],r:0},{cN:"symbol",b:r+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"->"},{b:"("+e.RSR+")\\s*",c:[e.HCM,{cN:"regexp",i:"\\n",c:[e.BE,c],v:[{b:"/",e:"/[a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];return c.c=s,{l:r,k:b,c:s}});hljs.registerLanguage("asciidoc",function(e){return{aliases:["adoc"],c:[e.C("^/{4,}\\n","\\n/{4,}$",{r:10}),e.C("^//","$",{r:0}),{cN:"title",b:"^\\.\\w.*$"},{b:"^[=\\*]{4,}\\n",e:"\\n^[=\\*]{4,}$",r:10},{cN:"section",r:10,v:[{b:"^(={1,5}) .+?( \\1)?$"},{b:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{cN:"meta",b:"^:.+?:",e:"\\s",eE:!0,r:10},{cN:"meta",b:"^\\[.+?\\]$",r:0},{cN:"quote",b:"^_{4,}\\n",e:"\\n_{4,}$",r:10},{cN:"code",b:"^[\\-\\.]{4,}\\n",e:"\\n[\\-\\.]{4,}$",r:10},{b:"^\\+{4,}\\n",e:"\\n\\+{4,}$",c:[{b:"<",e:">",sL:"xml",r:0}],r:10},{cN:"bullet",b:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{cN:"symbol",b:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",r:10},{cN:"strong",b:"\\B\\*(?![\\*\\s])",e:"(\\n{2}|\\*)",c:[{b:"\\\\*\\w",r:0}]},{cN:"emphasis",b:"\\B'(?!['\\s])",e:"(\\n{2}|')",c:[{b:"\\\\'\\w",r:0}],r:0},{cN:"emphasis",b:"_(?![_\\s])",e:"(\\n{2}|_)",r:0},{cN:"string",v:[{b:"``.+?''"},{b:"`.+?'"}]},{cN:"code",b:"(`.+?`|\\+.+?\\+)",r:0},{cN:"code",b:"^[ \\t]",e:"$",r:0},{b:"^'{3,}[ \\t]*$",r:10},{b:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",rB:!0,c:[{b:"(link|image:?):",r:0},{cN:"link",b:"\\w",e:"[^\\[]+",r:0},{cN:"string",b:"\\[",e:"\\]",eB:!0,eE:!0,r:0}],r:10}]}});hljs.registerLanguage("capnproto",function(t){return{aliases:["capnp"],k:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},c:[t.QSM,t.NM,t.HCM,{cN:"meta",b:/@0x[\w\d]{16};/,i:/\n/},{cN:"symbol",b:/@\d+\b/},{cN:"class",bK:"struct enum",e:/\{/,i:/\n/,c:[t.inherit(t.TM,{starts:{eW:!0,eE:!0}})]},{cN:"class",bK:"interface",e:/\{/,i:/\n/,c:[t.inherit(t.TM,{starts:{eW:!0,eE:!0}})]}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("oxygene",function(e){var r="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",t=e.C("{","}",{r:0}),a=e.C("\\(\\*","\\*\\)",{r:10}),n={cN:"string",b:"'",e:"'",c:[{b:"''"}]},o={cN:"string",b:"(#\\d+)+"},i={cN:"function",bK:"function constructor destructor procedure method",e:"[:;]",k:"function constructor|10 destructor|10 procedure|10 method|10",c:[e.TM,{cN:"params",b:"\\(",e:"\\)",k:r,c:[n,o]},t,a]};return{cI:!0,l:/\.?\w+/,k:r,i:'("|\\$[G-Zg-z]|\\/\\*||->)',c:[t,a,e.CLCM,n,o,e.NM,i,{cN:"class",b:"=\\bclass\\b",e:"end;",k:r,c:[n,o,t,a,e.CLCM,i]}]}});hljs.registerLanguage("autoit",function(e){var t="ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",r="True False And Null Not Or",i="Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",l={v:[e.C(";","$",{r:0}),e.C("#cs","#ce"),e.C("#comments-start","#comments-end")]},n={b:"\\$[A-z0-9_]+"},o={cN:"string",v:[{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]},a={v:[e.BNM,e.CNM]},S={cN:"meta",b:"#",e:"$",k:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},c:[{b:/\\\n/,r:0},{bK:"include",k:{"meta-keyword":"include"},e:"$",c:[o,{cN:"meta-string",v:[{b:"<",e:">"},{b:/"/,e:/"/,c:[{b:/""/,r:0}]},{b:/'/,e:/'/,c:[{b:/''/,r:0}]}]}]},o,l]},C={cN:"symbol",b:"@[A-z0-9_]+"},s={cN:"function",bK:"Func",e:"$",i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:[n,o,a]}]};return{cI:!0,i:/\/\*/,k:{keyword:t,built_in:i,literal:r},c:[l,n,o,a,S,C,s]}});hljs.registerLanguage("axapta",function(e){return{k:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.CNM,{cN:"meta",b:"#",e:"$"},{cN:"class",bK:"class interface",e:"{",eE:!0,i:":",c:[{bK:"extends implements"},e.UTM]}]}});hljs.registerLanguage("qml",function(r){var e={keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url var variant vector2d vector3d vector4dPromise"},t="[a-zA-Z_][a-zA-Z0-9\\._]*",a={cN:"keyword",b:"\\bproperty\\b",starts:{cN:"string",e:"(:|=|;|,|//|/\\*|$)",rE:!0}},n={cN:"keyword",b:"\\bsignal\\b",starts:{cN:"string",e:"(\\(|:|=|;|,|//|/\\*|$)",rE:!0}},o={cN:"attribute",b:"\\bid\\s*:",starts:{cN:"string",e:t,rE:!1}},i={b:t+"\\s*:",rB:!0,c:[{cN:"attribute",b:t,e:"\\s*:",eE:!0,r:0}],r:0},c={b:t+"\\s*{",e:"{",rB:!0,r:0,c:[r.inherit(r.TM,{b:t})]};return{aliases:["qt"],cI:!1,k:e,c:[{cN:"meta",b:/^\s*['"]use (strict|asm)['"]/},r.ASM,r.QSM,{cN:"string",b:"`",e:"`",c:[r.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},r.CLCM,r.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:r.CNR}],r:0},{b:"("+r.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[r.CLCM,r.CBCM,r.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},n,a,{cN:"function",bK:"function",e:/\{/,eE:!0,c:[r.inherit(r.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[r.CLCM,r.CBCM]}],i:/\[|%/},{b:"\\."+r.IR,r:0},o,i,c],i:/#/}});hljs.registerLanguage("subunit",function(s){var r={cN:"string",b:"\\[\n(multipart)?",e:"\\]\n"},t={cN:"string",b:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},e={cN:"string",b:"(\\+|-)\\d+"},c={cN:"keyword",r:10,v:[{b:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{b:"^progress(:?)(\\s+)?(pop|push)?"},{b:"^tags:"},{b:"^time:"}]};return{cI:!0,c:[r,t,e,c]}});hljs.registerLanguage("vala",function(t){return{k:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},c:[{cN:"class",bK:"class interface namespace",e:"{",eE:!0,i:"[^,:\\n\\s\\.]",c:[t.UTM]},t.CLCM,t.CBCM,{cN:"string",b:'"""',e:'"""',r:5},t.ASM,t.QSM,t.CNM,{cN:"meta",b:"^#",e:"$",r:2}]}});hljs.registerLanguage("hy",function(e){var t={"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},i="a-zA-Z_\\-!.?+*=<>&#'",a="["+i+"]["+i+"0-9/;:]*",r="[-+]?\\d+(\\.\\d+)?",o={cN:"meta",b:"^#!",e:"$"},s={b:a,r:0},n={cN:"number",b:r,r:0},l=e.inherit(e.QSM,{i:null}),c=e.C(";","$",{r:0}),d={cN:"literal",b:/\b([Tt]rue|[Ff]alse|nil|None)\b/},p={b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+a},u=e.C("\\^\\{","\\}"),f={cN:"symbol",b:"[:]{1,2}"+a},h={b:"\\(",e:"\\)"},b={eW:!0,r:0},g={k:t,l:a,cN:"name",b:a,starts:b},y=[h,l,m,u,c,f,p,n,d,s];return h.c=[e.C("comment",""),g,b],b.c=y,p.c=y,{aliases:["hylang"],i:/\S/,c:[o,h,l,m,u,c,f,p,n,d]}});hljs.registerLanguage("glsl",function(e){return{k:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBufferiimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},i:'"',c:[e.CLCM,e.CBCM,e.CNM,{cN:"meta",b:"#",e:"$"}]}});hljs.registerLanguage("pf",function(t){var o={cN:"variable",b:/\$[\w\d#@][\w\d_]*/},e={cN:"variable",b:/<(?!\/)/,e:/>/};return{aliases:["pf.conf"],l:/[a-z0-9_<>-]+/,k:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},c:[t.HCM,t.NM,t.QSM,o,e]}});hljs.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"doctag",b:"'''|",c:[e.PWM]},{cN:"doctag",b:"",c:[e.PWM]}]}),e.CNM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elseif end region externalsource"}}]}});hljs.registerLanguage("coq",function(e){return{k:{keyword:"_ as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies DependentDerive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},c:[e.QSM,e.C("\\(\\*","\\*\\)"),e.CNM,{cN:"type",eB:!0,b:"\\|\\s*",e:"\\w+"},{b:/[-=]>/}]}}); \ No newline at end of file diff --git a/dist/js/theme.js b/dist/js/theme.js deleted file mode 100644 index 1507d9d..0000000 --- a/dist/js/theme.js +++ /dev/null @@ -1,54 +0,0 @@ - -let linkTheme = null; -let head = document.getElementsByTagName("head")[0]; -function setTheme(themeName) { - if (linkTheme) { - head.removeChild(linkTheme); - } - linkTheme = document.createElement("link"); - linkTheme.rel = "stylesheet"; - linkTheme.id = "theme"; - linkTheme.type = "text/css"; - if (document.body.children[0].getAttribute('src') === 'js/theme.js') { - linkTheme.href = `css/theme/${themeName}.css`; - } else { - linkTheme.href = `../../css/theme/${themeName}.css`; - } - head.appendChild(linkTheme); -} -const defaultTheme = "beige"; -let savedTheme = localStorage.getItem("theme"); -if (savedTheme !== null) { - setTheme(savedTheme); -} else { - setTheme(defaultTheme); - localStorage.setItem("theme", defaultTheme); - savedTheme = defaultTheme; -} - -document.addEventListener("DOMContentLoaded", function () { - let selectedTheme = document.getElementById("selected-theme"); - let hiddenPanel = document.getElementById("hidden-bar"); - selectedTheme.addEventListener("click", function (e) { - hiddenPanel.classList.toggle("invisible"); - e.stopPropagation(); - }); - - selectedTheme.classList.add("theme-" + savedTheme); - let themes = document.querySelectorAll("#hidden-bar .theme-circle"); - for (let theme of themes) { - theme.addEventListener("click", function(e) { - setTheme(theme.dataset.theme); - localStorage.setItem("theme", theme.dataset.theme); - selectedTheme.classList.replace("theme-" + savedTheme, "theme-" + theme.dataset.theme); - savedTheme = theme.dataset.theme; - e.stopPropagation(); - }); - } - document.addEventListener("click", function() { - if (!hiddenPanel.classList.contains("invisible")) { - hiddenPanel.classList.add("invisible"); - } - }); - hiddenPanel.addEventListener("click", (e) => e.stopPropagation()); -}); diff --git a/dist/js/worker.js b/dist/js/worker.js deleted file mode 100644 index 2ec3284..0000000 --- a/dist/js/worker.js +++ /dev/null @@ -1,14 +0,0 @@ -onmessage = function (event) { - let data = JSON.parse(event.data); - if (data.index == -1) { - - close(); - - } - self.importScripts('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js'); - let result = self.hljs.highlightAuto(data.code); - postMessage(JSON.stringify({ - result: result.value, - index: data.index - })); -} \ No newline at end of file diff --git a/dist/js/zoom.js b/dist/js/zoom.js deleted file mode 100644 index 8531790..0000000 --- a/dist/js/zoom.js +++ /dev/null @@ -1,272 +0,0 @@ -// Custom reveal.js integration -(function(){ - var revealElement = document.querySelector( '.reveal' ); - if( revealElement ) { - - revealElement.addEventListener( 'mousedown', function( event ) { - var defaultModifier = /Linux/.test( window.navigator.platform ) ? 'ctrl' : 'alt'; - - var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : defaultModifier ) + 'Key'; - var zoomLevel = ( Reveal.getConfig().zoomLevel ? Reveal.getConfig().zoomLevel : 2 ); - - if( event[ modifier ] && !Reveal.isOverview() ) { - event.preventDefault(); - - zoom.to({ - x: event.clientX, - y: event.clientY, - scale: zoomLevel, - pan: false - }); - } - } ); - - } -})(); - -/*! - * zoom.js 0.3 (modified for use with reveal.js) - * http://lab.hakim.se/zoom-js - * MIT licensed - * - * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se - */ -var zoom = (function(){ - - // The current zoom level (scale) - var level = 1; - - // The current mouse position, used for panning - var mouseX = 0, - mouseY = 0; - - // Timeout before pan is activated - var panEngageTimeout = -1, - panUpdateInterval = -1; - - // Check for transform support so that we can fallback otherwise - var supportsTransforms = 'WebkitTransform' in document.body.style || - 'MozTransform' in document.body.style || - 'msTransform' in document.body.style || - 'OTransform' in document.body.style || - 'transform' in document.body.style; - - if( supportsTransforms ) { - // The easing that will be applied when we zoom in/out - document.body.style.transition = 'transform 0.8s ease'; - document.body.style.OTransition = '-o-transform 0.8s ease'; - document.body.style.msTransition = '-ms-transform 0.8s ease'; - document.body.style.MozTransition = '-moz-transform 0.8s ease'; - document.body.style.WebkitTransition = '-webkit-transform 0.8s ease'; - } - - // Zoom out if the user hits escape - document.addEventListener( 'keyup', function( event ) { - if( level !== 1 && event.keyCode === 27 ) { - zoom.out(); - } - } ); - - // Monitor mouse movement for panning - document.addEventListener( 'mousemove', function( event ) { - if( level !== 1 ) { - mouseX = event.clientX; - mouseY = event.clientY; - } - } ); - - /** - * Applies the CSS required to zoom in, prefers the use of CSS3 - * transforms but falls back on zoom for IE. - * - * @param {Object} rect - * @param {Number} scale - */ - function magnify( rect, scale ) { - - var scrollOffset = getScrollOffset(); - - // Ensure a width/height is set - rect.width = rect.width || 1; - rect.height = rect.height || 1; - - // Center the rect within the zoomed viewport - rect.x -= ( window.innerWidth - ( rect.width * scale ) ) / 2; - rect.y -= ( window.innerHeight - ( rect.height * scale ) ) / 2; - - if( supportsTransforms ) { - // Reset - if( scale === 1 ) { - document.body.style.transform = ''; - document.body.style.OTransform = ''; - document.body.style.msTransform = ''; - document.body.style.MozTransform = ''; - document.body.style.WebkitTransform = ''; - } - // Scale - else { - var origin = scrollOffset.x +'px '+ scrollOffset.y +'px', - transform = 'translate('+ -rect.x +'px,'+ -rect.y +'px) scale('+ scale +')'; - - document.body.style.transformOrigin = origin; - document.body.style.OTransformOrigin = origin; - document.body.style.msTransformOrigin = origin; - document.body.style.MozTransformOrigin = origin; - document.body.style.WebkitTransformOrigin = origin; - - document.body.style.transform = transform; - document.body.style.OTransform = transform; - document.body.style.msTransform = transform; - document.body.style.MozTransform = transform; - document.body.style.WebkitTransform = transform; - } - } - else { - // Reset - if( scale === 1 ) { - document.body.style.position = ''; - document.body.style.left = ''; - document.body.style.top = ''; - document.body.style.width = ''; - document.body.style.height = ''; - document.body.style.zoom = ''; - } - // Scale - else { - document.body.style.position = 'relative'; - document.body.style.left = ( - ( scrollOffset.x + rect.x ) / scale ) + 'px'; - document.body.style.top = ( - ( scrollOffset.y + rect.y ) / scale ) + 'px'; - document.body.style.width = ( scale * 100 ) + '%'; - document.body.style.height = ( scale * 100 ) + '%'; - document.body.style.zoom = scale; - } - } - - level = scale; - - if( document.documentElement.classList ) { - if( level !== 1 ) { - document.documentElement.classList.add( 'zoomed' ); - } - else { - document.documentElement.classList.remove( 'zoomed' ); - } - } - } - - /** - * Pan the document when the mosue cursor approaches the edges - * of the window. - */ - function pan() { - var range = 0.12, - rangeX = window.innerWidth * range, - rangeY = window.innerHeight * range, - scrollOffset = getScrollOffset(); - - // Up - if( mouseY < rangeY ) { - window.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) ); - } - // Down - else if( mouseY > window.innerHeight - rangeY ) { - window.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) ); - } - - // Left - if( mouseX < rangeX ) { - window.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y ); - } - // Right - else if( mouseX > window.innerWidth - rangeX ) { - window.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y ); - } - } - - function getScrollOffset() { - return { - x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset, - y: window.scrollY !== undefined ? window.scrollY : window.pageYOffset - } - } - - return { - /** - * Zooms in on either a rectangle or HTML element. - * - * @param {Object} options - * - element: HTML element to zoom in on - * OR - * - x/y: coordinates in non-transformed space to zoom in on - * - width/height: the portion of the screen to zoom in on - * - scale: can be used instead of width/height to explicitly set scale - */ - to: function( options ) { - - // Due to an implementation limitation we can't zoom in - // to another element without zooming out first - if( level !== 1 ) { - zoom.out(); - } - else { - options.x = options.x || 0; - options.y = options.y || 0; - - // If an element is set, that takes precedence - if( !!options.element ) { - // Space around the zoomed in element to leave on screen - var padding = 20; - var bounds = options.element.getBoundingClientRect(); - - options.x = bounds.left - padding; - options.y = bounds.top - padding; - options.width = bounds.width + ( padding * 2 ); - options.height = bounds.height + ( padding * 2 ); - } - - // If width/height values are set, calculate scale from those values - if( options.width !== undefined && options.height !== undefined ) { - options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 ); - } - - if( options.scale > 1 ) { - options.x *= options.scale; - options.y *= options.scale; - - magnify( options, options.scale ); - - if( options.pan !== false ) { - - // Wait with engaging panning as it may conflict with the - // zoom transition - panEngageTimeout = setTimeout( function() { - panUpdateInterval = setInterval( pan, 1000 / 60 ); - }, 800 ); - - } - } - } - }, - - /** - * Resets the document zoom state to its default. - */ - out: function() { - clearTimeout( panEngageTimeout ); - clearInterval( panUpdateInterval ); - - magnify( { x: 0, y: 0 }, 1 ); - - level = 1; - }, - - // Alias - magnify: function( options ) { this.to( options ) }, - reset: function() { this.out() }, - - zoomLevel: function() { - return level; - } - } - -})(); diff --git a/dist/lecture/1_scripting/img/backend_stats.png b/dist/lecture/1_scripting/img/backend_stats.png deleted file mode 100644 index c3e80de..0000000 Binary files a/dist/lecture/1_scripting/img/backend_stats.png and /dev/null differ diff --git a/dist/lecture/1_scripting/img/browsers.png b/dist/lecture/1_scripting/img/browsers.png deleted file mode 100644 index 8de556f..0000000 Binary files a/dist/lecture/1_scripting/img/browsers.png and /dev/null differ diff --git a/dist/lecture/1_scripting/img/chromium.png b/dist/lecture/1_scripting/img/chromium.png deleted file mode 100644 index 385fcdb..0000000 Binary files a/dist/lecture/1_scripting/img/chromium.png and /dev/null differ diff --git a/dist/lecture/1_scripting/img/http-ex1.jpg b/dist/lecture/1_scripting/img/http-ex1.jpg deleted file mode 100644 index c3124e9..0000000 Binary files a/dist/lecture/1_scripting/img/http-ex1.jpg and /dev/null differ diff --git a/dist/lecture/1_scripting/img/http-ex2.jpg b/dist/lecture/1_scripting/img/http-ex2.jpg deleted file mode 100644 index 760a684..0000000 Binary files a/dist/lecture/1_scripting/img/http-ex2.jpg and /dev/null differ diff --git a/dist/lecture/1_scripting/img/http.jpg b/dist/lecture/1_scripting/img/http.jpg deleted file mode 100644 index ec94d47..0000000 Binary files a/dist/lecture/1_scripting/img/http.jpg and /dev/null differ diff --git a/dist/lecture/1_scripting/img/url.png b/dist/lecture/1_scripting/img/url.png deleted file mode 100644 index 0aed663..0000000 Binary files a/dist/lecture/1_scripting/img/url.png and /dev/null differ diff --git a/dist/lecture/1_scripting/index.html b/dist/lecture/1_scripting/index.html deleted file mode 100644 index 6b78412..0000000 --- a/dist/lecture/1_scripting/index.html +++ /dev/null @@ -1,615 +0,0 @@ - - - - - - Пару слов обо всём - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    Пару слов обо всём

    -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    -
    -

    Веб программирование

    -
    - Веб программирование - это программирование клиент-серверных систем, - работающих по протоколу HTTP(S) (главным образом). -
    -

    - Весь веб построен на протоколе HTTP. - Общение браузера с веб-серверами осуществляется именно по этому протоколу. -

    -
    -
    -

    Что вообще понимают под вебом

    -

    - Всемирная паутина (так никто не говорит), или веб - распределённая система, - предоставляющая доступ к связанным между собой документам, расположенным на - различных компьютерах, подключённых к сети Интернет. -

    -

    - Сайт - это узел в вебе, имеющий свой уникальный адрес, и объединяющий под собой определённый - набор связанных ресурсов. -

    -
    -
    -
    -
    -

    HTTP

    -
    - HTTP (Hypertext Transfer Protocol) - stateless протокол прикладного уровня для взаимодействия - клиент-серверных систем по принципу "запрос-ответ". -
    -

    - "Протокол" (коммуникационный протокол/протокол связи) - означает набор правил - для передачи информации между двумя объектами. -

    -

    - Протокол описывает формат используемых сообщений и алгоритмы, по которым эти - сообщения должны передаваться. -

    -

    - Если упростить, то можно сказать, что HTTP - это протокол общения разных программ между собой. -

    -
    -
    -

    Клиент-серверная архитектура

    -

    - HTTP - клиент-серверный протокол. Это значит, что при общении - по HTTP всегда должно быть 2 стороны: Клиент и Сервер. -

    -

    - Сервер - это не физическая машина в каком-нибудь удалённом дата-центре. Сервер, как и клиент, - - это программы, написанные специальным образом, чтобы работать по HTTP. -

    -

    - Как правило, программа-сервер запущена на другом компьютере, нежели клиентское приложение, и, - для упрощения, сервером называют сам удалённый компьютер. -

    -

    - Сервер/клиент - это функциональность. -

    -
    -
    -

    Веб серверы

    -

    - За каждым ресурсом в вебе, к которому вы можете получить доступ, стоит веб-сервер. -

    -

    - Всемирную сеть образуют сотни миллионов запущенных веб-серверов по всему миру. -

    -
    -
    -

    Принцип "запрос-ответ"

    -

    - Протокол HTTP работает строго по принципу "запрос-ответ". -

    -

    - Одна сторона отправляет запрос (Request) на какой-то конкретный ресурс. - И эта сторона тогда выступает в роли Клиента. -

    -

    - Другая сторона ожидает запрос, и при его получении отправляет ответ (Response), - тому кто прислал запрос. Эта сторона называется Сервером. -

    -
    -
    -

    URL

    -

    - Ресурсы идентифицируются по URL (Uniform Resource Locator) - - уникальному адресу веб ресурса. -

    -

    - Это то, что мы видим а адресной строке браузера. -

    -

    - URL не повторяются, и состоят из следующих элементов: -

    - -

    -

      -
    • - http://localhost:4000/lecture/1_scripting/index.html#/2/3 -
    • -
    • - https://marketplace.visualstudio.com/items?itemName=npm -
    • -
    • - https://www.internetworldstats.com/ -
    • -
    -

    -
    -
    -

    Порты по умолчанию

    -

    - HTTP по умолчанию работает через порт 80 (это значит, что сервер на своем компьютере подключен - к 80 порту и слушает его, а клиент отправляет запросы на этот порт серверной машины). -

    -

    - HTTPS по умолчанию работает через порт 443. -

    -

    - Если в URL адресе опускается секция порта, это значит, что запрос будет идти на порт по умолчанию - для используемого протокола. -

    -

    - Таблица стандартных портов: -

    - Статья в википедии -
    -
    -

    HTTPS

    -

    - Протокол HTTPS - это тот же HTTP, только с шифрованием передаваемых данных по протоколу - шифрования TLS (ранее SSL). -

    -

    - В настоящее время использование простого HTTP считается устаревшим и небезопасным. -

    -
    -
    -

    Stateless

    -
    - HTTP - stateless протокол. Statless - значит "без состояния". -
    -

    - Это означает, что любой HTTP запрос изолирован и независим от предыдущих запросов. -

    -

    - На один и тот же запрос всегда должен возвращаться один и тот же ответ. Запрос не содержит - какого-либо меняющегося состояния системы. -

    -

    - Но в современном вебе любому динамическому персонализированному веб приложению требуется - обрабатывать состояние системы и изменять его, поэтому было придумано много сложных и - хитроумных решений для обхода этого ограничения. -

    -
    -
    -
    -
    -

    Схема работы HTTP

    - -
    -
    -
    -
    -

    История веба

    -

    - Создателем веба является инженер из CERN Тим Бернерс-Ли. В 1989-1990 он разработал - протокол HTTP, схему идентификатора URL, язык разметки HTML, - и написал первый браузер и веб сервер. -

    -

    - Веб-страницы изначально были статическими форматированными текстовыми документами, просто - находящимися в открытом доступе в сети. -

    -

    - Вот первый в мире веб-сайт: -

    - http://info.cern.ch -

    - Таким веб видели его создатели: просто текст с гиперссылками. -

    -

    - И именно под такой контент был заточен протокол HTTP и спроектирована вся инфраструктура - всемирной паутины. Собственно от этого и все современные проблемы веба. -

    -
    -
    -

    Продолжение истории

    -

    - Веб сразу не был популярен, пока в 1993 году не появился браузер Mosaic с цветным - графическим интерфейсом, и это стало поворотным моментом в его развитии. -

    -

    - После этого начался стремительный рост популярности веба, стали появляться тысячи - первых сайтов. -

    -

    - И вон до чего всё дошло. -

    -
    -
    -
    -
    -

    Браузеры

    -

    - По своей сути, браузер является многофункциональным HTTP клиентом. -

    -

    - В настоящее время, веб-браузеры - одни из самых сложных программных систем в мире. -

    -
    - Например, исходный код Chromium составляет около 25 млн строк кода. -
    -
    -
    -

    Архитектура браузеров

    -

    - Все браузеры имеют схожую архитектуру и состоят из 3 программных компонентов: -

    -
      -
    • Графический интерфейс
    • -
    • Браузерный движок
    • -
    • Движок JavaScript
    • -
    -

    - Браузерный движок отвечает за рендеринг и отображение веб-страниц (парсит HTML, CSS). -

    -

    - Движок JavaScript - это интерпретатор (т.е. компилятор), который выполняет JS код. -

    -
    -
    -

    Виды браузеров

    - -
    -
    -

    Гугл захватывает мир

    - -
    -
    -

    Изолированность браузера

    -

    - Браузеры спроектированы с очень серьёзным уклоном в направлении безопасности. Ведь - они должны исполнять код, написанный непонятно кем и полученный из другого уголка веба. - И кто знает, кто там что мог написать! -

    -
    - Каждая вкладка браузера запускается в изолированном окружении (sandbox) как отдельный процесс, - т.е. нет никаких способов взаимодействия разных вкладок друг с другом, нет прямого доступа к - ресурсам операционной системы (например, файловой системе). -
    -

    - Для вкладок даже есть ограничения на количество используемой оперативной памяти: на 32-битных - системах это 512 Мб, а на 64-битных - 1.4 Гб (Chromium). -

    -
    -
    -
    -
    -

    Разделение обязанностей

    -

    - Изначально с вебом мог справиться и один программист, но в результате бурного развития и - чудовищной скорости появления новых веб технологий, эта сфера разделилась на два - больших направления: -

    -
      -
    • Frontend
    • -
    • Backend
    • -
    -
    -
    -

    Frontend

    -

    - Фронтенд разработка - это разработка клиентской браузерной стороны веб приложения. -

    -

    - Сюда относится вёрстка страниц с помощью HTML и CSS, и программирование на JS с использованием - разнообразных библиотек. -

    -

    - Иначе говоря, фронтенд разработчики создают те ресурсы, которые будут отправляться пользователю, - которые он будет видеть, которые будут выполняться у него в браузере. -

    -
    -
    -

    Backend

    -

    - Бэкенд разработка - это разработка серверной стороны веб приложения. -

    -

    - Задача бэкенда - разработка маршрутизации и бизнес-логики. В бэкенде, на стороне сервера, - устанавливается, какие HTTP запросы будет обрабатывать сервер, и какие на эти запросы будут - отправляться ответы. -

    -

    - Бэкенд - это описание логики обработки поступающих запросов и логики формирования отправляемых - ответов. -

    -
    -
    -

    Ещё о бэкенде

    -

    - Разработка в бэкенде представляет собой написание всей бизнес-логики приложения, - без каких-либо излишеств и графического интерфейса, чисто код. -

    -

    - Поскольку бэкенд разработка - это разработка обычных программ, выполняющихся в среде - операционной системы, то использоваться, в принципе, могут любые технологии и - языки программирования. Лишь бы была программная поддержка протокола HTTP. -

    -

    - К бэкенду относится работа с веб серверами, взаимодействие с БД, разработка API и многое другое. -

    -
    -
    -

    Сервера

    -

    - В бэкенде можно встретить 2 подхода к работе с веб серверами: -

    -
      -
    • - Когда программисты самостоятельно программно реализуют логику работы веб сервера - с использованием специальных библиотек. -
    • -
    • - Когда используются готовые приложения веб серверов (Apache, Nginx, IIS), к которым - дописывается логика обработки запросов. -
    • -
    -

    - Первый способ часто применяется при разработке небольших веб приложений или для - создания API. -

    -

    - Второй способ хорошо заточен под веб-сайты и большие нагрузки. -

    -
    -
    -

    Веб API

    -

    - Веб - это не только разработка сайтов. Протокол HTTP не обязательно должен в ответ на - запрос возвращать какой-либо документ (html, css, js), т.е. файл. Это только частный случай - - то, с чем постоянно сталкивается обычный пользователь веба. -

    -

    - В ответ на запрос может возвращаться просто структурированная информация. -

    -

    - И тогда это называется Веб API. -

    -

    - Веб API обычно предназначается для программного использования, т.е. не для браузера и - конечного пользователя, а для других программ, выступающих в роли клиента. -

    -

    - Например, веб API на получение информации о товарах Интернет-магазина может возвращать - коллекцию (массив) из пар ключ-значение "ID товара", "название", "стоимость", "наличие". -

    -
    -
    -

    Статистика бэкенда

    - -

    - Использование языков программирования на веб серверах. -

    -
    -
    -
    -
    -

    Схема расположения ресурсов

    - -
    -
    -

    Схема запросов

    - -
    -
    -
    -
    -

    Типы веб сайтов

    -

    - Веб сайты делятся на 2 категории: -

    - -
  • Статические веб-сайты
  • -
  • Динамические веб-сайты
  • -
    -
    -
    -

    Статические веб-сайты

    -
    - Статический веб-сайт - сайт без бэкенда, сайт без какой-либо серверной логики. - Весь контент в нём статический, неизменный. -
    -

    - Такой сайт состоит только из HTML, CSS, JS и дополнительных ресурсов. На стороне сервера - не выполняется никакой дополнительной обработки. Сервер получил запрос на ресурс - - сервер выдал файл этого ресурса. -

    -

    - В основном статические веб-сайты представляют собой информационные ресурсы или сайты-визитки. -

    -
    -
    -

    Динамические веб-сайты

    -
    - Ну, а динамические веб сайты - противоположная категория сайтов, - сайты, у которых есть бэкенд. -
    -

    - Главное предназначение бэкенда - обойти ограничение HTTP, его stateless натуру. - Т.е. разграничивать пользователей и менять состояние ресурсов на основании предыдущих запросов и действий. -

    -

    - Большинство динамических веб-сайтов хранят на сервере какие-либо - пользовательские данные и выполняют их обработку. -

    -
    -
    -

    Типы приложений

    -

    - В вебе можно натолкнуться на понятия: -

    -
      -
    • Веб сайты
    • -
    • Веб приложения
    • -
    • Веб сервисы
    • -
    -

    - Но рамки этих категорий совсем размыты, и каждый их воспринимает по-своему, поэтому о чётком разделении - здесь не идёт никакой речи. -

    -
    -
    -

    Разграничения

    -

    - Определение веб-сайта было в начале: набор ресурсов с уникальным адресом. Это самое общее понятие, им - можно назвать всё. -

    -

    - Веб приложение - это подвид веб-сайта, обязательно динамического, когда серверная логика играет - ключевую роль, и сайт имеет ярко выраженную функциональную направленность. -

    -

    - Веб сервис - тоже подвид веб-сайта, снова динамического, который в первую очередь нацелен на - оказание каких-либо услуг клиентам/пользователям. -

    -

    - Обычно, сайты, которые можно назвать веб приложением, также можно назвать и веб сервисом. -

    -

    - Вообще, что хотите, то тем и считайте. -

    -
    -
    -
    -
    -

    Проблема размеров

    -

    - В современном мире больше 50% пользователей веба заходят на сайты с помощью мобильных устройств. -

    -

    - Поэтому любой веб-сайт должен одинаково хорошо отображаться как на маленьком мобильном экране, - так и на широком дисплее. -

    -

    - Раньше просто создавали 2 разные версии сайта, под разные разрешения, но сейчас есть - технологии, позволяющие делать сайты динамическими и изменчивыми, подстраивающимися под - пользовательское разрешение экрана. -

    -
    -
    -

    Responsive & Adoptive Design

    -

    - Сайты, подстраивающиеся под размеры экрана, называются адаптивными - (adoptive) или отзывчивыми (responsive). -

    -

    - Чтобы сделать сайт адаптивным или отзывчивым, при его вёрстке, в HTML и CSS нужно следовать - специальным правилам (см. в сторону flexbox, CSS grid, media-query, %). -

    -
    -
    -
    -
    -

    Модные тенденции

    -

    Mobile-first design

    -

    - Одним из популярных направлений в разработке сайтов сейчас является mobile-first design. -

    -

    - Его особенность заключается в том, что изначально проектируется мобильная версия сайта, под - экраны мобильных телефонов, и только затем определяется, как должна происходить адаптация - интерфейса к широкому экрану компьютера. -

    -
    -
    -

    Модные тенденции

    -

    Progressive Web App

    -

    - Progressive Web App (PWA) - браузерные веб приложения, выходящие за - пределы браузера. Такие веб приложения можно устанавливать на компьютер/телефон как обычное - нативное приложение/программу. Они запускаются в отдельном окне, как классические программы для ОС, - работают в оффлайне без Интернета. -

    -

    - Чтобы сделать из веб приложения PWA, нужно тоже просто разрабатывать его по определённой схеме и - правилам. -

    -
    -
    -

    Модные тенденции

    -

    Web Assembly

    -

    - С 2017 года все основные браузеры начали поддерживать WebAssembly - - технологию, которая позволяет запускать нативный код на любом языке программирования в - браузере, вместо JS. -

    -

    - Для этого нужен лишь специальный компилятор для выбранного языка программирования, который - будет производить компиляцию в wasm код. И этот wasm код будет выполняться в браузере так же, - как обычный JS. -

    -
    -
    -
    -
    - - - - - - - \ No newline at end of file diff --git a/dist/lecture/2_js_intro/img/cry.jpg b/dist/lecture/2_js_intro/img/cry.jpg deleted file mode 100644 index 797398b..0000000 Binary files a/dist/lecture/2_js_intro/img/cry.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/javascript.jpg b/dist/lecture/2_js_intro/img/javascript.jpg deleted file mode 100644 index b13f14a..0000000 Binary files a/dist/lecture/2_js_intro/img/javascript.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/js_octoverse_stat.jpg b/dist/lecture/2_js_intro/img/js_octoverse_stat.jpg deleted file mode 100644 index d5063f9..0000000 Binary files a/dist/lecture/2_js_intro/img/js_octoverse_stat.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/js_popularity_so.png b/dist/lecture/2_js_intro/img/js_popularity_so.png deleted file mode 100644 index 29a79b7..0000000 Binary files a/dist/lecture/2_js_intro/img/js_popularity_so.png and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/js_popularity_so_2019.png b/dist/lecture/2_js_intro/img/js_popularity_so_2019.png deleted file mode 100644 index 504054b..0000000 Binary files a/dist/lecture/2_js_intro/img/js_popularity_so_2019.png and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/js_pullrequests_so.png b/dist/lecture/2_js_intro/img/js_pullrequests_so.png deleted file mode 100644 index c6f6401..0000000 Binary files a/dist/lecture/2_js_intro/img/js_pullrequests_so.png and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/nan.jpg b/dist/lecture/2_js_intro/img/nan.jpg deleted file mode 100644 index 5f22181..0000000 Binary files a/dist/lecture/2_js_intro/img/nan.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/swamp.jpg b/dist/lecture/2_js_intro/img/swamp.jpg deleted file mode 100644 index 27501cd..0000000 Binary files a/dist/lecture/2_js_intro/img/swamp.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/test.html b/dist/lecture/2_js_intro/img/test.html deleted file mode 100644 index a9e4a3a..0000000 --- a/dist/lecture/2_js_intro/img/test.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - Document - - - - - \ No newline at end of file diff --git a/dist/lecture/2_js_intro/img/test.js b/dist/lecture/2_js_intro/img/test.js deleted file mode 100644 index b837fb8..0000000 --- a/dist/lecture/2_js_intro/img/test.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -let obj = { - "😘": "emoji", - "!": "character", - "": "empty string", - ".": 404, - "∰": "no...", - "✪✪✪✪": "stop it..", - "☝ஔ☔😱": "please" -} - -console.log(obj["😘"]); -console.log(obj["!"]); -obj[""] = NaN; -obj["."] = obj.wwwwwwww; -console.log(obj["∰"]); -console.log(obj["✪✪✪✪"]); -console.log(obj["☝ஔ☔😱"] + " " + obj["☝ஔ☔😱"]); \ No newline at end of file diff --git a/dist/lecture/2_js_intro/img/thanks_javascript.png b/dist/lecture/2_js_intro/img/thanks_javascript.png deleted file mode 100644 index 3e99c8f..0000000 Binary files a/dist/lecture/2_js_intro/img/thanks_javascript.png and /dev/null differ diff --git a/dist/lecture/2_js_intro/img/welcome_js.jpg b/dist/lecture/2_js_intro/img/welcome_js.jpg deleted file mode 100644 index c490fbd..0000000 Binary files a/dist/lecture/2_js_intro/img/welcome_js.jpg and /dev/null differ diff --git a/dist/lecture/2_js_intro/index.html b/dist/lecture/2_js_intro/index.html deleted file mode 100644 index 03c1eae..0000000 --- a/dist/lecture/2_js_intro/index.html +++ /dev/null @@ -1,1444 +0,0 @@ - - - - - - Hooray! Javascript! - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    JavaScript

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    - -
    -
    -
    -

    Начало

    -

    - Через некоторое время после возникновения и распространения веба, возникла идея придать - веб-страницам динамики и интерактивности - дать возможность пользователю - как-либо взаимодействовать с документом. -

    -

    - И тогда, в 1995 году, разработанный за 10 дней, появился JavaScript. -

    -

    - У JS была тяжелая история. В то время, никто и не предполагал, насколько разовьётся и станет - распространённым веб. Изначально, JS был разработан только для того, чтобы обеспечивать - возможность обработки пользовательского взаимодействия (нажатие на кнопочки) и написания - простейших алгоритмов. -

    -
    -
    -

    Трудное детство

    -

    - Когда произошел взрыв популярности и веб технологии стали распространяться с бешенной скоростью, - первоначальный JavaScript был не готов к этому, и его пришлось кардинально менять. - За последние 10 лет JavaScript превратился в совершенно другой язык программирования. -

    -

    - Но из соображений обратной совместимости JS не был переделан заново, а дополнен новой функциональностью. - В итоге получилось так, что сейчас в языке содержится огромное количество устаревших - конструкций, не использующихся элементов, костылей и просто странных вещей. -

    -
    -
    -
    -
    -

    ECMA Script

    -

    - Вообще, мы будем изучать браузерный JavaScript. Тот JS, средой выполнения которого - является браузер. -

    -

    - Но, в принципе, JavaScript может быть и другим. Например, NodeJS - самая распространённая - серверная версия JS. -

    -

    - Сам по себе, JavaScript - это просто язык, т.е. установленный набор команд (синтаксис). - А где он будет выполняться, это уже другой вопрос, - зависит от реализации. -

    -

    - Синтаксис языка JavaScript задаётся спецификацией ECMA Script. -

    -
    -
    -
    -

    Just javascript

    - -
    -
    -
    -

    Многообразие браузеров

    -

    - Каждый браузерный движок отображает HTML и CSS по своему. -

    -

    - И каждый движок JavaScript выполняет JS по своему. -

    -

    - Конечно, все браузерные движки должны соответствовать спецификациям HTML5, CSS3, и многим другим - общепринятым соглашениям. -

    -

    - В случае с JS, его движки должны соответствовать спецификации ECMA Script. -

    -
    -
    -

    Многообразие проблем

    -

    - Но на практике, это не всегда бывает так, как должно. -

    -

    - В одном движке спецификация может не соблюдаться, в другом движке быть какой-нибудь баг. -

    -

    - Помимо спецификации, в каждом движке содержится свой собственный уникальный набор - функциональности и API, расширяющий возможности спецификаций. -

    -

    - Так, какое-то действие в одном браузере может совершаться по-своему, во втором по спецификации, - а в третьем вообще не поддерживаться. -

    -

    - И это касается не только JS с JavaScript движками, но и HTML и CSS с браузерными движками. -

    -

    - Конечно, всё это редкие случаи, касающиеся каких-либо продвинутых возможностей. Базовые - вещи работают везде одинаково. -

    -
    -
    -

    Версии браузеров

    -

    - И это мы ещё не учитывали версии браузеров. Ежемесячно, а то и чаще, для браузеров выходят - обновления и появляются новые версии с дополнительной функциональностью движков. -

    -

    - Это значит, что какая-то функциональность будет работать в новых версиях браузеров, а в более - старых работать не будет, или будет, но некорректно. -

    -

    - А не все пользователи своевременно обновляют браузеры, ой как не все. -

    -
    -
    -

    Поддержка

    -

    - И поддержка более старых версий браузеров для своего приложения может стать настоящим кошмаром. -

    -

    - Даже поддержка нескольких браузеров может привести к серьёзным трудностям - (Internet Explorer - вообще отдельная история) -

    -

    - А поддержка старых версий нескольких браузеров может и вовсе привести к необходимости полной - переработки кода и использованию целого вагона костылей. -

    -

    - Информацию о том, что и где поддерживается, нужно смотреть на сайте - https://caniuse.com/ -

    -
    -
    -

    Поддержка

    -

    - Какие браузеры и версии поддерживать зависит в общем от строгости требований и целевой - аудитории. -

    -

    - Любой неподдерживаемый браузер уменьшает количество потенциальных пользователей, поэтому - чем шире поддержка, тем лучше. -

    - - Если ваш сайт корректно работает в IE7 или ниже, можете идти за медалью. - -
    -
    -

    Спасение

    -

    - На самом деле, такие трудности с поддержкой старых версий браузеров, - в большинстве случаев, уже остались в истории. Потому - что сейчас есть Babel. -

    - -
    -
    -
    -
    -

    Суть

    -
    - В общем, никто не ожидал от веба многого. JS задумывался как простенький язык - для обработки маленьких скриптов. -
    -

    - А оно вон как сложилось. -

    -
    -
    -

    Темп развития

    -

    - Все проблемы веб приложений связаны именно с незапланированным стремительным ростом. -

    -

    - Сейчас всё идёт в веб. Большинство современных программных разработок в первую - очередь направлены на веб. - Веб-сайты компаний появляются раньше, чем компании создаются. - Все сервисы расположены в вебе, у любого проекта есть свой веб сайт. - Да даже у каждого человека (почти) в ИТ есть свой веб сайт или несколько. -

    -

    - Поэтому за последний 10 лет JavaScript стал самым популярным языком программирования в мире. -

    -
    -
    -

    Статистика Stack Overflow 2018

    - -

    - - Популярность языков программирования по использованию среди опрошенных пользователей. - -

    -
    -
    -

    Статистика GitHub 2018

    - -

    - - Популярность языков программирования среди репозиториев GitHub. - -

    -
    -
    -

    Статистика GitHub 2018

    - -

    - Статистика по pull request на GitHub. -

    -
    -
    -

    Javascript уже в вашем тостере

    - -
    -
    -
    -
    -

    Итак,

    -

    JavaScript

    -
    -
    -

    Определение

    -
    - JavaScript (JS) - высокоуровневый интерпретируемый язык программирования - общего назначения с динамической слабой типизацией, прототипной системой наследования и - событийно-ориентированной архитектурой. -
    -

    - Во как. -

    -

    - Поскольку мы изучаем именно браузерный JS, то можно добавить, что ещё он является скриптовым - языком программирования. -

    -
    -
    -

    Скрипты

    -

    - Браузерный JS - скриптовый язык программирования. -

    -

    - Программы, написанные на JS, называются скрипты. -

    -

    - Скрипт - вспомогательная программа для другой программы. - Скрип не выполняется самостоятельно, он привязан к какому-то другому процессу и вызывается по - потребности. -

    -

    - В отличие от обычных программ, скрипт не работает всё время. Он вызывается в определённый - момент, выполняется и завершается. То, что работает всё время - это другой процесс, - родительский для скрипта. В случае с JS - это вкладка браузера - (на самом деле всё происходит в одном процессе, но суть та же). -

    -
    -
    -

    Интерпретация

    -

    - JS - интерпретируемый язык программирования. -

    -

    - Он передаётся с сервера в браузер в виде исходного кода, как текстовый файл. Т.е. здесь - отсутствует этап компиляции - вернее сказать, компиляция совмещена с выполнением. -

    -

    - Это наглядно видно при работе с JS в браузерной консоли. Код выполняется построчно, - по мере его поступления, т.е. ввода, причём весь контекст сохраняется в памяти. -

    -

    - Это и называется интерпретацией. -

    -
    -
    -

    Динамическая слабая типизация

    -

    - Это проще охарактеризовать, как принципиальное отсутствие типизации) -

    -

    - Переменная в JS - это просто коробка, в которую можно положить что угодно и - заменить на что угодно. -

    -
    
    -let a = 42;    // сейчас a - это number
    -a = 'bar'; // теперь string
    -a = true;  // а теперь boolean
    -					
    -
    -
    -

    Событийно ориентированная архитектура

    -

    - За счёт того, что JS выполняется в рамках одного процесса вкладки браузера, вместе с разбором и - визуализацией HTML страницы, для него была выбрана очень необычная модель выполнения - (event-driven architecture), не похожая на другие языки программирования. -

    -

    - Её мы подробно рассмотрим в следующей лекции. -

    -
    -
    -

    Прототипная система наследования

    -

    - JS - не объектно-ориентированный язык программирования. По крайней мере, он создавался не таким. - Изначально в нём была реализована прототипно-ориентированная парадигма программирования. -

    -

    - В 2009 году, поверх прототипно-ориентированной модели, в язык были добавлены классические конструкции - для ООП, такие как классы, наследование классов, геттеры-сеттеры и т.д. -

    -

    - На самом деле это довольно интересно, так что можно самостоятельно изучить прототипную модель. -

    -
    -
    -
    -

    Быстрый экскурс в синтаксис

    -
    -
    -

    Суть JS

    -

    - Вообще, можно сказать, что всё из чего состоит JavaScript - это переменные, функции и объекты. -

    -
    -
    -
    -

    Переменные

    -

    - Как мы уже сказали, переменные в JS - это просто контейнер, в который можно - положить что угодно: любой тип, любой объект. -

    -

    - Есть 3 разрешённых способа объявить переменную в JS. С помощью ключевых слов: -

    -
      -
    • var
    • -
    • let
    • -
    • const
    • -
    -
    -
    -

    Устаревший var

    -

    - Ключевое слово var было в языке с самого начала, и сейчас - считается устаревшим, и крайне не рекомендуется к использованию. На работе за такое - по рукам бить будут. -

    -

    - Переменные, объявленные с помощью слова var, не подчиняются никаким законам и нарушают - все правила программирования. -

    -
    -
    -

    Демонстрация var

    -
    
    -a = 4;
    -if ("2" == 4) {
    -
    -	var a = 2;
    -	console.log("yes");
    -
    -} else {
    -
    -	console.log("no");
    -
    -}
    -
    -a++;
    -console.log(a);		// 3
    -var a = 15;
    -console.log(a);		// 15
    -					
    -
    -
    -

    let для переменных

    -

    - Для обычных переменных нужно использовать ключевое слово let. -

    -

    - let переменные были введены, чтобы заменить и исправить кривые var переменные, - т.е. они уже ведут себя как нормальные переменные, из других языков программирования: - существуют только в рамках своего контекста и не могут быть повторно инициализированы - (в рамках одного контекста). -

    -

    - Но это не сильно помогло=) -

    -
    -
    -

    Демонстрация let

    -
    
    -let i = 2;
    -console.log(i);		// 2
    -//let i = 12;		// error
    -if (i == 2) {
    -
    -	//console.log(i); // error
    -	let i = 30;
    -	console.log(i);		// 30
    -	if (i == 30) {
    -
    -		//console.log(i); // error
    -		let i = 400;
    -		console.log(i);		// 400
    -
    -	}
    -	console.log(i);		// 30
    -
    -}
    -console.log(i);		// 2
    -					
    -

    - P.S. Кому интересно почему это так работает, можно погуглить в сторону лексического - окружения, или lexical environment. -

    -
    -
    -

    Константы const

    -

    - Переменные, объявленные с помощью слова const - ведут себя также, как let переменные, с одной особенностью: ссылочная иммутабельность. -

    -

    - Это значит, что назначенный такой переменной объект нельзя переназначить. - Если это объект, изменять его свойства можно. Единственное ограничение - невозможность - присвоить другое значение самой переменной. Т.е. это просто константный указатель. -

    -

    - Из названия понятно, что такие переменные используются для объявления констант. -

    -
    -
    -

    Демонстрация const

    -
    
    -const i = 2;
    -//i = "khe";		//error 
    -//i++;      //error
    -const arr = [1];
    -console.log(arr);       // [1]
    -arr.push(2);
    -console.log(arr);       // [1, 2]
    -					
    -
    -
    -
    -
    -

    Всё равно равно

    -
    
    -let a = 2, b = 3;
    -let v1 = (a = b);
    -let v2 = (a == b);
    -let v3 = (a === b);
    -					
    -
    -
    -

    Сравнения

    -

    - В JS 2 оператора сравнения на равенство/неравенство: -

    -
      -
    • Через двойное равно
    • -
    • Через тройное равно
    • -
    -

    - Они отличаются по строгости сравнения. -

    -

    - Двойное равенство - это свободное сравнение, допускающее преобразование типов. -

    -

    - Тройное равенство - это строгое сравнение, не выполняющее преобразования. -

    -
    -
    -

    Демонстрация сравнений

    -
    
    -1 == "1";		// true
    -1 === "1";		// false
    -
    -'0' == false;		// true
    -'0' === false;		// false
    -
    -[] != true;			// true
    -[] !== true;		// true
    -					
    -
    -
    -
    -
    -

    Типы данных

    -

    - Как ни удивительно, но типы данных в JS всё-таки есть, - и их 8 штук (инсайдерская информация!): -

    -

    - 7 встроенных иммутабельных типов (примитивы): -

    -
      -
    • Number
    • -
    • String
    • -
    • Boolean
    • -
    • Null
    • -
    • Undefined
    • -
    • Symbol
    • -
    • BigInt
    • -
    -

    - И один мега-тип Object. Object в JS это отдельная история, и когда-нибудь мы о ней поговорим. -

    -
    -
    -

    undefined, null и NaN

    -

    - В JS есть 3 основных значения, которые означают, что что-то пошло не так. -

    -

    - undefined и null - одновременно - примитивные типы и единственные их значения (не спрашивайте, как это может быть). -

    -

    - undefined используется как значение для переменных, которым не было назначено никакое значение. -

    -

    - null используется для обозначения ошибки, неправильного результата, отсутствия значения. -

    -

    - undefined не принято назначать самостоятельно. Для целей разработчика нужно использовать значение null. -

    -
    -
    -

    Немножко JS-а

    -
    
    -let a;		// a === undefined
    -
    -let b = null;
    -					
    -
    
    -undefined == null;		// true
    -undefined === null;		// false
    -!undefined === !null;		// true
    -					
    -

    - Пора привыкать к такому. -

    -
    -
    -

    На-нна-нна-нна!

    -

    - Значение NaN можно получить в результате математических действий над - некорректными операндами, и, соответственно, оно обозначает результат некорректной операции над числами. -

    -

    - NaN не является отдельным типом, NaN - это число (тип number). -

    -

    - А знаете что ещё? -

    -
    
    -NaN == NaN;			// false
    -NaN === NaN;		// false
    -					
    -

    - NaN не равен NaN. Не равен самому себе. И это число. -

    -
    -
    - -
    -
    -
    -
    -

    Функции в JS

    -

    - Функции описываются с помощью ключевого слова function, - или через лямбда-выражение. Только в JS функции, записанные обычным образом, и записанные - при помощи лямбда выражения работают по разному. Но об этом попозже. -

    -
    
    -function func_name(arg1, arg2, arg3) {
    -	return arg2 + arg3;
    -}
    -					
    -

    - Функции могут принимать параметры, а могут и не принимать, могут возвращать значение, а могут - и не возвращать. -

    -
    -
    -

    Примеры функций

    -
    
    -function f1() {
    -	console.log("empty");
    -}
    -
    -function f2() {
    -	return 1.3213;
    -}
    -
    -function f3(a, b, c) {
    -	let res = a + b + c;
    -	console.log(res);
    -	return res;
    -}
    -let r1 = f3();  // NaN
    -let r2 = f3(3); // NaN
    -let r3 = f3(4, "5"); // 45undefined
    -let r4 = f3(1, 2, 3); // 6
    -let r5 = f3(1, 2, 3, 4); // 6 
    -					
    -
    -
    -

    JS всё равно

    -

    - Как вы видите, JavaScript-у наплевать, какие аргументы описаны у функции, какие - и сколько аргументов вы в неё передаёте при вызове. -

    -

    - Аргументы, которые не были переданы будут просто равны undefined. -

    -

    - И если попытаться принять значение, когда у функции нет return-а, то будет - получено значение undefined. -

    -
    -
    - -
    -
    -

    Функциональное выражение

    -

    - Синтаксис описания функции, описанный выше, называется - объявлением функции. -

    -

    - Но функции можно объявлять и по-другому, через переменные: -

    -
    
    -let func1 = function (arg1, arg2) {
    -
    -	if (typeof arg1 === "number" && typeof arg2 === "number") {
    -		return arg1 / arg2;
    -	} else {
    -		console.log("arg1 or arg2 is not numbers!");
    -	}
    -
    -}
    -func1(2, 5);
    -					
    -

    - Такой способ создания функций называется функциональным выражением. -

    -
    -
    -

    Лямбда-выражения

    - -
    -
    -
    -
    -

    Object в JS

    -
    - Объекты занимают ключевое место в JavaScript. Практически всё в языке - построено вокруг объектов. -
    -

    - Даже функция в JS - это особый вид объекта. -

    -
    -
    -

    Объект

    -
    - Объект в JS - это коллекция пар ключ-значение, или ассоциативный массив. -
    -

    - Если в сильно типизированных статических языках программирования структура - объекта строго описывалась классами, то в JS у объектов нет чёткой структуры, - свойства можно добавлять и удалять динамически, как элементы списка. -

    -

    - Поэтому нет и самостоятельных типов-классов, а только один Object: из - любого объекта можно слепить какую угодно структуру. -

    -
    -
    -

    Литеральный синтаксис объектов

    -

    - Для создания объектов в JS используется специальный синтаксис: фигурные скобки, - и внутри них перечисленные через запятую пары "ключ : значение". -

    -
    
    -let obj_name = {
    -	property1 : value1,
    -	property2 : value2,
    -	property3 : value3
    -}
    -					
    -

    - В качестве ключа, т.е. имени свойства, могут использоваться любые строки. Записывать - их можно как в кавычках, так и без. -

    -
    -
    -

    Примеры создания объектов

    -
    
    -let auto = {
    -	brand: 'BMW',
    -	model: '2019 BMW i8 Roadster AWD',
    -	price: '$139,000',
    -	color: 'white',
    -	engine: 'I3'
    -};
    -
    -let student1 = {
    -	'name': 'Markus Zaynits',
    -	age: 24,
    -	faculty: "MITOC",
    -	"semester": 4,
    -	expelled: false
    -}
    -
    -let c1 = { name: "Larry Borrow", phone: "+1 839 829 12 92" };
    -
    -function call_joseph(num) {
    -	console.log("I'm calling Joseph");
    -	return true;
    -}
    -
    -let phone_book = { 
    -	contact1: c1,
    -	contact2: { name: "Marry", phone: "+ 327 82 918 82 15"},
    -	contact3: { name: "Leonard Berkley", phone: "+23 38 98 12 20"},
    -	call: call_josheph 
    -}
    -
    -					
    -
    -
    -

    Доступ к свойствам объектов

    -

    - Объекты JS поддерживают 2 формы записи для доступа к свойствам: через точку и через квадратные скобки. -

    -
    
    -myobj.a = 2;
    -myobj.b = "grrr";
    -console.log(myobj.c);
    -					
    -
    
    -myobj["a"] = 2;
    -myobj["b"] = "grr";
    -console.log(myobj["c"]);
    -					
    -

    - Когда это возможно, рекомендуется использовать первую форму записи, через точку. -

    -
    -
    -

    Свойства в JS

    -

    - Ключом для свойства объекта может выступать любая строка. Абсолютно. -

    -
    
    -let obj = {
    -	"😘": "emoji",
    -	"!": "character",
    -	"": "empty string",
    -	".": 404,
    -	"∰": "no...",
    -	"✪✪✪✪": "stop it..",
    -	"☝ஔ☔😱": "please"
    -}
    -
    -console.log(obj["😘"]);
    -console.log(obj["!"]);
    -obj[""] = NaN;
    -obj["."] = obj.wwwwwwww;
    -console.log(obj["∰"]);
    -console.log(obj["✪✪✪✪"]);
    -console.log(obj["☝💩🤡ஔ☔😱"] + " " + obj["☝💩🤡ஔ☔😱"]);
    -
    -					
    -
    -
    -

    Обращение к свойствам, которых нет

    -

    - В JS можно обращаться к любым свойствам объекта. Даже если их нет. -

    -

    - Обращение к свойству, которое никогда раньше не использовалось и не инициализировалось, - вернёт undefined. -

    -
    
    -let bj = {};
    -console.log(bj.p);		// undefined
    -console.log(bj.ee);		// undefined
    -let int = bj.num;		// int === undefined
    -					
    -
    -
    -

    Добавление свойств

    -

    - Ну а чтобы добавить в объект новое свойство, нужно просто присвоить значение - по новому ключу. -

    -
    
    -let pers = {};
    -console.log(pers);		// { }
    -pers.name = "Nick";
    -console.log(pers);		// { name: "Nick" }
    -pers.age = 25;
    -console.log(pers);		// { name: "Nick", age: 25 }
    -pers.weight = 82;
    -pers.height = 175;
    -console.log(pers);		// { name: "Nick", age: 25, weight: 82, height: 175 }
    -					
    -
    -
    -

    Особенность обращения через квадратные скобки

    -

    - У обращения к свойствам через квадратные скобки есть одно преимущество: возможность - использования переменных в качестве ключа. -

    -
    
    -let obj = { a: 1, b: 2, c: 3, d: 4 };
    -let prop = "a";
    -obj[prop] = 10;
    -prop = "b";
    -obj[prop] = 20;
    -console.log(obj);	// { a: 10, b: 20, c: 3, d: 4 } 
    -					
    -

    - Иногда это позволяет создавать очень хитрые алгоритмы. -

    -
    -
    -

    Удаление свойств

    -

    - Для полного удаления свойства у объект существует оператор delete. -

    -
    
    -let shape = { color: "green", x: 24, y: 75, z: 43 };
    -delete shape.z;
    -delete shape["y"];
    -console.log(shape);		// { color: "green", x: 24 }
    -					
    -

    - Но он работает очень медленно и использовать его не рекомендуется. Вместо этого - зачастую можно обойтись присвоением ненужному свойству значения undefined. -

    -
    
    -let shape = { color: "green", x: 24, y: 75, z: 43 };
    -shape.z = undefined;
    -shape["y"] = undefined;
    -console.log(shape);		// { color: "green", x: 24, y: undefined, z: undefined }
    -					
    -
    -
    -

    Функции как объекты

    -

    - Функция в JS это тоже объект. Который просто хранит записанный в ней код в виде текста - как свойство объекта. С единственный отличием от других объектов, что он может быть вызван. -

    -

    - Поэтому всё, что было сказано об объектах, в JS применимо и к функциям. -

    -

    - Т.е. у функции есть свойства, и их можно свободно добавлять/убирать: -

    -
    
    -function highway_to_js() {
    -	console.log("Welcome, buddy!");
    -	return "Nope";
    -}
    -
    -highway_to_js.secret = "run";
    -
    -highway_to_js();
    -console.log(highway_to_js.secret);
    -					
    -
    -
    -
    -

    Встроенные объекты

    -
    -
    -
    -

    Встроенные объекты. Массивы

    -

    - В JS есть глобальный объект Array, который используется для создания - массивов. -

    -

    - Массив здесь - это тоже подвид объекта. Т.е. набор пар ключ-значение, где в качестве ключа используются - числа, начиная с 0. И получается, что это выглядит как обычный массив из других языков программирования. -

    -

    - В массиве одновременно могут быть любые элементы, никакой типизации нет. -

    -
    -
    -

    Создание массива

    -

    - Массив можно создавать с помощью класса Array и вызова конструктора: -

    -
    
    -let arr0 = new Array();
    -let arr1 = new Array("str1", null, "str2", {a: 32}, "str3", 23, 54.434, false);
    -let arr2 = new Array(10);
    -					
    -

    - Но гораздо удобнее использовать встроенный синтаксис литералов массива: список значений, - взятый в квадратные скобки. -

    -
    
    -let arr0 = [];
    -let arr1 = ["str1", null, "str2", {a: 32}, "str3", 23, 54.434, false];
    -let arr2 = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
    -					
    -
    -
    -

    Массив как объект

    -

    - Поскольку массив это объект, с его элементами можно работать как со свойствами объекта. -

    -

    - Но так делать не рекомендуется, потому что это ломает внутреннюю логику его работы как массива. -

    -

    - Например, свойство length у объекта массива всегда равно значению - его максимального числового ключа - 1. -

    -
    
    -let arr = ["t", "e"];
    -arr[10000000] = "ы";
    -console.log(arr.length);			// 9999999
    -					
    -

    - Добавили один элемент, увеличили размер массива на 10 миллионов. Профит! -

    -
    -
    -

    Добавление элементов в массив

    -

    - Правильно добавлять элементы в массив нужно с помощью встроенных в объект методов. -

    -
      -
    • Метод unshift - добавление в начало массива
    • -
    • Метод push - добавление в конец массива
    • -
    • Метод splice - добавление в определённую позицию массива
    • -
    -

    - Все эти методы могут добавлять любое количество элементов за раз - т.е. столько, сколько в них - передать параметров. -

    -
    -
    -

    Примеры добавления

    -
    
    -let arr1 = [1, 2, 3];
    -arr1.unshift("a");					// ["a", 1, 2, 3]
    -arr1.unshift("b", "c", "d");				// ["b", "c", "d", "a", 1, 2, 3]
    -
    -let arr2 = [true, false, null];
    -arr2.push(2);						// [true, false, null, 2]
    -arr2.push("o", "oop", arr1);				// [true, false, null, 2, "o", "oop", ["b", "c", "d", "a", 1, 2, 3]]
    -
    -let arr3 = ["Pol", "Roger", "Tom"];
    -arr3.splice(1, 0, "Nolan");				// ["Pol", "Nolan", "Roger", "Tom"]
    -arr3.splice(2, 0, "Mickey", "Bred", "Sergio");		// ["Pol", "Nolan", "Mickey", "Bred", "Sergio", "Roger", "Tom"]
    -					
    -
    -
    -

    Удаление элементов из массива

    -

    - С удалением всё по аналогии, как и с добавлением - 3 варианта методов. -

    -
      -
    • Метод shift - удаление из начала массива
    • -
    • Метод pop - удаление из конец массива
    • -
    • Метод splice - удаление из определённой позиции массива
    • -
    -

    - С помощью метода splice можно удалить указанное количество подряд идущих элементов. - Shift и pop удаляют только по одному за раз. -

    -

    - Эти методы возвращают удалённые из массива значения. -

    -
    -
    -

    Примеры удаления

    -
    
    -let people = [
    -		{ name: "George", city: "London" }, 
    -		{ name: "Ralf", city: "Copenhagen" }, 
    -		{ name: "John", age: 33 }, 
    -		{ id: "Golden Eagle", location: "Russia" },
    -		{ name: "Melissa", city: "Cambridge" }
    -	];
    -
    -people.shift();				// delete George
    -let man = people.shift();		// delete Ralf
    -console.log(man);			// { name: "Ralf", city: "Copenhagen" }
    -console.log(people);			// [{ name: "John", age: 33 }, { id: "Golden Eagle", location: "Russia" }, { name: "Melissa", city: "Cambridge" }]
    -			
    -people.pop();				// delete Melissa
    -people.pop();				// delete Golden Eagle
    -console.log(people);			// [{ name: "John", age: 33 }]
    -
    -let mas = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    -mas.splice(2, 1);			// [1, 2, 4, 5, 6, 7, 8, 9]
    -let del = mas.splice(4, 3);		// [1, 2, 4, 5, 9]
    -console.log(del);			// [6, 7, 8]
    -					
    -
    -
    -

    Методы массива

    -

    - В объекте массива содержится большой набор стандартных методов для работы с ним. -

    -

    - Важно отметить, что многие методы (и не только в этом объекте) в JS могут работать - по-разному, в зависимости от количества и типов переданных в них параметров. -

    -

    - Методы массива можно условно разделить на: -

    -
      -
    • Простые методы
    • -
    • Функциональные методы
    • -
    -
    -
    -

    Методы массива

    -

    - Некоторые методы массива: -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    concat()Объединяет несколько массивов в один
    fill()Заполняет все элементы массива одним значением
    flat()Возвращает новый одномерный массив из массива с подмассивами
    includes()Проверяет, содержит ли массив элемент с указанным значением
    indexOf()Ищет в массиве индекс первого элемента с указанным значением
    lastIndexOf()Тоже самое, только с конца
    reverse()Меняет порядок элементов в исходном массиве
    slice()Получает подмассив из исходного массива
    -
    -
    -

    Использование

    -
    
    -let students = ["Markus", "Elly", "Tim"];
    -let other = ["Jacky", "Sol", "Regina"];
    -
    -let all = students.concat(other);
    -let allAndMore = students.concat(other, "Benjamin", ["Lorenzo", "Grim"]);
    -
    -allAndMore.fill("Unknown");					// ["Unknown" x9]
    -
    -let dimArr = [ [[1],[2]], [[[3]]], [4]];
    -dimArr.flat(3);							// [1, 2, 3, 4]
    -
    -if (students.includes("Elly")) {
    -
    -	let indexElly = students.indexOf("Elly"); 
    -	console.log("Hello Elly! Your index is " + indexElly);
    -
    -}
    -
    -all.push("Jacky");
    -let firstIndex = all.indexOf("Jacky");				// 3
    -let secondIndex = all.indexOf("Jacky", firstIndex + 1);		// 6
    -
    -let lastIndex = all.lastIndexOf("Jacky");			// 6
    -
    -other.reverse();						// ["Regina", "Sol", "Jacky"]
    -
    -let arr = [0, 5, 2, 7, 6, 2, 1, 75, 37, 1, 22, 10, 3];
    -arr.sort();				// !!!
    -console.log(arr);			// [0, 1, 1, 10, 2, 2, 22, 3, 37, 5, 6, 7, 75]
    -
    -arr.sort((x, y) => x > y);
    -console.log(arr);			// [0, 1, 1, 2, 2, 3, 5, 6, 7, 10, 22, 37, 75]
    -
    -let subArray = arr.slice(1, 9);		// [1, 1, 2, 2, 3, 5, 6, 7]
    -let subArray2 = arr.slice(6);		// [5, 6, 7, 10, 22, 37, 75]
    -					
    -
    -
    -

    Всемогущий метод splice

    -

    - Ну, во-первых, методы splice и slice - это 2 разных метода. -

    -

    - Метод splice позволяет удалить любое количество элементов из - любого места в массиве, а затем вставить в это место любое количество элементов. -

    -
    
    -arr.splice(позиция, сколько_удалять, добавляемые элементы...)
    -					
    -
    
    -let animals = ["cow", "cat", "dog", "bear", "tiger"];
    -let deleted = animals.splice(1);
    -console.log(animals);					// ["cow"]
    -console.log(deleted);					// ["cat", "dog", "bear", "tiger"]
    -
    -deleted.splice(0, 2);					// ["bear", "tiger"]
    -animals.splice(1, 0, ...deleted);			// ["cow", "bear", "tiger"]
    -animals.splice(0, 2, "horse", "pig", "elephant");	// ["horse", "pig", "elephant", "tiger"]
    -					
    -
    -
    -

    Функциональные методы массива

    -

    - Функциональные методы - методы в стиле функционального программирования, принимающие параметром другую функцию. -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    filterФильтрует элементы массива в соответствии с переданной функцией
    findИщет первый элемент массива, удовлетворяющий условию в переданной функции
    forEachФункциональный вариант цикла for, выполняет указанную функцию для каждого элемента
    mapСоздаёт новый массив из старого, выполняя переданную функцию для каждого элемента
    reduceПреобразует массив в одно значение в соответствии с переданной функцией
    sortСортирует массив по условию в переданной функции
    -
    -
    -

    Примеры функциональных методов

    -
    
    -let people = [
    -    { name: "Phillip", gender: "m", age: 36 },
    -    { name: "Lori", gender: "f", age: 40 },
    -    { name: "Judith", gender: "f", age: 19 },
    -    { name: "Alex", gender: "m", age: 26 },
    -    { name: "Xander", gender: "m", age: 51 },
    -    { name: "Rachel", gender: "f", age: 29 },
    -    { name: "Kelly", gender: "f", age: 25 },
    -];
    -
    -let younger30 = people.filter((person) => person.age < 30);
    -
    -let xander = people.find((person) => person.name === "Xander");
    -
    -people.forEach((person) => {
    -    if (person.gender === "f" && person.age < 25) {
    -        console.log(person);
    -    }
    -});
    -
    -let stringArray = people.map((person) => `${person.name}, ${person.age} years old, ${person.gender === "m" ? "male" : "female"}`);
    -
    -let averageAge = people.reduce((summary, person) => summary += person.age, 0) / people.length;
    -let roundedAvgAge = averageAge.toFixed(2);
    -
    -let sortedByAge = people.sort((person1, person2) => person1.age > person2.age);
    -					
    -
    -
    -
    -

    Оператор in

    -

    - С помощью оператора in можно проверить, есть ли заданный ключ в указанном объекте. -

    -
    
    -let soup = { freshness: 2, taste: 3, name: "borscht", "cook": "Anatoly" };
    -if ('tast' in soup) {
    -
    -	console.log("wrong");
    -
    -} else if ('taste' in soup) {
    -
    -	console.log("yes!");
    -
    -}
    -
    -if (0 in soup === false) {
    -
    -	console.log("There is no 0");
    -
    -}
    -				
    -
    -
    -
    -

    Циклы

    -

    - Изначально в JS было 4 вида циклов, но так было не интересно, и добавили ещё 2, так что - сейчас их 6 (пока что). -

    -
      -
    • while
    • -
    • do while
    • -
    • for (классический)
    • -
    • for in
    • -
    • for of
    • -
    • forEach
    • -
    -
    -
    -

    Классический while

    -
    
    -let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20];
    -let sum = 0;
    -while (sum < 20) {
    -
    -    sum += arr.length;
    -
    -}
    -					
    -
    -
    -

    Классический do while

    -
    
    -let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20];
    -let rnd, ind;
    -do {
    -
    -    rnd = Math.floor(Math.random() * 20);
    -    ind = arr.indexOf(rnd);
    -
    -} while (ind === -1);
    -arr.splice(ind, 1);
    -					
    -
    -
    -

    Классический for

    -
    
    -let arr = ["File", 'Line', `Ending`, `Work`, 'Directory', "Warning"];
    -
    -for (let i = 0; i < arr.length; ++i) {
    -
    -    if (typeof arr[i] === "string" && arr[i].length < 5) {
    -
    -        arr.splice(i, 1);
    -        --i;
    -    }
    -}
    -// arr = [`Ending`, 'Directory', "Warning"]
    -					
    -
    -
    -

    for in

    -

    - Цикл for in используется для перебора свойств (ключей) объекта. -

    -
    
    -let data = {
    -	id: "234BC34P2321ET12",
    -	name: "Volodimir Tarasov",
    -	birth: "31.12.1991",
    -	number: "ES377991"
    -};
    -
    -let resStr = "<person ";
    -for (let prop in data) {
    -
    -	resStr += `${prop}='${data[prop]}' `;
    -
    -}
    -resStr += "/>";
    -console.log(resStr);
    -// <person id='234BC34P2321ET12' name='Volodimir Tarasov' birth='31.12.1991' number='ES377991' />
    -					
    -
    -
    -

    for of

    -

    - Цикл for of используется для перебора элементов массива. -

    -
    
    -let dict = [
    -	{ english: "trophy", russian: "трофей" },
    -	{ english: "eggplant", russian: "баклажан" },
    -	{ english: "clay", russian: "глина"},
    -	{ english: "oak", russian: "дуб"},
    -	{ english: "hippopotamus", russian: "бегемот" }
    -];
    -
    -for (let word of dict) {
    -
    -	if (word.english.length === word.russian.length) {
    -
    -		console.log(`${word.english} : ${word.russian} -- Both words are the same length!`);
    -
    -	}
    -}
    -					
    -
    -
    -

    forEach

    -

    - Метод forEach используется для написания циклов в функциональном стиле. -

    -
    
    -let prime = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41];
    -let ret = '';
    -prime.forEach((value, index, array) => {
    -
    -	if (index != 0) {
    -
    -		ret += (array[index - 1] / value).toFixed(2) + " ";
    -
    -	}
    -
    -});
    -
    -console.log(ret);
    -					
    -
    -
    -
    - -
    -
    -

    Ресурсы

    -

    - P.S. Один из лучших ресурсов по вебу - MDN. -

    - Mozilla Developer Network -
    -
    -
    - - - - - - - \ No newline at end of file diff --git a/dist/lecture/3_dom/img/3_pillars.png b/dist/lecture/3_dom/img/3_pillars.png deleted file mode 100644 index 11863c0..0000000 Binary files a/dist/lecture/3_dom/img/3_pillars.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/NodeApi.png b/dist/lecture/3_dom/img/NodeApi.png deleted file mode 100644 index a764fbe..0000000 Binary files a/dist/lecture/3_dom/img/NodeApi.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/attributes.png b/dist/lecture/3_dom/img/attributes.png deleted file mode 100644 index 46019b9..0000000 Binary files a/dist/lecture/3_dom/img/attributes.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/children.jpg b/dist/lecture/3_dom/img/children.jpg deleted file mode 100644 index e92958c..0000000 Binary files a/dist/lecture/3_dom/img/children.jpg and /dev/null differ diff --git a/dist/lecture/3_dom/img/client_size.png b/dist/lecture/3_dom/img/client_size.png deleted file mode 100644 index bb6ad01..0000000 Binary files a/dist/lecture/3_dom/img/client_size.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/dom_hierarchy.png b/dist/lecture/3_dom/img/dom_hierarchy.png deleted file mode 100644 index a389ae9..0000000 Binary files a/dist/lecture/3_dom/img/dom_hierarchy.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/dom_hierarchy_2.png b/dist/lecture/3_dom/img/dom_hierarchy_2.png deleted file mode 100644 index a748a46..0000000 Binary files a/dist/lecture/3_dom/img/dom_hierarchy_2.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/dom_traverse.png b/dist/lecture/3_dom/img/dom_traverse.png deleted file mode 100644 index c022b93..0000000 Binary files a/dist/lecture/3_dom/img/dom_traverse.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/dom_tree.jpg b/dist/lecture/3_dom/img/dom_tree.jpg deleted file mode 100644 index 50cd694..0000000 Binary files a/dist/lecture/3_dom/img/dom_tree.jpg and /dev/null differ diff --git a/dist/lecture/3_dom/img/element.png b/dist/lecture/3_dom/img/element.png deleted file mode 100644 index 7982aa9..0000000 Binary files a/dist/lecture/3_dom/img/element.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/html_elements.jpg b/dist/lecture/3_dom/img/html_elements.jpg deleted file mode 100644 index 5d268de..0000000 Binary files a/dist/lecture/3_dom/img/html_elements.jpg and /dev/null differ diff --git a/dist/lecture/3_dom/img/htmlelement.jpg b/dist/lecture/3_dom/img/htmlelement.jpg deleted file mode 100644 index 0614bc9..0000000 Binary files a/dist/lecture/3_dom/img/htmlelement.jpg and /dev/null differ diff --git a/dist/lecture/3_dom/img/node.png b/dist/lecture/3_dom/img/node.png deleted file mode 100644 index bcef090..0000000 Binary files a/dist/lecture/3_dom/img/node.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/offset_width.png b/dist/lecture/3_dom/img/offset_width.png deleted file mode 100644 index f31332e..0000000 Binary files a/dist/lecture/3_dom/img/offset_width.png and /dev/null differ diff --git a/dist/lecture/3_dom/img/outer_html.jpg b/dist/lecture/3_dom/img/outer_html.jpg deleted file mode 100644 index bfc0145..0000000 Binary files a/dist/lecture/3_dom/img/outer_html.jpg and /dev/null differ diff --git a/dist/lecture/3_dom/img/webApi.png b/dist/lecture/3_dom/img/webApi.png deleted file mode 100644 index 5c15719..0000000 Binary files a/dist/lecture/3_dom/img/webApi.png and /dev/null differ diff --git a/dist/lecture/3_dom/index.html b/dist/lecture/3_dom/index.html deleted file mode 100644 index 06832a4..0000000 --- a/dist/lecture/3_dom/index.html +++ /dev/null @@ -1,3704 +0,0 @@ - - - - - - Взаимодействие с DOM - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    Взаимодействие с DOM

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    - -
    -
    -

    Миссия Js

    -

    - Мы много раз говорили, что JS был создан для того, чтобы описывать взаимодействие - пользователя с элементами интерфейса, создавать динамику на HTML странице, - но пока лишь ходили вокруг да около по базовому синтаксису языка. -

    -

    - Но настало время показать главные возможности JS. -

    -
    -
    -
    -
    -

    Web API

    - -

    - Полный список API на MDN -

    -
    -
    -

    NodeJs

    - -
    -
    -
    -
    -

    DOOM

    -

    - Взаимодействие JS с HTML возможно благодаря DOM. -

    -
    - DOM(Document Object Model, - объектная модель документа) - это специальный программный интерфейс (API) для работы - с HTML и XML документами. -
    -

    - В общем, это то, что связывает язык программирования (JavaScript) с веб страницей (HTML). -

    -
    -
    -

    DOM

    -

    - DOM модель - это отображение HTML документа в программе в виде структуры объектов, так, чтобы - с ним можно было работать как с обычными объектами в JS. -

    -

    - DOM содержит набор объектов и функций, которые можно использовать в JS для изменения - структуры документа и контента на странице. -

    -

    - С помощью DOM можно добавлять/изменять/создавать любые блоки на HTML странице. -

    -
    -
    -

    CSSOM

    -

    - В комплексе с DOM применяется смежный API - CSSOM, который позволяет программно работать - со стилями. -

    -

    - CSSOM предоставляет функционал для добавления/редактирования/удаления встроенных стилей элементов - страницы и динамического формирования CSS классов. -

    -
    -
    -
    -
    -

    Окружение JavaScript

    -

    - В JavaScript всё организовано в виде объектов. -

    -

    - Даже все переменные на самом деле хранятся в виде свойств объекта. -

    -

    - Объекты здесь также используются как пространства имён, чтобы группировать связанные элементы. -

    -
    -
    -

    Глобальный объект JavaScript

    -

    - В JS существует понятие глобальный объект - это вершина - древовидной структуры объектов, самый верхних объект, внутри которого хранятся все остальные. -

    -

    - В браузерном JavaScript это объект window. -

    -

    - Все другие объекты, существующие в JavaScript, находятся внутри объекта window. -

    -
    -
    -

    Встроенные объекты

    -

    - Все объекты, функции и переменные, доступные глобально в JS, на самом деле являются свойствами - объекта window. -

    -

    - Например, Array, Math, - console - все эти встроенные объекты находятся внутри объекта window. -

    -

    - Вместо Array можно писать window.Array, вместо - console window.console - это будет одно и то же. -

    -
    -
    -

    Глобальные переменные

    -

    - Более того, даже все переменные и функции, объявленные в глобальном контексте, на самом деле - будут храниться в виде свойств глобального объекта window. -

    -

    - Например, простое объявление переменной: -

    -
    
    -let a = 2;
    -                    
    -

    - Эта переменная будет хранится в виде ключа a объекта - window, со значением 2: -

    -
    
    -console.log(window.a);          // 2
    -
    -let string = "blah-blah-blah";
    -// window.string = "blah-blah-blah";    // Одно и то же
    -                    
    -
    -
    -

    Глобальные функции

    -

    - С объявлением функций в глобальном контексте та же ситуация: они становятся свойствами - (ну или уже методами) глобального объекта window. -

    -
    
    -function helloUser(name) {
    -    console.log(`Good moorning, ${name}! How do you?`);
    -}
    -
    -window.helloUser("Tim");
    -
    -// То же самое, что и
    -// window.helloUser = function helloUser(name) {
    -//     console.log(`Good moorning, ${name}! How do you?`);
    -// }
    -                    
    -
    - -
    -
    -
    -

    Объект document

    -

    - Весь набор объектов и функций, относящийся к взаимодействию с документом, т.е. API - DOM и CSSOM, находится во встроенном объекте document (или - window.document). -

    -

    - Его можно считать пространством имён, в котором располагаются все DOM функции. Если что-то - находится в document - значит это относится к DOM (или CSSOM). -

    -
    -
    -

    Концепция DOM

    - -
    -
    -

    DOM дерево

    -

    - Фундамент DOM-а - DOM дерево, - это древовидная структура, представляющая - собой HTML документ. -

    -

    - Каждый элемент HTML документа представляется в виде отдельного JS объекта. -

    -

    - Корневой объект document содержит в себе ссылки на объекты head и body, body содержит ссылки - на вложенные в него блоки, например, header, main, aside и footer. Header содержит ссылки на - вложенные div-ы, вложенные div-ы содержат ссылки на вложенные в них div-ы, и т.д. -

    -
    -
    -

    Иерархия объектов DOM

    - -
    -
    -
    -
    -

    Общее представление

    -

    - Объект document выполняет сразу 2 функции: -

    -

    - Во-первых, он является контейнером для всех вспомогательных функций - по взаимодействию с документом, т.е. пространством имён для всего DOM. -

    -

    - Во-вторых, он представляет собой сам HTML документ в объектной форме, т.е. вершину - иерархии DOM дерева. -

    -
    -
    -

    head и body

    -

    - Через объект document можно получить доступ к вложенным - в него элементам head и body, через соответствующие ключи: -

    -
    
    -console.log(document.head);
    -
    -console.log(document.body);
    -                    
    -

    - Доступ по имени тега доступен только в document, и только для head и body. - Потому что в HTML документе всегда должны быть head и body в количестве 1 штуки. -

    -
    -
    -

    Дочерние элементы

    -

    - У всех других объектов, для получения дочерних вложенных элементов необходимо - использовать свойство children -

    -

    - Это свойство вернет объект HTMLCollection, который как массив, - хранит перечисление вложенных элементов. -

    -

    - Обращаться к ним можно, например, по индексу. Порядок элементов в коллекции соответствует - порядку записи этих элементов в HTML документе. -

    -
    -
    -

    Свойство children

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <div>
    -            <ul>
    -                <li>
    -                    <a href=""></a>
    -                </li>
    -                <li>
    -                    <a href=""></a>
    -                </li>
    -                <li>
    -                    <a href=""></a>
    -                </li>
    -            </ul>
    -        </div>
    -        <section></section>
    -        <footer></footer>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let title = document.head.children[1];
    -
    -let body = document.body;
    -let main = body.children[0];
    -let div = main.children[0];
    -
    -let aInside3dLi = div.children[0].children[2].children[0];
    -                            
    -
    -
    -
    -
    -

    Получение конкретного элемента в DOM дереве

    -

    - Добираться до нужного элемента через всё дерево может быть весьма - неудобно, поэтому существует множество способов получения требуемого - HTML элемента. -

    -

    - Например, получить элемент можно по id. - Разумеется, у искомого элемента в HTML должен быть прописан атрибут id. -

    -

    - Выполняется это с помощью метода document.getElementById. -

    -
    
    -let element = document.getElementById("someId");
    -                    
    -

    - Если элемента с указанным id не существует, - метод возвращает значение null. -

    -
    -
    -

    Получение элемента по id

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <div id="socials" >
    -            <ul>
    -                <li>
    -                    <a id="tw_link" href=""></a>
    -                </li>
    -                <li>
    -                    <a id="fb_link" href=""></a>
    -                </li>
    -                <li>
    -                    <a id="in_link" href=""></a>
    -                </li>
    -            </ul>
    -        </div>
    -        <section></section>
    -        <footer id="foot"></footer>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let socialDiv = document.getElementById("socials");
    -
    -let footer1 = document.getElementById("foot");
    -let footer2 = document.body.children[0].children[2];
    -console.log(footer1 === footer2);       // true
    -
    -let fbLink1 = document.getElementById("fb_link");
    -let fbLink2 = socialDiv.children[0].children[1].children[0];
    -console.log(fbLink1 === fbLink2);
    -                            
    -
    -
    -
    - -
    -
    -
    -

    Node из DOM иерархии

    - -
    -
    -

    Объект Node

    -

    - Node - объект, базовый для всех используемых в DOM объектов - для представления любой штуки, встречающейся в HTML. -

    -

    - Свойства и методы, находящиеся в этом классе, присущи всем объектам, которые можно встретить - в DOM дереве. -

    -
    -
    -

    Свойства навигации

    -

    - К основным свойствам объекта Node можно отнести свойства навигации - по DOM дереву: -

    - -
    -
    -

    Свойства навигации по узлам

    -

    - У каждого DOM объекта есть следующие свойства навигации: -

    -
      -
    • parentNode - родительский узел
    • -
    • nextSibling - следующий сосед
    • -
    • previousSibling - предыдущий сосед
    • -
    • childNodes - дочерние узлы
    • -
    • firstChild - первый дочерний узел
    • -
    • lastChild - последний дочерний узел
    • -
    -

    - Все эти свойства предназначены только для чтения, это значит, что с - помощью них удалить или заменить элемент нельзя. -

    -
    -
    -

    Навигация по элементам

    -

    - На самом деле навигация по узлам редко бывает полезна. А используется - навигация только по элементам, с помощью аналогичных методов, но с - немного другими названиями: -

    -
      -
    • parentElement - родительский элемент
    • -
    • nextElementSibling - следующий соседский элемент
    • -
    • previousElementSibling - предыдущий соседский элемент
    • -
    • children - дочерние элементы
    • -
    • firstElementChild - первый дочерний элемент
    • -
    • lastElementChild - последний дочерний элемент
    • -
    -

    - Эти свойства есть не у всех узлов, а только у узлов, являющихся - HTML элементами. -

    -
    -
    -

    Узел vs Элемент

    -

    - В чём отличие Узла от Элемента? -

    -

    - Узел - это более общее понятие, объект, по иерархии наследования - располагающийся выше элемента. -

    -

    - Узел - это всё, что можно встретить в HTML документе: теги, - простой текст, комментарии. -

    -

    - Элемент - это структурная единица DOM дерева, тег в HTML. Например, - div, body, a, p, h3 - Это всё элементы. -

    -

    - И обычно работать приходится именно с элементами. Поэтому не - стоит использовать навигационные методы по Node без строгой необходимости. -

    -
    -
    -

    parentNode / parentElement

    -

    - Свойство parentElement (и parentNode) содержит - ссылку на родительский объект, внутри которого расположен текущий. -

    -

    - Это свойство может быть равно null у корневого объекта - document, или же в том случае, если объект не - привязан к основному DOM дереву документа. -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <ul>
    -            <li>
    -                <a id="link1" href=""></a>
    -            </li>
    -            <li>
    -                <a href=""></a>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let documentParent = document.parentElement;       // null
    -
    -let main = document.body.children[0];
    -
    -console.log(main.parentElement);       // body
    -
    -let firstLink = document.getElementById("link1");
    -
    -console.log(firstLink.parentElement);      // li
    -                            
    -
    -
    -
    -
    -

    Пример с parentElement

    -

    - Вот, например, функция, которая будет выводить всех родителей - переданного элемента до самого корня: -

    -
    
    -function showParents(el) {
    -
    -    if (el instanceof Node === false) {
    -        return;
    -    }
    -    let stack = [];
    -    do {
    -
    -        stack.push(el);
    -        el = el.parentElement;
    -
    -    } while(el.parentElement != null);
    -
    -    let indent = "";
    -    while (stack.length != 0) {
    -
    -        let el = stack.pop();
    -        console.log(indent + el + " - " + el.tagName);
    -        indent += "\t";
    -
    -    }
    -}
    -                    
    -
    -
    -

    Соседи

    -

    - Свойства previousElementSibling (previousSibling) - и nextElementSibling (nextSibling) - позволяют обращаться к соседним элементам, т.е. элементам, расположенным - на одном уровне, иначе говоря - имеющих общего родителя. -

    -

    - Свойство previousElementSibling содержит ссылку на - соседний элемент, который в HTML располагается выше, чем текущий. -

    -

    - Если текущий элемент первый или единственный, значение этого свойства - равно null. -

    -

    - nextElementSibling содержит ссылку на соседний элемент - уже с другой стороны, в HTML располагающийся ниже текущего. -

    -
    -
    -

    Пример с ElementSibling

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <ul>
    -            <li id="item1" >
    -                <a id="link1" href=""></a>
    -            </li>
    -            <li>
    -                <a href=""></a>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let body = document.body;
    -let prevSibling = body.previousElementSibling;     // head
    -let nextSibling = body.nextElementSibling;     // null
    -
    -let item1 = document.getElementById("item1");
    -let item2 = item1.nextElementSibling;
    -
    -function isNodeOnlyChild(el) {
    -    return el.previousElementSibling === el.nextElementSibling;
    -}
    -
    -console.log(isNodeOnlyChild(document));     // true
    -console.log(isNodeOnlyChild(document.head));        // false
    -console.log(isNodeOnlyChild(document.head.children[0]));        // false
    -console.log(isNodeOnlyChild(document.body.children[0]));        // true
    -                            
    -
    -
    -
    -
    -

    Дочерние узлы vs Дочерние элементы

    -

    - Свойство childNodes хранит объект - NodeList - специальный объект, в котором - перечислены все дочерние узлы. -

    -

    - В чём его отличие от свойства children? -

    -

    - children выдаёт список дочерних - элементов (т.е. только объекты Element), - а childNodes - список всех дочерних - узлов (все производные объекты от Node). -

    -

    - То есть, children - это список элементов, - представляющих валидные HTML теги. -

    -

    - А childNodes - список из всего, что есть внутри - текущего элемента, включая комментарии, обычный текст и т.д. -

    -
    -
    -

    Демонстрация разницы 1

    -

    - Посмотрим разницу между Узлами и Элементами на следующем примере: -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <!-- Комментарий -->
    -    <div></div>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let body = document.body;
    -
    -console.log(body.children);     // 1 штука: [ div ]
    -
    -console.log(body.childNodes);   // 5 штук:  [ text, comment, text, div, text]
    -
    -// Как так?
    -                            
    -
    -
    -
    -
    -

    Демонстрация разницы 2

    -

    - А теперь: -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head><body><!-- Комментарий --><div></div></body></html>
    -                            
    -
    -
    -
    
    -let body = document.body;
    -
    -console.log(body.children);     // 1 штука: [ div ]
    -
    -console.log(body.childNodes);   // 2 штуки:  [ comment, div ]
    -
    -// О как
    -                            
    -
    -
    -

    - Вот поэтому навигацию по Node лучше не использовать! -

    -
    -
    -

    Демонстрация разницы 3

    -

    - Можно открыть любой сайт и посмотреть, например, в document.head - или document.body, на их дочерние узлы и дочерние элементы. -

    - -
    -
    -

    Пример childNodes

    -

    - Вот функция, которая показывает сколько есть и каких узлов, - не являющихся элементами, в переданном узле. -

    -
    
    -function showNonElements(el) {
    -
    -    if (el instanceof Node === false) {
    -        return;
    -    }
    -    let arr = [];
    -    let elements = el.children;
    -    let nodes = el.childNodes;
    -    for (let i = 0; i < nodes.length; ++i) {
    -
    -        let found = false;
    -        for (let j = 0; j < elements.length; ++j) {
    -
    -            if (nodes[i] === elements[j]) {
    -
    -                found = true;
    -                break;
    -
    -            }
    -        }
    -        
    -        if (!found) {
    -
    -            arr.push(nodes[i]);
    -
    -        }
    -
    -    }
    -
    -    console.log(`${arr.length} non-elements was founded:`);
    -    for (let el of arr) {
    -        console.log(el);
    -    }
    -}
    -                    
    -
    -
    -

    Крайние потомки

    -

    - Свойства firstElementChild (firstChild) и - nextElementChild (nextChild) - указывают на, соответственно, первый дочерний элемент и последний дочерний элемент. -

    -

    - Если дочерний элементы лишь один, то оба свойства будут указывать на один и тот же объект. -

    -

    - Если потомков нет - будет значение null; -

    -
    -
    -

    Почти финальный пример навигации

    -

    - Осторожно: рекурсия! -

    -

    - Следующий алгоритм ищет и выводит самую длинную ветку DOM дерева: -

    -
    
    -function showParents(el) {
    -
    -    if (el instanceof Node === false) {
    -        return;
    -    }
    -    let stack = [];
    -    do {
    -
    -        stack.push(el);
    -        el = el.parentElement;
    -
    -    } while(el.parentElement != null);
    -
    -    let indent = "";
    -    while (stack.length != 0) {
    -
    -        let el = stack.pop();
    -        console.log(indent + el + " - " + el.tagName);
    -        indent += "\t";
    -
    -    }
    -}
    -
    -function showLongestBranch() {
    -
    -    let dpNode = null;
    -    let deepestLevel = 0;
    -    
    -    (function find(currentNode, currentLevel) {
    -    
    -        if (currentNode.children && currentNode.children.length != 0) {
    -    
    -            for (let i = 0; i < currentNode.children.length; ++i) {
    -    
    -                find(currentNode.children[i], currentLevel + 1);
    -            }
    -    
    -        } else if (currentLevel > deepestLevel) {
    -    
    -            dpNode = currentNode;
    -            deepestLevel = currentLevel;
    -        }
    -    
    -    })(document, 0);
    -    
    -    console.log(`Longest branch in ${deepestLevel} nodes in depth!`);
    -    showParents(dpNode);
    -}
    -showLongestBranch();
    -                    
    -
    -
    -

    Обход всего DOM дерева

    -

    - Осторожно: высокая концентрация рекурсии! Опасно для жизни! -

    -

    - Следующая функция перебирает все элементы DOM дерева и выполняет для каждого элемента переданную - callback-функцию: -

    -
    
    -function eachNode(rootNode, callback) {
    -
    -    if (!callback) {
    -
    -        let nodes = [];
    -
    -        eachNode(rootNode, function (node) {
    -
    -            nodes.push(node);
    -
    -        });
    -
    -        return nodes;
    -    }
    -
    -    if (callback(rootNode) === false) {
    -        return false;
    -    }
    -
    -    if(rootNode.hasChildNodes()) {
    -
    -        let nodes = rootNode.childNodes;
    -
    -        for (let i = 0, l = nodes.length; i < l; ++i) {
    -
    -            if (eachNode(nodes[i], callback) === false) {
    -                return;
    -            }
    -        }
    -    }
    -}
    -
    -// Пригодится в будущем
    -                    
    -
    -
    -
    -
    -

    Другие свойства Node

    -

    - Помимо свойств навигации, любой объект Node содержит следующие полезные свойства: -

    -

    - Свойства только для чтения: -

    -
      -
    • isConnected - проверка, присоединён ли узел к основному DOM дереву
    • -
    • nodeName - имя узла (например, название тега для узлов-элементов)
    • -
    • nodeType - тип узла (элемент, комментарий, текст)
    • -
    -
    -
    -

    Другие свойства Node

    -

    - Следующие 2 свойства являются редактируемыми, т.е. в них можно также и - записывать данные, изменяя тем самым содержимое документа. -

    -
      -
    • nodeValue
    • -
    • textContent
    • -
    -

    - Свойство nodeValue используется для узлов-комментариев - и текстовых узлов, чтобы хранить их значение. Т.е. с помощью него можно получить и - задать значение для простого текста без тегов и комментариев в HTML. Для других - типов узлов его значение равно null и ни на что не влияет. -

    -

    - Свойство textContent хранит своё текстовое содержимое - и текстовое содержимое всех своих потомков. Менять с помощью него текс можно только - когда он записан непосредственно в текущем элементе. -

    -
    -
    -
    -
    -

    Создание узлов

    -

    - С помощью методов объекта document можно - создавать любые виды узлов: -

    -
      -
    • document.createElement
    • -
    • document.createComment
    • -
    • document.createTextNode
    • -
    • document.createAttribure
    • -
    -
    -
    -

    Создание HTML элементов

    -

    - Конечно, основной метод здесь createElement - - для создания HTML элементов, или же тегов. -

    -

    - Метод имеет один обязательный параметр - название тега создаваемого элемента. -

    -
    
    -let newElement = document.createElement("tag-name");
    -                    
    -

    - Метод создаёт пустой и чистый элемент, не присоединённый к DOM дереву. - Т.е. все свойства указывающие на родителей, детей или соседей у него - будут равны null. -

    -

    - Соединять его с основным DOM деревом нужно вручную (т.е. с помощью - других функций). -

    -
    -
    -

    Пример создания элементов

    -
    
    -let newParagraph = document.createElement("p");
    -
    -let newDiv = document.createElement("div");
    -
    -let newUl = document.createElement("ul");
    -
    -let newVideo = document.createElement("video");
    -
    -console.log(
    -    newParagraph.parentElement === newDiv.parentElement &&
    -    newDiv.parentElement === newUl.parentElement &&
    -    newUl.parentElement === newVideo.parentElement  &&
    -    newVideo.parentElement === null
    -);
    -
    -console.log(
    -    newParagraph.children.length === newDiv.children.length &&
    -    newDiv.children.length === newUl.children.length &&
    -    newUl.children.length === newVideo.children.length &&
    -    newVideo.children.length === 0
    -);
    -                    
    -
    -
    -
    -
    -

    Методы объекта Node

    -

    - А теперь посмотрим, какие методы есть у любого объекта Node: -

    -
      -
    • appendChild - добавляет дочерний узел
    • -
    • insertBefore - добавляет дочерний узел перед указанным дочерним узлом
    • -
    • cloneNode - создаёт копию узла
    • -
    • removeChild - удаляет дочерний узел
    • -
    • replaceChild - заменяет дочерний узел другим
    • -
    • contains - проверка, содержится ли переданный узел в текущем
    • -
    -

    - С полным перечнем свойств и методов Node можно ознакомиться - на MDN. -

    -
    -
    -

    Добавление элементов

    -

    - Один из самых важных методов! -

    -

    - С помощью метода appendChild можно присоединить - один узел к другому. -

    -

    - Метод принимает один обязательный параметр - узел, который будет добавлен - в конец списка дочерних элементов текущего узла. -

    -
    
    -element.appendChild(aChild);
    -                    
    -

    - Элемент, передаваемый в качестве параметра, присоединяется к элементу, - для которого этот метод вызывается. -

    -

    - При добавлении элемента к родителю, все навигационные свойства автоматически - обновляют свои значения. -

    -
    -
    -

    Пример добавления элемента

    -
    
    -let div = document.createElement("div");
    -console.log(div.children);          // HTMLCollection []
    -
    -let header = document.createElement("h2");
    -console.log(header.parentNode);     // null
    -
    -div.appendChild(header);
    -console.log(div.children);          // HTMLCollection [ h2 ]
    -console.log(header.parentNode);     // div
    -console.log(div.firstChild);        // div
    -
    -let paragraph = document.createElement("p");
    -
    -div.appendChild(paragraph);
    -console.log(div.children);              // HTMLCollection [ h2, p ]
    -console.log(paragraph.parentNode);      // div
    -console.log(header.nextSibling);                // p
    -console.log(paragraph.previousSibling);         // h2
    -                    
    -
    -
    -

    appendChild в действии

    -

    - Пример функции, которая добавляет новый элемент li - в список: -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <ul id="list">
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -function addListItemWithText(text) {
    -
    -    let list = document.getElementById("list");
    -
    -    if (list) {
    -
    -        let newItem = document.createElement("li");
    -        newItem.textContent = text;
    -
    -        list.appendChild(newItem);  
    -
    -    }
    -}
    -
    -addListItemWithText("Пункт 1");
    -addListItemWithText("Пункт 2");
    -addListItemWithText("Пункт 3");
    -                            
    -
    -
    -
    -
    -

    Динамическое построение HTML документа

    - -

    - See the Pen - BbXRWx by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Добавление методом insertBefore

    -

    - Метод insertBefore используется для того, чтобы - добавить дочерний элемент перед другим указанным дочерним элементом. -

    -

    - Метод принимает 2 обязательных параметра: 1 - добавляемый элемент, 2 - - присутствующий элемент, перед которым нужно вставить первый. -

    -
    
    -let insertedNode = parentNode.insertBefore(newNode, referenceNode);
    -                    
    -
      -
    • parentNode - элемент, в который будет добавлен новый
    • -
    • newNode и insertedNode - добавляемый/добавленный элемент
    • -
    • - referenceNode - элемент, который уже находится в parentNode, - перед которым будет вставлен newNode -
    • -
    -
    -
    -

    Пример insertBefore

    -

    - Вот методы insertBefore есть, а метода - insertAfter - нет. Несправедливость! -

    -

    - Давайте сами напишем метод insertAfter, используя метод - insertBefore: -

    -
    
    -function insertAfter(parentNode, newNode, referenceNode) {
    -
    -    if (referenceNode != null) {
    -
    -        parentNode.insertBefore(newNode, referenceNode.NextSibling);
    -
    -    } else {
    -
    -        parentNode.appendChild(newNode);
    -    }
    -}
    -                    
    -
    -
    -

    Добавление существующего элемента

    -

    - Интересный момент, при добавлении элемента, который уже присутствует - где-то в DOM дереве, он будет удалён из своей старой позиции и перемещён - в новую. -

    -

    - Т.е. один элемент не может находиться сразу в 2 местах на странице. -

    -

    - See the Pen - qveReQ by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Клонирование

    -

    - А что делать, если всё-таки нужно добавить элемент, идентичный уже - существующему? Тогда поможет метод cloneNode. -

    -

    - Метод cloneNode создаёт полную глубокую - копию узла. Глубокую - означает, что вместе с самим элементом копируются - и все вложенные в него дочерние элементы. -

    -

    - Таким образом, можно быстро создавать копии целых ветвей в DOM дереве. -

    -
    
    -let deepCopy = node.cloneNode(true); 
    -                    
    -

    - Хотя это поведение можно отключить, передав в параметрах значение - false. Тогда будет создана только копия - конкретного элемента, без дочерних элементов. -

    -
    -
    -

    Пример cloneNode

    -

    - В этом примере создаются 2 копии карточки, одна с помощью глубокого копирования, - другая с помощью мелкого копирования: -

    - -

    - See the Pen - Figure - Caption | Flexbox by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Подводные камни клонирования

    -

    - Создавать копии узлов нужно внимательно, потому что некоторые вещи - копировать не следует, например, id. При копировании объектов - будут скопированы все их атрибуты, в том числе и уникальный id. -

    -

    - В таким случаях id скопированного узла следует дополнительно изменять. -

    -

    - Также могут встречаться и другие проблемы при копировании элементов - с привязанными обработчиками событий, или копировании canvas. -

    -
    -
    -

    Удаление дочерних элементов

    -

    - Метод removeChild используется для удаления - элемента из родительского узла, или же отсоединения дочернего узла от родителя. -

    -

    - Метод принимает 1 обязательный параметр - элемент, который необходимо - удалить из списка вложенных элементов. -

    -
    
    -let oldChild = node.removeChild(child);
    -                    
    -

    - Элемент child отсоединяется от элемента node. -

    -
    -
    -

    Пример удаления

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <ul id="list">
    -            <li>
    -                <a href="">Первая ссылка</a>
    -            </li>
    -            <li>
    -                <a href="">Вторая ссылка</a>
    -            </li>
    -            <li>
    -                <a href="">Третья ссылка</a>
    -            </li>
    -            <li>
    -                <a href="">Четвёртая ссылка</a>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let list = document.getElementById("list");
    -
    -for (let i = 0; i < list.children.length; ++i) {
    -
    -    let listItem = list.children[i];
    -    let linkInsideItem = listItem.firstElementChild;
    -
    -    listItem.removeChild(linkInsideItem);
    -
    -}
    -                            
    -
    -
    -
    -
    -

    Пример удаления

    -

    - Следующая функция будет очищать (удалять всех детей) указанный - элемент: -

    -
    
    -function removeAllChildren(element) {
    -
    -    while(element.firstChild) {
    -
    -        element.removeChild(element.firstChild);
    -
    -    }
    -}
    -
    -removeAllChildren(document.body);
    -                    
    -
    -
    -

    Замена элемента

    -

    - Метод replaceChild выполняет замену - одного элемента на другой элемент. -

    -
    
    -let replacedNode = parentNode.replaceChild(newChild, oldChild);
    -                    
    -
      -
    • parentNode - элемент, чьих детей подменяем
    • -
    • newChild - новый элемент, который встанет на место oldChild
    • -
    • oldChild и replacedNode - элемент, который будет заменён
    • -
    -

    - Замена = удаление + добавление -

    -
    -
    -

    Пример replaceChild

    -

    - Квадрат-пожиратель: -

    - -

    - See the Pen - ZPgaGW by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Желтые против Синих

    - -

    - See the Pen - OqKOze by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Метод contains

    -

    - С помощью метода contains можно проверить, - содержится ли указанный элемент у другом элементе, вне зависимости от - глубины вложенности. -

    -
    
    -node.contains(otherNode)
    -                    
    -

    - Метод возвращает true, если элемент - otherNode является самим элементом node, его - дочерним элементом, или дочерним его дочерних элементов и т.д. -

    -
    -
    -

    Пример contains

    -

    - Простой метод для проверки, присоединён ли элемент к основному DOM - дереву: -

    -
    
    -function isInPage(node) {
    -
    -    return document.body.contains(node);
    -
    -}
    -
    -isInPage(document.head);                        // false
    -isInPage(document.body.lastElementChild);       // true
    -                    
    -
    -
    -
    -
    -

    Объект Element

    -

    - Это был только объект Node. -

    -

    - Теперь мы рассмотрим следующий в иерархии объект - Element, - основной объект, используемый при работе с DOM. -

    - -
    -
    -

    Наследники Element

    -

    - И это ещё не конец, у Element-а целая куча наследников -

    - -
    -
    -

    Гораздо больше...

    - -
    -
    -

    Основной функционал

    -

    - Но все последующие объекты уже не добавляют почти никакого дополнительного - функционала, только всякие нестандартные элементы, типа canvas. -

    -

    - Основные функции и свойства сосредоточены в объектах Node, - который мы рассмотрели, и Element, который мы разберём - сейчас. -

    - - *Ещё некоторые дополнительные функции и свойства, такие как рассмотренные нами - навигационные свойства для элементов, находятся в отдельных объектах, не - входящим в основную иерархию, - так называемых, миксинах (mixin). - -
    -
    -
    -
    -

    Element и атрибуты

    -

    - Объект Element добавляет целый ряд свойств и - методов для работы с атрибутами. -

    -

    - Свойство -

    -
      -
    • attributes - список всех атрибутов
    • -
    -

    - И методы: -

    -
      -
    • getAttribute() - получение значения конкретного атрибута
    • -
    • getAttributeNames() - выдаёт массив атрибутов
    • -
    • hasAttribute() - проверка наличия атрибута
    • -
    • hasAttributes() - проверка наличия атрибутов в принципе
    • -
    • removeAttribute() - удаление атрибута
    • -
    • setAttribute() - установка значения атрибута
    • -
    • toggleAttribute() - переключение булевого атрибута
    • -
    -
    -
    -

    Свойство attributes

    -

    - attributes - универсальное свойство для работы с атрибутами. С помощью - него можно получить доступ ко всем атрибутам элемента, добавлять новые атрибуты, изменять или - удалять существующие. -

    -

    - Свойство attributes содержит специальный объект NamedNodeMap, - который является чем-то вроде перечисления из пар ключ-значение. -

    -
    -
    -

    Объект NamedNodeMap

    -

    - Объект NamedNodeMap хранит в себе перечисление из объектов - Attr (это которые наряду c - Element наследуются от Node). -

    -

    - Элементы этого перечисления можно перебирать по индексам, либо же обращаться к атрибутам по их именам. -

    -
    -
    -

    Объект Attr

    -

    - При работе с атрибутами через свойство attributes нужно быть очень - внимательным, т.к. легко забыть, что атрибуты хранятся не в виде простых строковых значений, - а виде объектов Attr. -

    -

    - Следующая запись на первый взгляд может показаться нормальной, но это неправильная запись: -

    -
    
    -node.attributes.id = "uniqueId";            // неправильно
    -node.attributes.name = "objName";           // неправильно
    -node.attributes.href = "http://localhost:5500/index.html";     // неправильно
    -                    
    -
    -
    -

    Изменение значения атрибута через объект Attr

    -

    - В объекте Attr значение атрибута хранится в свойстве value. - И если нужно изменять его, то нужно это делать именно через это свойство. -

    -
    
    -node.attributes.id.value = "uniqueId";            // Ок
    -node.attributes.name.value = "objName";           // Ок
    -node.attributes.href.value = "http://localhost:5500/index.html";     // Ок
    -                    
    -

    - Имя атрибута можно получить через свойство name: -

    -
    
    -console.log(node.attributes.role.name);       // "id"
    -console.log(node.attributes.type.name);       // "type"
    -console.log(node.attributes.tabindex.name);       // "tabindex"
    -                    
    -
    -
    -

    Схема объектов атрибутов

    - -
    -
    -

    Доступ к атрибутам через attributes

    -

    - В этом примере показан доступ к атрибутам по индексам: -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body class="body-container">
    -    <main class="container">
    -        <ul id="list" class="blue-list">
    -            <li>
    -                <a id="link_1" name="clecture" href="https://learn.paradox.red/clecture">Первая ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_2" href="https://learn.paradox.red/sharp">Вторая ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_3" href="https://learn.paradox.red/js">Третья ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_4" href="https://learn.paradox.red/testing">Четвёртая ссылка</a>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -function showAttr(el) {
    -
    -    if (el.attributes.length === 0) {
    -
    -        console.log("No attributes to show");
    -        return;
    -
    -    }
    -    for (let i = 0; i < el.attributes.length; ++i) {
    -
    -        console.log(el.attributes[i].name.padEnd(5) + " --> " + el.attributes[i].value);
    -
    -    }
    -}
    -
    -let link1 =  document.getElementById("link_1");
    -showAttr(link1);
    -                            
    -
    -
    -
    -
    -

    Доступ к атрибутам по ключу

    -

    - А здесь осуществляется получение атрибутов по ключу, а также изменение их значений: -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body class="body-container">
    -    <main class="container">
    -        <ul id="list" class="blue-list">
    -            <li>
    -                <a id="link_1" name="clecture" href="https://learn.paradox.red/clecture">Первая ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_2" name="sharp" href="https://learn.paradox.red/sharp">Вторая ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_3" name="js" href="https://learn.paradox.red/js">Третья ссылка</a>
    -            </li>
    -            <li>
    -                <a id="link_4" name="testing" href="https://learn.paradox.red/testing">Четвёртая ссылка</a>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -
    -let list =  document.getElementById("list");
    -
    -let item = list.firstElementChild;
    -do {
    -
    -    let linkAttrs = item.children[0].attributes;
    -
    -    linkAttrs.href.value = "http://example.com/";
    -    console.log(`${linkAttrs.name.value} now leads to ${linkAttrs.href.value}`);
    -
    -    item = item.nextElementSibling;
    -
    -} while (item != null);
    -                            
    -
    -
    -
    -
    -

    Методы объекта NamedNodeMap

    -
      -
    • getNamedItem() - аналог получения атрибута по ключу
    • -
    • item() - аналог получения атрибута по индексу
    • -
    • removeNamedItem() - удаление атрибута
    • -
    • setNamedItem() - добавление Attr объекта атрибута
    • -
    -

    - Первые 2 метода - это то же самое, что получение атрибута по ключу/значению, только через методы. -

    -

    - Метод setNamedItem слишком сложный для добавления атрибута, есть пути - гораздо проще. Этот метод принимает параметр - объект типа Attr, - который предварительно нужно создать с помощью document.createAttribute. -

    -
    -
    -

    Удаление атрибута через attributes

    -

    - Единственный метод, которым здесь можно пользоваться, это removeNamedItem. -

    -

    - Он удаляет у элемента атрибут, по переданному названию. -

    -
    
    -let deletedAttr = node.attributes.removeNamedItem("name-of-attribute");
    -                    
    -

    - Но и для удаления есть варианты попроще. -

    -
    -
    -

    Методы Element для атрибутов

    -

    - Напомним, что у объекта Element, помимо свойства - attributes, хоть всё можно сделать и через него, для удобства - существует набор методов для выполнения различных операций над атрибутами: -

    -
      -
    • getAttributeNames() - выдаёт массив атрибутов
    • -
    • getAttribute() - получение значения конкретного атрибута
    • -
    • hasAttribute() - проверка наличия атрибута
    • -
    • hasAttributes() - проверка наличия атрибутов в принципе
    • -
    • removeAttribute() - удаление атрибута
    • -
    • setAttribute() - установка значения атрибута
    • -
    • toggleAttribute() - переключение булевого атрибута
    • -
    -

    - Эти методы прячут внутри всё сложное устройство attributes с их объектами - Attr, и выдают только сами ключи и значения. -

    -
    -
    -

    Получение имён и значений атрибутов

    -

    - С помощью метода getAttributeNames можно получить массив из названий - атрибутов у текущего элемента. -

    -
    
    -let attrArray = element.getAttributeNames();
    -
    -let attrs = link1.getAttributeNames();      // [ "id", "name", "href" ]
    -                    
    -

    - А метод getAttribute позволяет по известному названию атрибута получить - его значение. -

    -
    
    -let attrValue = element.getAttribute("attrName");
    -
    -let linkAddress = link1.getAttribute("href");          // "http://example.com"
    -                    
    -
    -
    -

    Проверка наличия атрибутов

    -

    - Чтобы проверить, если ли у элемента вообще хоть один атрибут, или нет ни одного, можно с помощью - метода hasAttributes. -

    -

    - Этот метод не принимает параметров и возвращает false, если у элемента - нет ни одного атрибута. -

    -

    - Проверить, есть ли у текущего элемента какой-либо конкретный атрибут, можно с помощью метода - hasAttribute. -

    -

    - В качестве параметра этот метод принимает строку - имя атрибута, и возвращает true, - если такой атрибут присутствует у этого элемента. -

    -
    -
    -

    Пример работы с атрибутами

    -

    - Воспользуемся нашей старой рекурсивной функцией для обхода всего дерева, для того чтобы найти - все элементы с атрибутами href: -

    -
    
    -// Обход DOM дерева
    -function eachElement(rootElement, callback) {
    -
    -    if (!callback) {
    -
    -        let elements = [];
    -
    -        eachElement(rootElement, function (element) {
    -
    -            elements.push(element);
    -
    -        });
    -
    -        return elements;
    -    }
    -
    -    if (callback(rootElement) === false) {
    -        return false;
    -    }
    -
    -    if(rootElement.children.length != 0) {
    -
    -        let elements = rootElement.children;
    -
    -        for (let i = 0, l = elements.length; i < l; ++i) {
    -
    -            if (eachElement(elements[i], callback) === false) {
    -                return;
    -            }
    -        }
    -    }
    -}
    -
    -// Основная функция
    -let count = 0;
    -eachElement(document, function(el) {
    -
    -    if (el.hasAttributes && el.hasAttributes() && el.hasAttribute("href")) {
    -
    -        console.log(el.getAttribute("href"));
    -        ++count;
    -    }
    -
    -});
    -console.log(`A total of ${count} elements were found with href!`);
    -                    
    -
    -
    -

    Удаление и добавление атрибутов

    -

    - Удалить атрибут помогает метод removeAttribute, принимающий в качества - аргумента название удаляемого атрибута. -

    -
    
    -element.removeAttribute("attribute-name");
    -                    
    -

    - Добавить новый атрибут или новое значение можно с помощью метода setAttribute. - Этот метод принимает 2 параметра: название атрибута и новое значение. -

    -
    
    -element.setAttribute("attribute-name", "attributeValue");
    -                    
    -
    -
    -

    Пример с удалением/добавление атрибутов

    -

    - Например, следующая функция, снова используя ту функцию для обхода DOM дерева, позволяет - удалить любой атрибут со всей страницы. -

    -

    - Например, можно деактивировать все ссылки, удалив атрибут href, или "очистить" страницу, - удалив все атрибуты с css классами. -

    -
    
    -// Обход DOM дерева
    -function eachElement(rootElement, callback) {
    -
    -    if (!callback) {
    -
    -        let elements = [];
    -
    -        eachElement(rootElement, function (element) {
    -
    -            elements.push(element);
    -
    -        });
    -
    -        return elements;
    -    }
    -
    -    if (callback(rootElement) === false) {
    -        return false;
    -    }
    -
    -    if(rootElement.children.length != 0) {
    -
    -        let elements = rootElement.children;
    -
    -        for (let i = 0, l = elements.length; i < l; ++i) {
    -
    -            if (eachElement(elements[i], callback) === false) {
    -                return;
    -            }
    -        }
    -    }
    -}
    -
    -// Функция удаления указанного атрибута со всех элементов страницы
    -function cleanAttribute(attr) {
    -
    -    eachElement(document, function (el) {
    -
    -        if (el.hasAttribute && el.hasAttribute(attr)) {
    -
    -            el.removeAttribute(attr);
    -        }
    -    });
    -}
    -
    -cleanAttribute("href");
    -
    -cleanAttribute("src");
    -cleanAttribute("srcset");
    -
    -// А вот код, который будет добавлять всплывающую подсказку для всех изображений img на странице:
    -eachElement(document, function (el) {
    -
    -    if (el.hasAttribute && el.tagName.toLowerCase() == "img") {
    -
    -        el.setAttribute("title", "Это всплывающая подсказка. Которой здесь быть не должно, хакеры!");
    -    }
    -});
    -
    -
    -
    -
    -                    
    -
    -
    -

    Работа с булевыми атрибутами

    -

    - Метод toggleAttribute переключает значение булевого атрибута. Т.е. если - этот атрибут есть, убирает его, если же атрибута нет - то добавляет. -

    -

    - В аргументах ему передаётся имя атрибута: -

    -
    
    -let isActive = element.toggleAttribute("attribute-name");
    -                    
    -

    - Дополнительно вторым параметром можно передавать булево значение, жестко задающее поведение: - true, если нужно активировать атрибут, false - если - нужно убрать его. -

    -

    - Это получается то же самое, что setAttribute, только лишь для булевых атрибутов. -

    -
    
    -// Force activating
    -element.toggleAttribute("attribute-name", true);
    -
    -// Force deactivating
    -element.toggleAttribute("attribute-name", false);
    -                        
    -                
    -
    -

    Пример с toggleAttribute

    -

    - Здесь каждые 10 секунд переключаются булевы атрибуты readonly для textarea и - contenteditable для div-а, что переключает их между редактируемым и статическим состоянием. -

    - -

    - See the Pen - NJQEzP by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Атрибут id

    -

    - Для доступа к атрибуту id элемента на самом деле вообще не нужно пользоваться - никакими методами, или обращаться к attributes. -

    -

    - Для удобства, атрибут id в Element вынесен в - отдельное свойство. -

    -

    - С помощью него можно и читать, и изменять id: -

    -
    
    -let id = element.id;
    -element.id = "newUniqueId";
    -
    -let superBlock = document.getElementById("su_block");
    -console.log(superBlock.id);     // "su_block"
    -superBlock.id = "id_123";
    -console.log(superBlock.id);     // "id_123"
    -
    -let byOldId = document.getElementById("su_block");      // null
    -let byNewId = document.getElementById("id_123");        // div
    -                    
    -
    -
    -

    Пример c id

    -

    - В этом примере происходит копирование элемента с id. Соответственно, - у каждой копии нужно менять id на новый. -

    - -

    - See the Pen - aMeMmW by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Забегая вперёд...

    -

    - Чтобы можно было показывать более интересные примеры, давайте мельком разберём один из главных - способов взаимодействия пользователя с документом: -

    -

    - Клик мышкой -

    -
    -
    -

    Событие click

    -

    - Всё взаимодействие пользователя со страницей строится на событиях. И самым главным событием - является событие click, которое происходит при одиночном - нажатии левой кнопкой мыши. -

    -

    - Это событие есть у любого элемента (Element) и документа Document. -

    -

    - Т.е. на любой элемент HTML страницы можно назначит какую-нибудь логику, которая будет выполняться при нажатии - мышью на этот элемент. Будь то блок div, элемент списка li, простой параграф p, весь документ - что угодно - может обрабатывать событие click. -

    -
    -
    -

    Обработчик события

    -

    - Обработчик события - функция, которая будет выполняться в ответ на это событие. Для функции в роли - обработчика нет никаких ограничений, любая функция может быть обработчиком события. -

    -

    - Обработчик события назначается элементу через функцию addEventListener. -

    -
    
    -element.addEventListener("click", Function);
    -                    
    -
      -
    • element - элемент DOM, для которого будет обрабатываться событие
    • -
    • 1 параметр, "click" - название события
    • -
    • 2 параметр, Function - функция-обработчик события
    • -
    -
    -
    -

    Классический пример

    - -

    - See the Pen - Simple click by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Клик по всему

    -

    - Следующая функция, используя старую добрую функцию eachElement для обхода всех элементов - DOM дерева, добавляет каждому элементу обработчик, который выводит информацию об этом элементе. -

    -
    
    -// Обход DOM дерева
    -function eachElement(rootElement, callback) {
    -
    -    if (!callback) {
    -
    -        let elements = [];
    -
    -        eachElement(rootElement, function (element) {
    -
    -            elements.push(element);
    -
    -        });
    -
    -        return elements;
    -    }
    -
    -    if (callback(rootElement) === false) {
    -        return false;
    -    }
    -
    -    if(rootElement.children.length != 0) {
    -
    -        let elements = rootElement.children;
    -
    -        for (let i = 0, l = elements.length; i < l; ++i) {
    -
    -            if (eachElement(elements[i], callback) === false) {
    -                return;
    -            }
    -        }
    -    }
    -}
    -
    -// Основная функция
    -eachElement(document, function (el) {
    -
    -    el.addEventListener("click", function(e) {
    -
    -        console.log(`<${el.nodeName} class="${el.className}">`);
    -        e.stopPropagation();
    -
    -    });
    -});
    -                    
    -
    -
    -

    Пример click с appendChild

    - -

    - See the Pen - Click event example by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Улучшенный пример с removeChild

    - -

    - See the Pen - Extended click example by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    CSS классы

    -

    - CSS классы присоединяются к элементам страницы через те же атрибуты. И в объекте Element - есть очень удобный способ с ними работать. -

    -

    - К атрибуту class можно получить доступ и с помощью предыдущих, рассмотренных ранее методик, - но значительно удобнее с ними работать через специальные свойства. -

    -

    - Вообще, связанный с CSS классами в объекте Element 2: -

    -
      -
    • className
    • -
    • classList
    • -
    -
    -
    -

    Свойство className

    -

    - Свойство className предоставляет быстрый доступ к атрибуту class, - так же как и рассмотренный только что id. - С помощью него можно просматривать и задавать значение атрибута. -

    -
    
    -let div = document.getElementById("main_cont");     // <div class="container yello_sp1 thr2">
    -console.log(div.className);             // "container yello_sp1 thr2"
    -div.className = "container thr1";      
    -console.log(div);                       // <div class="container thr1">
    -                    
    -

    - Однако не очень удобно работать с этим атрибутом, как со строкой. С одним элементом может быть сразу - связано несколько CSS классов, и пытаться извлечь только нужный класс из строки совершенно неудобно. -

    -

    - Поэтому это свойство редко бывает полезно, в особенности из-за наличия следующего свойства. -

    -
    -
    -

    classList

    -

    - Свойство classList одно из самых важных и полезный свойств в DOM. -

    -

    - Оно позволяет удобно манипулировать классами у выбранного элемента, добавлять, удалять, - проверять на наличие конкретных классов. -

    -

    - Вообще, это свойство содержит в себе специальный объект DOMTokenList - - что-то вроде массива/перечисления CSS классов выбранного элемента. -

    -
    -
    -

    Методы объекта DOMTokenList

    -

    - Объект DOMTokenList хранит назначенные элементу CSS классы в виде - массива строк и содержит следующие методы: -

    -
      -
    • add() - добавление CSS класса
    • -
    • remove() - удаление CSS класса
    • -
    • item() - получение класса по индексу
    • -
    • contains() - проверка наличия указанного класса
    • -
    • toggle() - переключение класса (вкл/выкл)
    • -
    • replace() - замена одного класса на другой
    • -
    -

    - Количество стилей у элемента можно узнать через обычное свойство length. -

    -
    -
    -

    Добавление и удаление классов

    -

    - Методом add можно добавить к элементу один класс, или сразу несколько. -

    -

    - Методом remove, по аналогии, можно удалить класс(ы) у элемента. -

    -
    
    -element.classList.add("class-name");
    -element.classList.add("class1", "class2", "class3");
    -
    -element.classList.remove("class-name");
    -element.classList.remove("class1", "class2", "class3");
    -                    
    -

    - Если попытаться добавить уже существующий класс, или удалить класс, которого у элемента нет - - ничего не произойдёт. -

    -
    -
    -

    Пример добавления класса

    - -

    - See the Pen - mgdEWx by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Перебор...

    - -

    - See the Pen - Css class add & remove by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Проверка наличия конкретного класса

    -

    - С помощью метода contains() можно проверить, есть ли в данный момент - указанный класс у заданного элемента. -

    -
    
    -element.classList.contains("class-name");
    -
    -if (element.classList.contains("class1")) {
    -    console.log("Элемент содержит класс class1");
    -} else {
    -    console.log("У элемента нет класса class1");
    -}
    -                    
    -
    -
    -

    Крестики-нолики

    - -

    - See the Pen - Tic-tac-toe by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Переключение состояния класса

    -

    - С помощью метода toggle() можно переключать состояние указанного класса. -

    -

    - Если у элемента есть такой класс, он будет удалён. Если такого класса нет - он будет добавлен. Это - как переключение булевого флага: true/false - включен/выключен. -

    -

    - Этот метод бывает полезен когда у нас в стилях есть строго 2 состояния, в тех ситуациях, когда - нужно включать-выключать что-то, например, через чекбоксы. -

    -
    
    -element.classList.toggle("class-name");
    -
    -element.classList.toggle("class-example");  //  Класс class-example добавлен
    -element.classList.toggle("class-example");  //  Класс class-example убран
    -element.classList.toggle("class-example");  //  Класс class-example добавлен
    -element.classList.toggle("class-example");  //  Класс class-example убран
    -                    
    -
    -
    -

    Пример с переключением класса

    -

    - В этом примере toggle() используется для переключения тёмной темы (включена/выключена). -

    - -

    - See the Pen - Toggle class state by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Замена класса

    -

    - Метод replace() позволяет заменить один класс другим. -

    -
    
    -element.classList.replace("oldClass", "newClass");
    -                    
    -

    - У элемента по ссылке element класс oldClass заменяется на класс newClass. -

    -

    - Причём, если первым параметром передать класс, которого у элемента нет, новый класс не добавится. -

    -

    - Чтобы замена прошла успешно, нужно чтобы обязательно было что заменять. -

    -
    -
    -

    Пример с replace

    - -

    - See the Pen - Various themes by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Работа с HTML разметкой

    -

    - В объекте Element есть ещё 2 довольно полезных свойства: -

    -
      -
    • innerHTML
    • -
    • outerHTML
    • -
    -

    - Эти свойства позволяют работать напрямую с текстовой HTML разметкой элементов. - Они хранят строки, содержащие в себе внутренний HTML код элемента. И значение в этих - свойствах можно не только, читать но и записывать. -

    -

    - Т.е. с помощью этих свойств можно добавлять элементы в DOM дерево прямо в виде текста, как он - записывается в самом HTML, вместо использования методов document-а и - Element-а. -

    -
    -
    -

    Свойство innerHTML

    -

    - В свойстве innerHTML у элемента хранится вся HTML разметка, находящаяся - внутри этого элемента. Т.е. разметка всех потомков, потомков его потомков, и т.д. Всё, что находится - ниже по DOM дереву. -

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body class="body-container">
    -    <header>
    -        <div id="nav" class="nav_box">
    -            <ul class="navigation">
    -                <li>Пункт меню 1</li>
    -                <li>Пункт меню 2</li>
    -                <li>Пункт меню 3</li>
    -                <li>Пункт меню 4</li>
    -            </ul>
    -        </div>
    -    </header>
    -    <main class="container">
    -        <div>
    -            <ul id="list" class="blue-list">
    -                <li>
    -                    <a id="link_1" name="clecture" href="https://learn.paradox.red/clecture">Первая ссылка</a>
    -                </li>
    -                <li>
    -                    <a id="link_2" name="sharp" href="https://learn.paradox.red/sharp">Вторая ссылка</a>
    -                </li>
    -                <li>
    -                    <a id="link_3" name="sharp" href="https://learn.paradox.red/js">Третья ссылка</a>
    -                </li>
    -                <li>
    -                    <a id="link_4" name="sharp" href="https://learn.paradox.red/testing">Четвёртая ссылка</a>
    -                </li>
    -            </ul>
    -        </div>
    -        <div id="quot" class="info">
    -            <span>Какой-то текст</span>
    -            <span>2 раза</span>
    -        </div>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let nav = document.getElementById("nav");
    -console.log(nav.innerHTML);
    -        /*  <ul class="navigation">
    -                <li>Пункт меню 1</li>
    -                <li>Пункт меню 2</li>
    -                <li>Пункт меню 3</li>
    -                <li>Пункт меню 4</li>
    -            </ul> 
    -        */
    -let link = document.getElementById("link_1");
    -console.log(link.innerHTML);
    -// Первая ссылка
    -
    -let info = document.getElementById("quot");
    -console.log(info.innerHTML);
    -        /*
    -            <span>Какой-то текст</span>
    -            <span>2 раза</span>
    -        */
    -                            
    -
    -
    -
    -
    -

    Запись в innerHTML

    -

    - Но самое интересное происходит при записи нового значения в innerHTML. -

    -

    - Туда передаётся строка с текстом, и браузерный движок начинает парсить её, как он бы парсил обычный - текст внутри HTML файла. В результате обработки, движок самостоятельно строит ветвь DOM дерева из - принятого текста. -

    -

    - А затем он просто заменяет часть DOM дерева внутри элемента, на новую построенную ветвь. -

    -
    -
    -

    Аналогия

    -

    - Например, вот эти 2 скрипта будут выполнять аналогичные действия: удалять содержимое body и - добавлять туда список из 3 элементов. -

    -
    -
    -
    
    -while (document.body.children.length) {
    -    document.body.removeChild(document.body.firstChild);
    -}
    -
    -let list = document.createElement("ul");
    -
    -let li1 = document.createElement("li");
    -li1.innerHTML = "Первый пункт";
    -list.appendChild(li1);
    -
    -let li2 = document.createElement("li");
    -li2.textContent = "Второй пункт";
    -list.appendChild(li2);
    -
    -let li3 = document.createElement("li");
    -li3.innerHTML = "Третий пункт";
    -list.appendChild(li3);
    -
    -document.body.appendChild(list);
    -                            
    -
    -
    -
    
    -document.body.innerHTML = 
    -        `<ul>
    -            <li>Первый пункт</li>
    -            <li>Второй пункт</li>
    -            <li>Третий пункт</li>
    -        </ul>`;
    -                            
    -
    -
    -
    -
    -

    Плюсы и минусы

    -

    - innerHTML зачастую бывает гораздо удобнее и проще пользоваться. -

    -

    - К тому же это свойство универсально: с помощью него можно добавлять как HTML элементы, так - и обычные текстовые узлы. -

    -

    - Но всё же использование innerHTML сильно ограничено: с помощью него - нельзя создать объекты DOM дерева для хранения в памяти. А также необходимо создавать всю - разметку одним действием, в то время как при создании через методы все собирается постепенно - по кусочкам. -

    -

    - Его можно использовать только когда заранее, на этапе написания скрипта, известно какая именно - HTML разметка будет добавляться на страницу, без динамических изменений. -

    -
    -
    -

    Свойство outerHTML

    -

    - В чем же отличие outerHTML от innerHTML? -

    -

    - В свойстве outerHTML, помимо разметки всех потомков (как в - innerHTML), хранится и разметка самого элемента, которому принадлежит это свойство. -

    -

    - Т.е. outerHTML = сам_элемент + innerHTML -

    -
    -
    -

    Разница

    - -
    -
    -

    Сравнение

    -
    -
    -
    
    -let nav = document.getElementById("nav");
    -console.log(nav.innerHTML);
    -        /*  <ul class="navigation">
    -                <li>Пункт меню 1</li>
    -                <li>Пункт меню 2</li>
    -                <li>Пункт меню 3</li>
    -                <li>Пункт меню 4</li>
    -            </ul> 
    -        */
    -let link = document.getElementById("link_1");
    -console.log(link.innerHTML);
    -// Первая ссылка
    -
    -let info = document.getElementById("quot");
    -console.log(info.innerHTML);
    -        /*
    -            <span>Какой-то текст</span>
    -            <span>2 раза</span>
    -        */
    -                            
    -
    -
    -
    
    -let nav = document.getElementById("nav");
    -console.log(nav.outerHTML);
    -        /*  <div id="nav" class="nav_box">
    -                <ul class="navigation">
    -                    <li>Пункт меню 1</li>
    -                    <li>Пункт меню 2</li>
    -                    <li>Пункт меню 3</li>
    -                    <li>Пункт меню 4</li>
    -                </ul>
    -            </div>
    -        */
    -let link = document.getElementById("link_1");
    -console.log(link.outerHTML);
    -// <a id="link_1" name="clecture" href="https://learn.paradox.red/clecture">Первая ссылка</a>
    -
    -let info = document.getElementById("quot");
    -console.log(info.outerHTML);
    -        /*
    -            <div id="quot" class="info">
    -                <span>Какой-то текст</span>
    -                <span>2 раза</span>
    -            </div>
    -        */
    -                            
    -
    -
    -
    -
    -

    Пример использования разметки

    -
    -
    -
    -
    -

    Второстепенные свойства Element

    -

    - Например, свойство tagName - хранит название тега элемента. -

    -

    - Собственно, то же самое делает и свойство nodeName от объекта - Node, причем оно более универсально. -

    -
    -
    -

    Странные свойства размеров

    -

    - Фактические размеры элемента (в целых числах): -

    -
      -
    • clientHeight - высота содержимого без скроллбара
    • -
    • clientWidth - ширина содержимого без скроллбара
    • -
    • clientLeft - размер левой рамки
    • -
    • clientTop - размер верхней рамки
    • -
    -

    - -

    -
    -
    -
    -
    -

    Свойства скроллинга

    -

    - В элементе есть целый набор свойств и методов, связанных со скроллбарами и состоянием прокрутки, - которые иногда могут оказаться полезными: -

    -
      -
    • scrollHeight - высота всего контента, включая видимую и скрытую, выходящую за пределы элемента часть
    • -
    • scrollWidth - то же самое, только про ширину
    • -
    • scrollLeft - на сколько пикселей по горизонтали контент прокручен в элементе
    • -
    • scrollTop - то же самое, только по вертикальной оси
    • -
    -

    - Свойства scrollLeft и scrollTop являются - изменяемыми. С помощью них можно программно прокручивать контент в элементах со скроллбарами. -

    -

    - Но лучше это делать через специальные методы. -

    -
    -
    -

    Методы скроллинга

    -

    - Методы в объекте Element, связанные со скроллингом: -

    -
      -
    • scroll(), scrollTo() - прокрутка к конкретным координатам
    • -
    • scrollBy() - прокрутка на указанное смещение
    • -
    • scrollIntoView() - прокрутка текущего элемента в видимую позицию
    • -
    -

    - С помощью всех этих методов можно настраивать плавную прокрутку, передавая специальный параметр: -

    -
    
    -element.scrollBy({
    -    top: 100,
    -    left: 100,
    -    behavior: 'smooth'       // Обеспечивает плавную прокрутку
    -});
    -                    
    -
    -
    -

    Пример со скроллом

    - -

    - See the Pen - Auto scrolling by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Web components

    -

    - Ещё у объекта Element есть методы для использования веб компонентов, - но мы их не будем рассматривать. -

    -

    - С помощью API веб компонентов можно создавать изолированные и переиспользуемые элементы DOM дерева. -

    -

    - К технология Веб компонентов относятся: -

    -
      -
    • Пользовательские элементы - создание своих HTMLElement классов и тегов
    • -
    • Shadow DOM - изолированное DOM дерево внутри основного документа с непересекающимися стилями
    • -
    • Шаблоны HTML - переиспользуемые шаблоны HTML разметки внутри документа
    • -
    -

    - Подробнее - на MDN -

    -
    -
    -
    -
    -

    Получение элементов

    -

    - Вернёмся к объекту Document. -

    -

    - Этот объект имеет огромное количество разных методов, и одни из ключевых среди них - - методы получения HTML элементов. -

    -

    - До этого мы посмотрели только прямой способ получения элементов DOM дерева по переходам - через навигационные свойства от корня, а также способ получения элемента по id. -

    -

    - Но это была только верхушка айсберга. Способов получения и поиска элементов в DOM дереве гораздо больше. -

    -
    -
    -

    Способы найти элемент

    -

    - Через глобальный объект document можно найти элемент: -

    -
      -
    • по навигационным свойствам
    • -
    • по уникальному id
    • -
    • через специальные перечисления
    • -
    • по атрибуту name
    • -
    • по имени тега
    • -
    • по CSS классу
    • -
    • по CSS селектору
    • -
    • по XPath пути
    • -
    -
    -
    -

    Рассмотренные ранее методы

    -

    - Просто напомним: -

    -

    - Для точечного поэлементного перебора, навигационные свойства parentElement, children, - next-previousElementSibling, first-lastElementChild. -

    -

    - Для получения однозначного элемента по уникальному id: метод document.getElementById(). -

    -
    -
    -

    Специальные перечисления

    -

    - В объекте document содержатся свойства с перечислениями определённых типов - элементов на странице. -

    -
      -
    • all - вообще все элементы, присутствующие на странице
    • -
    • embeds - все элементы embeds
    • -
    • forms - все элементы форм form на странице
    • -
    • images - все изображения img на странице
    • -
    • links - все ссылки a
    • -
    • scripts - все элементы скриптов script
    • -
    -

    - Конечно, пользы в них не много, но всё-таки. -

    -
    -
    -

    Атрибут name

    -

    - Обычно атрибут name используется для именования элементов управления - внутри форм. -

    -

    - И по этому имени эти самые элементы можно и получить в JS коде с помощью метода - document.getElementsByName(). -

    -
    
    -let elements = document.getElementsByName("name");
    -
    -let firstElement = elements[0];
    -                    
    -

    - Важно! Имя элемента name не является уникальным, в отличии от - id. Поэтому метод возвращает не элемент, а коллекцию элементов. -

    -

    - В ней, как правило, содержится всего один элемент (т.к. вряд ли кто-то будет давать нескольким - элементами одинаковые имена), но всё равно нужно не забывать прописывать 0 индекс. -

    -
    -
    -

    Имя тега

    -

    - Более прямолинейный способ получения элемента - просто по имени его тега. -

    -

    - Для этого используется метод document.getElementsByTagName(). -

    -

    - И он, как и предыдущий, возвращает сразу коллекцию элементов. Тут это уместно - элементов с - одним и тем же тегом может быть очень много на странице. -

    -
    
    -let elements = document.getElementsByTagName("tag-name");
    -
    -let element = elements[0];
    -
    -for (let i = 0; i < elements.length; ++i) {
    -    console.log(elements[i]);
    -}
    -                    
    -
    -
    -

    CSS классы

    -

    - Можно получить элементы по имени класса - этот способ тоже вернёт коллекцию элементов. -

    -

    - Это выполняется при помощи метода document.getElementsByClassName(). -

    -
    
    -let elements = document.getElementsByClassName("class-name");
    -
    -let el = elements[0];
    -
    -let elements2 = document.getElementsByClassName("class-name1 class-name2 class-name3");
    -                    
    -

    - Можно искать сразу по нескольким классам - передавая их одним строковым параметром, разделив - пробелами, как классы записываются в самом HTML теге. В таком случае, будут найдет те элементы, - у которых все эти классы присутствуют одновременно. -

    -
    -
    -

    CSS селекторы

    -

    - Вот это, наверное, самый основной способ обращения к элементам на странице. -

    -

    - В CSS, селекторы используются для того чтобы найти элемент(ы) на странице, к которым нужно - применить стиль. -

    -

    - И с помощью тех же самых правил, того же синтаксиса, - используя CSS селекторы - можно найти - элементы из JS кода для программного использования. -

    -

    - Для этого используется 2 метода: -

    -
      -
    • document.querySelectorAll - поиск всех элементов, удовлетворяющих селектору
    • -
    • document.querySelector - поиск первого элемента, удовлетворяющего селектору
    • -
    -
    -
    -

    querySelectorAll и querySelector

    -

    - Разница между этими двумя методами только в том, что querySelector возвращает - только один элемент, и именно сам этот элемент. Пусть даже под селектор будет подходить больше элементов - на странице - он вернёт первый встретившийся. -

    -

    - Метод querySelectorAll ничего не опускает, и возвращает столько элементов, - сколько будет найдено под заданный селектор. Поэтому этот метод возвращает коллекцию элементов, и здесь, - как в предыдущих методах, для доступа к конкретным элементам, нужно использовать индексы. -

    -

    - querySelector удобнее использовать, не нужно писать 0-ой индекс. Но его - следует использовать только при условии, что вы точно знаете, что под ваш селектор будет подходить - один единственный элемент. -

    -
    -
    -

    Универсальность

    -

    - Язык селекторов CSS хорош тем, что он универсален: с помощью него можно искать и по названию тега, - и по идентификатору, и по произвольному атрибуту. -

    -

    - Здесь показаны равнозначные записи: -

    -
    -
    -
    
    -// Классическое получение по id
    -let byId = document.getElementById("id");
    -
    -// Классическое получение по наименованию тега
    -let byTag = document.getElementsByTagName("tag");
    -
    -// Классическое получение по атрибуту name
    -let byName = document.getElementsByName("name");
    -
    -// Классическое получение по классу
    -let byClass = document.getElementsByClassName("class");
    -                            
    -
    -
    -
    
    -// Получение по id через селектор
    -let byId = document.querySelector("#id");
    -
    -// Получение по наименованию тега через селектор
    -let byTag = document.querySelectorAll("tag");
    -
    -// Получение по атрибуту name через селектор
    -let byName = document.querySelectorAll("[name=name]");
    -
    -// Получение по классу через селектор
    -let byClass = document.querySelectorAll(".class");
    -                            
    -
    -
    -
    -
    -

    10 способов написать селектор на один и тот же элемент

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -
    -<body class="body-container">
    -    <header></header>
    -    <main class="container">
    -        <div id="main_part">
    -            <div>
    -                <p class="article">
    -                    <span></span>
    -                    <a href="ae/"></a>
    -                    <span class="target">
    -                        <i>Target</i>
    -                    </span>
    -                </p>
    -            </div>
    -        </div>
    -        <div class="info"></div>
    -    </main>
    -    <footer>
    -        <i></i>
    -    </footer>
    -</body>
    -
    -</html>
    -                            
    -
    -
    -
    
    -let target = document.querySelector(".target > i");
    -
    -target = document.querySelector("a + span > i");
    -
    -target = document.querySelector(".article i");
    -
    -target = document.querySelector(":not(footer) i");
    -
    -target = document.querySelector("span ~ span > i");
    -
    -target = document.querySelector("#min_part span.target i");
    -
    -target = document.querySelector(".article > span:last-child > i");
    -
    -target = document.querySelector("div a[href='ae/'] + .target > i");
    -
    -target = document.querySelector("#main_part > div > p > span.target > i");
    -
    -target = document.querySelector("body > main.container > div#main_part > div > p.article > span.target > i");
    -                            
    -
    -
    -
    -
    -

    Примеры разных способов

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -
    -<body class="body-container">
    -    <header>
    -        <div class="nav_box">
    -            <ul class="navigation">
    -                <li>Пункт меню 1</li>
    -                <li>Пункт меню 2</li>
    -                <li>Пункт меню 3</li>
    -                <li>Пункт меню 4</li>
    -            </ul>
    -        </div>
    -    </header>
    -    <main class="container">
    -        <div>
    -            <form action="/my-handling-form-page" method="post">
    -                <div>
    -                    <label for="name">Имя:</label>
    -                    <input type="text" id="name" name="user_name">
    -                </div>
    -                <div>
    -                    <label for="mail">Э.Почта:</label>
    -                    <input type="email" id="mail" name="user_mail">
    -                </div>
    -                <div>
    -                    <label for="msg">Сообщение:</label>
    -                    <textarea id="msg" name="user_message"></textarea>
    -                </div>
    -                <div class="button">
    -                    <button type="submit">Отправить</button>
    -                </div>
    -            </form>
    -        </div>
    -        <div class="info">
    -            <span>Какой-то текст</span>
    -            <span>2 раза</span>
    -        </div>
    -    </main>
    -</body>
    -
    -</html>
    -                            
    -
    -
    -
    
    -let body = document.body;
    -let header = document.getElementsByTagName("header")[0];
    -let navBox = document.querySelector("header > .nav_box");
    -let navList = document.querySelector("ul.navigation");
    -let navListItem1 = document.querySelector("ul.navigation > li:first-child");
    -let navListItem2 = document.querySelector("ul.navigation > li:nth-child(2)");
    -let navListItem3 = document.querySelector("ul.navigation > li:nth-child(3)");
    -let navListItem4 = document.querySelector("ul.navigation > li:last-child");
    -let main = document.getElementsByTagName("main")[0];
    -let div = document.querySelector("main > div");
    -let form = document.querySelector("form[action='/my-handling-form-page']");
    -let formDiv1 = document.querySelector("form > div:nth-child(1)");
    -let formDiv1_label = document.querySelector("form > div:nth-child(1) > label");
    -let username_input = document.getElementsByName("user_name")[0];
    -let email_input = document.getElementById("mail");
    -// ...
    -                            
    -
    -
    -
    -
    -

    Методы в Element

    -

    - Методы для получения элементов, которые мы только что рассмотрели, на самом деле присутствуют - не только в объекте Document, но и в объекте Element. -

    -

    - По крайней мере, часть из них: -

    -
      -
    • getElementsByTagName()
    • -
    • getElementsByClassName()
    • -
    • querySelectorAll()
    • -
    • querySelector()
    • -
    -

    - Особенностью этих методов в элементах является то, что они производят поиск относительно элемента, - на котором вызываются. Т.е. элементы ищутся только среди потомков от текущего элемента. -

    -
    -
    -

    Магия XPath

    -

    - Когда дела плохи, и возможностей CSS селекторов не хватает, в бой идут XPath - выражения. -

    -
    - XPath (XML Path Language) - специальный язык запросов к XML, предоставляющий - гибкий способ для адресации и поиска различных частей XML документа. Также с помощью XPath выражений - можно проверять узлы на соответствие определённому паттерну расположения. -
    -

    - XPath использует адресную нотацию (как URL) для навигации через древовидную структуру XML документа. -

    -

    - Поскольку HTML является подвидом XML, то XPath отлично применяется и для HTML DOM деревьев. -

    -
    -
    -

    Преимущества перед селекторами

    -

    - CSS селекторы не создавались для программного поиска элементов, они создавались для применения - стилей к элементам страницы во время её парсинга. Поскольку парсинг документа происходит сверху - вниз, в CSS селекторы не было заложено возможности проверки последующих элементов. -

    -

    - Также с помощью CSS селекторов невозможно обращаться к элементам вверх по дереву, - CSS селекторы всегда смотрят в направлении спуска по DOM дереву. -

    -

    - Нельзя писать комплексные селекторы, состоящие из нескольких выражений сразу. Нельзя использовать - относительную адресацию. Нельзя искать по текстовому содержимому. -

    -

    - CSS селекторы на самом деле довольно ограничены. -

    -
    -
    -

    Примеры XPath

    -

    - Например, вот это выражение, поднимется на 2 родителя вверх по дереву, относительно текущего элемент, - и оттуда уже будет искать элемент с атрибутом type, равным submit: -

    -
    
    -let xpathResult = document.evaluate('./../../div//*[@type="submit"]', div); 
    -                    
    -

    - А вот это выражение, будет искать все div-ы, после которых находится div - с классом button: -

    -
    
    -let xpathResult = document.evaluate('//*[following-sibling::div[@class="button"]]', document); 
    -                    
    -
    -
    -

    Примеры XPath

    -

    - Здесь производится поиск по текстовому контенту внутри элемента: -

    -
    
    -let xpathResult = document.evaluate("//span[text()='2 раза']", document); 
    -                    
    -

    - А вот составное выражение, которое будет искать все li внутри header, и все span-ы - внутри main с классом container: -

    -
    
    -let xpathResult = document.evaluate('//header//li | //main[@class="container"]//span', document); 
    -                    
    -
    -
    -

    Синтаксис XPath

    -

    - В XPath используется похожая на URL схема адресации. Адрес строится из составных элементов, - каждый уровень которых разделяется символом /. К основным выражениям XPath относятся: -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    tagNameВыбирает все теги tagName
    /Если стоит в начале - поиск от корневого узла
    //Поиск среди всех потомков текущего элемента
    .Текущий узел
    ..Родитель текущего узла
    @Выбор атрибута
    *Выбор любого элемента
    @*Выбор любого атрибута
    -
    -
    -

    Примеры

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    imgВыбирает все изображения img в документе (глобально)
    aside/imgВсе img, которые находятся прямо внутри aside
    //imgВыбирает все изображения img в документе (относительно)
    aside//imgВыбирает все img, которые находятся внутри aside, на любом уровне вложенности
    //@hrefВыбирает все атрибуты href (именно сами атрибуты)
    aside/*Выбирает всех потомков элемента aside
    //div[@*]Выбирает все элементы div, у которых есть хотя бы один атрибут
    -

    - Глобально - выполняет поиск всегда во всём документе. -

    -

    - Относительно - выполняет поиск относительно текущего элемента. -

    -
    -
    -

    Предикаты

    -

    - Предикаты - это условия, или ограничения/уточнения, которые накладываются на искомый элемент. С - помощью предикатов происходит дополнительная фильтрация элементов. -

    -
    - Предикаты записываются в квадратных скобках после пути к элементу. -
    -

    - Вот здесь был предикат: //div[@*] -

    -

    - Разбирая этот пример - элемент, который мы ищем, записывается до квадратных скобок - мы ищем div, - и поиск вернёт нам div(ы). -

    -

    - В квадратных скобках описывается уточнение, какой именно div, мы хотим получить, - - то div, у которого есть атрибуты. -

    -
    -
    -

    Примеры предикатов

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //ul/li[1]Выбирает первый li из списка (нумерация с 1, они сумасшедшие)
    //ul/li[last()]Последний элемент в списке
    //ul/li[last() - 1]Предпоследний элементы в списке
    //ul/li[position() < 4]Выбирает элементы списка, чьи номера меньше 4. Т.е. 3 первых элемента списка
    //div[@contenteditable]Выбирает div, у которого есть атрибут contenteditable
    //div[@class='top-block']Выбирает div, у которого есть только класс top-block
    //div[span > 12.0]/aВыбирает ссылку a, которая находится внутри div-а, внутри которого есть - элемент span с числовым значением больше 12.0
    -
    -
    -

    Функции XPath

    -

    - На предыдущем слайде в предикате использовались функции last(), - position(), а ещё раньше - функция text(), - для обращения к текстовому содержимому элемента. -

    -

    - И таких встроенных функций в XPath целая куча. Например: -

    -
      -
    • boolean() - вычисляет логическое выражение
    • -
    • concat() - конкатенация строк
    • -
    • choose() - выражение if-else
    • -
    • contains() - проверка вхождения подстроки
    • -
    • not() - инвертирует булево значение
    • -
    • number() - конвертирует объект в число
    • -
    • sum() - получает сумма числовых значений всех потомков
    • -
    -

    - Подробнее о них всех можно прочитать - на MDN. -

    -
    -
    -

    Оси

    -

    - В XPath существует дополнительный механизм, с помощью которого можно настраивать, в каком - направлении будет происходить поиск элементов. Этот механизм называется оси. -

    -

    - Всего в XPath существует 13 осей, каждая из которых представляет собой какой-либо вид отношения - к текущему узлу. -

    -

    - Мы уже видели один пример использования осей, вот здесь: -

    -
    
    -let xpathResult = document.evaluate('//*[following-sibling::div[@class="button"]]', document); 
    -                    
    -

    - Ось задаётся через специальный префикс, после которого идут 2 знака двоеточия: - axes-name:: -

    -
    -
    -

    Список осей

    -

    - Основные оси: -

    -
      -
    • ancestor - предки
    • -
    • attribue, сокращённо @ - атрибуты текущего узла
    • -
    • child - потомки, ось по умолчанию
    • -
    • following - все элементы, идущие в документе после текущего узла
    • -
    • following-sibling - все последующие соседи
    • -
    • preceding - все элементы, идущие в документе до текущего узла
    • -
    • preceding-sibling - все предыдущие соседи
    • -
    -
    -
    -

    Примеры с осями

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -
    -<body class="body-container">
    -    <header>
    -        <div class="nav_box">
    -            <ul class="navigation">
    -                <li>Пункт меню 1</li>
    -                <li>Пункт меню 2</li>
    -                <li>Пункт меню 3</li>
    -                <li>Пункт меню 4</li>
    -            </ul>
    -        </div>
    -    </header>
    -    <main class="container">
    -        <div>
    -            <form action="/my-handling-form-page" method="post">
    -                <div>
    -                    <label for="name">Имя:</label>
    -                    <input type="text" id="name" name="user_name">
    -                </div>
    -                <div>
    -                    <label for="mail">Э.Почта:</label>
    -                    <input type="email" id="mail" name="user_mail">
    -                </div>
    -                <div>
    -                    <label for="msg">Сообщение:</label>
    -                    <textarea id="msg" name="user_message"></textarea>
    -                </div>
    -                <div class="button">
    -                    <button type="submit">Отправить</button>
    -                </div>
    -            </form>
    -            <aside>
    -                Нафантазируйте здесь панель
    -            </aside>
    -        </div>
    -        <div class="info">
    -            <span>Какой-то текст</span>
    -            <span>2 раза</span>
    -        </div>
    -    </main>
    -</body>
    -
    -</html>
    -                            
    -
    -
    -
    
    -// Найдёт div-ы, у которых в предках есть main, а также впереди присутствует другой div
    -let xpathResult = document.evaluate('//div[ancestor::main][following-sibling::div]', document);
    -
    -// Найдёт div-ы, у которых в предках есть div с классом info
    -xpathResult = document.evaluate('//span[ancestor::div[@class="info"]]', document);
    -
    -// Найдёт элементы списка li, которые окружены соседями (не первые, и не последние у родителя)
    -xpathResult = document.evaluate('//li[preceding-sibling::*][following-sibling::*]', document);
    -
    -// Найдёт все div-ы, у которых в предках есть form, за которой следует aside.
    -// Также искомые div-ы не должны содержать класс button
    -xpathResult = document.evaluate('//div[ancestor::form[following-sibling::aside]][not(@class="button")]', document); 
    -                            
    -
    -
    -
    -
    -

    Составные выражения

    -

    - С помощью знака прямой черты | можно объединять несколько XPath выражений - в одно, для совмещённого поиска элементов по нескольким селекторам. -

    - - - - - - - - - - - - - -
    //header//img | //main//imgВыбирает все img внутри header И все img внутри main
    /*//a | /*//linkВыбирает все ссылки a и link
    /html/head/title | //*[@title]Выбирает элемент title из head-а и все элементы с атрибутом title
    -
    -
    -

    Использование в JS

    -

    - Ну, вы уже поняли, что поиск по XPath выражению выполняется с помощью метода - document.evaluate(). -

    -
    
    -let xpathResult = document.evaluate("XPath-expression", contextNode);
    -                    
    -

    - У этого метода 2 обязательных аргумента: -

    -
      -
    • 1 аргумент - строка с самим XPath выражением
    • -
    • 2 аргумент - элемент DOM дерева, относительно которого это выражение будет просчитываться
    • -
    -

    - Т.е. используя второй параметр, можно выполнять поиск не из корня DOM дерева, а из любого места. -

    -
    -
    -

    XPath result

    -

    - Метод document.evaluate() возвращает специальный объект - XPathResult. -

    -

    - XPathResult - это итератор, а не объект-коллекция, как мы привыкли. - Элементы из XPathResult нельзя получить по индексам, или через цикл for. -

    -

    - Элементы этого объекта извлекаются по очереди, с помощью вызова метода iterateNext(). -

    -

    - Каждый вызов метода iterateNext() возвращает следующий элемент из результата, - пока они не закончатся. Дальше будет возвращаться значение null. -

    -
    -
    -

    Перебор элементов XPathResult

    -

    - Удобнее всего перебирать элементы из XPathResult с помощью цикла while: -

    -
    
    -let xpathResult = document.evaluate("/html/body/div[4]/div[2]/div/div/div/div[3]/div/span[2]/span", document);
    -
    -let element = null;
    -while (element = xpathResult.iterateNext()) {
    -    console.log(element);
    -}
    -                    
    -
    -
    -
    -
    -

    Объект HTMLElement

    -

    - Объект HTMLElement - это следующее звено в цепочке наследования HTML элементов, - после Node и Element. -

    - -
    -
    -

    Редактируемость

    -

    - Любой HTMLElement может быть переведён в режим редактирования. -

    -

    - Режим редактирования позволяет пользователю вручную изменять текстовое содержимое элемента, - как в текстовом редакторе. -

    -

    - Задать режим редактирования можно с помощью атрибута contentEditable, - или же через одноимённое свойство. -

    -

    - Свойство contentEditable может принимать 2 значения: "true" и "false". -

    -

    - Когда значение "true" - текст внутри элемента можно вручную редактировать. -

    -
    -
    -

    Редактируемость

    -

    - Эта особенность часто используется в HTML для создания из div-ов многострочных редактируемых - текстовых полей. -

    -

    - Проверить, редактируемый ли элемент, или нет, можно с помощью свойства - isContentEditable. -

    -
    
    -let div = document.querySelector("div.container");
    -
    -if (div.isContentEditable) {
    -    
    -    div.contentEditable = "true";
    -
    -}
    -                    
    -
    -
    -

    Документ. Режим дизайнера

    -

    - В document есть ещё такое интересное свойство - designMode. -

    -

    - С помощью этого свойства можно переключить ВСЕ элементы на странице в режим редактирования. -

    -

    - Это свойство принимает 2 значения: "on" - для активации, и "off" для деактивации. -

    -

    - В дополнение ко всему, в режиме редактирования можно не только менять текст, но и выполнять более - продвинутые операции по форматированию текста: выравнивания, отступы, цвета и т.д. -

    -
    -
    -

    Демонстрация редактируемости

    - -

    - See the Pen - Use execCommands to edit HTML content in your browser by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Пользовательские атрибуты

    -

    - В объекте HTMLElement добавляется поддержка пользовательских атрибутов. -

    -

    - Пользовательские атрибуты - это атрибуты, которые придумывает сам программист, для своих нужд. Как правило, - для хранения какой-нибудь нужной информации внутри элементов. -

    -

    - Пользовательские атрибуты в HTML разметке обязаны начинаться на префикс data-: -

    -
    
    -<a data-myattr="42"></a>
    -
    -<div class="item-title-area" data-test-id="item-title-area"></div>
    -
    -<button data-item="pen" data-hashid="ROwmmp" class="button button-editor-outline loves heart-button loved-0" title="Love"></button>
    -                    
    -
    -
    -

    Доступ в коде

    -

    - Пользовательские атрибуты, прописанные в HTML, доступны в JS через специальное свойство - dataset, как обычные ключи в объекте. Причём, в коде, префикс - data- у этих атрибутов отсутствует. -

    -

    - Т.е. если в HTML у вас прописан пользовательский атрибут, скажем, data-myid, - то в JS оно будет доступно как dataset.myid у этого DOM элемента. -

    -

    - Соответственно, если изменять значение в свойстве dataset.myid, то в HTML - разметке будет изменяться значение атрибута data-myid. -

    -

    - С помощью dataset можно и добавлять новые пользовательские атрибуты. Добавление - нового ключа new-key повлечёт за собой появление атрибута - data-new-key в HTML разметке. -

    -
    -
    -

    Ещё свойства для размеров

    -

    - В HTMLElement добавляется еще парочка странных свойств для получения - фактических размеров элементов: -

    -
      -
    • offsetParent - ближайший позиционированный родитель
    • -
    • offsetTop - расстояние сверху до offsetParent
    • -
    • offsetLeft - расстояние слева до offestParent
    • -
    • offsetWidth - ширина контента с рамкой
    • -
    • offsetHeight - высота контента с рамкой
    • -
    - -
    -
    -

    Методы HTMLElement

    -

    - HTMLElement добавляет всего 4 новых метода: -

    -
      -
    • click() - симуляция нажатия мыши
    • -
    • focus() - взятие в фокус
    • -
    • blur() - потеря фокуса
    • -
    • forceSpellCheck() - принудительно включает проверку правописания
    • -
    -
    -
    -

    Пример с фокусом

    - -

    - See the Pen - Remove focus from a text input by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -

    Ссылки

    -

    - Любую самую актуальную информацию по всему в Вебе можно найти - на MDN -

    -

    - Лучший ресурс по CSS и практикам его использования - CSS Trics -

    -
    -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/4_cssom/img/computed.jpg b/dist/lecture/4_cssom/img/computed.jpg deleted file mode 100644 index f469ea5..0000000 Binary files a/dist/lecture/4_cssom/img/computed.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/cssrule.jpg b/dist/lecture/4_cssom/img/cssrule.jpg deleted file mode 100644 index d050ac6..0000000 Binary files a/dist/lecture/4_cssom/img/cssrule.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/cssrules.jpg b/dist/lecture/4_cssom/img/cssrules.jpg deleted file mode 100644 index e7b99a6..0000000 Binary files a/dist/lecture/4_cssom/img/cssrules.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/one_stylesheet.jpg b/dist/lecture/4_cssom/img/one_stylesheet.jpg deleted file mode 100644 index f0425da..0000000 Binary files a/dist/lecture/4_cssom/img/one_stylesheet.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/rules_for_element.jpg b/dist/lecture/4_cssom/img/rules_for_element.jpg deleted file mode 100644 index 0b1d714..0000000 Binary files a/dist/lecture/4_cssom/img/rules_for_element.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/rules_for_element_2.jpg b/dist/lecture/4_cssom/img/rules_for_element_2.jpg deleted file mode 100644 index 302b823..0000000 Binary files a/dist/lecture/4_cssom/img/rules_for_element_2.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/img/stylesheets.jpg b/dist/lecture/4_cssom/img/stylesheets.jpg deleted file mode 100644 index 32b7add..0000000 Binary files a/dist/lecture/4_cssom/img/stylesheets.jpg and /dev/null differ diff --git a/dist/lecture/4_cssom/index.html b/dist/lecture/4_cssom/index.html deleted file mode 100644 index e9d9164..0000000 --- a/dist/lecture/4_cssom/index.html +++ /dev/null @@ -1,1215 +0,0 @@ - - - - - - CSS Object Model - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    CSSOM

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    - -
    -
    -

    CSSOM

    -

    - Да, есть такое название -
    -
    -

    CSSOM

    -

    - До этого момента мы рассматривали DOM API, - набор функций, который позволяет программно - взаимодействовать с HTML документом. -

    -

    - Мы не касались стилей, даже когда работали с классами. CSS классы уже были - созданы заранее, а мы лишь подключали/отключали их от HTML элементов. Т.е. - просто работали с атрибутом class, а атрибуты это часть DOM. -

    -

    - CSSOM же позволяет изменять именно стили. -

    -
    -
    -

    CSSOM

    -
    - CSS Object Model (CSSOM) - это API, набор функций - и объектов, которые позволяют взаимодействовать с CSS через JavaScript. -
    -

    - Это то же, что и DOM, только для CSS, а не для HTML. -

    -

    - С помощью CSSOM можно получать и динамически изменять стили, программно - создавать наборы стилей и CSS классы. -

    -
    -
    -
    -
    -

    Встроенные стили

    -

    - Самый главный и удобный способ взаимодействия с CSS свойствами - через - свойство style, которое есть у всех HTML элементов - (объект HTMLElement). -

    -

    - Например: -

    -
    
    -document.body.style.background = "lightblue";
    -
    -let div = document.getElementsByTagName("div");
    -console.log(div.style.height);
    -                    
    -
    -
    -

    Свойство style

    -

    - Через это JS свойство можно получать значение и изменять любое CSS свойство, у любого - элемента на странице. -

    -

    - Вот по такому формату: -

    -
    
    -element.style.propertyName
    -                    
    -
    -
    -

    Объект style

    -

    - Свойство style содержит в себе объект CSSStyleDeclaration - (или CSS2Properties, в зависимости от браузера). -

    -

    - Это просто объект, в котором есть ключи для большинства свойств, существующих в CSS. -

    -

    - Если заглянуть в него, то можно будет увидеть этот огромный перечень свойств. -

    -
    -
    -

    Правила наименования

    -

    - Имена многих свойств записаны в объекте style так же, как и в CSS. -

    -

    - Но в некоторых именах в CSS встречаются знаки тире "-", а в JS этот символ нельзя использовать для - названий переменных, поэтому при переносе свойств в JS знаки тире пропадают, и вместо них следующая - буква прописывается заглавной. -

    -

    - Трансляция имён происходит по такому принципу: -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    CSSJS
    background-colorbackgroundColor
    border-radiusborderRadius
    box-sizingboxSizing
    grid-row-gapgrdidRowGap
    min-widthminWidth
    -
    -
    -

    Альтернативная запись

    -

    - Также к отдельным свойствам внутри объекта style можно обращаться и - через нотацию квадратных скобок. -

    -
    
    -let div1 = document.getElementById("test_div");
    -div1.style["width"] = "256px";
    -                    
    -

    - Причём в это случае можно использовать не транслированные имена без знаков тире, а оригинальные - названия свойств из CSS: -

    -
    
    -div1.style["background-color"] = "#123456";
    -div1.style["margin-top"] = "2vw";
    -div1.style["text-align"] = "center";
    -                    
    -
    -
    -

    Пример с inline стилями

    - -

    - See the Pen - Using the style property to change the background color by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Ещё один

    - -

    - See the Pen - Random colors flow by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Объект CSSStyleDeclaration

    -

    - Свойство style хранит объект CSSStyleDeclaration. -

    -

    - Этот объект будет встречаться не только в этом свойстве, но и в нескольких других местах далее - - везде, где нужно хранить полный перечень CSS свойств элемента. -

    -

    - В нём есть парочка дополнительных методов: -

    -
      -
    • setProperty() - установка значения CSS свойства
    • -
    • getPropertyPriority() - получение приоритета свойства
    • -
    • removeProperty() - удаление значения CSS свойства
    • -
    -

    - И свойство cssText - строка, которая хранится в атрибуте style - элемента. -

    -
    -
    -

    Метод setProperty

    -

    - Метод setProperty() является функциональной альтернативой для - задания значения CSS свойству. -

    -

    - Он принимает 2 обязательных строковых аргумента: название свойства и значение. -

    -
    
    -style.setProperty("property-name", "value");
    -                    
    -

    - Например, вот так: -

    -
    
    -let span = document.getElementById("my_id");
    -span.style.setProperty("height", "300px");
    -span.style.setProperty("line-height", "300px");
    -                    
    -
    -
    -

    Работа с приоритетом

    -

    - С помощью третьего дополнительного параметра метода setProperty - можно установить приоритетность свойства: -

    -

    - Допускается 2 варианта значения: "important" и "". -

    -
    
    -// Устанавливает повышенный приоритет свойства
    -span.style.setProperty("width", "10%", "important");
    -// Устанавливает обычный приоритет
    -span.style.setProperty("margin","5px 8px", "");
    -                    
    -

    - Это единственный способ работы с приоритетом CSS свойств из JS. Через короткую форму записи - назначение свойства с приоритетом работать не будет: -

    -
    
    -span.style.caretColor = "white !important";     // Ноль результата
    -                    
    -
    -
    -

    Метод getPropertyPriority

    -

    - Метод getPropertyPriority() даёт возможность проверить приоритет - конкретного CSS свойства. -

    -
    
    -let priority = style.getPropertyPriority("property-name");
    -                    
    -

    - Единственным параметром принимает имя проверяемого свойства, возвращает пустую строку или - строку "important". -

    -
    
    -let img = document.images[0];
    -let prior = img.style.getPropertyPriority("scrollBehavior");
    -if (prior === "important") {
    -    console.log("scrollBehavior is set to important!");
    -}
    -                    
    -
    -
    -

    Метод removeProperty

    -

    - Метод removeProperty() позволяет сбросить (обнулить) значение - указанного CSS свойства. -

    -
    
    -let oldValue = style.removeProperty("property-name");
    -                    
    -

    - Параметром передаётся название обнуляемого свойства, возвращаемым значением приходит - значение, которое было в свойстве перед обнулением. -

    -
    
    -let p = document.querySelector("p");
    -p.style.setProperty("border-radius", "2px", "important");
    -console.log(p.style.borderRadius);      // "2px"
    -console.log(p.style.getPropertyPriority("border-radius"));  // "important"
    -
    -let old = p.style.removeProperty("border-radius");  // old = "2px"
    -console.log(p.style.borderRadius);      // ""
    -console.log(p.style.getPropertyPriority("border-radius"));  // ""
    -                    
    -
    -
    -

    Свойство cssText

    -

    - В свойстве cssText хранится строка, представляющая собой - встроенный стиль элемента. Иначе говоря, это то же, что и значение атрибута style. -

    -

    - Если в HTML: -

    -
    
    -<span class="sent" style="heigth: 20px; margin: 5px 2px; color: black">Sentence - Предложение</span>
    -                    
    -

    - То в свойстве cssText у стиля этого элемента будет: -

    -
    
    -let sentSpan = document.querySelector("span.sent");
    -let inlineStyles = sentSpan.style.cssText;
    -console.log(inlineStyles);          // "heigth: 20px; margin: 5px 2px; color: black"
    -if (inlineStyles != "") {
    -    console.log("Element has inline styles");
    -}
    -                    
    -
    -
    -
    -
    -

    Inline стили

    -

    - Свойство style - очень мощный инструмент, с помощью него можно создавать - настоящую динамику и сложную анимацию на странице. -

    -

    - Но у этого свойства есть одна проблема: оно работает чисто со встроенными (inline) - стилями. -

    -
    - Inline стилями называются стили, которые прописаны прямо внутри HTML элемента. -
    -

    - В документе это выглядит вот так: -

    -
    
    -<span class="algolia-autocomplete" style="position: relative; display: inline-block; direction: ltr;"></span>
    -                    
    -
    -
    -

    Проблема

    -

    - Если задать значение inline свойству, и затем прочитать его, всё будет нормально: -

    -
    
    -// HTML:  <body>
    -document.body.style.backgroundColor = "rgb(100, 100, 100)";
    -
    -// Теперь HTML: <body style="background-color: rgb(100, 100, 100)">
    -console.log(document.body.style.backgroundColor);
    -// Выведет "rgb(100, 100, 100)"
    -                    
    -

    - А что если свойство заднего фона будет задано стилями, например, через класс? -

    -
    
    -// CSS:  .ct { backgroundColor: darkblue; }
    -// HTML:  <body class="ct">
    -
    -console.log(document.body.style.backgroundColor);  
    -// Выведет ""
    -                    
    -
    -
    -

    Ограничения

    -

    - Свойство style очень удобное и незаменимое. -

    -

    - Но оно обладает весьма серьёзными ограничениями. -

    -

    - Это свойство работает только с inline стилями, и никак не контактирует со всеми - остальными формами задания CSS свойств. -

    -

    - Этим свойством style удобно пользоваться, когда нужно изменить стиль. -

    -

    - А вот с целью получения текущих значений CSS свойств, оно поможет слабо. Для - этого нужен другой подход. -

    -
    -
    -
    -
    -

    Вычисленные свойства

    -

    - CSSOM предоставляет глобальную функцию getComputedStyle(), находящуюся - прямо в window(не знаю, что она там забыла). -

    -

    - И эта функция позволяет получить - полную таблицу вычисленных на текущий момент времени свойств - для любого элемента HTML страницы. -

    -

    - Через эту функцию нельзя изменять значения свойств элемента, можно только получать. -

    -
    -
    -

    getComputedStyle

    -

    - Эта функция, getComputedStyle(), принимает в качестве параметра объект - элемента, чьи CSS свойства нужно получить, и возвращает такой же объект, какой содержится в свойстве - style, т.е. объект с ключами для всех CSS свойств, только readonly и - с вычисленными значениями. -

    -
    
    -let computed = getComputedStyle(element);
    -
    -let div = document.getElementsByTagName("div");
    -let compForDiv = getComputedStyle(div);
    -                    
    -
    -
    -

    Вычисленные значения

    -

    - Их также можно видеть в Инструментах Разработчика на специальной панели: -

    - -
    -
    -

    Вычисленные значения

    -

    - Вычисленные значения свойств отражают состояние стиля отображения элемента - на момент их получения. Если значение CSS свойства задаётся формулой или относительным выражением, - то здесь будет выдано уже рассчитанное значение, а не сама формула. -

    -
    -
    -

    Примеры функционирования

    -

    - Если у нас есть div, у которого с помощью CSS класса задан цвет фона - background-color: rgb(10, 16, 242). -

    -

    - Тогда в вычисленных значениях для элемента можно будет получить это значение: -

    -
    
    -let div = document.getElementById("main");
    -let cmp = getComputedStyle(div);
    -
    -console.log(cmp.backgroundColor);      // "rgb(10, 16, 242)"
    -
    -// Ошибка - нельзя изменять вычисленные свойства
    -cmp.backgroundColor = "rgb(111, 147, 80)";
    -
    -                    
    -
    -
    -

    Особенности вычисленных значений

    -

    - А теперь представим, что свойство background-color для нашего div-а - прописано следующим образом: background-color: blue. -

    -

    - Но в getComputedStyle() оно будет выглядеть уже не так, как - было прописано в CSS: -

    -
    
    -let div = document.getElementById("main");
    -let cmp = getComputedStyle(div);
    -
    -console.log(cmp.backgroundColor);      // "rgb(0, 0, 255)"
    -// blue -> rgb(0, 0, 255)
    -
    -                    
    -

    - И так будет для всех остальных форм записи цвета - вернётся значение в формате rgb/rgba. -

    -
    -
    -

    Вычисленные размеры

    -

    - Это может стать проблемой при получении размеров: -

    -

    - Допустим, в CSS для элемента задана ширина как width: 60%. -

    -
    
    -let div = document.getElementById("main");
    -let cmp = getComputedStyle(div);
    -
    -console.log(cmp.width);      // 782px
    -// 60% -> 782px
    -                    
    -

    - Любые размеры будут показаны в пикселях. Вне зависимости от их формы записи в оригинальном CSS. - Высота, ширина, внутренние/внешние отступы, смещение, граница - все свойства, в которых - фигурируют размеры, будут рассчитаны в пикселях. -

    -
    -
    -

    Значения по умолчанию

    -

    - А теперь попробуем заглянуть в свойство backgroundColor без задания цвета в CSS, - т.е. когда в CSS просто не прописан задний фон для элемента. -

    -
    
    -let div = document.getElementById("main");
    -let cmp = getComputedStyle(div);
    -
    -console.log(cmp.backgroundColor);      // rgba(0, 0, 0, 0)
    -// ничего -> rgba(0, 0, 0, 0)
    -                    
    -

    - Откуда взялось это значение? Это значение по умолчанию. -

    -

    - В объекте, который возвращает функция getComputedStyle(), все свойства - проинициализированы и имеют какое-то значение. Если свойство не было прописано в CSS, то для него - используется значение по умолчанию. -

    -
    -
    -

    Суть вычисленных свойств

    -

    - Вычисленные свойства не отражают все CSS свойства и наборы стилей, привязанные к элементу. - Они показывают, чему равны значения CSS свойств элемента на текущий момент. -

    -

    - Например, если к элементу применяется несколько наборов стилей с перекрывающимися свойствами, - с помощью getComputedStyle() нельзя узнать о тех свойствах, - которые были подавлены более приоритетными селекторами. -

    -
    -
    -

    Стили псевдоэлементов

    -

    - С помощью функции getComputedStyle() также можно получать вычисленные - значения свойств псевдоэлементов. -

    -

    - Для этого в функцию нужно передать второй параметр - строку с типом псевдоэлемента. -

    -
    
    -let computed = getComputedStyle(element, pseudoType);
    -
    -let cmp1 = getComputedStyle(div, "::before");
    -let cmp2 = getComputedStyle(div, "::placeholder");
    -let cmp3 = getComputedStyle(div, "::selection");
    -let cmp4 = getComputedStyle(div, "::first-letter");
    -                    
    -

    - И это, к слову, единственный в JS способ получения значений для псевдоэлементов. -

    -
    -
    -

    Пример с псевдоэлементами

    -
    -
    -
    
    -.box::before {
    -    content: "Example";
    -    display: block;
    -    background-color: rgb(13, 239, 120);
    -    width: 50px;
    -}
    -.box::placeholder {
    -    content: "Please, enter your name";
    -    display: block;
    -    color: #A2A2A2;
    -    margin-left: 30px;
    -}
    -                            
    -
    -
    -
    
    -let box = document.querySelector(".box");
    -
    -let beforeStyle = window.getComputedStyle(box, "::before");
    -console.log(beforeStyle.width);        
    -// 50px  
    -
    -let placeholderStyle = window.getComputedStyle(box, "::placeholder");
    -console.log(placeholderStyle.content);
    -// "Please, enter your name"
    -
    -                            
    -
    -
    -
    -
    -
    -
    -

    Анимация движения

    -

    - Есть 2 способа создания для элемента анимации движения по странице. -

    -
      -
    • На чистом CSS
    • -
    • И при помощи JS
    • -
    -

    - CSS используется для более простой анимации, когда траекторию перемещения можно описать несколькими - точками и она не меняется по ходу работы программы. Простая интерактивная анимация создаётся через CSS - свойство transition, более сложная и автоматическая - через свойство - animation и ключевые кадры. -

    -

    - Через JS анимацию нужно делать только тогда, когда траектория движения элементов на странице - сложна, непредсказуема, или очень сильно варьируется в зависимости от действий пользователя. -

    -
    -
    -

    Позиционирование

    -

    - Любая анимация реализуется через изменение CSS свойств элемента. Но в CSS нет такого понятия, - как координаты элемента. Но зато есть свойства для задания относительного положения на странице - - top, right, bottom - и left. Именно они используются в роли координат элемента. -

    -

    - Но эти CSS свойства доступны только для жестко позиционированных элементов. Поэтому для элементов, - движение которых нужно анимировать, обычно используется абсолютная или фиксированная позиция. -

    -
    -
    -

    Анимация через CSS

    - -

    - See the Pen - CSS Animation by Transition by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Анимация через JS

    - -

    - See the Pen - JS Animation by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Таблицы стилей CSS

    -

    - CSSOM даёт возможности программно работать не только с CSS свойствами - конкретных HTML элементов, но и предоставляет функционал для чтения и записи в любые таблицы/наборы - стилей. -

    -

    - Под таблицами стилей (Stylesheets) - подразумеваются CSS файлы с набором прописанных стилей с селекторами, а также встроенные в HTML - теги style. -

    -
    -
    -

    Список таблиц стилей

    -

    - Самый простой способ программного доступа к таблицам стилей - через свойство - document.styleSheets. -

    -
    - Свойство document.styleSheets содержит массив (не стандартный - Array) из всех подключенных к текущему документу наборов стилей. -
    -

    - Каждый отдельный CSS файл, подключенный тегом link, считается набором стилей. -

    -

    - Каждый тег style внутри HTML документа также считается самостоятельным набором стилей. -

    -
    -
    -

    document.styleSheets

    -

    - Этот объект имеет стандартное свойство length, а к отдельным его - элементам можно обращаться по индексу. -

    -
    
    -document.styleSheets
    -                    
    -

    - Например: -

    -
    
    -console.log("Количество таблиц стилей подключенных к документу:");
    -console.log(document.styleSheets.length);
    -
    -console.log("Список таблиц стилей:");
    -for (let i = 0; i < document.styleSheets.length; ++i) {
    -
    -    console.log(`${i}-ая таблица стилей:`);
    -    console.log(document.styleSheets[i]);
    -}
    -                    
    -
    -
    -

    Список таблиц стилей

    -
    
    -console.log(document.styleSheets);
    -                    
    -

    - На выводе это может выглядеть как-нибудь так: -

    - -
    -
    -

    Объект CSSStyleSheet

    -

    - Элементы этого массива являются объектами CSSStyleSheet, - каждый из которых выглядит следующим образом: -

    -
    
    -console.log(document.styleSheets[2]);
    -                    
    - -
    -
    -

    Свойства CSSStyleSheet

    -

    - Основные свойства, которые содержит объект CSSStyleSheet: -

    -
      -
    • disabled - отключена ли таблица стилей
    • -
    • href - адрес CSS файла, если он есть
    • -
    • media - список медиа, для которых будет применяться набор стилей - (атрибут media в link)
    • -
    • ownerNode - HTML элемент, через который таблица стилей подключена
    • -
    • title - подпись для таблицы стилей (атрибут title в link)
    • -
    • cssRules/rules - - перечисление всех CSS правил
    • -
    -

    - Все свойства, кроме disabled и cssRules, - являются readonly, только для чтения. -

    -
    -
    -

    Пример со свойством disabled

    -

    - Ниже представлена функция, с помощью которой можно включать/выключать любые таблицы стилей на странице: -

    -
    
    -function cssEditor() {
    -
    -    let panel = document.createElement("div");
    -    panel.innerHTML = `<div id="pan1" style="background: rgb(200,200,200); width: 25%; height: auto; border: 1px solid black;
    -                        display: flex; flex-flow: column nowrap; position: fixed; bottom: 20px; right: 20px;"></div>`;
    -    document.body.appendChild(panel);
    -    panel = panel.firstElementChild;
    -
    -    function appendItem(stylesheet) {
    -
    -        let newItem = document.createElement("div");
    -        newItem.style.background = "white";
    -        newItem.style.margin = "3px 6px";
    -        newItem.style.width = "calc(100% - 12px)";
    -        newItem.style.height = "20px";
    -        newItem.style.cursor = "pointer";
    -        newItem.style.display = "flex";
    -        newItem.style.flexFlow = "row nowrap";
    -        let indicator = document.createElement("span");
    -        indicator.style.width = "20px";
    -        indicator.style.height = "20px";
    -        indicator.style.marginRight = "30px";
    -        indicator.style.borderRadius = "50%";
    -        indicator.style.border = "1px solid black";
    -        newItem.appendChild(indicator);
    -        let text = document.createElement("span");
    -        text.style.height = "20px";
    -        text.style.lineHeight = "20px";
    -        text.innerHTML = stylesheet.href != null ? stylesheet.href : "inline";
    -        newItem.appendChild(text);
    -        panel.appendChild(newItem);
    -
    -        let updateColorStatus = function() {
    -            
    -            if (stylesheet.disabled) {
    -                indicator.style.background = "red";
    -            } else {
    -                indicator.style.background = "green";
    -            }
    -        }
    -        updateColorStatus();
    -        newItem.addEventListener("click", function() {
    -
    -            stylesheet.disabled = !stylesheet.disabled;
    -            updateColorStatus();
    -
    -        });
    -    }
    -    for (let i = 0; i < document.styleSheets.length; ++i) {
    -        appendItem(document.styleSheets[i]);
    -    }
    -
    -}
    -cssEditor();
    -                    
    -
    -
    -
    -
    -

    Свойство cssRules

    -

    - Но самое интересное в объекте CSSStyleSheet - это свойство - cssRules. -

    -

    - Свойство cssRules хранит в себе перечисление всех CSS правил, - описанных в соответствующей таблице стилей, включая обычные блоки с селекторами, @-блоки, - медиа-выражения, блоки кадров анимации и т.д. - всё, что бывает в CSS файлах. -

    -
    -
    -

    CssRules

    -

    - Свойство cssRules хранит коллекцию объектов CSSStyleRule, - которые представляют собой конкретные блоки CSS правил. -

    - -
    -
    -

    Объект CSSStyleRule

    -

    - Объект CSSStyleRule предназначен для описания отдельного CSS правила, - из которых состоят таблицы стилей. -

    - -
    -
    -

    Свойства объекта CSSStyleRule

    -

    - Основные свойства объекта CSSStyleRule: -

    -
      -
    • type - тип CSS правила
    • -
    • cssText - текст CSS правила
    • -
    • selectorText - текст селектора
    • -
    • style - объект со свойствами CSS
    • -
    • styleMap - другой объект со свойствами CSS
    • -
    -
    -
    -

    Типы CSS правил

    -

    - В свойстве type записано число, которое показывает к какому типу - CSS блоков относится текущее правило. Всего есть 16 типов CSS правил, среди основных: -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    КодКонстантаОписание
    1CSSRule.STYLE_RULEСтандартный набор CSS свойств с селектором
    3CSSRule.IMPORT_RULEЭлемент @import
    4CSSRule.MEDIA_RULEМедиа-выражение
    5CSSRule.FONT_FACE_RULEБлок шрифта
    6CSSRule.PAGE_RULEПравило @page для печати
    7CSSRule.KEYFRAMES_RULEКадры анимации
    -
    -
    -

    Пример с type

    -

    - Следующая функция будет искать все медиа-выражения во всех подключенных к документу таблицах стилей: -

    -
    
    -function showAllMediaQuery() {
    -
    -    let count = 0;
    -    let i = 0;
    -    try {
    -        for (i = 0; i < document.styleSheets.length; ++i) {
    -
    -            let stylesheet = document.styleSheets[i];
    -            for (let j = 0; j < stylesheet.cssRules.length; ++j) {
    -
    -                let rule = stylesheet.cssRules[j];
    -                if (rule.type === CSSRule.MEDIA_RULE) {
    -                    console.log(rule);
    -                    count++;
    -                }
    -            }
    -        }
    -        console.log(`На этой странице ${count} медиа-выражений`);
    -
    -    } catch(exc) {
    -        console.log("Что-то пошло не так...");
    -    }
    -}
    -                    
    -
    -
    -

    Текстовые свойства

    -

    - Свойство cssText содержит в себе текстовую запись всего блок CSS правила, - как оно прописано в CSS файле/теге style. Например: -

    -
    
    -let randomRule = document.styleSheets[3].cssRules[8];
    -console.log(randomRule.cssText);
    -// ".pupil > div { width: 25px; margin: 3px 6px; color: black; }"
    -                    
    -

    - Свойство selectorText содержит только текст селектора для указанного - CSS правила. Например: -

    -
    
    -console.log(randomRule.selectorText);
    -/* ".pupil > div"
    -*/ 
    -                    
    -
    -
    -

    Пример с cssSelector

    -

    - Например, вот здесь выводятся все CSS селекторы, которые встречаются в документе: -

    - -

    - See the Pen - Work with CSSStyleSheet – Logging selectors by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -

    Изменение селектора

    -

    - Свойство selectorText является редактируемым, а это значит,что с его - помощью можно менять селектор CSS правила. -

    -
    
    -if (i.selectorText === 'a:hover') {
    -
    -    i.selectorText = 'a:hover, a:active';
    -
    -}
    -                    
    -
    -
    -

    Свойство style у CSS правила

    -

    - И вот мы снова пришли к объекту CSSStyleDeclaration, который использовался - во встроенных и вычисленных стилях. -

    -

    - В объекте CSSStyleRule свойство style хранит - свойства, назначенные выбранному CSS правилу. -

    -

    - С помощью этого свойства удобнее всего редактировать CSS правила. Удаление/добавление/изменение - свойств в этом объекте будет отображаться в изменения CSS правила. -

    -
    -
    -

    Изменение css правил

    -

    - Используя свойство style можно изменять свойства CSS правила так же, как - и при работе с обычными inline стилями. -

    -

    - Т.е. вот эта запись добавит в CSS правило с селектором на класс list-item стиль для - отображения чёрной рамки: -

    -
    
    -let target = "#wikiArticle > p:nth-child(19) > em";
    -let rule = null;
    -for (let i in document.styleSheets) {
    -    
    -    let end = false;
    -    for (let j in document.styleSheets[i]) {
    -
    -        if (document.styleSheets[i].selectorText == target) {
    -            rule = document.styleSheets[i];
    -            end = true;
    -            break;
    -        }
    -    }
    -    if (end) break;
    -}
    -if (rule) {
    -    // Меняем свойства в CSS правиле
    -    rule.style.border = "1px solid black";
    -}
    -                    
    -
    -
    -

    Поиск применяющихся CSS правил

    -

    - В Js нет встроенной функции, которая выдавала бы набор CSS правил, применяющихся к элементу. Но - такую функцию можно написать самостоятельно: -

    -
    
    -function getRulesFor(el) {
    -    let sheets = document.styleSheets;
    -    let ret = [];
    -    for (let i = 0; i < sheets.length; ++i) {
    -
    -        let rules = sheets[i].cssRules;
    -        for (let j = 0; j < rules.length; ++j) {
    -
    -            // Проверяем, подходит ли заданный элемент под указанный селектор
    -            if (el.matches(rules[j].selectorText)) {
    -                // Если подходит, то добавляем CSS правило в массив
    -                ret.push(rules[j]);
    -            }
    -        }
    -    }
    -    return ret;
    -}
    -                    
    -
    -
    -

    Использование этой функции

    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -

    Создание новых CSS правил

    -

    - Создавать новые CSS правила можно с помощью метода insertRule() - объекта CSSStyleSheet. -

    -

    - А удалять существующие CSS правила с помощью метода deleteRule(). -

    -

    - При добавлении элемента нужно указывать индекс, по которому новое правило будет вставлено в - таблицу стилей. И удаление происходит именно по индексу. -

    -
    
    -let cssFile = document.styleSheets[0];
    -cssFile.insertRule("#blanc { color: white }", 0);
    -
    -cssFile.deleteRule(0);
    -                    
    -
    -
    -

    Примеры добавления правил

    -
    
    -let myStylesheet = document.styleSheets[0];
    -console.log(myStylesheet.cssRules.length); // 8
    -
    -let newRule = "article { line-height: 1.5; font-size: 1.5em; }";
    -// Добавление в конец
    -document.styleSheets[0].insertRule(newRule, myStylesheet.cssRules.length);
    -console.log(document.styleSheets[0].cssRules.length); // 9
    -
    -myStylesheet.deleteRule(3);
    -console.log(myStylesheet.cssRules.length); // 7
    -                    
    -
    -
    -
    -
    -

    Как итог

    -

    - CSSOM API состоит из 3 основных частей. Это: -

    -
      -
    • element.style - свойство для работы с inline свойствами
    • -
    • getComputedStyle() - метод для получения фактических значений свойств
    • -
    • styleSheets и cssRules - объекты для работы со сформированными CSS правилами
    • -
    -
    -
    -

    Встроенные свойства

    -

    - Встроенные свойства нужно использовать когда требуется программно - динамически менять CSS свойства элементов на странице. -

    -
    -
    -

    Вычисленные значения

    -

    - Вычисленные значения свойств нужны тогда, когда необходимо в логике - скрипта отталкиваться от присутствующих стилей документа, например, чтобы узнать положение - элемента на странице, получить его размеры, цвет и т.д. -

    -
    -
    -

    Таблицы стилей и CSS правила

    -

    - Это более продвинутый механизм, который используется в основном в сложных веб приложениях, - когда за счёт действий пользователя должны создаваться новые стили. -

    -

    - Например, это может применяться в браузерных векторных графических редакторах, - или веб-приложениях для создания сайтов. -

    -
    -
    -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/5_events/img/eventflow.png b/dist/lecture/5_events/img/eventflow.png deleted file mode 100644 index 835b617..0000000 Binary files a/dist/lecture/5_events/img/eventflow.png and /dev/null differ diff --git a/dist/lecture/5_events/img/events_delegation.png b/dist/lecture/5_events/img/events_delegation.png deleted file mode 100644 index 37e4201..0000000 Binary files a/dist/lecture/5_events/img/events_delegation.png and /dev/null differ diff --git a/dist/lecture/5_events/img/stop_immediate_propagation_1.png b/dist/lecture/5_events/img/stop_immediate_propagation_1.png deleted file mode 100644 index 85598c6..0000000 Binary files a/dist/lecture/5_events/img/stop_immediate_propagation_1.png and /dev/null differ diff --git a/dist/lecture/5_events/img/stop_immediate_propagation_2.png b/dist/lecture/5_events/img/stop_immediate_propagation_2.png deleted file mode 100644 index 66354fc..0000000 Binary files a/dist/lecture/5_events/img/stop_immediate_propagation_2.png and /dev/null differ diff --git a/dist/lecture/5_events/img/stop_propagation_1.png b/dist/lecture/5_events/img/stop_propagation_1.png deleted file mode 100644 index a49848d..0000000 Binary files a/dist/lecture/5_events/img/stop_propagation_1.png and /dev/null differ diff --git a/dist/lecture/5_events/img/stop_propagation_2.png b/dist/lecture/5_events/img/stop_propagation_2.png deleted file mode 100644 index 23731b9..0000000 Binary files a/dist/lecture/5_events/img/stop_propagation_2.png and /dev/null differ diff --git a/dist/lecture/5_events/index.html b/dist/lecture/5_events/index.html deleted file mode 100644 index 3023d10..0000000 --- a/dist/lecture/5_events/index.html +++ /dev/null @@ -1,1013 +0,0 @@ - - - - - - События DOM - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    События DOM

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    -
    -

    События DOM

    -

    - Мы рассмотрели структурную составляющую DOM модели, но в ней остался ещё большой - неразведанный пласт - события. -

    -

    - С помощью событий строится вся интерактивность между пользователем и документом. Но они используются - не только для этого. В DOM сокрыто по настоящему огромное количество разнообразных событий, - многие из которых используются не для взаимодействия с пользователем, а для общения разных программных - компонентов и системных уведомлений. -

    -
    -
    -

    События

    -

    - Вообще, сами по себе, события - это какие-то штуки, происходящие с HTML элементами. Потенциально, - любое изменение состояния системы может вызывать событие. -

    -

    - Некоторые события генерируются в результате действий пользователя, некоторые в результате действий - браузера, некоторые ещё каким-нибудь образом. -

    -

    - Вот несколько примеров событий: -

    -
      -
    • Завершение загрузки HTML страницы
    • -
    • Изменение значения в текстовом поле
    • -
    • Нажатие на кнопку
    • -
    -
    -
    -

    Обработка событий

    -

    - Ну и главное, что позволяет делать API событий - это определять, какие программные действия должны - выполняться при происхождении того или иного события. -

    -

    - К любому DOM событию можно привязать Javascript функцию, которая будет выполняться при происхождении - этого события. -

    -

    - Я насчитал +- 262 события, присутствующих в настоящий момент в JS. -

    -

    - Полный их перечень можно посмотреть на MDN - (но лучше не надо). -

    -
    -
    -

    Многообразие API

    -

    - На самом деле событий так много, потому что среди них куча очень специфических событий, относящихся - к какому-то узконаправленному компоненту Веб API. -

    -

    - Например, есть такие категории событий: -

    -
      -
    • События виртуальной реальности
    • -
    • События SVG
    • -
    • События встроенной БД
    • -
    • События вкладок
    • -
    • События Ip-телефонии
    • -
    • События SMS и USSD
    • -
    -

    - Основных используемых событий не так уж и много. -

    -
    -
    -

    Основные события

    -

    - Вот некоторые типы основных событий: -

    -
      -
    • События мыши
    • -
    • События клавиатуры
    • -
    • События изменения DOM дерева
    • -
    • События фокуса
    • -
    • События буфера обмена
    • -
    • События форм
    • -
    • События Drag & Drop
    • -
    • События медиа
    • -
    • События изменения значения
    • -
    -

    - На самом деле, самое главное событие всего одно, и мы его уже знаем - это событие click. -

    -
    -
    -
    -
    -

    Примеры основных событий

    -

    - Вот парочка событий, которые применяются наиболее часто: -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    СобытиеОписание
    clickКлик мышкой
    DOMContentLoadedЗагрузка всего DOM дерева
    mouseoverНаведение курсора мыши на элемент
    mouseoutВыход курсора мыши за пределы элемента
    keydownНажатие клавиши на клавиатуре
    changeИзменение значения в элементе управления
    -
    -
    -

    Обработчики событий

    -

    - Обработчик события - обычная функция, которая будет выполняться по - происшествию какого-либо события. -

    -

    - И существует 3 способа, как назначить событию обработчик. -

    -
      -
    • Через HTML
    • -
    • Через встроенный обработчик
    • -
    • Через добавление нового обработчика
    • -
    -
    -
    -

    Обработчик в HTML

    (никогда так не делайте!)

    -

    - Для многих базовых DOM событий у HTML элементов есть подготовленные атрибуты для привязки обработчиков - событий. -

    -

    - Этим способом в качестве обработчика события привязывается не функция, а просто JS код. -

    -

    - Атрибуты называются по имени события + приставка "on". Атрибут для обработчика события click - - onclick, атрибут для обработчика события change - onchange, - для события load - onload и т.д. -

    -

    - Подобные атрибуты есть не для всех событий, поэтому нужно быть внимательными. -

    -

    - В этот атрибут просто записывается Javascript код, взятый в кавычки. -

    -
    -
    -

    Пример событий в HTML

    -
    
    -<body onload="let a = document.body.createElement('div'); document.body.appendChild(a);">
    -    <button onclick="this.innerHTML = Date()">The time is?</button>
    -    <img src="imag1.png" onmouseover="console.log('mouse over img')"/>
    -</body>
    -                    
    -
    
    -<!-- Это работать не будет! -->
    -<div onclick="myFunctionName" />
    -<!-- Этим способом нужно прописывать не имя функции-обработчика, а сами действия - вызов -->
    -<div onclick="myFunctionName()" />
    -                    
    -
    -
    -

    Встроенный обработчик

    -

    - Второй способ уже совершается через JS. -

    -

    - Для того, чтобы привязать обработчик, необходимо получить объект нужного элемента страницы. - И далее, у элемента можно обратиться к свойству с таким же названием, как у атрибутов из - прошлого варианта. -

    -

    - Для события click будет свойство element.onclick, для события - keydown - свойство element.onkeydown и т.д. -

    -

    - И в это свойство нужно просто записать функцию-обработчик. -

    -
    
    -element.onevent = function handler() { };
    -                    
    -

    - И, как и в предыдущем случае, нужно учитывать, что не для всех событий в JS есть встроенные свойства. -

    -
    -
    -

    Примеры со встроенным обработчиком

    -
    
    -// Событие click
    -let div = document.getElementsByTagName("div");
    -div.onclick = function() {
    -    console.log("Click-clack!");
    -};
    -// Событие mouseover
    -function myAction() {
    -    console.log("mouse over event!");
    -}
    -// Здесь уже идёт присваивание именно самой функции
    -div.onmouseover = myAction;
    -// Запись с вызовом работать не будет:
    -div.onmouseover = myAction();       // div.onmouseover = undefined
    -
    -// Событие copy
    -div.oncopy = () => console.log("Don't copy code!!!");
    -                    
    -
    -
    -

    Проблема встроенного обработчика

    -

    - У такого способа назначения обработчика есть один большой недостаток - с помощью свойства - можно назначать только один обработчик. -

    -

    - Если у элемента свойством задан уже какой-то обработчик, то повторное назначение обработчика - не добавит второй, а перезапишет первый оригинальный. -

    -
    
    -div.onclick = function () {
    -    console.log("Click handler 1");
    -};
    -// Первый обработчик сотрётся
    -div.onclick = function () {
    -    console.log("Click handler 2");
    -};
    -div.click(); //  Click handler 2
    -                    
    -
    -
    -

    Добавление через метод

    -

    - И наконец, самый универсальный и функциональный вариант - добавление обработчика через - метод addEventListener. -

    -

    - С помощью этого метода можно добавить обработчик на любое событие и в любых количествах. -

    -
    
    -addEventListener("eventName", Function);
    -                    
    -

    - Метод принимает 2 обязательных параметра: строку с названием события и саму функцию-обработчик. -

    -

    - Можно использовать имя ранее описанной функции, можно создавать анонимную прямо здесь, без разницы. -

    -
    -
    -

    Пример с addEventListener

    -

    - С помощью addEventListener() можно добавить одновременно несколько обработчиков - одного и того же события для одного элемента: -

    -
    
    -div.addEventListener("click", function() {
    -    console.log("Click handler 1");
    -});
    -div.addEventListener("click", function() {
    -    console.log("Click handler 2");
    -});
    -div.addEventListener("click", function() {
    -    console.log("Click handler 3");
    -});
    -div.click(); //  Click handler 1, Click handler 2, Click handler 3
    -                    
    -

    - Порядок их вызова определяется порядком назначения. -

    -
    -
    -

    Удаление обработчика

    -

    - Обработчик, добавленный через HTML атрибут, удаляется посредством обнуления значения атрибута. -

    -

    - Обработчик, добавленный через JS свойство, удаляется посредством обнуления значения свойства. -

    -

    - А обработчик, добавленный с помощью метода addEventListener(), - удаляется при помощи метода removeEventListener(); -

    -
    -
    -

    Метод removeEventListener

    -

    - Метод removeEventListener() вызывается аналогично методу для добавления, - с таким же набором параметров. -

    -

    - Это значит, что для удаления обработчика, нужно иметь ссылку на назначенную функцию, или, - проще говоря, у функции должно быть имя. -

    -

    - Удаление происходит следующим образом: -

    -
    
    -function clickHandler() {
    -    console.log("You click on me");
    -}
    -
    -// Добавили обработчик clickHandler
    -div.addEventListner("click", clickHandler);
    -
    -// Через 10 секунд...
    -setTimeout(function() {
    -
    -    // Сняли обработчик clickHandler
    -    div.removeEventListener("click", clickHandler);
    -
    -}, 10000);
    -
    -// Вот такой обработчик нельзя удалить (простым способом)
    -div.addEventListener("mouseover", function() {
    -    console.log("I'am immortal, mwha-ha-how!");
    -});
    -
    -// Чтобы можно было удалить, у функции должно быть имя
    -div.addEventListener("mouseout", function onMouseOut() {
    -    console.log("But not me...");
    -});
    -                    
    -
    -
    -
    -
    -

    Типы событий

    -

    - Мы раньше упомянули, что события бывают разных типов. Например, события мыши, события - клавиатуры, события буфера обмена и т.д. -

    -

    - Разные источники их проявления - это не единственные отличия между ними. -

    -

    - Все функции-обработчики событий могут принимать один параметр - аргументы события. И у разных - типов событий эти аргументы различаются. У всех событий мыши туда приходит один объект, - у всех событий клавиатуры другой объект, и т.д. Для каждого типа событий свои особенные параметры. -

    -
    -
    -

    Аргументы событий

    -

    - Что вообще такое аргументы события? Это просто объект, который содержит всякую дополнительную - полезную информацию о произошедшем событии. -

    -

    - Для событий мыши там содержится информация, специфичная для мыши. Например, координаты курсора, - или информация о том, какая из клавиш мыши была нажата. -

    -

    - Для событий клавиатуры там содержится другая, своя информация: на какую клавишу было совершено - нажатие, были ли в этот момент зажаты клавиши-модификаторы и т.д. -

    -
    -
    -

    Аргументы в обработчике события

    -

    - Аргументы события передаются в обработчики событий в виде единственного параметра функции. -

    -

    - Обычно этот параметр называют просто e. -

    -
    
    -element.addEventListener("click", function(e) {
    -    console.log("Mouse Event Arguments: " + e);
    -});
    -                    
    -

    - Любая функция-обработчик события может принимать такой параметр, для использования в своей логике - аргументов произошедшего события. -

    -
    -
    -
    -
    -

    Аргументы события мыши

    -

    - В аргументы событий мыши передаётся объект MouseEvent, который имеет - массу полезных свойств, характеризующих поведение мыши: -

    -
      -
    • clientX/Y, layerX/Y, offsetX/Y, pageX/Y, screenX/Y, x/y - всевозможные относительные виды - координат места на экране, в котором событие мыши произошло
    • -
    • movementX/movementY - сдвиг курсора мыши между вызовами события mousemove
    • -
    • altKey, ctrlKey, shiftKey - были ли зажаты клавиши-модификаторы на клавиатуре
    • -
    -
    -
    -

    Продолжение

    -
      -
    • detail - сколько раз подряд произошло одинаковое событие мыши
    • -
    • isTrusted - показывает, было ли событие совершено пользователем, или скриптом
    • -
    • type - тип произошедшего события (click, mouseup)
    • -
    • button, which - показывает, какая кнопка мыши произвела событие
    • -
    • target - элемент, для которого выполняется обработчик
    • -
    • timeStamp - относительная временная метка события
    • -
    -
    -
    -

    Примеры

    -

    - которых нет -

    -
    -
    -
    -
    -

    Аргументы события клавиатуры

    -

    - Объект KeyboardEvent содержит следующие полезные свойства: -

    -
      -
    • code, key, keyCode - информация о нажатой клавише в разных формах
    • -
    • altKey, ctrlKey, shiftKey - были ли зажаты клавиши-модификаторы
    • -
    -

    - А большего и не надо. -

    -
    -
    -

    Примеры

    -

    - которых нет -

    -
    -
    -
    -
    -

    Погружение и всплытие

    -

    - Это очень интересная тема, связанная со вложенной структурой интерфейса, и затрагивающая принципы - работы всех событий, происходящих с элементами интерфейса страницы. -

    -

    - Обработчик событий можно повесить на любой элемент на HTML странице. -

    -

    - Представьте, что элементу body назначен какой-то обработчик события click. А внутри - него на странице есть кнопка, которой тоже назначен обработчик события click. -

    -

    - Как тогда будут себя вести обработчики, если пользователь нажмёт на кнопку, которая внутри body? - Ведь по сути, он в то же время нажмёт и на само body... -

    -
    -
    -

    Погружение и всплытие

    -

    - Или возьмём, например, событие перемещения мыши mousemove. -

    -

    - Когда пользователь двигаем мышью над картинкой img, находящейся внутри div-а, - находящегося внутри section-а, находящегося внутри main. -

    -

    - Над каким элементом он на самом деле двигает мышью? -

    -

    - Над всеми сразу? Отчасти, это верный ответ. -

    -
    -
    -

    Жизненный цикл события

    -

    - Жизненный цикл события элемента интерфейса состоит из 3 фаз: -

    -
      -
    • 1. Фаза перехвата (погружения)
    • -
    • 2. Фаза цели
    • -
    • 3. Фаза всплытия
    • -
    -

    - Каждое событие (практически), будь то клик, движение мышью или нажатие - клавиши, проходит все эти три фазы. -

    -

    - Можно считать, что жизненные фазы события определяют порядок выполнения обработчиков события. -

    -
    -
    -

    Жизненный цикл события

    - -
    -
    -

    Фазы

    -

    - На первой фазе погружения (перехвата) происходит поиск и выполнение обработчиков для - произошедшего события, сверху вниз по элементами DOM дерева, от Window до целевого элемента, на который - было произведено нажатие, среди обработчиков фазы погружения. -

    -

    - На второй фазе цели вызываются обработчики целевого элемента события. -

    -

    - На третей фазе всплытия ищутся и вызываются обработчики по направлению снизу вверх от - целевого элемента до объекта Window. Здесь используются обработчики фазы всплытия. -

    -
    -
    -

    Разные виды обработчиков

    -

    - По умолчанию, все обработчики событий создаются для третей фазы, фазы всплытия. -

    -

    - Это определяется третьим параметром функции addEventListener(), значение по умолчанию - для которого равно false. -

    -

    - Чтобы зарегистрировать обработчик события для первой фазы, фазы погружения, нужно передать в качестве третьего - параметра значение true. -

    -
    
    -// Регистрация обработчика для фазы погружения
    -element.addEventListener("event", Function, true);
    -
    -// Регистрация обработчика для фазы всплытия
    -element.addEventListener("event", Function);
    -element.addEventListener("event", Function, false);
    -                    
    -
    -
    -

    Пример

    -
    
    -document.addEventListener("click", function() {
    -    console.log("1");
    -}, true);
    -main.addEventListener("click", function() {
    -    console.log("2");
    -}, true);
    -span.addEventListener("click", function() {
    -    console.log("3");
    -});
    -main.addEventListener("click", function() {
    -    console.log("4");
    -});
    -document.addEventListener("click", function() {
    -    console.log("5");
    -});
    -                    
    -
    -
    -

    Пример 2

    -
    -
    -
    
    -<!DOCTYPE html>
    -<html lang="en">
    -<head>
    -    <meta charset="UTF-8">
    -    <title>Document</title>
    -</head>
    -<body>
    -    <main>
    -        <ul id="list">
    -            <li>
    -                <span>Первый пункт</span>
    -            </li>
    -            <li>
    -                <span>Второй пункт</span>
    -            </li>
    -            <li>
    -                <span>Третий пункт</span>
    -            </li>
    -            <li>
    -                <span>Четвёртый пункт</span>
    -            </li>
    -        </ul>
    -    </main>
    -</body>
    -</html>
    -                            
    -
    -
    -
    
    -let list = document.getElementById("list");
    -list.addEventListener("click", function() {
    -    console.log("A");
    -});
    -
    -document.body.addEventListener("click", function() {
    -    console.log("B");
    -}, true);
    -
    -let secondListItem = document.querySelector("#list > li:nth-child(2)");
    -secondListItem.addEventListener("click", function() {
    -    console.log("C");
    -}, true);
    -
    -let thirdSpan = document.querySelector("#list > li:nth-child(3) > span");
    -thirdSpan.addEventListener("click", function() {
    -    console.log("D");
    -});
    -                            
    -
    -
    -
    -
    -

    Связанные свойства

    -

    - В объекте аргументов события есть свойство target, которое хранит ссылку на целевой - элемент события, т.е. самый вложенный, конечный элемент, для которого происходит событие, и который будет - участвовать в целевой фазе. -

    -

    - Также есть свойство path, в котором хранится массив из всех элементов, через которые - проходит событие (т.е. все элементы, участвующие в фазах погружения и всплытия), начиная от Window, - document, html, body, и до целевого элемента target. -

    -

    - А информацию о текущей фазе можно узнать из свойства eventPhase. -

    -
    -
    -
    -
    -

    Остановка продвижения события

    -

    - Для того, чтобы прекратить дальнейшее продвижение события, в объекте аргументов события - есть 2 метода: -

    -
      -
    • stopPropagation()
    • -
    • stopImmediatePropagation()
    • -
    -

    - Вызвав в обработчике метод e.stopPropagation() можно остановить продвижение - события по всем оставшимся элементам. -

    -

    - Это довольно часто бывает полезно, когда требуется как-либо ограничить выполнение обработчика. Если - остановить продвижение события в обработчике, вызывающемся самым первым, то все остальные обработчики - этого события не будут вызваны. -

    -
    -
    -

    Метод stopPropagation 1

    - -
    -
    -

    Метод stopPropagation 2

    - -
    -
    -

    Мгновенная остановка продвижения

    -

    - Метод stopPropagation() останавливает продвижение события ко всем - последующим элементам DOM дерева, но для текущего узла все обработчики будут выполнены, если их - здесь несколько. -

    -

    - Чтобы полностью прекратить выполнение всех последующих обработчиков, включая обработчики текущего - узла, используется метод stopImmediatePropagation(). -

    -

    - После вызова метода stopImmediatePropagation() гарантированно не будет - вызвано больше ни одного обработчика для данного события. -

    -
    -
    -

    stopPropagation vs stopImmediatePropagation

    - -
    -
    -

    Метод stopImmediatePropagation

    - -
    -
    -
    -
    -

    Действие по умолчанию

    -

    - Для многих событий на разных элементах интерфейса прописано стандартное поведение, например, при - нажатии (событие click) на ссылку, должен осуществляться переход по ней; при нажатии - на текстовое поле в это текстовое поле должен переходить фокус и появляться каретка ввода; при - нажатии клавиши на клавиатуре (событие keypress), когда там находится фокус, должен - происходить ввод нажатого символа в текстовое содержимое элемента. -

    -

    - Всё это является действиями по умолчанию для конкретных элементов и событий. -

    -

    - И это стандартное поведение можно заблокировать, вызвав внутри обработчика метод - e.preventDefault(). -

    -
    -
    -

    Метод preventDefault

    -
    - preventDefault() - метод из объекта аргументов события (е), с помощью - которого можно отключить действие по умолчанию для текущего события. -
    -

    - Например, если мы не хотим, чтобы при клике на ссылку происходил переход на другую страницу, - то нужно в обработчике вызвать этот метод: -

    -
    
    -const a = document.getElementById("link");
    -
    -a.addEventListener("click", function(e) {
    -
    -    console.log("click");
    -    e.preventDefault();
    -
    -});
    -                    
    -
    -
    -
    -
    -

    Делегирование событий

    -

    - Если повесить обработчик на контейнерный элемент, внутри которого содержится много дочерних элементов, - то с помощью свойства target можно будет определить, для какого именно - из внутренних элементов этого контейнера произошло событие. -

    -

    - Всегда лучше иметь один обработчик, чем десять. -

    -

    - Такой приём называется Делегирование событий. -

    -
    -
    -

    Делегирование событий

    -

    - Если нескольким элементам нужен одинаковый обработчик, то нужно использовать делегирование. Т.е - привязать обработчик к их общему родителю, и обращаться к нажатому элементу с помощью - свойства target. -

    - -
    -
    -

    Дополнительные проверки

    -

    - Но если в родительском элементе есть что-то ещё, кроме элементов, для которых нужно обрабатывать - событие - какие-то другие элементы, или просто пустые отступы, то нужно добавлять проверку, что - target - это именно то, что нужно. -

    -

    - Если посмотреть на предыдущую картинку, то при нажатии на сам span - в target - будет записан именно span, на которой было произведено нажатие. -

    -

    - Но если кликнуть на свободную область между span-ами, то target будет - указывать на родительский div. -

    -
    -
    -

    Пример

    - -

    - See the Pen - Random circles by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Пользовательские события

    -

    - Можно создавать собственные события для своих нужд. -

    -

    - Это позволяет реализовывать в JS приложении паттерн проектирования Издатель-подписчик. -

    -

    - Т.е. в одном месте программы мы можем генерировать событие, и в другой части программы назначать - обработчики на это событие. -

    -
    -
    -

    Ключевые действия

    -
      -
    1. Создание события
    2. -
    3. Привязка обработчиков
    4. -
    5. Генерация события
    6. -
    -
    
    -// Создаём событие
    -let event = new Event("build");
    -
    -// Назначаем обработчик
    -elem.addEventListener("build", function(e) { console.log("My own Event!") });
    -
    -// Генерация события - вызываем обработчики
    -elem.dispatchEvent(event);
    -                    
    -
    -
    -

    Конструктор Event

    -

    - Вообще, с помощью конструктора Event можно программно генерировать - любые события: пользовательские и стандартные. -

    -
    
    -// Стандартное событие клика мышкой
    -let programClick = new Event("click");
    -button.dispatchEvent(programClick);
    -
    -// Стандартное событие нажатия клавиши
    -let programKeydown = new Event("keydown");
    -textArea.dispatchEvent(programKeydown);
    -
    -// Стандартное событие загрузки ресурса
    -let programLoad = new Event("load");
    -fileInput.dispatchEvent(programLoad);
    -
    -// Пользовательское событие
    -let myEvent = new Event("pigeon-fly");
    -div.dispatchEvent(myEvent);
    -                    
    -
    -
    -

    Объект Event

    -

    - Объект, создающийся в результате вызова конструктора new Event() - является объектом аргументов события - это тот объект, который приходит параметром в обработчики. -

    -

    - Поэтому при программной генерации события его можно программно заполнять вспомогательной информацией. -

    -

    - Помимо базового конструктора Event есть объекты и для более специфичных событий: -

    -
      -
    • MouseEvent
    • -
    • KeyboardEvent
    • -
    • FocusEvent
    • -
    • WheelEvent
    • -
    • и другие
    • -
    -
    -
    -

    Пример

    -
    
    -const e = new MouseEvent("click", {
    -    bubbles: true,
    -    cancelable: true,
    -    clientX: 100,
    -    clientY: 100,
    -    x: 100,
    -    y: 100,
    -    which: 0
    -});
    -                    
    -
    -
    -

    Пользовательский тип события

    -

    - В стандартные объекты Event можно записывать только стандартные свойства, - их нельзя дополнять своими данными. -

    -

    - Если в аргументах события нужно передавать какую-то дополнительную информацию, то на помощь приходят - собственные типы событий: CustomEvent. -

    -

    - Объект CustomEvent содержит свойство detail, - в которое вы можете записать всё, что захотите. -

    -
    -
    -

    Пример CustomEvent

    -
    
    -const event = new CustomEvent('build', {
    -    'detail': {
    -        'time': new Date(),
    -        'strength': 10
    -    }
    -});
    -
    -function eventHandler(e) {
    -
    -    console.log('The Event was triggered by: ' + e.target);
    -    console.log('Event creation time is: ' + e.detail);
    -
    -}
    -
    -div.addEventListener('build', eventHandler);
    -
    -div.dispatchEvent(event);
    -                    
    -
    -
    -

    Пример

    - -

    - See the Pen - Coin stack by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/6_event_loop/img/basic_runtime.png b/dist/lecture/6_event_loop/img/basic_runtime.png deleted file mode 100644 index 22f7326..0000000 Binary files a/dist/lecture/6_event_loop/img/basic_runtime.png and /dev/null differ diff --git a/dist/lecture/6_event_loop/img/js_runtime.png b/dist/lecture/6_event_loop/img/js_runtime.png deleted file mode 100644 index f0d193a..0000000 Binary files a/dist/lecture/6_event_loop/img/js_runtime.png and /dev/null differ diff --git a/dist/lecture/6_event_loop/index.html b/dist/lecture/6_event_loop/index.html deleted file mode 100644 index b16dc43..0000000 --- a/dist/lecture/6_event_loop/index.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - Event Loop - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    Цикл событий JS (Event Loop)

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    -
    -

    Среда выполнения

    -

    - Среда выполнения в классическом окружении (ОС), и соответственно в большинстве языков программирования - состоит из двух основных компонентов: Стек и Куча. -

    - -
    -
    -
    -
    -

    Среда выполнения JavaScript

    - -
    -
    -
    -

    Event Loop

    -
    
    -while (queue.waitForMessage()) {
    -	queue.processNextMessage();
    -}
    -				
    -
    -
    -

    Лекция (на английском)

    -

    - Всё про Event Loop можно узнать из этого видео: -

    - -
    -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/7_async/img/Sync_async.png b/dist/lecture/7_async/img/Sync_async.png deleted file mode 100644 index 9535586..0000000 Binary files a/dist/lecture/7_async/img/Sync_async.png and /dev/null differ diff --git a/dist/lecture/7_async/img/ajax.png b/dist/lecture/7_async/img/ajax.png deleted file mode 100644 index e9f6dc9..0000000 Binary files a/dist/lecture/7_async/img/ajax.png and /dev/null differ diff --git a/dist/lecture/7_async/img/callback_hell.jpeg b/dist/lecture/7_async/img/callback_hell.jpeg deleted file mode 100644 index f5a0cac..0000000 Binary files a/dist/lecture/7_async/img/callback_hell.jpeg and /dev/null differ diff --git a/dist/lecture/7_async/img/callback_hell_2.jpeg b/dist/lecture/7_async/img/callback_hell_2.jpeg deleted file mode 100644 index a8ce02a..0000000 Binary files a/dist/lecture/7_async/img/callback_hell_2.jpeg and /dev/null differ diff --git a/dist/lecture/7_async/index.html b/dist/lecture/7_async/index.html deleted file mode 100644 index 8410293..0000000 --- a/dist/lecture/7_async/index.html +++ /dev/null @@ -1,1392 +0,0 @@ - - - - - - Asynchronous JavaScript - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Веб программирование. Фронтенд

    -

    Её величество Асинхронность

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    -
    -

    Асинхронность

    -

    - В JS постоянно приходится сталкиваться с асинхронностью, хотите вы того или не хотите. -

    -

    - Среда выполнения JavaScript построена на концепциях асинхронности: один единственный поток, - очередь сообщений, события и Event Loop, - всё это обеспечивает максимальную поддержку - асинхронного поведения. -

    -
    -
    -

    Синхронный код

    -

    - В синхронной программе, если две строки кода записаны друг за другом, вторая не может - начать выполняться, пока не закончит выполнение первая. -

    -

    - Это можно представить как очередь за билетами, например, в кино. Вы не можете заказать и купить - билет, пока все люди перед вами не закажут и не купят свои. -

    -
    -
    -

    Асинхронный код

    -

    - В асинхронной программе, у вам может быть 2 строчки кода, когда первая строчка запустит на - выполнение какое-либо действие, а вторая строчка будет выполнена раньше, чем первая закончит - выполнение своего действия. -

    -
    -
    -

    Асинхронное поведение

    -

    - Это можно представить, как посетителей ресторана. Вы можете заказать блюдо, и другие люди могут - заказать блюда. И чтобы сделать свой заказ, вам не нужно ждать, пока все посетители, заказавшие - что-либо перед вами, получат свои приготовленные блюда. -

    -

    - Если посетитель перед вами заказал рагу, а вы аж на 5 минут позже заказали стакан воды, это - не будет означать, что сначала будет выполнен заказ первого посетителя. -

    -

    - Порядок выполнения асинхронных задач не зависит от порядка их определения - только от их сложности и - времени выполнения. -

    -
    - Асинхронное, или неблокирующее поведение - это когда программа не - ждёт завершения какого-либо действия, чтобы начать выполнять следующие. -
    -
    -
    -

    Асинхронность vs синхронность

    - -
    -
    -

    Многопоточность и асинхронность

    -

    - Многопоточность (параллельное выполнение) и - Асинхронность (неблокируемость) - это разные понятия, - не зависящие друг от друга. -

    -

    - Хотя они и решают одну и ту же задачу - максимально использовать имеющиеся ресурсы компьютера. -

    -
    -
    -

    Задачи многопоточности

    -

    - Многопоточность позволяет задействовать все ядра процессора - чтобы они не бездействовали и не - простаивали. -

    -

    - Многопоточность нужно применять, когда в программе присутствуют операции, не зависящие друг от друга, - и никак друг на друга не влияющие, которые можно распараллелить. -

    -
    - Многопоточность - одновременное параллельное выполнение нескольких действий в программе. -
    -

    - Возможность применения многопоточности (эффективного применения) зависит от конфигурации процессора, - на котором выполняется программа, т.е. от количества его физических и виртуальных ядер, а также - от задач, которые решает программа (можно ли их выполнять параллельно). -

    -
    -
    -

    Задачи асинхронности

    -

    - Асинхронность же позволяет максимально эффективно использовать ресурсы одного потока выполнения - (одного ядра процессора). Асинхронность - это отсутствие простоев в работе программы, устранение ситуаций, когда программа - ничего не выполняет, в ожидании завершения какого-либо действия. -

    -

    - Поэтому, как правило, асинхронность может использоваться только в том случае, когда программа - взаимодействует с каким-либо другим независимым компонентом (файловая система, сеть, другая программа), - т.к. обычно только при обращении к стороннему ресурсу, и ожидании от него ответа, в программе - может произойти простой. -

    -

    - Значит, асинхронность можно использовать далеко не в любой ситуации. А только (почти) когда операция - вызывает простой (т.е. блокирует выполнение программы). -

    -
    -
    -

    Пример

    -

    - Вернёмся к примеру с очередью за билетами. -

    -

    - Если все люди стоят в общей очереди и ждут, когда придёт их черёд - это синхронный и однопоточный - процесс. -

    -

    - Если открыто несколько касс, и очередей несколько - это синхронный и многопоточный процесс. -

    -

    - Если люди быстро говорят кассиру, что им нужен билет, и уходят заниматься своими делами, не дожидаясь - пока кассир зарегистрирует место и всё оформит, и когда вся очередь быстро рассосётся, он станет - оформлять билеты, отправляя их по электронной почте покупателям - то это процесс асинхронный. -

    -
    -
    -

    Многопоточность + асинхронность

    -

    - Программа может быть многопоточной и синхронной, однопоточной и - асинхронной, или и то, и другое сразу - между многопоточностью и асинхронностью нет зависимости. -

    -

    - В большинстве языков программирования от вас зависит, как писать код - использовать - многопоточность или не использовать, применять асинхронность или не применять. -

    -

    - Но в JavaScript вам выбора не дают - программа на JS всегда однопоточна и асинхронна. -

    -
    -
    -
    -
    -

    Примеры

    -

    - Конечно, мы опять начнём с функции setTimeout() - это самый простой - и наглядный пример асинхронного поведения в JavaScript. -

    -
    
    -// 1 - Выведет на консоль "Hello."
    -console.log("Hello.");
    -// 3 - Выведет на консоль "Goodbye" через 2 секунды
    -setTimeout(function() {
    -    console.log("Goodbye!");
    -}, 2000);
    -// 2 - Выведет на консоль "Hello again!"
    -console.log("Hello again!");
    -                    
    -

    - Если бы мы писали аналог подобной программы на языке программирования, где присутствуют - синхронные операции (например, C# со Sleep на 2 секунды), то после вывода "Hello.", - программа бы приостановила своё выполнение на 2 секунды, а затем вывела бы подряд - строки "Goodbye!" и "Hello again!". -

    -
    -
    -

    JavaScript - асинхронный

    -
    - В JavaScript отсутствует всякая возможность писать синхронный код. -
    -

    - Разумеется, это относится только к тем местам, где может стоять выбор между синхронным - выполнением и асинхронным выполнением. -

    -

    - Т.е. в JS, например, нет синхронных таймеров (как Sleep), и любые операции чтения/записи, - или любые запросы к другим ресурсам/системам всегда работают асинхронно. -

    -

    - Не существует способа заблокировать выполнение программы на JavaScript. Кроме бесконечного - цикла, конечно (и противного alert). -

    -
    -
    -
    -
    -

    Ассоциация

    -

    - Представим такую ситуацию, что нужно позвонить человеку, чтобы узнать у него - какую-нибудь информацию, например, его паспортные данные. Синхронный вариант такого - действия - это продолжать висеть на телефоне и ждать, пока собеседник будет искать - свой паспорт, пока он не назовёт вам запрошенные данные. -

    -

    - Программно это можно записать как следующий блок кода: -

    -
    
    -// Звоним Алексу и ждём, пока он не скажет свои паспортные данные
    -const passportData = callToRecievePassportData("Алекс");
    -// Дождавшись, выводим их
    -console.log("Паспортные данные Алекса: " + passportData);
    -// И приступаем к другой работе
    -doWork();
    -                    
    -

    - Т.е. это стандартные код, простой вызов функции, как мы всегда это делали. Потому что мы - всегда писали синхронный код. -

    -
    -
    -

    Возврат значения асинхронного выражения

    -

    - Но JavaScript не даст сделать такую операцию синхронно. Как бы это действие выглядело в - асинхронном формате? -

    -

    - Вы бы позвонили человеку, и сказали, чтобы он нашёл свои паспортные данные и тогда перезвонил - вам, чтобы сообщить их. И не дожидаясь, вы бы закончили разговор, и стали заниматься своими делами. -

    -

    - Но как тогда записать такой код? Старая версия больше не будет работать. -

    -
    
    -// Звоним Алексу и говорим ему, чтобы он перезвонил с результатом
    -// Мы больше не можем получить результат через возвращаемое значение -
    -// Значение здесь не возвращается, оно будет выдано нам в будущем
    -callToRecievePassportData("Алекс");
    -// Алекс ищет паспорт, а мы продолжаем выполнять следующие команды
    -// Т.е. занимаемся своими делами
    -doWork();
    -                    
    -
    -
    -

    Коллбэк

    -

    - Вот здесь и появляется коллбэк (callback), или обратный вызов - - это то действие, которое нужно выполнить после завершения асинхронной операции. -

    -

    - Асинхронные действия не возвращают результата в привычном для программирования понимании, - через возвращаемое значение. -

    -

    - Вместо этого нужно задавать действие, которое должно выполниться, когда асинхронная операция - будет завершена, и в нём уже оперировать с результатом операции. -

    -

    - В программировании это действие задаётся как функция, передающаяся в качестве параметра - в асинхронную функцию - т.е. коллбэк. -

    -
    -
    -

    Коллбэк в асинхронной функции

    -

    - Тогда рассмотренный пример с паспортными данными, в асинхронном варианте будет выглядеть - следующим образом: -

    -
    
    -// Звоним Алексу и говорим ему, чтобы он перезвонил с результатом
    -callToRecievePassportData("Алекс", function(passportData) {
    -    // Что будем делать, когда Алекс нам перезвонит и скажет свои данные
    -    // Выведем их на консоль
    -    console.log("Паспортные данные Алекса: " + passportData);
    -});
    -// Алекс ищет паспорт, а мы продолжаем выполнять следующие команды
    -// Т.е. занимаемся своими делами
    -doWork();
    -                    
    -
    -
    -

    Значение коллбэка

    -
    - Коллбэк - это единственный способ обработки результата асинхронной функции. -
    -

    - В JavaScript коллбэки асинхронных функций работают как обработчики событий завершения - операции. Т.е. можно считать, что записывая коллбэк, вы назначаете вашу функцию в качестве - обработчика для события выполнения этого асинхронного действия. -

    -

    - Это значит, что как только браузер зафиксирует, что асинхронная операция завершилась (например, - время таймера истекло, или другая программа выдала ответ на запрос браузера), он поместит в - очередь сообщений запись с функцией вашего коллбэка. И она будет передана на выполнение - циклом событий, как только освободится стек вызова. -

    -
    -
    -
    -
    -

    Главная звезда асинхронности

    -

    - Но где реальные примеры асинхронности в JavaScript? В каких местах она применяется больше всего? -

    -

    - setTimeout() и setInterval(), конечно, - являются примерами асинхронных операций, но это не то, что встречается в коде повсеместно - и используется на каждом шагу. -

    -

    - Основной источник асинхронного кода в JS - это AJAX. -

    -
    -
    -

    AJAX

    -

    - AJAX (Asynchronous JavaScript And XML) - это технология обращения к серверу - без перезагрузки страницы, используя XMLHttpRequest. -

    -

    - AJAX позволяет вам динамически обновлять части DOM дерева HTML страницы, в результате фонового - взаимодействия с веб сервером, без необходимости перезагрузки всей страницы. -

    -
    -
    -

    Объект XMLHttpRequest

    -

    - Для создания асинхронного запроса к веб-серверу в JavaScript существует специальный - объект XMLHttpRequest из Web API. -

    -

    - На практике он обычно не используется напрямую, а через другие функции. Но нужно понимать, что - любой асинхронный запрос из JS к удалённому ресурсу в конечном итоге создаёт объект - XMLHttpRequest, и фоновая отправка запроса идёт именно через него. -

    -
    -
    -

    Принцип работы

    - -
    -
    -

    Обработка запроса

    -

    - Алгоритм отправки запроса через объект XMLHttpRequest следующий: -

    -
      -
    1. Сначала нужно создать объект XMLHttpRequest через конструктор.
    2. -
    3. Затем у этого объекта вызвать метод open(), чтобы настроить запрос.
    4. -
    5. Вызвать метод send(), который запустит запрос.
    6. -
    7. Повесить обработчики событий для обработки результата запроса через события load или readystatechange.
    8. -
    -
    -
    -

    Примеры

    -
    
    -function loadDoc() {
    -    // Создаём объект XMLHttpRequest
    -    const xhttp = new XMLHttpRequest();
    -    // Назначаем обработчик
    -    xhttp.onreadystatechange = function() {
    -        // Этот код выполнится после успешного получения ответа от сервера
    -        if (xhttp.readyState == 4 && xhttp.status == 200) {
    -            document.getElementById("demo").innerHTML = xhttp.responseText;
    -        }
    -    };
    -    // Настройка запроса
    -    xhttp.open("GET", "ajax_info.txt", true);
    -    // Отправка
    -    xhttp.send();
    -}
    -                    
    -
    -
    -

    Использование XMLHttpRequest

    -
    
    -// Объект XMLHttpRequest создаётся через конструктор
    -const xhr = new XMLHttpRequest();
    -
    -// Затем метод open() используется для настройки запроса
    -xhr.open('GET', 'phones.json', true);
    -
    -// Метод send() отправляет запрос
    -xhr.send(); 
    -
    -// Получение результата происходит через обработчик события readystatechange
    -xhr.onreadystatechange = function() {
    -    if (xhr.readyState != 4) {
    -        return;
    -    }
    -    button.innerHTML = 'Готово!';
    -    if (xhr.status != 200) {
    -        alert(xhr.status + ': ' + xhr.statusText);
    -    } else {
    -        alert(xhr.responseText);
    -    }
    -} 
    -
    -button.innerHTML = 'Загружаю...';
    -button.disabled = true;
    -                    
    -
    -
    -
    -
    -

    Инициализация запроса

    -

    - Для инициализации и настройки запроса используется метод open(). -

    -
    
    -XMLHttpRequest.open(method, url, async?, user?, password?);
    -                    
    -

    - Метод принимает 2 обязательных параметра: method и url. -

    -

    - method - название метода HTTP запроса, который вы собираетесь отправить, например, - "GET", "POST", "PUT", "DELETE" и т.д. -

    -

    - url - URL адрес ресурса, по которому будет отправлен запрос. -

    -
    -
    -

    Запрещённый приём

    -

    - Третий параметр метода open() позволяет сделать вызов функции - синхронным. Этот параметр запрещено использовать среди веб разработчиков! В скором времени - эту возможность планируют убрать из новых версий браузеров. -

    -
    
    -const request = new XMLHttpRequest();
    -
    -// Асинхронный запрос (по умолчанию)
    -request.open('POST', 'http://example.com');
    -
    -// Асинхронный запрос
    -request.open('POST', 'http://example.com', true);
    -
    -// СИНХРОННЫЙ запрос
    -request.open('POST', 'http://example.com', false);
    -                    
    -
    -
    -

    Синхронный XHR vs Асинхронный XHR

    - -

    - See the Pen - Don't use sync XHR! by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Отправка запроса

    -

    - Метод send() используется для отправки запроса на сервер. -

    -
    
    -XMLHttpRequest.send(body?);
    -                    
    -

    - С помощью параметра этого метода body можно задавать тело HTTP запроса. Это используется для - отправки данных на сервер через многие HTTP методы, например, POST и PUT. Если же запрос - не поддерживает тело (например, GET и HEAD методы HTTP), то этот параметр игнорируется. -

    -

    - В качестве тела запроса допускается обычная строка, или объекты Document, ArrayBuffer, - TypedArray, FormData, URLSearchParams, ReadableStream, -

    -
    -
    -

    Пример с GET

    -
    
    -const xhr = new XMLHttpRequest();
    -// GET запрос
    -// Параметры передаются через адрес, в заголовке запроса
    -xhr.open('GET', '/server?name=Viktor&password=VikTheBest111', true);
    -
    -xhr.onload = function () {
    -    // Здесь что-нибудь происходит
    -};
    -
    -xhr.send(null);
    -// Любые значения параметра будут игнорироваться,
    -// Потому что это GET запрос
    -                    
    -
    -
    -

    Пример с POST

    -
    
    -const xhr = new XMLHttpRequest();
    -// POST запрос, параметры передаются в теле запроса
    -xhr.open('POST', '/server', true);
    -
    -// Устанвливаем нужный заголовок Content-Type
    -xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    -
    -// Обработчик на событие изменения состояния запроса
    -xhr.onreadystatechange = function() {
    -    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
    -        // Запрос завершён. Обрабатываем его здесь
    -    }
    -}
    -// Отправляем запрос с указанным телом
    -xhr.send('name=viktor&password=VikTheBest111');
    -// xhr.send(new Blob());
    -// xhr.send(new Int8Array());
    -// xhr.send(document);
    -                    
    -
    -
    -
    -
    -

    Свойства объекта XMLHttpRequest

    -
      -
    • readyState (readonly) - текущее состояние запроса
    • -
    • response (readonly) - ответ сервера (text/JSON/Blob/document)
    • -
    • responseText (readonly) - текст ответа
    • -
    • responseType - формат ответа (text/JSON/Blob/document)
    • -
    • responseURL (readonly) - URL адрес запроса
    • -
    • status (readonly) - HTTP статус результата отправленного запроса
    • -
    • statusText (readonly) - текст статуса
    • -
    • timeout - ограничение по времени ожидания ответа
    • -
    • withCredentials - разрешать ли куки для межсайтовых запросов
    • -
    -
    -
    -

    Пример

    -

    - Как сделать из обработчика коллбэк? -

    -
    
    -function load(url, callback) {
    -    const xhr = new XMLHttpRequest();
    -    xhr.onreadystatechange = function() {
    -        if (xhr.readyState === xhr.DONE) {
    -            if (xhr.status === 200) {
    -                callback(xhr.response);
    -            } else if (xhr.status === 404) {
    -                console.log('Page not found!');
    -            }
    -        }
    -    }
    -    xhr.open('GET', url, true);
    -    xhr.send();
    -}
    -
    -load('https://developer.mozilla.org', function(res) {
    -    console.log('Результат XHR запроса: ' + res);
    -});
    -                    
    -
    -
    -

    Пример 2

    -
    
    -const xhr = new XMLHttpRequest();
    -xhr.open('GET', '/server', true);
    -
    -// Установим максимально допустимое время на выполнение запроса
    -// 2000 мс - 2 с
    -xhr.timeout = 2000;
    -
    -xhr.onload = function () {
    -    // Всё хорошо - запрос выполнен
    -    // Выводим на консоль текст ответа
    -    console.log(xhr.responseText);
    -};
    -
    -xhr.ontimeout = function (e) {
    -    // Время запроса истекло
    -    console.log('Попробуйте ещё раз!');
    -};
    -
    -xhr.send();
    -                    
    -
    -
    -
    -
    -

    Методы объекта XMLHttpRequest

    -
      -
    • abort() - прерывает запрос
    • -
    • getAllResponseHeaders() - возвращает строку из заголовков HTTP ответа
    • -
    • getResponseHeader() - выдаёт значение конкретного заголовка ответа
    • -
    • open() - инициализация и настройка запроса
    • -
    • overrideMimeType() - переопределение MIME типа данных из ответа
    • -
    • send() - отправка запроса
    • -
    • setRequestHeader() - задаёт заголовок HTTP запроса
    • -
    -
    -
    -

    Пример

    -
    
    -const reqestButton = document.querySelector('button.request');
    -const abortButton = document.querySelector('button.abort');
    -
    -let xhr = null;
    -
    -reqestButton.addEventListener('click', function() {
    -    xhr = new XMLHttpRequest();
    -    const method = 'GET';
    -    const url = 'https://learn.paradox.red/';
    -    xhr.open(method, url, true);
    -    xhr.send();
    -});
    -abortButton.addEventListener('click', function() {
    -    if (xhr) {
    -        xhr.abort();
    -    }
    -});
    -                    
    -
    -
    -

    Пример с заголовками

    -
    
    -const request = new XMLHttpRequest();
    -request.open('GET', 'file.txt', true);
    -request.send(null);
    -
    -request.addEventListener('readystatechange', function() {
    -    // Если были получены заголовки
    -    if(this.readyState === this.HEADERS_RECEIVED) {
    -
    -        // Получаем все заголовки в одной строке
    -        const headers = request.getAllResponseHeaders();
    -
    -        // Разбиваем одну большую строку в массив подстрок
    -        // Где разделителем выступают символы конца строки \r\n
    -        // Тогда каждый элемент массива будет представлять собой один заголовок
    -        const arr = headers.trim().split(/[\r\n]+/);
    -
    -        // Объект для хранения заголовков как ключи-значения
    -        const headerMap = {};
    -        // Перебираем все строки заголовков
    -        arr.forEach(function (line) {
    -            // Разбиваем строку заголовка на символе двоеточия :
    -            const parts = line.split(': ');
    -            // Первый элемент полученного массива будет названием заголовка
    -            const header = parts[0];
    -            // Второй элемент массива будет его значением
    -            const value = parts[1];
    -            // Добавляем их в объект headerMap
    -            headerMap[header] = value;
    -        });
    -
    -        const contentType = headerMap['content-type'];
    -        console.log(headerMap);
    -    }
    -});
    -                    
    -
    -
    -

    Пример 3

    -
    
    -const client = new XMLHttpRequest();
    -client.open('GET', 'unicorns-are-teh-awesome.txt', true);
    -
    -// Заголовки HTTP запроса должны выставляться между open и send
    -// Устанавливаем разные заголовки для отключения хеширования
    -xhr.setRequestHeader('cache-control', 'no-cache, must-revalidate, post-check=0, pre-check=0');
    -xhr.setRequestHeader('cache-control', 'max-age=0');
    -xhr.setRequestHeader('expires', '0');
    -xhr.setRequestHeader('expires', 'Tue, 01 Jan 1980 1:00:00 GMT');
    -xhr.setRequestHeader('pragma', 'no-cache');
    -
    -client.send(null);
    -
    -client.onreadystatechange = function() {
    -    // Если получены заголовки
    -    if(this.readyState === this.HEADERS_RECEIVED) {
    -        // Получаем конкретный заголовок - заголовок Content-Type
    -        const contentType = client.getResponseHeader('Content-Type');
    -        // Если значение заголовка Content-Type не JSON
    -        // т.е. сервер хочет ответить не в JSON формате, а каком-то другом
    -        if (contentType !== 'application/json') {
    -            // Прерываем запрос
    -            client.abort();
    -        }
    -    }
    -}
    -                    
    -
    -
    -
    -
    -

    События объекта XMLHttpRequest

    -
      -
    • abort - когда запрос прерывается
    • -
    • error - когда во время отправки запроса происходит
    • -
    • load - когда приходит ответ
    • -
    • loadend - когда происходит abort, error или load
    • -
    • loadstart - когда запрос начинает получать данные ответа
    • -
    • progress - происходит периодически, пока загружается ответ
    • -
    • timeout - когда истекает максимальное время запроса
    • -
    -
    -
    -

    Пример событий XMLHttpRequest

    - -

    - See the Pen - Live XHR example by Pavel (@ParadoxMaster) - on CodePen. -

    - -
    -
    -
    -
    -

    Цельный пример

    -

    - Пример общения клиента и сервера на PHP через XMLHttpRequest: -

    -
    -
    -
    
    -<!doctype html>
    -<html>
    -    <head></head>
    -    <body>
    -        <form id="loginform" method="post">
    -            <div>
    -                Имя пользователя:
    -                <input type="text" name="username" id="username" />
    -                Пароль:
    -                <input type="password" name="password" id="password" />    
    -                <input type="submit" name="loginBtn" id="loginBtn" value="Login" />
    -            </div>
    -        </form>
    -        <script type="text/javascript">
    -// Получаем все необходимые элементы DOM дерева
    -const usernameField = document.getElementsByName('username')[0];
    -const passwordField = document.getElementsByName('password')[0]
    -const form = document.getElementById('loginform');
    -// Вешаем на событие формы 'submit' обработчик
    -form.addEventListener('submit', function(e) {
    -    // Блокируем поведение по-умолчанию для формы
    -    e.preventDefault();
    -    // Создаём объект XMLHttpRequest
    -    const xhr = new XMLHttpRequest();
    -    // Устанавливаем, что будет делать POST запрос по адресу 'login.php'
    -    xhr.open('POST', 'login.php');
    -    // С помощью заголовков настраиваем тип контента
    -    xhr.setRequestHeader('Accept', 'application/json');
    -    xhr.setRequestHeader('Content-Type', 'application/json');
    -    // Создаём объект с данными, которые будем отправлять на сервер
    -    const requestBody = {
    -        'username': usernameField.value,
    -        'password': passwordField.value
    -    };
    -    // Отправляем запрос, передавая в его теле параметры
    -    xhr.send(JSON.stringify(requestBody));
    -    // Добавляем обработчик для события завершения запроса
    -    xhr.addEventListener('load', function() {
    -        // Если запрос завершился успешно
    -        if (xhr.status === 200) {
    -            // Парсим JSON ответ в объект JS
    -            const jsonData = JSON.parse(xhr.response);
    -            // Если в ответе по ключу 'success' находится true
    -            if (jsonData.success) {
    -                // Переходим на страницу профиля пользователя
    -                location.href = 'my_profile.php';
    -            } else {
    -                // Иначе выводим сообщение
    -                alert('Вы ввели неверные данные!');
    -            }
    -        }
    -    });
    -});
    -        </script>
    -    </body>
    -</html>
    -                            
    -
    -
    -
    -
    
    -<?php
    -// Хранящиеся на сервере данные о логине и пароле пользователя
    -$username = 'Bernie';
    -$password = 'pass12345';
    -
    -// Если в принятом POST запросе есть параметры 'username' и 'password'
    -if (isset($_POST['username']) && isset($_POST['password'])) {
    -    // Проверяем, совпадают ли они с хранящимися на сервере
    -    if ($_POST['username'] === $username && $_POST['password'] === $password) {
    -        // Возвращаем ответ в формате JSON со значеним true по ключу 'success'
    -        echo json_encode(array('success' => true));
    -    } else {
    -        // Если имя пользователя или пароль не совпали, то возвращаем JSON со значением false в 'success'
    -        echo json_encode(array('success' => false));
    -    }
    -} else {
    -    // Если в запросе отсутствовали параметры 'username' и 'password'
    -    // Возвращаем дополнительный ключ 'error' со значением true
    -    echo json_encode(array('success' => false, 'error' => true));
    -}
    -?>
    -                            
    -
    -
    -
    -
    -

    Цельный пример 2

    -

    - Пример автодополнения с серверной обработкой: -

    -
    -
    -
    
    -<html>
    -    <head></head>
    -    <body>
    -        <p>
    -            <b>Start typing a name in the input field below:</b>
    -        </p>
    -        <form> 
    -            Имя: <input type="text" class="name"onkeyup="showHint(this.value)">
    -        </form>
    -        <p>
    -            Подсказки: <span id="txtHint"></span>
    -        </p>
    -        <script>
    -// Элемент страницы, в котором будут отображаться подсказки
    -const hints = document.getElementById('txtHint');
    -
    -// Функция-обработчик для события нажатия клавиши в текстовом поле
    -function showHint(e) {
    -    // Получаем записанную в текстовое поле строку
    -    const str = e.target.value;
    -    // Если строка пустая
    -    if (str.length === 0) {
    -        // Обнуляем текст в поле подсказок 
    -        hints.innerHTML = '';
    -        return;
    -    } else {
    -        // Если в результате нажатия клавиши в текстовом поле появился какой-либо текст
    -        // Создаём запрос
    -        const xmlhttp = new XMLHttpRequest();
    -        // Назначаем обработчик на событие изменение состояния запроса
    -        xmlhttp.addEventListener('readystatechange', function() {
    -            // Если запрос окончен и статут HTTP ответа равен 200
    -            if (this.readyState == 4 && this.status == 200) {
    -                // Выводим сообщение из ответа сервера (responseText) на страницу
    -                hints.innerHTML = xmlhttp.responseText;
    -            }
    -        });
    -        // Настраиваем запрос: будем отправлять GET запрос по адресу 'gethint.php' с параметром q
    -        // В котором передадим на сервер текст из текстового поля
    -        xmlhttp.open('GET', 'gethint.php?q='' + str);
    -        // Отправляем запрос в полёт
    -        xmlhttp.send();
    -    }
    -}
    -
    -const input = document.querySelector('form > input.name');
    -// Вешаем этот обработчик на событие 'keyup' текстового поля
    -input.addEventListener('keyup', showHint);
    -        </script>
    -    </body>
    -</html>
    -                            
    -
    -
    -
    -
    
    -<?php
    -// Массив из имён
    -$a = ['Anna', 'Brittany', 'Cinderella', 'Diana', 'Eva', 'Fiona', 'Gunda', 'Hege', 'Inga',
    -'Johanna', 'Kitty', 'Linda', 'Nina', 'Ophelia', 'Petunia', 'Amanda', 'Raquel', 'Cindy',
    -'Doris', 'Eve', 'Evita', 'Sunniva', 'Tove', 'Unni', 'Violet', 'Liza', 'Elizabeth', 'Ellen'];
    -
    -// Получаем параметр 'q' из запроса от клиента
    -$q = $_REQUEST['q'];
    -
    -$hint = '';
    -
    -// Если в $q есть значение
    -if ($q !== '') {
    -    // Переводим всё к нижнему регистру
    -    $q = strtolower($q);
    -    // Получаем длину строки $q
    -    $len = strlen($q);
    -    // Перебираем все имена из массива имён &name
    -    foreach($a as $name) {
    -        // Получаем первые символы имени, размера строки $q
    -        $begin = substr($name, 0, $len);
    -        // Если имя начинается со строки, переданной с клиента
    -        if ($q === $begin) {
    -            // Добавляем к строке $hint текущее имя
    -            if ($hint === '') {
    -                $hint = $name;
    -            } else {
    -                $hint .= ', $name';
    -            }
    -        }
    -    }
    -}
    -
    -// Возвращаем 'нет совпадений', если не нашлось ни одного имени, начинающегося
    -// с полученной строки $q, или список имён, если таковые имеются
    -echo $hint === '' ? 'нет совпадений' : $hint;
    -?>
    -                            
    -
    -
    -
    -
    -
    -
    -

    Кроссдоменные запросы (CORS)

    -

    - Статья на learn.javascript.ru -

    -
    -
    -
    -
    -

    События в JS

    -

    - JavaScript называют событийно-ориентированным языком программирования, потому что он построен на - асинхронных операциях, а все асинхронные операции сводятся к каким-либо встроенным событиям. -

    -
    - Ответное действие на любую асинхронную операцию внутри движка JS задаётся как функция, - выступающая в виде обработчика для какого-нибудь события. -
    -
    -
    -

    Коллбэки в JS

    -

    - Но при проектировании функций в JS обработчики часто оказываются скрытыми за другими конструкциями - языка. Основной пример этого сокрытия - это коллбэки в асинхронных функциях. -

    -

    - Из любого обработчика легко можно сделать коллбэк, просто поместив назначение обработчика в - дополнительную функцию. -

    -
    -
    -

    Например

    -

    - Возьмём следующий блок кода. В функции getData() здесь есть ошибка. -

    -
    
    -function getData() {
    -    let data;
    -    const xhr = new XMLHttpRequest();
    -    xhr.open('GET', 'example.php');
    -    xhr.send();
    -    xhr.onload = function() {
    -        if (xhr.status === 200) {
    -            data = xhr.response;
    -        }
    -    });
    -    return data;
    -}
    -
    -var data = getData();
    -console.log("The data is: " + data);
    -                    
    -

    - Как правильно структурировать и написать такой код, когда внутри функции выполняется - асинхронное действие и нам нужно вернуть из неё результат этой асинхронной операции? -

    -
    -
    -

    Коллбэк

    -

    - Это можно сделать только через коллбэк во внешней функции, потому что это единственный - способ получения результата асинхронного действия: -

    -
    
    -function getData(callback) {
    -    const xhr = new XMLHttpRequest();
    -    xhr.open('GET', 'example.php');
    -    xhr.send();
    -    xhr.onload = function() {
    -        if (xhr.status === 200) {
    -            let data = xhr.response;
    -            callback(data)
    -        }
    -    });
    -}
    -
    -getData(funсtion cb(data) {
    -    console.log("The data is: " + data);
    -});
    -                    
    -
    -
    -

    Ещё один пример

    -
    
    -function loadAsset(url, type, callback) {
    -    let xhr = new XMLHttpRequest();
    -    xhr.open('GET', url);
    -    xhr.responseType = type;
    -    xhr.onload = function() {
    -        callback(xhr.response);
    -    };   
    -    xhr.send();
    -}
    -
    -loadAsset('coffee.jpg', 'blob', function(blob) {
    -    let objectURL = URL.createObjectURL(blob);
    -    let image = document.createElement('img');
    -    image.src = objectURL;
    -    document.body.appendChild(image);
    -});
    -                    
    -
    -
    -
    -
    -

    Callback hell

    - -

    - Добро пожаловать в ад коллбэков -

    -
    -
    -

    Много коллбэков. Слишком много коллбэков

    -

    - Сперва кажется, что асинхронные функции с коллбэками очень удобное и простое для восприятия - решение для написания неблокирующего кода. -

    -

    - Но в больших проектах на JavaScript асинхронные функции встречаются на каждом шагу. Почти всегда - в коде требуется обращение к удалённым серверам, чтобы получить или обновить какую-то - информацию, необходимую для функционирования веб приложения. -

    -

    - И когда выполнение асинхронной операции начинает зависеть от выполнения другой асинхронной - операции, которая зависит от третьей асинхронной операции, это превращается в лестницеобразный - трудночитаемый и неподдерживаемый код. -

    -
    -
    -

    Обычная ситуация в JS

    - -
    -
    -

    Пирамида из скобочек

    -
    
    -fs.readdir(source, function (err, files) {
    -    if (err) {
    -        console.log('Error finding files: ' + err);
    -    } else {
    -        files.forEach(function (filename, fileIndex) {
    -            console.log(filename);
    -            gm(source + filename).size(function (err, values) {
    -                if (err) {
    -                    console.log('Error identifying file size: ' + err);
    -                } else {
    -                    console.log(filename + ' : ' + values);
    -                    aspect = (values.width / values.height);
    -                    widths.forEach(function (width, widthIndex) {
    -                        height = Math.round(width / aspect);
    -                        console.log('resizing ' + filename + 'to ' + height + 'x' + height);
    -                        this.resize(width, height).write(dest + 'w' + width + '_' + filename, function(err) {
    -                            if (err) {
    -                                console.log('Error writing file: ' + err);
    -                            }
    -                        });
    -                    }.bind(this));
    -                }
    -            });
    -        });
    -    }
    -});
    -                    
    -
    -
    -
    -
    -

    Промисы

    -

    - Промисы - это альтернативный более удобный способ записи асинхронных - операций. -

    -

    - Promise (англ. обещание) - это объект, в который оборачивается асинхронная функция, - чтобы предоставить удобный синтаксис для описания последующих действий, после выполнения - асинхронной операции, т.е. коллбэков. -

    -
    -
    -

    Принципы в основе Промисов

    -

    - Промисы предоставляют контроль над результатом выполнения асинхронной операции: выполнить ли - коллбэк (resolve), если асинхронная операция завершилась корректно, - или же отказаться выполнять (reject), если возникла ошибка - или что-то пошло не так. -

    -

    - У любого промиса есть метод then() (англ. затем, потом), - с помощью которого задаётся коллбэк. -

    -
    -
    -

    Анатомия промиса

    -
    
    -// Создаётся объект Promise, в который оборачивается асинхронная операция
    -const takeTheTrashOut = new Promise(function(resolve, reject) {
    -    // Делаем всю работу
    -    console.log('Я пошел выбрасывать мусор...');
    -    let trashIsOut = taskTrashOut();
    -    // Если что-то пошло не так
    -    if (!trashIsOut) {
    -        // Вызывается reject
    -        // Говорим, что мы не можем продолжить, потому что что-то пошло не так
    -        reject('Я не смог.');
    -    } else {
    -        // Вызывается resolve
    -        // Говорим, что действие выполнено, и можно продолжать
    -        resolve('Дело сделано!');
    -    }
    -});
    -
    -// Обещаем выбросить мусор
    -takeTheTrashOut.then(function(fromResolve) {
    -    // И затем сделать это
    -    console.log('Ну и что вышло?');
    -    console.log(fromResolve);
    -}).catch(function(fromReject) {
    -    // А если не выполним обещание, сделать это
    -    console.log('Ну и что вышло?');
    -    console.log(fromReject);
    -});
    -                    
    -
    -
    -

    Чистый код

    -

    - Промисы позволяют писать чистый код. Вы не можете переплыть океан, пока не построите лодку: -

    -
    
    -// Функция Собрать древесину
    -const getWood = function() {
    -    return new Promise((resolve, reject) {
    -        resolve('Собрано дерево.');
    -    });
    -}
    -// Функция Сделать доски
    -const makePlank = function() {
    -    return new Promise((resolve, reject) {
    -        resolve('Доски сделаны.');
    -    });
    -}
    -// Функция Построить лодку
    -const buildBoat = function() {
    -    return new Promise((resolve, reject) {
    -        resolve('Лодка построена');
    -    });
    -}
    -// Функция Уплыть в океан
    -const sailTheOcean = function() {
    -    return new Promise((resolve, reject) {
    -        resolve('Вы посреди океана на маленькой самодельной деревянной лодке. Поздравляю.');
    -    });
    -}
    -
    -getWood().then(function(res) {
    -    console.log(res);
    -    return makePlank();
    -}).then(function(res) {
    -    console.log(res);
    -    return buildBoat();
    -}).then(function(res) {
    -    console.log(res);
    -    return sailTheOcean();
    -}).then(function(res)) {
    -    console.log(res);
    -    console.log('И что дальше?');
    -});
    -                    
    -
    -
    -

    Продолжение

    -

    - Добавим реальной асинхронности с помощью функции setTimeout(): -

    -
    
    -// Функция Собрать древесину
    -const getWood = function() {
    -    return new Promise((resolve, reject) {
    -        setTimeout(function() {
    -            resolve('Собрано дерево.'); 
    -        }, 4000);
    -    });
    -}
    -// Функция Сделать доски
    -const makePlank = function() {
    -    return new Promise((resolve, reject) {
    -        setTimeout(function() {
    -            resolve('Доски сделаны.');
    -        }, 2000);
    -    });
    -}
    -// Функция Построить лодку
    -const buildBoat = function() {
    -    return new Promise((resolve, reject) {
    -        setTimeout(function() {
    -            resolve('Лодка построена');
    -        }, 6000);
    -    });
    -}
    -// Функция Уплыть в океан
    -const sailTheOcean = function() {
    -    return new Promise((resolve, reject) {
    -        setTimeout(function() {
    -            resolve('Вы посреди океана на маленькой самодельной деревянной лодке. Поздравляю.');
    -        }, 10000);
    -    });
    -}
    -
    -getWood().then(function(res) {
    -    console.log(res);
    -    return makePlank();
    -}).then(function(res) {
    -    console.log(res);
    -    return buildBoat();
    -}).then(function(res) {
    -    console.log(res);
    -    return sailTheOcean();
    -}).then(function(res)) {
    -    console.log(res);
    -    console.log('И что дальше?');
    -});
    -                    
    -
    -
    -

    Тот же пример через коллбэки

    -
    
    -// Функция Собрать древесину
    -const getWood = function(callback) {
    -    setTimeout(function() {
    -        callback('Собрано дерево.'); 
    -    }, 4000);
    -}
    -// Функция Сделать доски
    -const makePlank = function(callback) {
    -    setTimeout(function() {
    -        callback('Доски сделаны.');
    -    }, 2000);
    -}
    -// Функция Построить лодку
    -const buildBoat = function() {
    -    setTimeout(function() {
    -        callback('Лодка построена');
    -    }, 6000);
    -}
    -// Функция Уплыть в океан
    -const sailTheOcean = function(callback) {
    -    setTimeout(function() {
    -        callback('Вы посреди океана на маленькой самодельной деревянной лодке. Поздравляю.');
    -    }, 10000);
    -}
    -
    -getWood(function(res) {
    -    console.log(res);
    -    makePlank(function(res) {
    -        console.log(res);
    -        buildBoat(function(res) {
    -            console.log(res);
    -            sailTheOcean(function(res)) {
    -                console.log(res);
    -                console.log('И что дальше?');
    -            });
    -        });
    -    });
    -});                        
    -                    
    -
    -
    -

    Ещё

    -

    - Там -

    -
    -
    -
    -

    fetch API

    -
    -
    -

    Публичные сервера

    -
    -
    -

    Итераторы и генераторы

    -

    - Там -

    -
    -
    -
    -

    Пример fetch

    -

    - Интересный пример -

    -
    -
    -
    -

    async & await

    -

    - Там -

    -
    - -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/8_jest/img/graph.png b/dist/lecture/8_jest/img/graph.png deleted file mode 100644 index a69e54a..0000000 Binary files a/dist/lecture/8_jest/img/graph.png and /dev/null differ diff --git a/dist/lecture/8_jest/img/vscode-jest.png b/dist/lecture/8_jest/img/vscode-jest.png deleted file mode 100644 index f55fd45..0000000 Binary files a/dist/lecture/8_jest/img/vscode-jest.png and /dev/null differ diff --git a/dist/lecture/8_jest/index.html b/dist/lecture/8_jest/index.html deleted file mode 100644 index f980ba2..0000000 --- a/dist/lecture/8_jest/index.html +++ /dev/null @@ -1,2478 +0,0 @@ - - - - - - Jest - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Тестирование

    -

    Юнит тесты на JavaScript

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    -
    -
    -

    Тестирование

    -

    - Ни один серьёзный проект не обходится без тестирования. -

    -

    - Бывает тестирование методом чёрного ящика - когда тестируется конечный - интерфейс продукта без доступа и знания исходного кода. -

    -

    - И бывает тестирование методом белого ящика - когда тестируется исходный код - программной системы. -

    -

    - Тестирование методом чёрного ящика обычно занимаются тестировщики. -

    -

    - Тестированием белого ящика - программисты. И как раз о таком тестировании мы сейчас и поговорим. -

    -
    -
    -

    Юнит тесты

    -

    - Любому проекту нужны тесты. Если заглянуть, например, на GitHub - в каждом мало-мальски - объёмном и поддерживаемом проекте можно будет найти папку с тестами. -

    -

    - Это - Юнит-тесты, - цемент, скрепляющий весь код и не дающий - ему развалиться. -

    -
    -
    - Юнит-тесты -
    - Юнит-тесты, или Модульные тесты - тесты, которые проверяют - работоспособность отдельных функций в программного коде системы. -
    -

    - Юнит-тесты пишет программист, а не тестировщик. -

    -

    - Когда программист пишет код, вместе с этим кодом он должен писать для него юнит-тесты. - Юнит-тесты проверяют работоспособность написанного кода. -

    -

    - И это не что-то дополнительное или необязательное. Это - обязанность любого (практически) - программиста, над каким бы проектом он не работал. -

    -

    - Если вы пишете код для реального проекта, который нужно будет поддерживать и обновлять, - - вам нужны будут юнит-тесты. -

    -
    -
    -

    Юнит-тесты

    -

    - Любой код состоит из набора функций, ну или объектов с методами. И юнит тесты позволяют - точечно оценить работоспособность функций, и сказать, где и что работает не по плану. -

    -

    - Это чрезвычайно важно для Регрессионного тестирования - когда - вы обновляете часть кода, и нужно убедиться, что ничего из того, что работало раньше, не - поломалось. -

    -

    - Или, вот ещё один пример, когда у вас относительно большая кодовая база, например, несколько - десятков тысяч строк, вы можете долгое время не работать над какой-то частью программы, - и забыв, как работает код, вернуться, и наломать дров. В таком случае, юнит тесты - сразу дадут знать, что именно, и в каких местах, пошло не так. -

    -
    -
    -

    График

    - -
    -
    -
    -
    -

    Юнит тесты

    -

    - В первую очередь юнит тесты используются для тестирования логики. Для тестирования интерфейса - пользователя существуют другие виды тестов. -

    -

    - А в веб программировании вся основная логика обычно располагается на бэкенде - серверной части - приложения. Поэтому юнит тесты не так активно используются во фронтенд разработке. -

    -

    - Но всё равно есть возможности писать юнит тесты для кода, предназначенного для браузера, и - мы сейчас научимся это делать. -

    -
    -
    -

    Юнит тесты в JavaScript

    -

    - В JS существует множество библиотек (фреймворков) для написания юнит тестов: -

    -
      -
    • Jest
    • -
    • Mocha
    • -
    • Jasmine
    • -
    • Karma
    • -
    -
    -
    -
    -
    -

    Jest

    -

    - Jest - самый многофункциональный и универсальный фреймворк тестирования. -

    -

    - Многие другие фреймворки тестирования сосредоточены на каком-то одном аспекте юнит тестов, - и для добавления новой функциональности, которая практически всегда бывает нужна, - требуется устанавливать дополнительные пакеты. -

    -

    - В Jest-е же есть всё и сразу. -

    -

    - Поэтому мы будем рассматривать юнит тесты именно с этим фреймворком. -

    -
    -
    -

    Установка Jest 1

    -

    - Чтобы установить Jest, понадобится установленный NodeJS на компьютере. А также пакетный менеджер - NodeJS - npm, идущий в комплекте со средой. -

    -

    - Также проект, к которому нужно подключить Jest, должен являться пакетом NodeJS, т.е. содержать - файл package.json. -

    -

    - Создать этот файл можно консольной командой: -

    -
    
    -npm init
    -                
    -
    -
    -

    Установка Jest 2

    -

    - Устанавливается Jest с помощью команды: -

    -
    
    -npm i -D jest
    -npm i -D @types/jest
    -                
    -

    - Для того, чтобы его можно было удобно запускать из консоли, нужно прописать соответствующую - задачу в разделе scripts в файле package.json: -

    -
    
    -"scripts": {
    -    "test": "jest"
    -}
    -                
    -
    -
    -

    Необходимые зависимости

    -

    - Чтобы тесты могли работать с файлами модулей, необходимо дополнительно установить еще - и эти пакеты: -

    -
    
    -npm i -D @babel/core
    -npm i -D @babel/preset-env
    -                
    -

    - Затем, в корне проекта создать файл .babelrc, и написать в нём: -

    -
    
    -{
    -    "env": {
    -        "test": {
    -            "presets": ["@babel/preset-env"]
    -        }
    -    }
    -}
    -                
    -
    -
    -

    Запуск

    -

    - Чтобы запустить все юнит тесты на исполнение, нужно выполнить команду: -

    -
    
    -npm test
    -                
    -

    - Или установить расширение для VS Code для Jest: -

    - -
    -
    -

    Файлы с тестами

    -

    - По умолчанию, Jest ищет все файлы, название которых заканчивается на test.js. -

    -

    - Например, если у вас есть файл index.js, то тесты для функций этого файла обычно выносят - в файл index.test.js. Или создают отдельную директорию test в корне проекта, куда - размещают все файлы тестов. -

    -
    -
    -
    -
    -

    Юнит тесты

    -

    - Но есть одна важная особенность. Юнит тесты обычно запускаются в среде NodeJs, а не в браузере, - даже если это браузерный JavaScript. -

    -

    - В браузере запускают другой тип тестов - функциональные, но про них будет следующая лекция. -

    -
    -
    -

    Правила написания функций

    -

    - Для того, чтобы код было удобно тестировать, нужно стараться как можно больше использовать - чистые функции. -

    -
    - Чистые функции - функции, никак не изменяющие общего состояния - системы и не имеющие побочных эффектов. Для одного и того же набора входных параметров - функция всегда должна возвращать одинаковый результат. -
    -

    - Более подробно о чистых функциях можно почитать здесь. -

    -
    -
    -

    Суть

    -
    - Главное правило, которого следует придерживаться в браузерном JS - всегда отделять - чистую логику от кода изменения интерфейса (HTML страницы). -
    -
    -
    -
    -
    -

    Модули

    -

    - Тесты всегда пишут в отдельных файлах, поэтому возникает необходимость в получении кода из - исходных файлов. Нужно ведь как-то обращаться к функциям, которые собираетесь тестировать. -

    -

    - Обычные скриптовые файлы, которые подключаются к HTML странице, нельзя подключить к другому - JavaScript файлу. Ведь тесты запускаются в NodeJS, где никакого HTML документа нет. -

    -

    - И получается, что нужно так писать код, чтобы файлы можно было подключить и к HTML странице, - и к другому файлу в NodeJS. -

    -

    - И этого можно добиться, структурировав файлы в модули ES6. -

    -
    -
    -

    Модули ES6

    -
    - Модули - способ структуризации и группировки JavaScript кода, - когда каждый отдельный файл JS предоставляет свое собственное пространство имён с - приватными и публичными элементами. -
    -

    - Модули - это те же файлы JavaScript, только с небольшими дополнениями в коде, и альтернативным - способом подключения. -

    -
    -
    -

    Закрытые модули

    -

    - При обычном подключение JS файлов, все глобально объявленные переменные и функции попадают - в общий глобальный контекст. -

    -

    - При использовании модулей же такого не происходит - в глобальный контекст ничего не добавляется. - У каждого модуля своё закрытое пространство имён. -

    -

    - По умолчанию, в модуле все переменные и функции закрыты. Это значит, что к ним никак нельзя - получить доступ из других файлов/модулей. -

    -
    -
    -

    Экспорт

    -

    - В модулях можно помечать, к каким элементам нужно дать возможность обращаться из других модулей. -

    -

    - Это называется Экспортом. -

    -

    - Каждый модуль может экспортировать свои элементы, которые должны быть публичными. -

    -

    - Например, если в модуле (файле) у вас описано 10 функций, и вы экспортируете одну из них - главную, - то только эту функцию можно будет использовать в других модулях (файлах). -

    -
    -
    -

    Импорт

    -

    - Подключение в один модуль экспортируемых элементов из другого модуля называется - Импортом. -

    -

    - Т.е. сам по себе экспорт не делает глобально видимыми экспортируемые объекты. Экспорт просто позволяет - делать импорт. -

    -

    - Если вы хотите что-то из одного файла использовать в другом файле, то в файле-источнике нужно - прописать экспорт нужного элемента, а в другом файле сделать его импорт. -

    -
    -
    -

    Ключевое слово export

    -

    - Для того, чтобы отметить элемент, как экспортируемый, к нему в начале, перед определением, - нужно прописать ключевое слово export. -

    -

    - Хоть можно экспортировать и переменные, рекомендуется экспортировать только функции или классы. -

    -
    
    -export function myFunc(arg1) {
    -    console.log('I work with ' + arg1);
    -    return 0;
    -}
    -
    -export class SomeClass {
    -    constructor() {
    -        console.log('Constructing an instance of the class SomeClass');
    -    }
    -}
    -
    -export const key = '6723tgfbvysdbcswygr23gd8237Tr3rwrr';
    -                
    -
    -
    -

    Комбинированный экспорт

    -

    - Можно записывать экспорт иначе, не прописывая ключевое слово export - по всему коду, а написав весь перечень экспортируемых объектов за один раз: -

    -
    
    -function myFunc(arg1) {
    -    console.log('I work with ' + arg1);
    -    return 0;
    -}
    -
    -class SomeClass {
    -    constructor() {
    -        console.log('Constructing an instance of the class SomeClass');
    -    }
    -}
    -
    -const key = '6723tgfbvysdbcswygr23gd8237Tr3rwrr';
    -
    -// Комбинированный список экспортируемых объектов
    -export { myFunc, SomeClass, key };
    -                
    -
    -
    -

    Ключевое слово import

    -

    - Подключение экспортируемых элементов осуществляется с помощью ключевого слова - import. Обычно это прописывается в самом начале файла. -

    -

    - Есть несколько вариаций записи этой команды. -

    -
    -
    -

    Выборочный импорт

    -

    - Можно импортировать конкретные объекты по имени, тогда это записывается следующим образом: -

    -
    
    -// Импорт функции myFunc и класса SomeClass из другого модуля (файла) module-file-name.js
    -import {myFunc, SomeClass} from './module-file-name.js';
    -                
    -

    Тогда объекты будут доступны по прописанным именам:

    -
    
    -const retVal = myFunc(123);
    -const instance = new SomeClass();
    -                
    -

    - Суть этого способа в том, что мы импортируем не всё, что экспортирует модуль, а только то, - что нам нужно. -

    -
    -
    -

    Полный импорт

    -

    - Также можно импортировать весь модуль целиком: -

    -
    
    -// Импортируем всё в объект myModule из модуля (файла) module-file-name.js
    -import * as myModule from './module-file-name.js';
    -                
    -

    - Тогда доступ к импортированным элементам будет осуществляться через ключи (свойства) - объекта импорта: -

    -
    
    -const retVal = myModule.myFunc(123);
    -const instance = new myModule.SomeClass();
    -let a = 'key string: ' + myModule.key;
    -                
    -
    -
    -

    Подключение модуля к странице

    -

    - Для того, чтобы подключить к HTML странице JavaScript файл, являющийся модулем (а модулем - будет считаться любой JavaScript файл, в котором присутствуют команды - import или export), нужно в теге - script использовать дополнительный атрибут type="module". -

    -
    
    -<script src="js/module-file-name.js" type="module"></script>
    -                
    -

    - Модули, которые используются в других модулях (через import), дополнительно подключать к - HTML документу не нужно. Обычно подключается лишь один главный модуль, а через него уже - идут связи с остальными. -

    -
    -
    -

    Связывание модулей

    - -
    -
    -
    -
    -

    Jest

    -

    - Jest - наиболее объёмный и функциональный фреймворк. -

    -

    - В нём из коробки идут все необходимые компоненты: -

    -
      -
    • Богатый набор матчеров
    • -
    • Моки для функций и модулей
    • -
    • Спаи
    • -
    • Интеграции с babel, rewire, jsdom и др.
    • -
    • Множество CLI опций
    • -
    • Метрики покрытия тестами
    • -
    -
    -
    -

    Первый тест

    -

    - Простейший пример теста: -

    -
    
    -test('Два плюс два равно четыре', function() {
    -    expect(2 + 2).toBe(4);
    -});
    -                
    -
    -
    -

    Структура теста

    -

    - Любой тест задаётся вызовом функции test, или функции - it - это синонимы. -

    -

    - Эта функция принимает первым параметром строку - описание теста. Здесь принято кратко, - в двух словах, описывать, что проверяет данный тест. -

    -
    
    -test('Что проверяем', function() {
    -    // Тело теста
    -});
    -// или
    -it('Что проверяем', function() {
    -    // Тело теста
    -});
    -                
    -
    -
    -

    Triple A

    -

    - Стандарт оформления юнит тестов - схема ААА, когда тело теста условно разделяется на три части: -

    -
      -
    • Arrange - назначение. Создание всех необходимых переменных и объектов для выполнения проверяемого действия.
    • -
    • Act - действие. Выполнение тестируемого действия.
    • -
    • Assert - проверка. Сравнение ожидаемого результата тестируемого действия с фактическим результатом.
    • -
    -
    
    -test('Что тестируем', function() {
    -    // Arrange
    -
    -    // Act
    -
    -    // Assert
    -});
    -                
    -
    -
    -

    Пример ААА

    -

    - Тестируем функцию Math.sqrt(): -

    -
    
    -test('Корень из 36 это 6', function() {
    -    // Arrange - создаём переменные
    -    const number = 36;
    -    const expectedSqrt = 6;
    -    // Act - тестируемое действие и получение реального результата
    -    const realSqrt = Math.sqrt(number);
    -    // Assert - сравнение, совпал ли ожидаемый и реальный результат
    -    expect(realSqrt).toBe(expectedSqrt);
    -});
    -                
    -
    -
    -
    -
    -

    Матчеры

    -

    - Результат любого теста отталкивается от какой-либо специфической проверки, от сравнения ожидаемого - результата и фактического результата. И для выполнения этих проверок используются - Матчеры. -

    -

    - Собственно, Матчеры - это категория функций и объектов в библиотеке - тестирования, которые используются для написания проверок в тесте (секции Assert). -

    -

    - Любой тест опирается на какой-нибудь матчер. Не может быть теста без матчера. -

    -
    -
    -

    Матчеры в Jest

    -

    - Все матчеры в Jest прописываются с помощью функции expect(). -

    -

    - Например, самая стандартная проверка на равенство: -

    -
    
    -expect(8 * 6).toBe(48);
    -                
    -

    - И такой синтаксис всегда: вызывается функция expect(), в неё передаётся - полученный результат, а затем у вернувшегося объекта вызывается один из методов (здесь - toBe) - проверки, в котором уже указывается ожидаемый результат. -

    -

    - Вызовов функции expect() может быть несколько в тесте, но лучше - без необходимости не использовать больше одного. -

    -
    -
    -

    Функции-матчеры

    -

    - В объекте, который возвращает функция expect(), целая куча разных - матчеров на любую ситуацию. -

    -

    - Полный их список можно найти в официальной документации. -

    -

    - Функции матчеры называются таким образом, чтобы из строки кода проверки - формировалось практически полноценное английское предложение. -

    -

    - Например: -

    -
    
    -// Ожидаем, что строка будет иметь длину 7
    -expect(string).toHaveLength(7);
    -// Ожидаем, что число будет больше или равно 25
    -expect(number).toBeGreaterThanOrEqual(25);
    -// Ожидаем, что имя не будет содержать символа '-'
    -expect(name).not.toContain('-');
    -                
    -
    -
    -
    -
    -

    Виды матчеров

    -

    - Условно, все функции-матчеры можно разбить на следующие категории: -

    -
      -
    • Проверки на равенство
    • -
    • Проверки для чисел
    • -
    • Проверки для строк
    • -
    • Проверки для коллекций
    • -
    • Проверки объектов
    • -
    • Проверки исключений
    • -
    • Проверки снапшотов
    • -
    • Проверки моков и спаев
    • -
    -
    -
    -
    -
    -

    Проверки на равенство

    -

    - Самая основная проверка, которая используется в 3/4 тестов - toBe(). -

    -

    - toBe() сравнивает полученное значение с ожидаемым, по подобию - оператора ===. Т.е. строгое сравнение для примитивов, и ссылочное сравнение для объектов. -

    -
    
    -const item = {
    -    name: 'Сливочное масло',
    -    mass: 250,
    -};
    -test('Весит 250 грамм', function() {
    -    expect(item.mass).toBe(250);
    -});
    -test('Называется "Сливочное масло"', () => {
    -    expect(item.name).toBe('Сливочное масло');
    -});
    -                
    -
    -
    -

    toBe - по ссылке

    -

    - Матчер toBe() не подойдёт, если нужно сравнить по значению - два объекта с разными ссылками: -

    -
    
    -function getCart() {
    -    return {
    -        name: 'Сливочное масло',
    -        mass: 250,
    -    };
    -}
    -test('В корзине находится указанная пачка масла', function() {
    -    const expectedItem = {
    -        name: 'Сливочное масло',
    -        mass: 250,
    -    };
    -    const cartItem = getCart();
    -    // Упсс... Тест не проходит
    -    expect(cartItem).toBe(expectedItem);
    -});
    -                
    -
    -
    -

    Матчер toEqual

    -

    - Для сравнения объектов по значению нужно использовать матчер toEqual(). -

    -

    - toEqual() рекурсивно сравнивает все ключи и значения между двумя объектами. -

    -
    
    -function getCart() {
    -    return {
    -        name: 'Сливочное масло',
    -        mass: 250,
    -    };
    -}
    -test('В корзине находится указанная пачка масла', function() {
    -    const expectedItem = {
    -        name: 'Сливочное масло',
    -        mass: 250,
    -    };
    -    const cartItem = getCart();
    -    // Все работает!
    -    expect(cartItem).toEqual(expectedItem);
    -});
    -                
    -
    -
    -

    Сравнения с константами

    -

    - В Jest есть много матчеров, которые сравнивают полученный результат с какими-то - константными значениями. Можно обойтись и без них, используя универсальный - toBe(), но они позволяют упростить чтение теста и - сделать код чище. -

    -

    - Например, матчер toBeFalsy(): -

    -
    
    -expect(1 === 8).toBeFalsy();
    -                
    -

    - То же самое можно написать с использованием стандартного toBe(): -

    -
    
    -expect(1 === 8).toBe(false);
    -                
    -
    -
    -

    Специфичные матчеры

    -

    - К подобным матчерам относятся: -

    -
      -
    • toBeDefined() - что угодно, кроме undefined
    • -
    • toBeFalsy() - равно false
    • -
    • toBeNull() - равно null
    • -
    • toBeTruthy() - равно true
    • -
    • toBeUndefined() - равно undefined
    • -
    • toBeNaN() - равно NaN
    • -
    -
    -
    -

    Пример тестирования функции деления

    -
    
    -function divide(a, b) {
    -    return a / b;
    -}
    -
    -test('Целочисленное деление', function() {
    -    const a = 32;
    -    const b = 2;
    -    const expected = 16;
    -    const result = divide(a, b);
    -    expect(result).toBe(expected);
    -});
    -test('Деление нуля', function() {
    -    const a = 0;
    -    const b = 2;
    -    const expected = 0;
    -    const result = divide(a, b);
    -    expect(result).toBe(expected);
    -});
    -test('Деление на ноль', function() {
    -    const a = 32;
    -    const b = 0;
    -    const expected = Infinity;
    -    const result = divide(a, b);
    -    expect(result).toBe(Infinity);
    -});
    -test('Деление непонятно чего непонятно на что', function() {
    -    const a = [1,2,3,4,5,6];
    -    const b = ',';
    -    const result = divide(a, b);
    -    expect(result).toBeNaN();
    -});
    -                
    -
    -
    -
    -
    -

    Отрицание матчера

    -

    - Любой матчер можно обратить. Т.е. вместо матчера "должно быть равно" сделать матчер - "недолжно быть равно". -

    -

    - И это делается с помощью специального свойства not. -

    -

    - Оно прописывается перед вызовом функции-матчера, и меняет логику проверки на противоположную. -

    -
    
    -expect(что-то).not.матчер(что-то);
    -                
    -
    -
    -

    Пример отрицания

    -
    
    -function bestFlavor() {
    -    return 'картошка';
    -}
    -
    -test('Лучший вкус - не кокос', function() {
    -    const flavor = bestFlavor();
    -    expect(flavor).not.toBe('кокос');
    -});
    -test('Лучший вкус - не банан', function() {
    -    const flavor = bestFlavor();
    -    expect(flavor).not.toBe('банан');
    -});
    -                
    -
    -
    -
    -
    -

    Матчеры для чисел

    -

    - К специфичным для проверки чисел матчерам, относятся матчеры диапазонов, которые - позволяют проверить, попадает ли полученное число в ожидаемый диапазон значений. -

    -

    - Это матчеры: -

    -
      -
    • toBeGreaterThan() - больше чем
    • -
    • toBeGreaterThanOrEqual() - больше или равно чем
    • -
    • toBeLessThan() - меньше чем
    • -
    • toBeLessThanOrEqual() - меньше или равно чем
    • -
    -
    -
    -

    Пример диапазонных матчеров

    -
    
    -function getRandomInt(min, max) {
    -    return Math.ceil(min) + Math.floor(Math.random() * max);
    -}
    -
    -test('Случайное число из диапазона положительных чисел', function() {
    -    const min = 20;
    -    const max = 30;
    -    const value = getRandomInt(min, max);
    -    expect(value).toBeGreaterThanOrEqual(min);
    -    expect(value).toBeLessThanOrEqual(max);
    -});
    -test('Случайное число из диапазона отрицательных чисел', function() {
    -    const min = -50;
    -    const max = -10;
    -    const value = getRandomInt(min, max);
    -    expect(value).toBeGreaterThanOrEqual(min);
    -    expect(value).toBeLessThanOrEqual(max);
    -});
    -                
    -
    -
    -

    Проверка вещественных чисел

    -

    - Из-за своей природы, в JavaScript нельзя надёжно сравнивать два вещественных числа. Поэтому - и матчер toBe() здесь не подходит. -

    -

    - Вещественные (дробные) числа нужно всегда сравнивать с помощью матчера - toBeCloseTo()! -

    -
    
    -test('0.1 плюс 0.2 не равно 0.3 в JS', function() {
    -    // Тест пройдёт, 0.1 + 0.2 действительно НЕ равно 0.3
    -    expect(0.1 + 0.2).not.toBe(0.3);
    -});
    -test('0.1 плюс 0.2 равно примерно 0.3', function() {
    -    // Такой тест будет работать
    -    expect(0.1 + 0.2).toBeCloseTo(0.3);
    -});
    -                
    -
    -
    -
    -
    -

    Проверка строк по регулярным выражениям

    -

    - Строки можно проверять на соответствие регулярному выражению через матчер - toMatch(). -

    -
    
    -function generateRandomName() {
    -    const surnames = ['Пётр', 'Владислав', 'Евгений', 'Марат', 'Николай', 'Валерий', 'Василий'];
    -    const lastnames = ['Мельчиков', 'Доргало', 'Крючочкин', 'Дикай', 'Ломоносов', 'Скорожевский', 'Вепрь', 'Степной'];
    -    const randomSurname = surnames[Math.floor(Math.random() * surnames.length)];
    -    const randomLastname = lastnames[Math.floor(Math.random() * lastnames.length)];
    -    return randomSurname + ' ' + randomLastname;
    -}
    -test('Имя состоит из двух слов', function() {
    -    const newName = generateRandomName();
    -    expect(newName).toMatch(/^[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+$/);
    -});
    -test('Тот же тест, только в профиль', function() {
    -    const pattern = new RegExp('^[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+$');
    -    const newName = generateRandomName();
    -    expect(newName).toMatch(pattern);
    -});
    -                    
    -
    -
    -
    -
    -

    Проверки для коллекций

    -

    Вхождение в коллекцию

    -

    - С помощью матчера toContain() и toContainEqual() - проверяется вхождение элемента в коллекцию (массив, строку, или другое перечисление). -

    -

    - При использовании этого матчера, в expect() нужно передавать - само перечисление, а в toContain() - значение, наличие которого в - предыдущем перечислении нужно проверить. -

    -
    
    -const arr = [2, 53, 11, 8, 25];
    -function addToArr(value) {
    -    arr.push(value);
    -}
    -test('Добавление в массив работает корректно', function() {
    -    const newItem = 17;
    -    addToArr(newItem);
    -    expect(arr).toContain(newItem);
    -});
    -                    
    -
    -
    -

    Проверка длины перечисления

    -

    - Если нужно проверить количество элементов в перечислении, можно воспользоваться матчером - toHaveLength(), который проверяет значение свойства length. -

    -
    
    -function makeLongString(char, length) {
    -    return char.repeat(length);
    -}
    -test('Получается строка верной длины', function() {
    -    const desiredLength = 20;
    -    const resultStr = makeLongString('0', desiredLength);
    -    expect(resultStr).toHaveLength(desiredLength);
    -});
    -                    
    -
    -
    -
    -
    -

    Проверки объектов

    -

    - Объекты можно проверять на наличие "под-объектов", или, если выразиться иначе, на соответствие - шаблона объекта. -

    -

    - Т.е. можно задать объект, и ожидать, что этот объект (его ключи и значения по ним), будет - содержаться внутри другого проверяемого объекта. -

    -

    - Это производится с помощью матчера toMatchObject(). -

    -
    -
    -

    Пример с toMatchObject

    -
    
    -const houseForSale = {
    -    bath: true,
    -    bedrooms: 4,
    -    kitchen: {
    -        amenities: ['плита', 'духовка', 'стиральная машина'],
    -        area: 20,
    -        wallColor: 'белый'
    -    },
    -};
    -    
    -test('the house has my desired features', function() {
    -    const desiredHouse = {
    -        bath: true,
    -        kitchen: {
    -            // Интересность
    -            amenities: expect.arrayContaining(['плита']),
    -            wallColor: expect.stringMatching(/белый|желтый/)
    -        }
    -    };
    -    expect(houseForSale).toMatchObject(desiredHouse);
    -});
    -                    
    -
    -
    -

    Проверка наличия ключа

    -

    - Матчер toHaveProperty() используется для проверки объекта - на наличие в нём указанного свойства (ключа). -

    -
    
    -// Тестируемый объект
    -const houseForSale = {
    -    bath: true,
    -    bedrooms: 4,
    -    kitchen: {
    -        amenities: ['плита', 'духовка', 'стиральная машина']
    -        area: 20,
    -        wallColor: 'белый',
    -        'nice.oven': true
    -    },
    -    'ceiling.height': 2
    -};
    -
    -test('в этом доме есть всё что нужно', function() {
    -    // Обычный синтаксис
    -    expect(houseForSale).toHaveProperty('bath');
    -    expect(houseForSale).toHaveProperty('bedrooms', 4);
    -
    -    expect(houseForSale).not.toHaveProperty('pool');
    -
    -    // Используя точечную нотацию
    -    expect(houseForSale).toHaveProperty('kitchen.area', 20);
    -    expect(houseForSale).toHaveProperty('kitchen.amenities', ['плита', 'духовка', 'стиральная машина']);
    -
    -    expect(houseForSale).not.toHaveProperty('kitchen.open');
    -
    -});
    -                    
    -
    -
    -
    -
    -

    Проверки исключений

    -

    - Можно тестировать возникновение исключений при помощи матчера toThrow(). -

    -

    - В параметрах можно указывать, какое конкретно исключение ожидается получить. -

    -

    - Для этого матчера используется несколько иной синтаксис чем раньше. -

    -

    - Функция, в которой ожидается происхождение исключения, должна быть вызвана внутри метода - expect(), вот по такому принципу: -

    -
    
    -expect(() => {
    -    // Вот здесь должен находиться код, в котором
    -    // Ожидается возникновение исключения
    -}).toThrow();
    -                    
    -
    -
    -

    Пример с toThrow()

    -
    
    -let compile = function() {
    -    console.log([].join.call(arguments, ' -> '));
    -}
    -function drink(something) {
    -    if (something === 'чернила осьминога') {
    -        compile = function() {
    -            if (arguments.length === 3) {
    -                const includes = [].includes.bind(arguments);
    -                if (includes('волосы козы') && includes('гнилая груша') && includes('муравьиный яд')) {
    -                    throw Error('Ктулху');
    -                }
    -            }
    -        }
    -    } else {
    -        console.log('Bueeeh..');
    -    }
    -}
    -
    -                
    -test('вызов Ктулху', function() {
    -    expect(function() {
    -        drink('чернила осьминога');
    -        compile('волосы козы', 'гнилая груша', 'муравьиный яд');
    -    }).toThrow('Ктулху');
    -});
    -                    
    -
    -
    -
    -
    -

    Снапшоты, или магия Jest

    -
    - Снапшот - это автоматически генерируемое значение ожидаемого - результата, полученное из фактического результата при первом запуске теста. -
    -

    - Т.е. снапшоты можно использовать только тогда, когда вы уверены, что ваша функция написана - правильно и работает как надо. -

    -

    - Тогда можно даже не думать, какой должен быть ожидаемый результат: вы просто задаёте начальные - условия, и результат выводится и запоминается сам. -

    -
    -
    -

    Области применения снапшотов

    -

    - Но не стоит злоупотреблять снапшотами. Их рекомендуется использовать только тогда, когда - ожидаемым результатом является какая-нибудь массивная структура, которую долго прописывать - вручную. -

    -

    - Например, JSON объект, получаемый в качестве ответа от сервера по какому-нибудь API. Или - ветвь из DOM дерева. -

    -

    - Если вы ожидаете, что результатом функции должно быть простое значение, - типа true, то для этих целей снапшоты точно лучше не использовать. -

    -
    -
    -

    Виды снапшотов

    -

    - Снапшоты в Jest бывают двух видов: -

    -
      -
    • Внешние
    • -
    • Встроенные
    • -
    -

    - Значения внешних снапшотов Jest хранит в отдельных файлах. -

    -

    - А значения встроенных снапшотов включаются прямо в код файла тестов. -

    -
    -
    -

    Внешние снапшоты

    -

    - Для использования внешнего снапшота предназначен матчер toMatchSnapshot(). -

    -

    - Самостоятельно нигде не нужно прописывать ожидаемого результата. Вы просто получаете - фактический результат и используете для него этот матчер: -

    -
    
    -expect(полученныйРезультат).toMatchSnapshot();
    -                    
    -

    - И тогда, после первого запуска такого теста, в папке с этим тестом будет создана подпапка - __snapshots__, в которой появится файл с ожидаемым результатом для данного теста. -

    -
    -
    -

    Пример с внешним снапшотом

    -
    
    -// Тестируемая функция
    -function getDataById(id) {
    -    if (id === 1) {
    -        return { name: "The Great Gatsby", year: 1925, genre: "novel" };
    -    } else if (id === 2) {
    -        return { name: "Ulysses", year: 1918, genre: "modernist novel" };
    -    } else {
    -        return null;
    -    }
    -}
    -
    -test('Получение данных по id', function() {
    -    const id = 1;
    -    const data = getDataById(id);
    -    expect(data).toMatchSnapshot();
    -});
    -                    
    -
    
    -// Jest Snapshot v1, https://goo.gl/fbAQLP
    -
    -exports[`dwadad 1`] = `
    -Object {
    -    "genre": "novel",
    -    "name": "The Great Gatsby",
    -    "year": 1925,
    -}
    -`;
    -                    
    -
    -
    -

    Встроенные снапшоты

    -

    - Для использования встроенных снапшотов может понадобится установка пакета prettier: -

    -
    
    -npm i -D prettier
    -                    
    -

    - Суть встроенных снапшотов аналогична, только они интегрируются прямо в текст вашего теста, - а не в отдельный файл. -

    -

    - Матчер для использования - toMatchInlineSnapshot(). -

    -
    
    -expect(полученныйРезультат).toMatchInlineSnapshot();
    -                    
    -
    -
    -

    Пример со встроенным снапшотом

    -

    - Переделаем предыдущий пример под встроенные снапшоты: -

    -
    
    -test('Получение данных по id', function() {
    -    const id = 2;
    -    const data = getDataById(id);
    -    expect(data).toMatchInlineSnapshot();
    -});
    -                    
    -

    - Стоит запустить этот тест, и немножко подождать, как... -

    -
    
    -test("Получение данных по id", function() {
    -    const id = 2;
    -    const data = getDataById(id);
    -    expect(data).toMatchInlineSnapshot(`
    -        Object {
    -        "genre": "modernist novel",
    -        "name": "Ulysses",
    -        "year": 1918,
    -        }
    -    `);
    -});
    -                    
    -
    -
    -

    Обновление снапшота

    -

    - После первого запуска, результат каждого нового запуска теста будет сравниваться с - первым результатом. -

    -

    - Но если вам необходимо обновить снапшот (допустим, вы переделали тестируемую функцию), - то это выполняется следующей командой в терминале: -

    -
    
    -npm test -- --updateSnapshot
    -                    
    -
    -
    -
    -
    -

    Дополнительные матчеры

    -

    - Если вам мало стандартных матчеров, то всегда можно дописать свои, с помощью функции - expect.extend(). -

    -

    - Или можно установить пакет с кучей неофициальных, поддерживаемых коммьюнити, матчеров для Jest: -

    -

    - Ссылка на расширения для матчеров -

    -
    -
    -
    -
    -

    setup и teardown

    -

    - Не редко возникает ситуация, когда для выполнения теста нужна какая-то предварительная - инициализация. Или наоборот, после каждого теста требуется подчищать оставленный мусор. -

    -

    - Для этого в Jest есть 4 глобальных функции: -

    -
      -
    • beforeAll() - выполняется 1 раз перед всеми тестами
    • -
    • afterAll() - выполняется 1 раз после всех тестов
    • -
    • beforeEach() - выполняется каждый раз перед каждым тестом
    • -
    • afterEach() - выполняется каждый раз после каждого теста
    • -
    -

    - В эти функции передаётся функция, в которой уже и описываются все действия: -

    -
    
    -beforeAll(function() {
    -    // Действия
    -});
    -                    
    -
    -
    -

    Примеры c -All

    -
    
    -const globalDatabase = null;
    -
    -beforeAll(function() {
    -    // Инициализируем БД и
    -    // Добавляем в БД данные для тестирования
    -    globalDatabase = makeGlobalDatabase();
    -    globalDatabase.insert({testData: 'foo'});
    -    globalDatabase.insert({testData: 'bar'});
    -    globalDatabase.insert({testData: 'baz'});
    -});
    -
    -afterAll(function() {
    -    // Удаляем все тестовые данные из БД
    -    globalDatabase.remove({testData: 'foo'});
    -    globalDatabase.remove({testData: 'bar'});
    -    globalDatabase.remove({testData: 'baz'});
    -});
    -
    -test('Поиск на одно поле работает', function() {
    -    return globalDatabase.find('foo', {}, function(res) {
    -        expect(res.length).toBeGreaterThan(0);
    -    });
    -});
    -
    -test('Поиск на несколько полей работает', function() {
    -    return globalDatabase.find(['foo', 'bar'], {}, function(res) {
    -        expect(res.length).toBeGreaterThan(0);
    -    });
    -});
    -
    -                    
    -
    -
    -

    Пример с afterEach()

    -
    
    -const globalDatabase = makeGlobalDatabase();
    -
    -function cleanUpDatabase(db) {
    -    db.cleanUp();
    -}
    -
    -afterEach(function() {
    -    cleanUpDatabase(globalDatabase);
    -});
    -
    -test('Поиск работает', function() {
    -    return globalDatabase.find('ret', {}, function(res) {
    -        expect(results.length).toBeGreaterThan(0);
    -    });
    -});
    -
    -test('Добавление работает', function() {
    -    return globalDatabase.insert('veg', makeThing(), function(res) {
    -        expect(response.success).toBeTruthy();
    -    });
    -});
    -                    
    -
    -
    -
    -
    -

    Группировка тестов

    -

    - С помощью глобальной функции describe() можно разбивать тесты на - группы. -

    -

    - Например, так обычно разбивают на группы тесты, относящиеся к разной функциональности. -

    -
    
    -describe('Описание группы тестов 1', function() {
    -    test('Тест 1 из группы 1', function() {
    -        // AAA
    -    });
    -    test('Тест 2 из группы 1', function() {
    -        // AAA
    -    });
    -});
    -describe('Описание группы тестов 2', function() {
    -    test('Тест 1 из группы 2', function() {
    -        // AAA
    -    });
    -    test('Тест 2 из группы 2', function() {
    -        // AAA
    -    });
    -    test('Тест 3 из группы 2', function() {
    -        // AAA
    -    });
    -})
    -                    
    -
    -
    -

    Вложенность

    -

    - Функции describe() могут быть свободно вложены друг в друга. -

    -
    
    -describe('Группа 1', function() {
    -    describe('Подгруппа 1', function() {
    -        // Тесты подгруппы 1 группы 1
    -    });
    -    describe('Подгруппа 2', function() {
    -        describe('Под-подгруппа 1', function() {
    -            // Тесты под-подгруппы 1 подгруппы 2 группы 1
    -        });
    -        // Тесты подгруппы 2 группы 1
    -    });
    -    // Тесты группы 1
    -});
    -describe('Группа 2', function() {
    -    // Тесты группы 2
    -});
    -                    
    -
    -
    -

    Пример с группировкой

    -
    
    -const binaryStringToNumber = function(binString) {
    -    if (!/^[01]+$/.test(binString)) {
    -        throw new CustomError('Not a binary number.');
    -    }
    -    return parseInt(binString, 2);
    -};
    -    
    -describe('Тесты функции преобразования битовой строки в число', function() {
    -
    -    describe('Использование неправильной битовой строки', function() {
    -
    -        test('Сравнение не чисел вызывает исключение CustomError', function() {
    -            expect(function() {
    -                binaryStringToNumber('abc')
    -            }).toThrowError(CustomError);
    -        });
    -    
    -        test('Лишние пробелы вызывают исключение CustomError', function() {
    -        expect(dunction() {
    -            binaryStringToNumber('  100')).toThrowError(CustomError);
    -        });
    -    });
    -    
    -    describe('Использование правильной битовой строки', function() {
    -
    -        test('Возвращает корректное число', function() {
    -            expect(binaryStringToNumber('100')).toBe(4);
    -        });
    -    });
    -});
    -                    
    -
    -
    -

    Группировка с setup и teardown

    -

    - Но помимо семантических отличий, у группировки тестов есть ещё и функциональные отличия. -

    -

    - В каждой группе describe() могут присутствовать свои - функции before- и after-. -

    -

    - Если группы вложены в другие группы, то функции before- и - after- будут выполняться от верхних групп до самых внутренних, - все вместе. -

    -
    -
    -

    Пример

    -
    
    -class DataStorage {
    -    constructor(maxElements, locale) {
    -        this.maxElements = maxElements;
    -        this._count = 0;
    -        this._locale = locale;
    -        this._innerStorage = {array: []};
    -        this._blocked = true;
    -    }
    -    
    -    open() {
    -        this._blocked = false;
    -    }
    -    
    -    close() {
    -        this._blocked = true;
    -    }
    -    
    -    isOpen() {
    -        return !this._blocked;
    -    }
    -    
    -    addNext(value) {
    -        if (this._blocked || this._count === this.maxElements) {
    -            return false;
    -        }
    -        this._innerStorage.array.push(value);
    -        this._count++;
    -        return true;
    -    }
    -    
    -    addByKey(key, value) {
    -        if (this._blocked || this._innerStorage.hasOwnProperty(key) || this._count === this.maxElements) {
    -            return false;
    -        }
    -        this._innerStorage[key] = value;
    -        this._count++;
    -        return true;
    -    }
    -    
    -    isEmpty() {
    -        return this._count === 0;
    -    }
    -    
    -    clearAllData() {
    -        if (this._blocked) {
    -            return false;
    -        }
    -        this._innerStorage = {array: []};
    -        this._count = 0;
    -        return true;
    -    }
    -}
    -    
    -    
    -describe('Тестирование класса DataStorage', function() {
    -    
    -    let storage;
    -    
    -    beforeAll(function() {
    -        const locale = 'ru-RU';
    -        const maxElements = 5;
    -        storage = new DataStorage(maxElements, locale);
    -    });
    -    
    -    test('По умолчанию хранилище закрыто', function() {
    -        expect(storage.isOpen()).toBeFalsy();
    -    });
    -    
    -    describe('Закрытое хранилище', function() {
    -    
    -        afterEach(function() {
    -            storage.close();
    -        });
    -    
    -        test('Нельзя добавлять в массив', function() {
    -            const testValue = 22;
    -            const result = storage.addNext(testValue);
    -            expect(result).toBeFalsy();
    -            expect(storage._count).toBe(0);
    -        });
    -    
    -        test('Нельзя добавлять по ключу', function() {
    -            const testKey = 'alpha';
    -            const testValue = 22;
    -            const result = storage.addByKey(testKey, testValue);
    -            expect(result).toBeFalsy();
    -            expect(storage._count).toBe(0);
    -        });
    -    
    -        test('Нельзя очистить', function() {
    -            const result = storage.clearAllData();
    -            expect(result).toBeFalsy();
    -            expect(storage._count).toBe(0);
    -        });
    -    
    -        test('Можно открыть', function() {
    -            storage.open();
    -            expect(storage.isOpen()).toBeTruthy();
    -        });
    -    });
    -    
    -    describe('Открытое хранилище', function() {
    -    
    -        beforeEach(function() {
    -            storage.open();
    -        });
    -    
    -        test('Добавление в массив', function() {
    -            const testValue = 432;
    -            const currentCount = storage._count;
    -            storage.addNext(testValue);
    -            expect(storage._count).toBe(currentCount + 1);
    -            expect(storage._innerStorage.array[0]).toBe(testValue);
    -        });
    -    
    -        test('Добавление по ключу', function() {
    -            const testKey = 'echo';
    -            const testValue = 432;
    -            const currentCount = storage._count;
    -            storage.addByKey(testKey, testValue);
    -            expect(storage._count).toBe(currentCount + 1);
    -            expect(storage._innerStorage[testKey]).toBe(testValue);
    -        });
    -    
    -        test('Можно закрыть', function() {
    -            const countBeforeClosing = storage._count;
    -            storage.close();
    -            expect(storage.isOpen()).toBeFalsy();
    -            expect(storage._count).toBe(countBeforeClosing);
    -        });
    -    
    -        describe('Хранилище с данными', function() {
    -    
    -            beforeEach(function() {
    -                storage.clearAllData();
    -                storage.addNext('четверг');
    -                storage.addNext('пятница');
    -                storage.addByKey('interval', 7);
    -            });
    -        
    -            test('Очистка удаляет все данные', function() {
    -                const result = storage.clearAllData();
    -                expect(result).toBeTruthy();
    -                expect(storage._count).toBe(0);
    -            });
    -        
    -            test('Нельзя добавить повторяющийся ключ', function() {
    -                const testKey = 'interval';
    -                const testValue = 14;
    -                const currentCount = storage._count;
    -                const result = storage.addByKey(testKey, testValue);
    -                expect(result).toBeFalsy();
    -                expect(storage._count).toBe(currentCount);
    -            });
    -        });
    -    
    -        describe('Хранилище переполнено', function() {
    -    
    -            beforeAll(function() {
    -                storage.clearAllData();
    -                for (let i = 0; i < storage.maxElements; ++i) {
    -                storage.addNext(i);
    -                }
    -            });
    -        
    -            test('Нельзя больше добавлять в массив', function() {
    -                const testValue = 22;
    -                const currentCount = storage._count;
    -                const result = storage.addNext(testValue);
    -                expect(result).toBeFalsy();
    -                expect(storage._count).toBe(currentCount);
    -            });
    -        
    -            test('Нельзя больше добавлять по ключу', function() {
    -                const testKey = 'alpha';
    -                const testValue = 22;
    -                const currentCount = storage._count;
    -                const result = storage.addByKey(testKey, testValue);
    -                expect(result).toBeFalsy();
    -                expect(storage._count).toBe(currentCount);
    -            });
    -    
    -        });
    -    });
    -});
    -                    
    -
    -
    -
    -
    -

    Data-driven тесты

    -

    - Data-driven тесты - тесты управляемые данными. Это когда множество тестов строится по одному - и тому же сценарию и отличаются только данными начальных параметров. -

    -

    - Например, функцию деления можно проверить не только на 2 числах, а на наборе из отрицательных, - положительных, с нулем, и т.д. Но проверка всегда будет строится одним и тем же образом - - отличаться будут только входные параметры и ожидаемый результат. -

    -
    -
    -

    Синтаксис Data-driven тестов

    -

    - Для функции test вызывается дополнительный метод - each(), в который передается массив из массивов параметров теста: -

    -
    
    -test.each([
    -    [один набор параметров],
    -    [второй набор параметров],
    -    ...
    -])('Описание теста', function(имена для параметров) {
    -
    -});
    -                    
    -
    -
    -

    Вместо этого

    -

    - Вместо того, чтобы писать несколько одинаковых тестов: -

    -
    
    -test('Деление 8 на 2', function() {
    -    const a = 8;
    -    const b = 2;
    -    const expectedResult = 4;
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -test('Деление -11 на 3', function() {
    -    const a = -11;
    -    const b = 3;
    -    const expectedResult = 3.666666;
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -test('Деление -20 на -5', function() {
    -    const a = -20;
    -    const b = -5;
    -    const expectedResult = 4;
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -test('Деление -200 на 0', function() {
    -    const a = -200;
    -    const b = 0;
    -    const expectedResult = Infinity;
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -test('Деление 0 на 13', function() {
    -    const a = 0;
    -    const b = 13;
    -    const expectedResult = 0;
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -                    
    -
    -
    -

    Вот это

    -

    - Можно написать один data-driven тест, который будет аналогичен предыдущим пяти тестам: -

    -
    
    -test.each([
    -    [8, 2, 4],
    -    [-11, 3, -3.666666],
    -    [-20, -5, 4],
    -    [-200, 0, -Infinity],
    -    [0, 13, 0]
    -])('Деление чисел', function(a, b, expectedResult) {
    -    const result = a / b;
    -    expect(result).toBeCloseTo(expectedResult);
    -});
    -                    
    -
    -
    -

    Data-driven группы

    -

    - По такому же принципу можно делать управляемые данными группы через describe: -

    -
    
    -describe.each([
    -    [[1, 2, 3, 4, 5, 6], 4],
    -    [['str1', 'str2', 'str3', 'str4', 'str5', 'str6'], 'str4']
    -])('Тестирование функций Array для разных типов', function(array, value) {
    -
    -    test('Функция поиска', function() {
    -        const result = array.find((el) => el === value);
    -        expect(result).toBeDefined();
    -    });
    -
    -    test('Функция фильтрации', function() {
    -        const result = array.filter((el) => el !== value);
    -        expect(result).toMatchSnapshot();
    -    });
    -
    -    test('Функция проверки вхождения', function() {
    -        const result = array.includes(value);
    -        expect(result).toBeTruthy();
    -    });
    -
    -});
    -                    
    -

    - Запустите этот код, и посмотрите, что будет со снапшотом для второго теста. -

    -
    -
    -
    -
    -

    Тестирование асинхронного кода

    -

    - Тестирование асинхронных функций - нетривиальная задачка. Ведь прежде чем выполнится - асинхронная операция, сама функция теста уже завершится. -

    -
    
    -// Этот тест не будет работать
    -test('Получение арахисового масла', function() {
    -    function callback(data) {
    -        expect(data).toBe('арахисовое масло');
    -    }
    -    // Асинхронная функция
    -    fetchData(callback);
    -});
    -                    
    -

    - Но в Jest всё предусмотрено, и существуют разные механизмы для тестирования асинхронных - функций с коллбэками, через промисы, или async/await. -

    -
    -
    -

    Браузерные запросы в тестах

    -

    - Небольшая ремарка: тесты Jest запускаются в NodeJS, а в NodeJS не существует глобальной функции - fetch (как и объекта XMLHttpRequest). Чтобы можно было их использовать, нужно устанавливать - дополнительные пакеты. -

    -

    - Для использования XMLHttpRequest: пакет xmlhttprequest. -

    -
    
    -npm i -D xmlhttprequest
    -                    
    -

    - Для использования fetch: пакет isomorphic-fetch. -

    -
    
    -npm i -D isomorphic-fetch
    -                    
    -
    -
    -

    Коллбэк done

    -

    - Простейший вариант тестирования асинхронности - использование дополнительного параметра - функции теста - коллбэка done. Этот коллбэк нужно просто вызвать - в том месте, где асинхронный тест должен завершиться. -

    -

    - Иначе говоря, тест не будет считаться завершенным, пока коллбэк done - не будет вызван. -

    -
    
    -    // Этот тест не будет работать
    -    test('Получение арахисового масла', function() {
    -        function callback(data) {
    -            expect(data).toBe('арахисовое масло');
    -        }
    -        // Асинхронная функция
    -        fetchData(callback);
    -    });
    -                    
    -
    -
    -

    Пример с done

    -
    
    -// Рабочий тест
    -test('Получение арахисового масла', function() {
    -    function callback(data) {
    -        expect(data).toBe('арахисовое масло');
    -        // В месте логического завершения теста вызываем коллбэк done
    -        done();
    -    }
    -    // Асинхронная функция
    -    fetchData(callback);
    -});
    -                    
    -
    -
    -

    Обещание когда-нибудь выполнить тест

    -

    - Если тестируемая асинхронная функция возвращает промис, то тест можно оформить как - цепочку промисов и вернуть последний промис как возвращаемое значение функции теста. - И тогда никакой коллбэк done() больше не нужен. -

    -

    - С предыдущим примером это будет выглядеть вот так: -

    -
    
    -test('Получение арахисового масла', function() {
    -    // Возвращаем из теста цепочку промисов
    -    return fetchData().then(data => {
    -        expect(data).toBe('арахисовое масло');
    -    });
    -});
    -                    
    -
    -
    -

    Матчеры для промисов

    -

    - Запись такого теста с промисами можно упростить, используя специальные матчеры - resolves и rejects: -

    -
    
    -test('Получение арахисового масла', function() {
    -    return expect(fetchData()).resolves.toBe('арахисовое масло');
    -});
    -test('Масла больше нет', function() {
    -    eatAllPeanutButter();
    -    return expect(fetchData()).rejects.toMatch('error');
    -});
    -                    
    -
    -
    -

    Пример

    -
    
    -describe('Тестирование асинхронных запросов', function() {
    -
    -    test('Запрос на получение фрукта', function() {
    -        return expect(fetchData('fruits')).resolves.toBe('apricot');
    -    });
    -    
    -    test.each([
    -        ['diamonds'],
    -        ['phones'],
    -        ['combs'],
    -        ['drug']
    -    ])('Запрос на получение того, чего нет', function(item) {
    -        return expect(fetchData(item)).resolves.toBe('nothing');
    -    });
    -    
    -    // Повышенный уровень опасности взрыва мозга!
    -    test.each('Запросы на получение овощей, фруктов и сладостей вместе', function() {
    -        return expect(
    -            Promise.all([
    -                fetchData('veggies'),
    -                fetchData('fruits'),
    -                fetchData('sweets')
    -            ]).then(function(results) {
    -                return results.join(', ');
    -            })
    -        ).toBe('potato, apricot, candys');
    -    });
    -});
    -                    
    -
    -
    -
    -
    -

    Запуск лишь одного теста

    -

    - Если вы хотите быстро запустить всего один тест, пропустив все остальные, можно - временно поменять его определение с test на - test.only. -

    -

    - Тогда, при следующем запуске тестов (через npm test, например), - из всего файла будет запущен на выполнение только один тест. -

    -
    
    -test.only('Только один', function() {
    -    expect(-Infinity).not.toBe(+Infinity);
    -});
    -                    
    -
    -
    -

    Пропуск тестов

    -

    - Также можно пропускать выбранные тесты. Если нужно временно отключить тест, вместо того, - чтобы удалять его код или помещать всё в комментарий, необходимо лишь - поменять его определение с test на test.skip. -

    -
    
    -test.skip('Вы меня больше не увидете...', function() {
    -    expect(Infinity).toBe(0);
    -});
    -                    
    -
    -
    -
    -
    -

    Моки

    -

    - Часто весь код бывает очень сильно переплетён между собой и связан с какими-то внешними зависимостями. - В функции вы можете обращаться к другой функции, которая обращается к третьей функции, и т.д. -

    -

    - Но правильные юнит тесты должны проверять работоспособность лишь одного фактического действия, - одной функции. -

    -

    - Тогда как проверить только эту первую функцию без участия всех внутренних? -

    -

    - На помощь приходят Моки. -

    -

    - Мок - это подставная функция или объект. Мок внедряют в тестируемую - функцию, и она использует нашу подставную функцию вместо настоящей. -

    -
    -
    -
    -
    -

    Спаи

    -

    - Спаи - это засланные в функции шпионы. -

    -

    - Установив на функцию шпиона можно отслеживать все процессы, связанные с этой функцией. -

    -

    - Спаи позволяют отслеживать сколько раз была вызвана функция, какие параметры передавались - в неё при каждом вызове, какие значения она возвращала и т.д. -

    -

    - Конечно же, они используются для целей тестирования, чтобы можно было писать связанные с - вызовом функций проверки: была ли вызвана функция или нет; вернула функция правильное значение, - или нет; была ли функция вызвана действительно 2 раза, и т.д. в этом духе. -

    -
    -
    -
    -
    -

    Моки и спаи в Jest

    -

    - В Jest моки и спаи совмещены. -

    -

    - Любой мок имеет встроенную функциональность спая. -

    -

    - Но можно делать и чистых спаев - без функциональности моков. -

    -

    - Поэтому мы начнём с чистых спаев. -

    -
    -
    -

    Спаи в Jest

    -

    - В Jest спаями можно делать только методы (функции внутри объекта). При импорте модулей - так обычно и происходит, все функции инкапсулируются в импортируемом объекте модуля, или классе. -

    -

    - Для регистрации спая используется функция jest.spyOn(). -

    -
    
    -jest.spyOn(object, 'method');
    -                    
    -

    - Первый параметр - object - это объект, внутри которого находится функция, за которой - нужно следить. -

    -

    - Второй параметр - 'method' - строка с названием отслеживаемой функции. -

    -
    -
    -

    Пример регистрации спая

    -

    - Допустим, имеется объект myModule с методом buySomething(), который - вызывает внутри себя метод soldSomething(): -

    -
    
    -const myModule = {
    -    soldSomething: function() {
    -        if (arguments.length === 0) {
    -            return false;
    -        }
    -        console.log('И что же мы продаём?');
    -        console.log('Мы продаём:');
    -        for (const item of arguments) {
    -            console.log(item);
    -        }
    -        return true;
    -    },
    -    buySomething: function() {
    -        const itemsToSold = ['Велосипед', 'Телевизор', 'Холодильник', 'Машина', 'Дача', 'Квартира'];
    -        const solded = [];
    -        const buyedItems = [];
    -        console.log('И что же мы покупаем?');
    -        if (arguments.length === 0) {
    -            console.log('Мы покупаем баобаб!');
    -            itemsToSold.forEach((item) => solded.push(item));
    -            buyedItems.push('Баобаб вот такой ширины!');
    -        } else {
    -            console.log('Мы покупаем:');
    -            for (let i = 0; i < arguments.length; ++i) {
    -                console.log(arguments[i]);
    -                if (i < itemsToSold.length) {
    -                    solded.push(itemsToSold[i]);
    -                }
    -                buyedItems.push(arguments[i]);
    -            }
    -        }
    -        myModule.soldSomething(...solded);
    -        return buyedItems;
    -    }
    -}
    -
    -test('Иии?', function() {
    -    // Вешаем шпиона на функцию myModule.soldSomething()
    -    jest.spyOn(myModule, 'soldSomething');
    -    // Продолжаем тест
    -});
    -                    
    -
    -
    -

    Слежка

    -

    - Вызов функции spyOn() регистрирует шпиона на заданной функции. -

    -

    - Но что это даёт? -

    -

    - Это даёт возможность использовать на отслеживаемой функции целый набор разнообразных - функций-матчеров для слежки за её использованием. -

    -
    -
    -
    -
    -

    Матчеры для спаев

    -

    - Для работы со спаями через expect() есть целая куча функций: -

    -
      -
    • toHaveBeenCalled()
    • -
    • toHaveBeenCalledTimes()
    • -
    • toHaveBeenCalledWith()
    • -
    • toHaveBeenLastCalledWith()
    • -
    • toHaveBeenNthCalledWith()
    • -
    • toHaveReturned()
    • -
    • toHaveReturnedTimes()
    • -
    • toHaveReturnedWith()
    • -
    • toHaveLastReturnedWith()
    • -
    • toHaveNthReturnedWith()
    • -
    -
    -
    -

    Контроль наличия вызова

    -

    - Проверить, была ли вызвана функция в принципе, можно с помощью матчера - toHaveBeenCalled(). -

    -

    - С помощью матчера toHaveBeenCalledTimes() можно уточнить, сколько - раз мы ожидаем функция будет вызвана. -

    -
    
    -describe('Чтобы купить что-нибудь ненужное, нужно сначала продать что-нибудь ненужное', function() {
    -
    -    test('Покупаем - значит продаём', function() {
    -        jest.spyOn(myModule, 'soldSomething');
    -        myModule.buySomething();
    -        expect(myModule.soldSomething).toHaveBeenCalled();
    -    });
    -
    -    test('Покупаем 1 раз - значит продаём 1 раз', function() {
    -        jest.spyOn(myModule, 'soldSomething');
    -        myModule.buySomething();
    -        expect(myModule.soldSomething).toHaveBeenCalledTimes(1);
    -    });
    -});
    -                    
    -
    -
    -

    Проверка аргументов вызова

    -

    - С помощью матчера toHaveBeenCalledWith() можно проверить, была - ли вызвана подозреваемая функция с заданными аргументами. -

    -
    
    -test('Хочешь купить гири - продавай велосипед', function() {
    -    jest.spyOn(myModule, 'soldSomething');
    -    myModule.buySomething('Гири');
    -    expect(myModule.soldSomething).toBeCalledWith('Велосипед');
    -});
    -
    -test('Хочешь купить баобаб - продавай всё, что есть', function() {
    -    jest.spyOn(myModule, 'soldSomething');
    -    myModule.buySomething();
    -    expect(myModule.soldSomething).toBeCalledWith(
    -        'Велосипед', 'Телевизор', 'Холодильник', 'Машина', 'Дача', 'Квартира'
    -    );
    -})
    -                    
    -
    -
    -

    Проверка возвращаемого значения

    -

    - Матчер toHaveReturnedWith() позволяет проверить, какое значение - было возвращено из отслеживаемой функции. -

    -
    
    -test('Продажа совершается успешно', function() {
    -    jest.spyOn(myModule, 'soldSomething');
    -    myModule.buySomething('груша');
    -    expect(myModule.soldSomething).toHaveReturnedWith(true);
    -});
    -
    -test('Получение купленных вещей', function() {
    -    jest.spyOn(myModule, 'buySomething');
    -    myModule.buySomething('чернила', 'какаду', 'удочка');
    -    expect(myModule.buySomething).toHaveReturnedWith(['чернила', 'какаду', 'удочка']);
    -});
    -                    
    -
    -
    -
    -
    -

    Пример со спаями

    -

    - Допустим, у нас есть следующий модуль: -

    -
    
    -export class Man {
    -    constructor(name) {
    -        this.name = name;
    -    }
    -    plantTree() {
    -        console.log('Man must plant a tree - ✓');
    -    }
    -    raiseSon() {
    -        console.log('Man must raise a son - ✓');
    -    }
    -    buildHouse() {
    -        console.log('Man must build a house - ✓');
    -    }
    -    liveMansLife() {
    -        this.plantTree();
    -        this.raiseSon();
    -        this.buildHouse();
    -    }
    -}
    -                    
    -

    - Как протестировать, что мужчина действительно садит дерево, растит сына и строит дом? -

    -
    -
    -

    Тесты по жизни

    -
    
    -import {Man} from './life.js';
    -
    -describe('Проверка жизни мужчины', function() {
    -
    -    let man = null;
    -
    -    beforeAll(function() {
    -        man = new Man('Piter');
    -        jest.spyOn(man, 'plantTree');
    -        jest.spyOn(man, 'raiseSon');
    -        jest.spyOn(man, 'buildHouse');
    -    });
    -
    -    afterEach(function() {
    -        jest.resetAllMocks();
    -    });
    -
    -    test('Посадил дерево', function() {
    -        man.liveMansLife();
    -        expect(man.plantTree).toHaveBeenCalledTimes(1);
    -    });
    -
    -    test('Вырастил сына', function() {
    -        man.liveMansLife();
    -        expect(man.raiseSon).toHaveBeenCalledTimes(1);
    -    });
    -
    -    test('Построил дом', function() {
    -        man.liveMansLife();
    -        expect(man.buildHouse).toHaveBeenCalledTimes(1);
    -    });
    -
    -});
    -                    
    -
    -
    -
    -
    -

    Сброс счётчиков спая

    -

    - Все тесты в файле тестов, по умолчанию, выполняются последовательно друг за другом. -

    -

    - Если функция, за которой следит шпион, вызывается сразу в нескольких тестах, то счётчики - слежки будут общими между всеми тестами. -

    -

    - Это значит, что во втором тесте счётчик количества вызовов будет равен 2, а в третьем тесте - - уже 3. -

    -

    - Чтобы избежать подобных проблем, необходимо своевременно сбрасывать спаи. -

    -
    -
    -

    Объект спая/мока

    -

    - До этого мы использовали возможности шпионов, но не видели их самих. Настало время увидеть - наших тайных агентов. -

    -

    - Объект спая/мока можно получить через возвращаемое значение функции spyOn(). -

    -
    
    -const spy = jest.spyOn(object, 'method');
    -                    
    -

    - Это объект спая(мока). В нём хранится вся информация: сколько и как была вызвана отслеживаемая функция. -

    -

    - Полное описание этого объекта можно посмотреть - в официальной документации. -

    -
    -
    -

    Функции для сброса спая

    -

    - В объекте спая есть 3 функции сброса: -

    -
      -
    • mockClear() - очищает счётчики вызова указанного спая
    • -
    • mockReset() - делает то же, что mockClear, дополнительно - удаляя реализацию отслеживаемой функции (актуально для моков) -
    • -
    • mockRestore() - делает то же, что mockReset, но дополнительно - восстанавливает реализацию отслеживаемой функции до момента подмены (актуально для моков) -
    • -
    -
    
    -const spy = jest.spyOn(object, 'method');
    -spy.clearMock();
    -                    
    -

    - Эти функции часто помещают в блоки before-after, чтобы для каждого - теста использовались чистенькие шпионы. -

    -
    -
    -

    Глобальный сброс

    -

    - По аналогии с предыдущими функциями, есть 3 функции, которые делают то же самое, только - сразу для всех спаев и моков в файле. Их удобно использовать, т.к. не требуется наличия - объекта спая/мока. -

    -
      -
    • jest.clearAllMocks()
    • -
    • jest.resetAllMocks()
    • -
    • jest.restoreAllMocks()
    • -
    -
    -
    -
    -
    -

    Моки в Jest

    -

    - Моки имеют всю функциональность спаев, но добавляют к указанной функции свою реализацию, - вместо оригинальной. -

    -

    - Мок можно создать несколькими способами. -

    -

    - Поверх спая, используя метод mockImplementation(): -

    -
    
    -jest.spyOn(object, 'method').mockImplementation(function() {
    -    // Фальшивая реализация для object.method
    -});
    -                    
    -

    - Или с помощью более простой записи с функцией jest.fn(): -

    -
    
    -object.method = jest.fn(function() {
    -    // Фальшивая реализация для object.method
    -});
    -                    
    -
    -
    -

    Использование моков

    -

    - Моки используются, чтобы заменить реальные зависимости тестируемой функции на наши - подставные, в которых мы уверены: -

    -
    
    -function longAndComplexQueryToDatabase() {
    -    const types = ['el', 'qu', 're', 'co'];
    -    types.forEach((value, index) => {
    -        if (value.length === index) {
    -            value = value.repeat(12);
    -            let codes = [];
    -            for (const char of value) {
    -                codes.push(char.charCodeAt(0));
    -            }
    -            return codes
    -                .filter((n) => n % 2)
    -                .map((n) => n += 5 - Math.random() * 10)
    -                .reduce((result, n) => result += n);
    -        }
    -    });
    -}
    -    
    -function checkDatabaseCount() {
    -    let num = longAndComplexQueryToDatabase();
    -    if (num > 1000) {
    -        return true;
    -    } else {
    -        return false;
    -    }
    -}
    -
    -test('Проверка заполненности БД', function() {
    -    longAndComplexQueryToDatabase = jest.fn(function() {
    -        return 2000;
    -    });
    -    const result = checkDatabaseCount();
    -    expect(result).toBeTruthy();
    -});
    -
    -test('Проверка заполненности БД', function() {
    -    longAndComplexQueryToDatabase = jest.fn(function() {
    -        return 400;
    -    });
    -    const result = checkDatabaseCount();
    -    expect(result).toBeFalsy();
    -});
    -                    
    -
    -
    -
    -
    -

    Доступ к приватным элементам

    -

    Пакет Rewire

    -
    -
    -
    -
    -

    Демонстрация

    - -
    -
    -
    -
    -

    Покрытие кода

    -
    
    -npm test -- --coverage
    -                    
    -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/dist/lecture/template.html b/dist/lecture/template.html deleted file mode 100644 index 1923bda..0000000 --- a/dist/lecture/template.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - {LECTURE NAME} - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    {SUBJECT NAME}

    -

    {LECTURE NAME}

    -
    -

    - Карпович Павел / -

    - - - - -
    -
    -
    -

    Содержание лекции

    - -
    -
    - - - -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/dist/task/task_1/task_1.pdf b/dist/task/task_1/task_1.pdf deleted file mode 100644 index a69b0ae..0000000 Binary files a/dist/task/task_1/task_1.pdf and /dev/null differ diff --git a/dist/task/task_2/task_2.pdf b/dist/task/task_2/task_2.pdf deleted file mode 100644 index 235a75d..0000000 Binary files a/dist/task/task_2/task_2.pdf and /dev/null differ diff --git a/dist/task/task_3/task_3.pdf b/dist/task/task_3/task_3.pdf deleted file mode 100644 index e50545d..0000000 Binary files a/dist/task/task_3/task_3.pdf and /dev/null differ diff --git a/dist/task/task_4/task_4.pdf b/dist/task/task_4/task_4.pdf deleted file mode 100644 index 10c3153..0000000 Binary files a/dist/task/task_4/task_4.pdf and /dev/null differ diff --git "a/dist/task/task_4/text.\321\202\321\213\321\205" "b/dist/task/task_4/text.\321\202\321\213\321\205" deleted file mode 100644 index 72771b4..0000000 --- "a/dist/task/task_4/text.\321\202\321\213\321\205" +++ /dev/null @@ -1,54 +0,0 @@ -Введение -Linux (произносится — «линукс») является клоном операционной системы UNIX, который работает на большом количестве платформ, в первую очередь — на персональных компьютерах с процессорами Intel 80386 и выше. В системе Linux работает большое количество приложений, включая TeX, X Window System, компилятор GNU C/C++, стек протоколов TCP/IP и многое другое. Linux — добросовестная и легко модифицируемая реализация идей системы UNIX. -Linux превращает любой компьютер с процессором 80386 и выше в рабочую станцию, которая даёт вам в руки всю мощь системы UNIX. Корпорации устанавливают Linux на все машины сети и используют эту операционную систему для ведения финансовой (или, например, больничной) документации, распределённых вычислений и управления телекоммуникациями. Во всем мире система Linux используется в университетах для обучения студентов проектированию операционных систем и системному программированию. Многочисленные энтузиасты, которые есть повсюду, используют Linux дома для программирования, повышения эффективности работы, или же для иных компьютерных изысканий. -Особенность системы Linux в том, что это — свободно распространяемая реализация системы UNIX. С начала и по сию пору Linux создаётся коллективом энтузиастов, которые общаются в основном через Интернет, обмениваясь текстами программ, сообщениями о найденных ошибках, решая все проблемы в открытом общении. В этом сообществе рады каждому, кто хочет участвовать в разработке системы Linux. Все, что для этого нужно — это, во-первых, желание совершенствовать этот клон UNIX, и во-вторых — некоторый навык в программировании. -Краткая история системы Linux -Система UNIX стала одной из наиболее популярных операционных систем во всем мире благодаря тому, что она поддерживает большое количество платформ и, кроме того, активно распространяется. Начало её созданию было положено в компании AT&T в 70-е годы, где она разрабатывалась как многозадачная операционная система для миникомпьютеров и так называемых «больших машин» тех лет. С тех пор, несмотря на несколько запутанный интерфейс и отсутствие единой стандартизации, система UNIX выросла в одну из наиболее распространённых операционных систем во всем мире. -Многие фанатики компьютерных изысканий (hackers) полагают, что «UNIX — это Вещь» и что это «действительно Настоящая Операционная Система», с большой буквы. Этим и объясняется развитие и распространение системы Linux силами все более расширяющейся группы UNIX-хакеров, которые хотят приобщиться к созданию той системы, на которой сами работают. -Модификации системы UNIX существуют для многих типов компьютеров, от персональных и до суперкомпьютеров типа Cray Y-MP. Большинство версий системы UNIX для персональных компьютеров весьма дороги и громоздки. На момент написания исходной версии этой книги (февраль 1998 г.) версия UNIX System V для компьютера с процессором 386 стоила около 1500 долларов США. -Linux является бесплатной версией системы UNIX, изначально разработанной Линусом Торвальдсом (Linus Torvalds) в университете в Хельсинки. Через Интернет ему помогали многочисленные программисты и знатоки системы UNIX. В принципе, любой сообразительный человек с навыками программирования имеет шанс модифицировать или изменить данную систему. Ядро системы Linux не использует никаких программных разработок, созданных компанией AT&T или кем-либо ещё, кто может предъявить свои права на интеллектуальную собственность. Значительная часть приложений для системы Linux разработана в рамках проекта GNU, осуществляемого в компании Free Software Foundation, Cambridge, Massachusetts, U.S.A. Тем не менее, программисты всего света вносили свой вклад в постоянно растущий фонд Linux-приложений. -В начале Linux разрабатывался Линусом Торвальдсом как хобби. Линус Торвальдс был вдохновлён системой Minix, другим клоном системы UNIX, разработанным Энди Таненбаумом (Andy Tanenbaum). Первые обсуждения системы Linux проводились в телеконференции Usenet, которая называлась comp.os.minix. Предметом обсуждения была в основном идея создания на основе системы UNIX небольшой учебной операционной системы для тех пользователей системы Minix, которые хотели от неё большего. -На начальном этапе разработки системы Linux в основном создавались средства переключения задач для защищённого режима (protected-mode) процессора 80386. Этот этап работы целиком выполнялся на Ассемблере. О том времени Линус Торвальдс пишет так: -...А дальше вела прямая дорога: хоть это было тяжёлое и скрупулёзнейшее программирование, но у меня уже был доступ к некоторым устройствам, и отладка стала проще. На этой стадии я стал использовать язык C, что определённо ускорило процесс. Именно тогда я стал серьёзно подумывать об этой своей идее создать «создать Minix, который будет лучше, чем Minix». От этой идеи веяло гигантоманией, однако я надеялся, что в один прекрасный день я смогу перекомпилировать gcc в системе Linux... -Два месяца потрачены на основную конфигурацию, и затем весьма скоро у меня уже был драйвер жёсткого диска (он иногда давал серьёзные сбои, но на моем компьютере он счастливым образом мог работать). Примерно в это же время (конец августа 1991 года) я открыл доступ к версии 0.01: она не была сколько-нибудь совершенной, в ней не было драйвера гибких дисков, и у неё было совсем немного возможностей. Я не думаю, что кто-либо хоть раз откомпилировал эту версию. Но к тому времени я уже серьёзно погряз в эту историю, и я не намерен был останавливаться до тех пор, пока я не покорю Minix. -Никакого сообщения о выходе версии 0.01 системы Linux не было сделано. Исходные тексты версии 0.01 даже не могли быть собраны в единую работающую систему. В них содержались лишь изолированные обрывки исходных текстов ядра системы; предполагалось, что у пользователя есть доступ к системе Minix, в которой эти тексты можно было компилировать, чтобы затем иметь возможность экспериментировать с системой Linux. -5 октября 1991 года Линус Торвальдс объявил о создании первой «официальной» версии системы Linux (эта система носила номер 0.02). К тому времени автор мог запускать на ней bash (GNU Bourne Again Shell) и gcc (GNU C compiler), однако почти ничего помимо этого. Это все ещё была система для хакеров. Усилия всегда направлялись в первую очередь на создание ядра системы, а поддержке пользователей, документированию и распространению системы внимание почти не уделялось. И по сей день[2], похоже, сообщество разработчиков системы Linux считает эти вопросы вторичными, уступающими по важности «истинному программированию» (т. е. развитию ядра системы). -Линус Торвальдс в телеконференции comp.os.minix писал об этом так. -Не тоскуете ли вы о славном времени системы Minix-1.1, времени славных людей, самостоятельно писавших себе драйверы устройств? Не нужен ли вам проект, достойный вас? Нет ли у вас смертельного желания поломать себе зубы о задачу создания операционной системы, которую вы могли бы видоизменять под свои потребности? Не разочаровывает ли вас то, что все в системе Minix нормально работает? Если да, то это сообщение — для вас. -Как я уже сообщал месяц назад, я работаю над свободной версией — копией системы Minix — для компьютеров AT-386. Работа наконец достигла той стадии, когда систему уже можно использовать (либо нельзя — в зависимости от того, чего вы хотите). Я хотел бы открыть доступ к исходным текстам для широкого распространения. Это всего лишь версия 0.02 ... но я уже успешно запускал в ней bash, gcc, gnu-make, gnu-sed, compress и т. д. -Благодаря тому, что над системой теперь работал уже не один человек, следующей после версии 0.03 Линус Торвальдс смог присвоить сразу номер 0.10. После нескольких последующих доработок этот номер был увеличен в марте 1992 года до 0.95, что указывало на близость (по мнению авторов) выхода в свет «официальной» версии системы (вообще говоря, номер 1.0 не присваивается до тех пор, пока система либо программа не написана полностью и не избавлена от всех ошибок, хотя бы теоретически). Почти полтора года спустя (в конце декабря 1993 года) версия ядра системы Linux все ещё носила номер 0.99.pl14 (pl обозначает patchlevel — здесь: порядковый номер исправлений, правки), «асимптотически» приближаясь к 1.0. На момент написания исходной версии этой книги (февраль 1998 г.)[3] имеется стабильная версия 2.0.pl33 системы Linux, а ядра, имеющие номер версии 2.1, являются экспериментальными. -Большинство основных некоммерческих программ, разработанных для системы UNIX, адаптированы под Linux. Имеются и коммерческие программные продукты. В настоящее время поддерживается больше аппаратных средств, чем это было в исходной версии ядра системы Linux. Так, неожиданно для всех, «маленький» клон семейства UNIX вырос и завоевал весь мир персональных компьютеров. -Характеристики и возможности системы -Linux поддерживает те возможности, которые имеются в других реализациях семейства UNIX, а также те, которых нет больше нигде. В этом разделе будет дан краткий обзор основных возможностей ядра системы Linux. -Linux — это полностью мультизадачная многопользовательская операционная система, так же как и все версии системы UNIX. Это означает, что сразу несколько пользователей могут одновременно войти в операционную систему и запускать программы на одном и том же компьютере. -Система Linux в основном совместима с несколькими стандартами системы UNIX (в той мере, в которой стандарты системы UNIX вообще существуют) на уровне исходных текстов, в том числе — со стандартами IEEE POSIX.1, UNIX System V, BSD (Berkely System Distribution) UNIX. При разработке системы Linux совместимость на уровне исходных текстов подразумевалась, и довольно просто будет найти общие для нескольких различных платформ черты. Значительная часть свободного программного обеспечения для системы UNIX может быть получена через Интернет (или как-либо ещё) и без всякой обработки откомпилирована в системе Linux. Кроме того, все исходные тексты системы Linux, включая ядро, драйверы устройств, библиотеки, пользовательские программы и средства разработки, распространяются свободно. -В системе Linux реализованы язык управления заданиями POSIX (используется оболочками типа csh и bash), псевдотерминалы (устройства pty) и поддержка динамически загружаемых драйверов клавиатуры для изменённых либо иностранных (не-английских) алфавитов. Система Linux поддерживает виртуальные консоли (virtual console), с помощью которых можно переключаться между несколькими одновременными сеансами на одном (физически) терминале. Пользователи программы screen обнаружат, что система организации виртуальных консолей в системе Linux им знакома. -Ядро системы позволяет производить постраничную загрузку исполняемых программ. В оперативную память с диска загружаются только те части программы, которые в данный момент требуются. Исполняемые программы пользуются общим буфером записи (copy-on-write pages). Если одновременно в памяти работают несколько экземпляров одной и той же программы, то они пользуются общими кусками физической памяти, уменьшая тем самым суммарный объем используемой памяти. -Для увеличения объёма доступной оперативной памяти Linux использует также временное хранение данных на диске (disk paging). Под эти цели может быть отведено до 1 гигабайта (8 частей по 128 мегабайт) дисковой памяти. На своп, или область подкачки (swap), могут перекачиваться не обязательно процессы целиком; возможно скачивание отдельных страниц памяти. Таким образом система получает возможность запускать объёмные приложения и/или поддерживать больше пользователей, работающих одновременно. Заметим, что временное хранение данных на диске не может заменить «настоящую» оперативную память, работающую намного быстрее диска. -Для пользовательских программ и кэширования ядро системы Linux использует «общий котёл» (unified memory pool) оперативной памяти. В каждый момент используется вся доступная оперативная память, объем которой может, например, уменьшаться, когда запускается крупное приложение. -Для исполняемых файлов используются также динамически вызываемые библиотеки общего пользования (они существуют на диске в единственном экземпляре и могут использоваться несколькими программами). Этот механизм немногим отличается от аналогичного механизма SunOS. Таким образом, объем исполняемых файлов, особенно тех, которые используют много библиотечных процедур, резко сокращается. Возможно также формирование статически связываемых библиотек (statically linked libraries); это нужно для целей отладки или для формирования «полного» исполняемого файла для работы на тех системах, где библиотеки общего пользования не установлены. Подключение библиотечных процедур происходит во время работы программы, так что программист может по желанию подключать либо стандартную библиотечную процедуру, либо собственную процедуру взамен библиотечной. -Для упрощения отладки ядро системы может генерировать полную «распечатку» содержимого памяти и регистров (core dump) в случае аварийного завершения программы. С помощью специальной программы, подключённой к средствам отладки, разработчик программы может проанализировать эту «распечатку» и отыскать причину сбоя в программе. -Распространение Linux -Система Linux распространяется на условиях лицензии особого рода, известной под названием GNU-лицензии (GNU General Public License, или GPL). GNU-лицензия была разработана для проекта GNU организацией Free Software Foundation, и эта лицензия устанавливает несколько условий на распространение и изменение свободного программного обеспечения. -Прежде всего, нужно объяснить, что свободное программное обеспечение, на которое распространяется GNU-лицензия, не является общедоступным (public domain) программным обеспечением. По определению, общедоступные программы принадлежат обществу и не защищаются никакими авторскими правами. Напротив, программы, на которые распространяется GNU-лицензия, защищены авторским копирайтом. У таких программ есть автор в юридическом понимании этого слова, и права авторов этих программ защищаются обычными международными законами, относящимися к авторскому праву. Таким образом, GNU-лицензия делает программное обеспечение свободно распространяемым, но не передаёт его в пользование обществу. -Также GNU-лицензия позволяет получать, модифицировать и распространять собственные модифицированные версии программного обеспечения. Однако на все продукты, разработанные на основе программ, защищённых GNU-лицензией, также должна быть поставлена GNU-лицензия. Другими словами, организация не может взять систему Linux, изменить её и начать продавать, поставив на неё лицензию, которая будет ограничивать распространение. Если некоторое программное обеспечение получено с помощью модификации программного обеспечения системы Linux, на него также должна быть поставлена GNU-лицензия. -GNU-лицензия позволяет распространять и использовать свободное программное обеспечение бесплатно. Но она также позволяет частным лицам и организациям распространять эти программы за плату и даже извлекать прибыль из продажи и распространения. При этом распространитель программного обеспечения, защищённого GNU-лицензией, не может отобрать эти же права у покупателя. Если вы купили это программное обеспечение у некоторого третьего лица, вы можете его как самостоятельно продавать, так и распространять бесплатно. -Сказанное выше может казаться противоречивым. Зачем, казалось бы, продавать программное обеспечение, когда GNU-лицензия позволяет получить его бесплатно? Представим себе однако, что некоторая организация решила собрать большое количество свободного программного обеспечения, записать его на лазерный диск и распространять этот диск. Для того, чтобы покрыть расходы по производству и распространению лазерных дисков, компания будет вынуждена требовать некоторую оплату, и может даже извлечь из этой деятельности прибыль. Подобное не запрещается GNU-лицензией. -Организации, которые продают свободное программное обеспечение, должны следовать некоторым ограничениям, которые накладывает GNU-лицензия. Продавцы не могут ограничивать права пользователей, которые покупают программное обеспечение. Если вы купили диск CD-ROM, который содержит программы, защищённые GNU-лицензией, вы можете копировать программы с этого диска и распространять их бесплатно, или же сами можете их продавать. Продавцы программ должны чётко объяснить покупателям, что программы защищены GNU-лицензией. Продавцы также обязаны бесплатно распространять полный набор исходных текстов распространяемого программного обеспечения. Это позволяет каждому покупателю программного обеспечения, защищённого GNU-лицензией, производить модификации этих программ. -Такой подход, когда организации разрешено распространять и продавать свободное программное обеспечение, даёт положительные результаты. Не у каждого пользователя есть доступ к Интернету и возможность скопировать через него программное обеспечение. Кроме того, большое количество организаций продаёт систему Linux на дискетах, лентах и лазерных дисках по заказам через почту и от этих продаж получает прибыль. Разработчики системы Linux могут никогда не увидеть этих денег; когда на программное обеспечение накладывается GNU-лицензия, это понимают и автор, и распространитель программ. Другими словами, Линус Торвальдс знал, что организации могут захотеть продавать его систему Linux, и что он за это может не получить ни цента, и сознательно шёл на это. -Дело в том, что в мире свободного программного обеспечения важны не деньги. Цель создания и распространения свободных программ всегда будет состоять в том, чтобы дать всем возможность получать и использовать хорошие программы. В следующих разделах этой книги будет показано, как эта концепция применялась при разработке системы Linux. -Ранее Линус Торвальдс (Linus Torvalds) распространял систему Linux на условиях более строгой, чем GPL, лицензии. Эта лицензия позволяла свободно распространять и изменять программное обеспечение, но запрещала при этом любую форму оплаты за передачу программного обеспечения и его использование. В отличие от этого, GNU-лицензия позволяет продавать свободное программное обеспечение и извлекать из этого прибыль, однако не позволяет ограничивать чьи-либо права на распространение этих программ в любой форме. -Построение и философия системы Linux -Пользователи без достаточного опыта работы в системе Linux часто неправильно понимают концепцию системы Linux и ожидают от неё того, что она не может дать. Для того, чтобы эффективно использовать систему, важно понять философию и принцип построения системы Linux. Мы начнём с описания того принципа, по которому система Linux не построена. -В компаниях, разрабатывающих коммерческие программы для системы UNIX, на всем протяжении разработки системы соблюдается строгая методика обеспечения качества. В эту методику входят системы контроля за исходными текстами, системы контроля за изменениями системы, методики ведения документации, и методики, по которым сообщаются и исправляются ошибки. Разработчики не могут, руководствуясь внезапно появившейся у них идеей, добавить новые возможности в систему или изменить её ключевые разделы. Изменения должны быть обоснованы сообщением об ошибке, и сообщение об изменениях должно быть занесено в специальную систему контроля исходного текста, так что при необходимости сделанные изменения могут быть отменены. Каждому разработчику поручаются одна или несколько частей разрабатываемой системы, и только он может изменять эти разделы системы, пока эти разделы находятся у него в разработке, и до тех пор, пока они не будут отмечены как готовые. -В таких организациях имеется специальный организационно оформленный отдел обеспечения качества. Этот отдел производит строгое тестирование каждой новой версии системы и сообщает о всех замеченных ошибках. Выявленные ошибки исправляются разработчиками. Перед выходом очередной версии системы обычно требуется, чтобы определённый процент ошибок был исправлен, и что система как целое удовлетворяет некоторым конкретным критериям. Для этого используются сложные системы статистического анализа. -Вполне понятно, что компании-производителю программного обеспечения требуется оценивать степень готовности очередной версии программы к отправке на тиражирование. Часто желательно, чтобы эта оценка была количественной. Поэтому компания занимается сбором статистической информации о производительности операционных систем. Разработка коммерческой операционной системы семейства UNIX — это большой коммерческий проект, часто большой настолько, что в его рамках нанимаются сотни, если не тысячи, программистов, испытателей программного обеспечения, специалистов по написанию документации и административного персонала. Разумеется, нет двух похожих компаний, выпускающих коммерческие операционные системы семейства UNIX, но все они укладываются в описанную выше схему. -Схема, по которой создавалась операционная система Linux, не имеет ничего общего с моделью, описанной выше: здесь нет организованного упорядоченного развития, системы контроля исходных текстов, структурированной системы фиксации ошибок и статистической системы контроля качества. Linux является операционной системой, созданной хакерами, и возможно навсегда останется такой. Заметим, что словом хакер в данной книге обозначается страстно увлечённый своим делом программист, который испытывает радость от работы с компьютерами и с помощью этих компьютеров делает интересные вещи. Это — первоначальное определение слова хакер; оно отличается от того смысла, который в него стали вкладывать в последнее время: нарушитель компьютерного законодательства или программист, не признающий законов. -Не существует какой-либо организации, которая была бы ответственна за создание и развитие системы Linux. Любой программист с достаточными умениями и навыками имеет возможность участвовать в развитии и исправлении ошибок ядра системы, переносить новое программное обеспечение на другие платформы, писать документацию и помогать неопытным пользователям. Большей частью сообщество создателей системы Linux общается между собой с помощью списков рассылки и телеконференций Usenet. В процессе создания системы возникло несколько соглашений. Если, например, какой-нибудь программист хочет, чтобы его код был включена в "официальное" ядро системы, он отправляет свой код Линусу Торвальдсу. Линус Торвальдс тестирует этот код, и если новый код не противоречит общему дизайну системы и не нарушает работу других частей системы, то он включается в ядро. -При разработке системы использовался открытый функционально-ориентированный подход. В последнее время количество новых функций и существенных изменений, вносимых в систему, уменьшилось, и общим правилом стало, что новая версия ядра выпускается один раз в несколько недель. Разумеется, длительность перерывов между выпусками новых версий — величина не постоянная. Среди факторов, влияющих на выпуск очередной версии — число исправленных ошибок, сообщения от пользователей, испытывающих предварительные версии системы, и, наконец, время, которое имел для сна за эти недели сам Линус Торвальдс. -Не лишним здесь будет сказать, что перед выпуском новой версии не все ошибки удаётся исправить и не все проблемы решить. Новая версия считается стабильной и выпускается сразу, как только создаётся впечатление, что в ней нет критических или исправленных ранее ошибок. Идея, которая движет создателями системы Linux, состоит не в том, чтобы создать совершенную программу, в которой нет ошибок, а скорее в том, чтобы создать свободную реализацию операционной системы семейства UNIX. Система Linux предназначена больше для разработчиков системы, чем для кого-либо ещё. -Если программист написал некоторое приложение или программу, которая реализует какую-либо новую возможность, он обычно распространяет её в так называемой альфа-версии, т. е. в пробной версии. Эта версия предназначается для тех отважных пользователей, которые готовы искать ошибки в первоначальном варианте программы. Поскольку общение в сообществе разработчиков системы Linux в основном происходит через Интернет, программы альфа-версии обычно выставляются на один или несколько FTP-сайтов, посвящённых системе Linux. Кроме того, в одну из телеконференций Usenet, посвящённых системе Linux, посылается сообщение о том, как получить новую программу и как её испытывать. Пользователи, которые переписывают и испытывают альфа-версии новых программ, могут впоследствии направлять по электронной почте результаты испытаний, советы по исправлению ошибок и вопросы автору. -После того, как первоначальные ошибки исправлены, программе присваивается бета-версия. В бета-версии программа обычно считается стабильной, но не полной. Программа в бета-версии работает, но у неё могут быть реализованы не все функции. Программа может также перейти непосредственно в конечное состояние, в котором она будет считаться полной и готовой к использованию. -Следует иметь в виду, что сказанное выше является всего лишь соглашениями, а не правилами. Некоторые программисты настолько уверены в корректности написанных ими программ, что они считают необязательным для себя выпускать альфа- или бета-версии. Подобные решения всегда принимаются программистом, который пишет данную программу. -На первый взгляд может показаться удивительным, что такой неупорядоченной системе добровольных программистов и испытателей программного обеспечения удаётся создать законченную операционную систему семейства UNIX. Однако, как оказывается, здесь мы имеем дело с одним из наиболее эффективных методов создания программного обеспечения с очень сильной мотивацией участников. Все ядро системы Linux написано абсолютно с нуля. При написании кода не использовались никакие источники, защищённые авторскими правами. Перенесение всевозможного свободного программного обеспечения под Linux — огромная задача, требующая колоссальных усилий: создаются и переносятся библиотеки, конструируются файловые системы, пишутся драйверы для многих популярных видов устройств — и все это делается на абсолютно добровольных началах. -Операционная система Linux обычно распространяется в виде дистрибутивов — наборов своеобразно упакованных программ, которые вместе составляют полную систему. Для большинства пользователей будет очень трудно выстроить полную систему с нуля, начиная с ядра, добавляя к нему утилиты и устанавливая все необходимое программное обеспечение вручную. Вместо этого существуют многочисленные дистрибутивы программного обеспечения, которые включают в себя все необходимое для того, чтобы установить и использовать полную систему. Не существует единственного стандартного дистрибутива — есть несколько дистрибутивов, и каждый имеет свои преимущества и недостатки. \ No newline at end of file diff --git a/dist/task/task_5/first/index.html b/dist/task/task_5/first/index.html deleted file mode 100644 index d0573ec..0000000 --- a/dist/task/task_5/first/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - Лицемер (с) - - -
    -
    - -
    -
    - Выберите лицо, которое нравится вам больше остальных: -
    -
    -
    - Avatar -
    -

    Персона номер 1

    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/dist/task/task_5/first/style.css b/dist/task/task_5/first/style.css deleted file mode 100644 index d1161c5..0000000 --- a/dist/task/task_5/first/style.css +++ /dev/null @@ -1,64 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Arimo&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; - font-family: 'Arimo'; -} -body { - display: flex; - flex-flow: column nowrap; -} -body > header { - height: 60px; - background-color: #7161EF; -} -.content { - flex: 1; - display: flex; - flex-flow: row nowrap; -} -.content > aside { - width: 30%; -} -.content > section { - flex: 1; - background-color: #FFE7DB; -} -.header-d { - text-align: center; - height: 80px; - line-height: 80px; - font-size: 1.8rem; -} -.display { - display: flex; - flex-flow: row wrap; - justify-content: center; - align-items: flex-start; -} -.card { - height: 36vh; - width: 30vh; - margin: 20px 40px; - box-shadow: 0 4px 16px 0 rgba(0,0,0,0.2); - transition: 0.3s ease-out; - background-color: white; - border-radius: 5px; - cursor: pointer; -} -.card:hover { - box-shadow: 0 8px 32px 0 rgba(0,0,0,0.4); - transform-origin: center; - transform: scale(1.02, 1.02); -} -.card > img { - width: 30vh; - height: 30vh; - border-radius: 5px 5px 0 0; -} -.description { - padding: 0 16px; - text-align: center; - font-size: 1.1rem; -} \ No newline at end of file diff --git a/dist/task/task_5/task_5.pdf b/dist/task/task_5/task_5.pdf deleted file mode 100644 index 2302c94..0000000 Binary files a/dist/task/task_5/task_5.pdf and /dev/null differ diff --git a/dist/task/task_6/first/index.html b/dist/task/task_6/first/index.html deleted file mode 100644 index abf486a..0000000 --- a/dist/task/task_6/first/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - Поле Чудес - - -
    -
    -
    -
    Ц
    -
    И
    -
    К
    -
    Л
    -
    -
    - - \ No newline at end of file diff --git a/dist/task/task_6/first/style.css b/dist/task/task_6/first/style.css deleted file mode 100644 index 4f4a597..0000000 --- a/dist/task/task_6/first/style.css +++ /dev/null @@ -1,49 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Yeseva+One&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; -} -body { - display: flex; - flex-flow: column nowrap; -} -body > header { - height: 60px; - background-color: #7161EF; -} -.content { - flex: 1; - display: flex; - flex-flow: row nowrap; -} -.main-area { - flex: 1; - background-color: #FFE7DB; - display: flex; - flex-flow: row wrap; - justify-content: center; - align-items: center; - padding: 20px 100px; - overflow: auto; - font-family: 'Yeseva One'; - text-align: center; - font-size: 5rem; -} -.main-area > div { - background-image: linear-gradient(rgba(32,32,32,.8), rgba(96,96,96,.7)); - width: 16vh; - height: 16vh; - line-height: 16vh; - margin: 10px; - border: 2px solid #B2B2B2; - user-select: none; - color: transparent; - cursor: pointer; -} -.main-area > div.revealed { - background-image: linear-gradient(#eee, #fff); - transition: color 1.2s ease-out; - color: rgba(0,0,0,.75); - cursor: default; -} \ No newline at end of file diff --git a/dist/task/task_6/task_6.pdf b/dist/task/task_6/task_6.pdf deleted file mode 100644 index 0a6d872..0000000 Binary files a/dist/task/task_6/task_6.pdf and /dev/null differ diff --git a/dist/task/task_7/first/index.html b/dist/task/task_7/first/index.html deleted file mode 100644 index 8877c5b..0000000 --- a/dist/task/task_7/first/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - Регистрация в Сервис - - -
    -
    -
    -
    -
    -

    Добро пожаловать в Сервис!

    - Для продолжения нужно зарегистрироваться - -
    -
    -
    - - \ No newline at end of file diff --git a/dist/task/task_7/first/style.css b/dist/task/task_7/first/style.css deleted file mode 100644 index 7423c0c..0000000 --- a/dist/task/task_7/first/style.css +++ /dev/null @@ -1,70 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,600,600i&subset=cyrillic'); -body, html { - height: 100%; - width: 100%; - margin: 0; -} -body { - display: flex; - flex-flow: column nowrap; - font-family: 'Open Sans'; - font-weight: 400; - background-image: linear-gradient(30deg, #ffffff,#f5f0ff ); -} -body > header { - height: 60px; - background-color: #7161EF; -} -#page { - flex: 1; - display: flex; - justify-content: center; - align-items: center; -} -#page > div { - box-sizing: border-box; - background: white; - border: 1px solid black; - height: 480px; - width: 640px; - box-shadow: 10px -10px 0 0 #7161EF; - padding: 20px; -} -section#frame_1 { - height: 100%; - width: 100%; - display: flex; - flex-flow: column nowrap; - justify-content: flex-start; - align-items: center; -} -#frame_1 > p { - font-size: 3.2rem; - text-align: center; - margin-bottom: 0; -} -#frame_1 > p > span { - font-weight: 600; - color: #a09016; -} -#frame_1 > small { - font-size: 1rem; - margin-top: 30px; - margin-bottom: 100px; -} -#frame_1 > button { - width: 200px; - height: 50px; - margin-left: 300px; - cursor: pointer; - background: #7161EF; - color: white; - border: unset; - font-size: 1.3rem; -} -#frame_1 > button:focus { - outline: none; -} -#frame_1 > button:hover { - background: #a397ff; -} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 2a4bd9a..1a464bb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,155 +1,155 @@ //modules const browserSync = require('browser-sync'), - del = require('del'), - gulp = require('gulp'), - autoprefixer = require('gulp-autoprefixer'), - cleanCSS = require('gulp-clean-css'), - csslint = require('gulp-csslint'), - gulpif = require('gulp-if'), - imagemin = require('gulp-imagemin'), - jshint = require('gulp-jshint'), - newer = require('gulp-newer'), - run = require('gulp-run'), - sourcemaps = require('gulp-sourcemaps'), - uglify = require('gulp-uglify-es').default, - useref = require('gulp-useref'), - watch = require('gulp-watch'), - pipe = require('multipipe'); + del = require('del'), + gulp = require('gulp'), + autoprefixer = require('gulp-autoprefixer'), + cleanCSS = require('gulp-clean-css'), + csslint = require('gulp-csslint'), + gulpif = require('gulp-if'), + imagemin = require('gulp-imagemin'), + jshint = require('gulp-jshint'), + newer = require('gulp-newer'), + run = require('gulp-run'), + sourcemaps = require('gulp-sourcemaps'), + uglify = require('gulp-uglify-es').default, + useref = require('gulp-useref'), + watch = require('gulp-watch'), + pipe = require('multipipe'); //variables const srcPath = { - 'src': './src', - 'html': './src/**/*.html', - 'img': './src/**/*.+(jpg|jpeg|png|svg|gif)', - 'css': ['./src/!(css|js)*/**/*.css'], - 'cssLint': './src/**/*.css', - 'js': './src/!(js|completed)*/**/*.js', - 'jsLint': ['./src/**/*.js', '!./**/node_modules/**', '!./src/**/*.min.js'], - 'font': './src/font/**/*.*', - 'analysis': './code-analysis/', - 'task': './src/task/**/*.+(pdf|тых|html|css)', - 'cmpl': ['./src/completed/**/*.*', '!./**/node_modules/**'], - 'print': './src/css/print/*.css' + 'src': './src', + 'html': './src/**/*.html', + 'img': './src/**/*.+(jpg|jpeg|png|svg|gif)', + 'css': ['./src/!(css|js)*/**/*.css'], + 'cssLint': './src/**/*.css', + 'js': './src/!(js|completed)*/**/*.js', + 'jsLint': ['./src/**/*.js', '!./**/node_modules/**', '!./src/**/*.min.js'], + 'font': './src/font/**/*.*', + 'analysis': './code-analysis/', + 'task': './src/task/**/*.+(pdf|тых|html|css)', + 'cmpl': ['./src/completed/**/*.*', '!./**/node_modules/**'], + 'print': './src/css/print/*.css' }; const distPath = { - 'dist': './dist/', - 'html': './dist/', - 'img': './dist/', - 'css': './dist/css/', - 'print': './dist/css/print', - 'js': './dist/', - 'font': './dist/font/', - 'task': './dist/task/', - 'cmpl': './dist/completed/' + 'dist': './dist/', + 'html': './dist/', + 'img': './dist/', + 'css': './dist/css/', + 'print': './dist/css/print', + 'js': './dist/', + 'font': './dist/font/', + 'task': './dist/task/', + 'cmpl': './dist/completed/' }; const pluginSettings = { - autoprefixer: { - browsers: ['last 2 versions', 'ie 9', 'ie 10'] - }, - cleanCSS: { - compatibility: '*' - }, - csslint: { - filename: 'index.html', - directory: srcPath.analysis + '/css/' - }, - jshint: { - filename: srcPath.analysis + '/js/index.html', - createMissingFolders: true - } + autoprefixer: { + browsers: ['last 2 versions', 'ie 9', 'ie 10'] + }, + cleanCSS: { + compatibility: '*' + }, + csslint: { + filename: 'index.html', + directory: srcPath.analysis + '/css/' + }, + jshint: { + filename: srcPath.analysis + '/js/index.html', + createMissingFolders: true + } }; //tasks -const cleanDist = function() { - return del([srcPath.analysis, distPath.dist]); +const cleanDist = function () { + return del([srcPath.analysis, distPath.dist]); } -const parseHtml = function() { - return gulp.src(srcPath.html) - .pipe(newer(distPath.html)) - .pipe(useref({}, pipe(sourcemaps.init))) - .pipe(gulpif("*.js", pipe( - uglify() - ))) - .pipe(gulpif("*.css", - pipe( - autoprefixer(pluginSettings.autoprefixer), - cleanCSS(pluginSettings.cleanCSS) - ) - )) - .pipe(sourcemaps.write()) - .pipe(gulp.dest(distPath.html)); +const parseHtml = function () { + return gulp.src(srcPath.html) + .pipe(newer(distPath.html)) + .pipe(useref({}, pipe(sourcemaps.init))) + .pipe(gulpif("*.js", pipe( + uglify() + ))) + .pipe(gulpif("*.css", + pipe( + autoprefixer(pluginSettings.autoprefixer), + cleanCSS(pluginSettings.cleanCSS) + ) + )) + .pipe(sourcemaps.write()) + .pipe(gulp.dest(distPath.html)); } -const parseCss = function() { - return gulp.src(srcPath.css) - .pipe(sourcemaps.init()) - .pipe(autoprefixer(pluginSettings.autoprefixer)) - .pipe(cleanCSS(pluginSettings.cleanCSS)) - .pipe(sourcemaps.write()) - .pipe(gulp.dest(distPath.css)); +const parseCss = function () { + return gulp.src(srcPath.css) + .pipe(sourcemaps.init()) + .pipe(autoprefixer(pluginSettings.autoprefixer)) + .pipe(cleanCSS(pluginSettings.cleanCSS)) + .pipe(sourcemaps.write()) + .pipe(gulp.dest(distPath.css)); } -const lintCss = function() { - return gulp.src(srcPath.cssLint) - .pipe(csslint(".csslintrc")); +const lintCss = function () { + return gulp.src(srcPath.cssLint) + .pipe(csslint(".csslintrc")); } -const copyJs = function() { - return gulp.src(srcPath.js) - .pipe(gulp.dest(distPath.js)); +const copyJs = function () { + return gulp.src(srcPath.js) + .pipe(gulp.dest(distPath.js)); } -const lintJs = function() { - return gulp.src(srcPath.jsLint) - .pipe(jshint(".jshintrc")); +const lintJs = function () { + return gulp.src(srcPath.jsLint) + .pipe(jshint(".jshintrc")); } -const parseImages = function() { - return gulp.src(srcPath.img) - .pipe(newer(distPath.img)) - .pipe(imagemin()) - .pipe(gulp.dest(distPath.img)); +const parseImages = function () { + return gulp.src(srcPath.img) + .pipe(newer(distPath.img)) + .pipe(imagemin()) + .pipe(gulp.dest(distPath.img)); } -const copyFonts = function() { - return gulp.src(srcPath.font) - .pipe(gulp.dest(distPath.font)); +const copyFonts = function () { + return gulp.src(srcPath.font) + .pipe(gulp.dest(distPath.font)); } -const copyTaskFiles = function() { - return gulp.src(srcPath.task) - .pipe(gulp.dest(distPath.task)); +const copyTaskFiles = function () { + return gulp.src(srcPath.task) + .pipe(gulp.dest(distPath.task)); } -const copyCompletedFiles = function() { - return gulp.src(srcPath.cmpl) - .pipe(gulp.dest(distPath.cmpl)); +const copyCompletedFiles = function () { + return gulp.src(srcPath.cmpl) + .pipe(gulp.dest(distPath.cmpl)); } -const copyPrintJsFiles = function() { - return gulp.src(srcPath.print) - .pipe(gulp.dest(distPath.print)); +const copyPrintJsFiles = function () { + return gulp.src(srcPath.print) + .pipe(gulp.dest(distPath.print)); } -const copyThemeCssFiles = function() { - return gulp.src('./src/css/theme/*.css') - .pipe(gulp.dest('./dist/css/theme/')); +const copyThemeCssFiles = function () { + return gulp.src('./src/css/theme/*.css') + .pipe(gulp.dest('./dist/css/theme/')); } -const copyHlJsFiles = function() { - return gulp.src('./src/js/highlight/*.js') - .pipe(gulp.dest('./dist/js/')); +const copyHlJsFiles = function () { + return gulp.src('./src/js/highlight/*.js') + .pipe(gulp.dest('./dist/js/')); } -const copyCustomCss = function() { - return gulp.src('./src/css/custom.css') - .pipe(gulp.dest('./dist/css/')); +const copyCustomCss = function () { + return gulp.src('./src/css/custom.css') + .pipe(gulp.dest('./dist/css/')); } const lint = gulp.parallel(lintJs, lintCss); @@ -157,40 +157,41 @@ const translate = gulp.parallel(parseHtml, parseCss, copyJs, parseImages, copyFo const build = gulp.series(cleanDist, lint, translate); -const watchServ = function() { +const watchServ = function () { - watch(srcPath.css, parseCss); - watch(srcPath.html, parseHtml); - watch(srcPath.js, copyJs); - watch(srcPath.img, parseImages); - watch(srcPath.font, copyFonts); - watch(srcPath.task, copyTaskFiles); - watch(srcPath.cmpl, copyCompletedFiles); - watch(srcPath.print, copyPrintJsFiles); - watch('./src/js/highlight/*.js', copyHlJsFiles); - watch('./src/css/custom.css', copyCustomCss); + watch(srcPath.css, parseCss); + watch(srcPath.html, parseHtml); + watch(srcPath.js, copyJs); + watch(srcPath.img, parseImages); + watch(srcPath.font, copyFonts); + watch(srcPath.task, copyTaskFiles); + watch(srcPath.cmpl, copyCompletedFiles); + watch(srcPath.print, copyPrintJsFiles); + watch('./src/js/highlight/*.js', copyHlJsFiles); + watch('./src/css/custom.css', copyCustomCss); } -const serveDir = function() { - browserSync.init({ - server: distPath.dist, - port: 4000 - }); - browserSync.watch(distPath.dist).on("change", browserSync.reload); +const serveDir = function () { + browserSync.init({ + server: distPath.dist, + port: 4000 + }); + browserSync.watch(distPath.dist).on("change", browserSync.reload); } const serverWatch = gulp.parallel(watchServ, serveDir); const default_task = gulp.series(build, serverWatch); -const ya = function(cb) { - run(`npx yaspeller .\\`).exec() - .on("error", function(err) { - console.error(err.message); - cb(); - }) - .on("finish", cb); +const ya = function (cb) { + run(`npx yaspeller .\\`).exec() + .on("error", function (err) { + console.error(err.message); + cb(); + }) + .on("finish", cb); } module.exports.default = default_task; +module.exports.build = build; module.exports.ya = ya; \ No newline at end of file diff --git a/package.json b/package.json index 6819fba..5b742e4 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "npx gulp", - "ya": "npx gulp ya" + "ya": "npx gulp ya", + "build": "npx gulp build" }, "repository": { "type": "git",