diff --git a/6/bundle.25e23cc746eca4886d2b.js b/6/bundle.25e23cc746eca4886d2b.js new file mode 100644 index 0000000..9d4db74 --- /dev/null +++ b/6/bundle.25e23cc746eca4886d2b.js @@ -0,0 +1 @@ +(()=>{var __webpack_modules__={89:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(379);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(795);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(569);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(565);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(216);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(589);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/framework/view/abstract-view.css\nvar abstract_view = __webpack_require__(10);\n;// CONCATENATED MODULE: ./src/framework/view/abstract-view.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\n\n options.insert = insertBySelector_default().bind(null, "head");\n \noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(abstract_view/* default */.Z, options);\n\n\n\n\n /* harmony default export */ const view_abstract_view = (abstract_view/* default */.Z && abstract_view/* default.locals */.Z.locals ? abstract_view/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/framework/view/abstract-view.js\n\n\n\n/** @const {string} Класс, реализующий эффект "покачивания головой" */\nconst SHAKE_CLASS_NAME = \'shake\';\n\n/** @const {number} Время анимации в миллисекундах */\nconst SHAKE_ANIMATION_TIMEOUT = 600;\n\n/**\n * Абстрактный класс представления\n */\nclass AbstractView {\n /** @type {HTMLElement|null} Элемент представления */\n #element = null;\n constructor() {\n if (new.target === AbstractView) {\n throw new Error(\'Can\\\'t instantiate AbstractView, only concrete one.\');\n }\n }\n\n /**\n * Геттер для получения элемента\n * @returns {HTMLElement} Элемент представления\n */\n get element() {\n if (!this.#element) {\n this.#element = createElement(this.template);\n }\n return this.#element;\n }\n\n /**\n * Геттер для получения разметки элемента\n * @abstract\n * @returns {string} Разметка элемента в виде строки\n */\n get template() {\n throw new Error(\'Abstract method not implemented: get template\');\n }\n\n /** Метод для удаления элемента */\n removeElement() {\n this.#element = null;\n }\n\n /**\n * Метод, реализующий эффект "покачивания головой"\n * @param {shakeCallback} [callback] Функция, которая будет вызвана после завершения анимации\n */\n shake(callback) {\n this.element.classList.add(SHAKE_CLASS_NAME);\n setTimeout(() => {\n this.element.classList.remove(SHAKE_CLASS_NAME);\n callback?.();\n }, SHAKE_ANIMATION_TIMEOUT);\n }\n}\n\n/**\n * Функция, которая будет вызвана методом shake после завершения анимации\n * @callback shakeCallback\n */\n;// CONCATENATED MODULE: ./src/framework/render.js\n\n\n/** @enum {string}\n * BEFOREBEGIN - вставить элемент перед началом контейнера\n * AFTERBEGIN - вставить элемент сразу после начала контейнера\n * BEFOREEND - вставить элемент перед концом контейнера\n * AFTEREND - вставить элемент сразу после конца контейнера\n*/\nconst RenderPosition = {\n BEFOREBEGIN: \'beforebegin\',\n AFTERBEGIN: \'afterbegin\',\n BEFOREEND: \'beforeend\',\n AFTEREND: \'afterend\'\n};\n\n/**\n * Функция для создания элемента на основе разметки\n * @param {string} template Разметка в виде строки\n * @returns {HTMLElement} Созданный элемент\n */\nfunction createElement(template) {\n const newElement = document.createElement(\'div\');\n newElement.innerHTML = template;\n return newElement.firstElementChild;\n}\n\n/**\n * Функция для отрисовки элемента\n * @param {AbstractView} component Компонент, который должен был отрисован\n * @param {HTMLElement} container Элемент в котором будет отрисован компонент\n * @param {string} place Позиция компонента относительно контейнера. По умолчанию - `beforeend`\n */\nfunction render(component, container, place = RenderPosition.BEFOREEND) {\n if (!(component instanceof AbstractView)) {\n throw new Error(\'Can render only components\');\n }\n if (container === null) {\n throw new Error(\'Container element doesn\\\'t exist\');\n }\n container.insertAdjacentElement(place, component.element);\n}\n\n/**\n * Функция для замены одного компонента на другой\n * @param {AbstractView} newComponent Компонент, который нужно показать\n * @param {AbstractView} oldComponent Компонент, который нужно скрыть\n */\nfunction replace(newComponent, oldComponent) {\n if (!(newComponent instanceof AbstractView && oldComponent instanceof AbstractView)) {\n throw new Error(\'Can replace only components\');\n }\n const newElement = newComponent.element;\n const oldElement = oldComponent.element;\n const parent = oldElement.parentElement;\n if (parent === null) {\n throw new Error(\'Parent element doesn\\\'t exist\');\n }\n parent.replaceChild(newElement, oldElement);\n}\n\n/**\n * Функция для удаления компонента\n * @param {AbstractView} component Компонент, который нужно удалить\n */\nfunction remove(component) {\n if (component === null) {\n return;\n }\n if (!(component instanceof AbstractView)) {\n throw new Error(\'Can remove only components\');\n }\n component.element.remove();\n component.removeElement();\n}\n\n;// CONCATENATED MODULE: ./src/utils/common.js\nconst ESCAPE_KEY_CODE = 27;\nconst isEscapeKey = evt => evt.keyCode === ESCAPE_KEY_CODE;\nconst getRandomNumber = (from, to) => {\n const lower = Math.ceil(Math.min(from, to));\n const upper = Math.floor(Math.max(from, to));\n const result = Math.random() * (upper - lower + 1) + lower;\n return Math.floor(result);\n};\nconst getRandomString = (desiredStringLength = 1) => {\n const primer = \' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\';\n let randomString = \'\';\n for (let i = 0; i < desiredStringLength; i++) {\n randomString += primer.charAt(getRandomNumber(0, primer.length - 1));\n }\n return randomString;\n};\nconst getRandomBoolean = () => Math.random() >= 0.5;\nconst getRandomArrayElement = items => items[getRandomNumber(0, items.length - 1)];\nconst getRandomDate = () => {\n const today = new Date();\n const oneYearFromNow = new Date();\n oneYearFromNow.setFullYear(today.getFullYear() + 1);\n const randomTime = Math.random() * (oneYearFromNow - today) + today.getTime();\n return new Date(randomTime);\n};\nconst convertToCamelCase = str => str.replace(/(_\\w)/g, match => match[1].toUpperCase());\nconst convertKeysToCamelCase = items => {\n if (Array.isArray(items)) {\n return items.map(convertKeysToCamelCase);\n }\n if (items !== null && typeof items === \'object\') {\n return Object.entries(items).reduce((newItems, [key, value]) => {\n newItems[convertToCamelCase(key)] = convertKeysToCamelCase(value);\n return newItems;\n }, {});\n }\n return items;\n};\nconst updateItem = (items, update) => items.map(item => item.id === update.id ? update : item);\n\n;// CONCATENATED MODULE: ./src/const.js\nconst EVENTS_TYPES = [\'Taxi\', \'Bus\', \'Train\', \'Ship\', \'Drive\', \'Flight\', \'Check-in\', \'Sightseeing\', \'Restaurant\'];\nconst CITIES = [\'New York\', \'Tokyo\', \'Paris\', \'London\', \'Sydney\', \'Berlin\', \'Rio de Janeiro\', \'Moscow\', \'Cairo\', \'Cape Town\'];\nconst SENTENCES = [\'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras aliquet varius magna, non porta ligula feugiat eget. \', \'Fusce tristique felis at fermentum pharetra. \', \'Aliquam id orci ut lectus varius viverra. \', \'Nullam nunc ex, convallis sed finibus eget, sollicitudin eget ante. \', \'Phasellus eros mauris, condimentum sed nibh vitae, sodales efficitur ipsum. \', \'Sed blandit, eros vel aliquam faucibus, purus ex euismod diam, eu luctus nunc ante ut dui. \', \'Sed sed nisi sed augue convallis suscipit in sed felis. \', \'Aliquam erat volutpat. \', \'Nunc fermentum tortor ac porta dapibus. \', \'In rutrum ac purus sit amet tempus.\'];\nconst FilterType = {\n EVERYTHING: \'everything\',\n FUTURE: \'future\',\n PRESENT: \'present\',\n PAST: \'past\'\n};\nconst SortType = {\n DEFAULT: \'default\',\n PRICE: \'price\',\n TIME: \'time\'\n};\n\n;// CONCATENATED MODULE: ./node_modules/nanoid/index.browser.js\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = \'\'\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || \'\'\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += \'-\'\n } else {\n id += \'_\'\n }\n return id\n }, \'\')\n\n;// CONCATENATED MODULE: ./src/mock/events.js\n\n\n\nconst TIME_SKIP = 125;\nconst getRandomEvent = (date, destinationsList) => {\n const firstDate = new Date(date);\n const secondDate = new Date(firstDate);\n const destinationsIds = destinationsList.map(destination => destination.id);\n secondDate.setMinutes(firstDate.getMinutes() + TIME_SKIP);\n const randomEvent = {\n \'id\': nanoid(),\n \'base_price\': getRandomNumber(499, 4999),\n \'date_from\': firstDate.toISOString(),\n \'date_to\': secondDate.toISOString(),\n \'destination\': getRandomArrayElement(destinationsIds),\n \'is_favorite\': getRandomBoolean(),\n \'offers\': [\'04c3e4e6-9053-42ce-b747-e281314baa31\', \'14c3e4e6-9053-42ce-b747-e281314baa31\', \'24c3e4e6-9053-42ce-b747-e281314baa31\', \'34c3e4e6-9053-42ce-b747-e281314baa31\'],\n \'type\': getRandomArrayElement(EVENTS_TYPES)\n };\n return randomEvent;\n};\nconst getRandomEvents = (count, destinationsList) => {\n const date = getRandomDate();\n const events = [];\n for (let i = 0; i < count; i++) {\n events.push(getRandomEvent(date, destinationsList));\n date.setMinutes(date.getMinutes() + TIME_SKIP);\n }\n return events;\n};\n\n;// CONCATENATED MODULE: ./src/mock/offers.js\n\nconst OFFERS_COUNT = 4;\nconst getRandomOffer = id => {\n const offer = {\n \'id\': `${id}4c3e4e6-9053-42ce-b747-e281314baa31`,\n \'title\': `Upgrade ${id}`,\n \'price\': getRandomNumber(19, 499)\n };\n return offer;\n};\nconst getRandomOffers = type => {\n const randomOffers = [{\n \'type\': type,\n \'offers\': []\n }];\n for (let i = 0; i < OFFERS_COUNT; i++) {\n randomOffers[0].offers.push(getRandomOffer(i));\n }\n return randomOffers;\n};\n\n;// CONCATENATED MODULE: ./src/mock/destinations.js\n\n\nconst getRandomDescription = () => {\n let randomDescription = \'\';\n for (let i = 0; i < getRandomNumber(1, 5); i++) {\n randomDescription += getRandomArrayElement(SENTENCES);\n }\n return randomDescription;\n};\nconst getRandomDestination = id => {\n const destination = {\n \'id\': `${id}fa5cb75-a1fe-4b77-a83c-0e528e910e04`,\n \'description\': getRandomDescription(),\n \'name\': CITIES[id],\n \'pictures\': [{\n \'src\': `https://loremflickr.com/248/152?random=${getRandomNumber(1, 100)}`,\n \'description\': getRandomDescription()\n }]\n };\n return destination;\n};\nconst getRandomDestinations = () => {\n const destinations = [];\n for (let i = 0; i < CITIES.length; i++) {\n destinations.push(getRandomDestination(i));\n }\n return destinations;\n};\n\n;// CONCATENATED MODULE: ./src/model/events-connector.js\n\n\n\n\nconst EVENTS_COUNT = 5;\nconst createUserEvents = () => {\n const offersList = convertKeysToCamelCase(getRandomOffers());\n const destinationsList = convertKeysToCamelCase(getRandomDestinations());\n const eventsList = convertKeysToCamelCase(getRandomEvents(EVENTS_COUNT, destinationsList));\n const destinationsMap = new Map(destinationsList.map(destination => [destination.id, destination]));\n const offers = offersList[0].offers;\n const mergedEvents = eventsList.map(event => {\n const destinationData = destinationsMap.get(event.destination);\n const offersData = event.offers.map(offerId => offers.find(offer => offer.id === offerId)).filter(Boolean);\n return {\n ...event,\n destination: {\n id: destinationData.id,\n name: destinationData.name,\n description: destinationData.description,\n pictures: destinationData.pictures\n },\n offers: offersData\n };\n });\n return Array.from(new Map(mergedEvents.map(event => [event.id, event])).values());\n};\nclass EventsConnector {\n get userEvents() {\n return structuredClone(createUserEvents());\n }\n}\n;// CONCATENATED MODULE: ./src/model/events-model.js\n\nclass EventsModel {\n #EventsConnector = new EventsConnector();\n #eventsList = this.#EventsConnector.userEvents;\n get userEvents() {\n return this.#eventsList;\n }\n}\n;// CONCATENATED MODULE: ./src/view/new-trip-info-view.js\n\nfunction createNewTripInfoTemplate() {\n return `
\n
\n

Amsterdam — Chamonix — Geneva

\n\n

18 — 20 Mar

\n
\n\n

\n Total: € 1230\n

\n
`;\n}\nclass NewTripInfoView extends AbstractView {\n get template() {\n return createNewTripInfoTemplate();\n }\n}\n;// CONCATENATED MODULE: ./src/view/new-filters-view.js\n\nconst createFilterItemTemplate = (filter, isChecked) => {\n const {\n type,\n count\n } = filter;\n return `
\n \n \n
`;\n};\nconst createNewTripFiltersTemplate = filterItems => {\n const filterItemsTemplate = filterItems.map((filter, index) => createFilterItemTemplate(filter, index === 0)).join(\'\');\n return `
\n ${filterItemsTemplate}\n
`;\n};\nclass NewTripFiltersView extends AbstractView {\n #filters = null;\n constructor(filters) {\n super();\n this.#filters = filters;\n }\n get template() {\n return createNewTripFiltersTemplate(this.#filters.filters);\n }\n}\n;// CONCATENATED MODULE: ./src/view/new-sort-container-view.js\n\n\nfunction createNewTripSortTemplate() {\n return `
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
`;\n}\nclass NewTripSortView extends AbstractView {\n #handleSortTypeChange = null;\n constructor({\n onSortTypeChange\n }) {\n super();\n this.#handleSortTypeChange = onSortTypeChange;\n this.element.addEventListener(\'click\', this.#sortTypeChangeHandler);\n }\n get template() {\n return createNewTripSortTemplate();\n }\n #sortTypeChangeHandler = evt => {\n if (evt.target.tagName !== \'LABEL\') {\n return;\n }\n evt.preventDefault();\n this.#handleSortTypeChange(evt.target.dataset.sortType);\n };\n}\n;// CONCATENATED MODULE: ./src/view/new-events-list-view.js\n\nfunction createNewTripEventsListTemplate() {\n return \'\';\n}\nclass NewEventsListView extends AbstractView {\n get template() {\n return createNewTripEventsListTemplate();\n }\n}\n// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js\nvar dayjs_min = __webpack_require__(484);\nvar dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min);\n;// CONCATENATED MODULE: ./src/utils/event.js\n\nconst humanizeDueDate = (dueDate, dateFormat) => dueDate ? dayjs_min_default()(dueDate).format(dateFormat) : \'\';\nconst isEventFuture = dateFrom => dateFrom && dayjs_min_default()().isAfter(dateFrom, \'D\');\nconst isEventPresent = (dateFrom, dateTo) => {\n const now = dayjs_min_default()();\n return dateFrom && dateTo && now.isAfter(dateFrom, \'D\') && now.isBefore(dateTo, \'D\') || now.isSame(dateTo, \'D\');\n};\nconst isEventPast = dateTo => dateTo && dayjs_min_default()().isAfter(dateTo, \'D\');\nconst sortEventsPrice = (eventA, eventB) => eventB.basePrice - eventA.basePrice;\nconst sortEventsTime = (eventA, eventB) => {\n const dateFromA = dayjs_min_default()(eventA.dateFrom);\n const dateToA = dayjs_min_default()(eventA.dateTo);\n const dateFromB = dayjs_min_default()(eventB.dateFrom);\n const dateToB = dayjs_min_default()(eventB.dateTo);\n const durationA = dateToA.diff(dateFromA);\n const durationB = dateToB.diff(dateFromB);\n return durationB - durationA;\n};\n\n;// CONCATENATED MODULE: ./src/view/new-events-item-view.js\n\n\n\nconst TIME_PATTERN = \'hh:mm\';\nconst HUMANIZED_EVENT_DATE_PATTERN = \'MMM DD\';\nconst getTimeDifference = (timeStart, timeEnd) => {\n const start = dayjs_min_default()(timeStart);\n const end = dayjs_min_default()(timeEnd);\n const differenceInDays = end.diff(start, \'day\');\n const differenceInHours = end.diff(start, \'hour\') % 24;\n const differenceInMinutes = end.diff(start, \'minute\') % 60;\n if (differenceInDays > 0) {\n return `${String(differenceInDays).padStart(2, \'0\')}D ${String(differenceInHours).padStart(2, \'0\')}H ${String(differenceInMinutes).padStart(2, \'0\')}M`;\n } else if (differenceInHours > 0) {\n return `${String(differenceInHours).padStart(2, \'0\')}H ${String(differenceInMinutes).padStart(2, \'0\')}M`;\n } else {\n return `${String(differenceInMinutes).padStart(2, \'0\')}M`;\n }\n};\nconst createNewOffer = offer => {\n const {\n title,\n price\n } = offer;\n return `
  • \n ${title}\n +€ \n ${price}\n
  • `;\n};\nconst createOffers = offers => {\n let offersHTML = \'\';\n offers.forEach(offer => {\n offersHTML += createNewOffer(offer);\n });\n return offersHTML;\n};\nconst createNewTripEventsItemTemplate = eventData => {\n const {\n basePrice,\n dateFrom,\n dateTo,\n isFavorite,\n type,\n offers,\n destination\n } = eventData;\n const favoriteButtonClassName = isFavorite ? \'event__favorite-btn--active\' : \'\';\n const humanizedEventDate = humanizeDueDate(dateFrom, HUMANIZED_EVENT_DATE_PATTERN);\n const humanizedStartTime = humanizeDueDate(dateFrom, TIME_PATTERN);\n const humanizedEndTime = humanizeDueDate(dateTo, TIME_PATTERN);\n return `
  • \n
    \n \n
    \n Event type icon\n
    \n

    ${type} ${destination.name}

    \n
    \n

    \n \n —\n \n

    \n

    ${getTimeDifference(dateFrom, dateTo)}

    \n
    \n

    \n € ${basePrice}\n

    \n

    Offers:

    \n \n \n\n \n\n
    \n
  • `;\n};\nclass NewEventsItemView extends AbstractView {\n #eventData = null;\n #handleClick = null;\n #rollupButton = null;\n #handleFavoriteClick = null;\n constructor({\n userEvent,\n onClick,\n onFavoriteClick\n }) {\n super();\n this.#eventData = userEvent;\n this.#handleClick = onClick;\n this.#handleFavoriteClick = onFavoriteClick;\n this.#rollupButton = this.element.querySelector(\'.event__rollup-btn\');\n this.#rollupButton.addEventListener(\'click\', this.#clickHandler);\n this.element.querySelector(\'.event__favorite-icon\').addEventListener(\'click\', this.#favoriteClickHandler);\n }\n get template() {\n return createNewTripEventsItemTemplate(this.#eventData);\n }\n #clickHandler = evt => {\n evt.preventDefault();\n this.#handleClick();\n };\n removeEventListeners() {\n this.#rollupButton.removeEventListener(\'click\', this.#clickHandler);\n }\n #favoriteClickHandler = evt => {\n evt.preventDefault();\n this.#handleFavoriteClick();\n };\n}\n;// CONCATENATED MODULE: ./src/view/new-event-edit-element-view.js\n\n\nconst new_event_edit_element_view_TIME_PATTERN = \'DD/MM/YY hh:mm\';\nconst new_event_edit_element_view_createNewOffer = offer => {\n const {\n title,\n price\n } = offer;\n return `
    \n \n \n
    `;\n};\nconst new_event_edit_element_view_createOffers = offers => {\n let offersHTML = \'\';\n offers.forEach(offer => {\n offersHTML += new_event_edit_element_view_createNewOffer(offer);\n });\n return offersHTML;\n};\nconst createNewEventEditElementTemplate = eventData => {\n const {\n basePrice,\n dateFrom,\n dateTo,\n type,\n offers,\n destination\n } = eventData;\n const dateStart = humanizeDueDate(dateFrom, new_event_edit_element_view_TIME_PATTERN);\n const dateEnd = humanizeDueDate(dateTo, new_event_edit_element_view_TIME_PATTERN);\n return `
  • \n
    \n
    \n
    \n \n \n\n
    \n
    \n Event type\n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n\n
    \n \n \n
    \n
    \n
    \n
    \n\n
    \n \n \n \n \n \n \n \n
    \n\n
    \n \n \n —\n \n \n
    \n\n
    \n \n \n
    \n\n \n \n \n
    \n
    \n
    \n

    Offers

    \n\n
    \n ${new_event_edit_element_view_createOffers(offers)}\n
    \n
    \n\n
    \n

    Destination

    \n

    ${destination.description}

    \n
    \n
    \n
    \n
  • `;\n};\nclass NewEventEditElementView extends AbstractView {\n #eventData = null;\n #handleClick = null;\n #rollupButton = null;\n #handleSubmit = null;\n #formElement = null;\n constructor({\n userEvent,\n onClick,\n onSubmit\n }) {\n super();\n this.#eventData = userEvent;\n this.#handleClick = onClick;\n this.#handleSubmit = onSubmit;\n this.#rollupButton = this.element.querySelector(\'.event__rollup-btn\');\n this.#rollupButton.addEventListener(\'click\', this.#clickHandler);\n this.#formElement = this.element.querySelector(\'.event--edit\');\n this.#formElement.addEventListener(\'submit\', this.#submitHandler);\n }\n get template() {\n return createNewEventEditElementTemplate(this.#eventData);\n }\n #clickHandler = evt => {\n evt.preventDefault();\n this.#handleClick(this.#eventData);\n };\n #submitHandler = evt => {\n evt.preventDefault();\n this.#handleClick(this.#eventData);\n };\n removeEventListeners() {\n this.#rollupButton.removeEventListener(\'click\', this.#clickHandler);\n this.#formElement.removeEventListener(\'submit\', this.#submitHandler);\n }\n}\n;// CONCATENATED MODULE: ./src/presenter/event-presenter.js\n\n\n\n\nconst Mode = {\n DEFAULT: \'DEFAULT\',\n EDITING: \'EDITING\'\n};\nclass EventPresenter {\n #container = null;\n #handleDataChange = null;\n #handleModeChange = null;\n #eventComponent = null;\n #eventEditComponent = null;\n #eventItem = null;\n #mode = Mode.DEFAULT;\n constructor({\n container,\n onDataChange,\n onModeChange\n }) {\n this.#container = container;\n this.#handleDataChange = onDataChange;\n this.#handleModeChange = onModeChange;\n }\n init(eventItem) {\n this.#eventItem = eventItem;\n const prevEventComponent = this.#eventComponent;\n const prevEventEditComponent = this.#eventEditComponent;\n this.#eventComponent = new NewEventsItemView({\n userEvent: this.#eventItem,\n onClick: this.#handleEditClick,\n onFavoriteClick: this.#handleFavoriteClick\n });\n this.#eventEditComponent = new NewEventEditElementView({\n userEvent: this.#eventItem,\n onClick: this.#handleSaveClick\n });\n if (prevEventComponent === null || prevEventEditComponent === null) {\n render(this.#eventComponent, this.#container);\n return;\n }\n if (this.#mode === Mode.DEFAULT) {\n replace(this.#eventComponent, prevEventComponent);\n }\n if (this.#mode === Mode.EDITING) {\n replace(this.#eventEditComponent, prevEventEditComponent);\n }\n remove(prevEventComponent);\n remove(prevEventEditComponent);\n }\n #replaceEventCardToEditForm() {\n replace(this.#eventEditComponent, this.#eventComponent);\n document.addEventListener(\'keydown\', this.#escKeyDownHandler);\n this.#handleModeChange();\n this.#mode = Mode.EDITING;\n }\n #replaceEditFormToEventCard() {\n replace(this.#eventComponent, this.#eventEditComponent);\n document.removeEventListener(\'keydown\', this.#escKeyDownHandler);\n this.#mode = Mode.DEFAULT;\n }\n destroy() {\n remove(this.#eventComponent);\n remove(this.#eventEditComponent);\n }\n resetView() {\n if (this.#mode !== Mode.DEFAULT) {\n this.#replaceEditFormToEventCard();\n }\n }\n #escKeyDownHandler = evt => {\n if (isEscapeKey(evt)) {\n evt.preventDefault();\n this.#replaceEditFormToEventCard();\n }\n };\n #handleEditClick = () => {\n this.#replaceEventCardToEditForm();\n };\n #handleFavoriteClick = () => {\n this.#handleDataChange({\n ...this.#eventItem,\n isFavorite: !this.#eventItem.isFavorite\n });\n };\n #handleSaveClick = eventItem => {\n this.#handleDataChange(eventItem);\n this.#replaceEditFormToEventCard();\n };\n}\n;// CONCATENATED MODULE: ./src/view/no-events-view.js\n\nfunction createNoEventsViewTemplate() {\n return \'

    Loading...

    \';\n}\nclass NoEventsView extends AbstractView {\n get template() {\n return createNoEventsViewTemplate();\n }\n}\n;// CONCATENATED MODULE: ./src/presenter/board-presenter.js\n\n\n\n\n\n\n\n\nclass BoardPresenter {\n #container = null;\n #eventsModel = null;\n #sortComponent = null;\n #eventsListComponent = new NewEventsListView();\n #eventsList = [];\n #eventPresenters = new Map();\n #currentSortType = SortType.DEFAULT;\n #sourcedBoardEvents = [];\n constructor({\n container,\n eventsModel\n }) {\n this.#container = container;\n this.#eventsModel = eventsModel;\n }\n init() {\n this.#eventsList = [...this.#eventsModel.userEvents];\n this.#sourcedBoardEvents = [...this.#eventsModel.userEvents];\n this.#renderBoard();\n this.#renderSort();\n }\n #renderEvent(inputUserEvent) {\n const eventPresenter = new EventPresenter({\n container: this.#eventsListComponent.element,\n onDataChange: this.#handleEventChange,\n onModeChange: this.#handleModeChange\n });\n eventPresenter.init(inputUserEvent);\n this.#eventPresenters.set(inputUserEvent.id, eventPresenter);\n }\n #renderNoEvents() {\n render(new NoEventsView(), this.#container);\n }\n #sortEvents(sortType) {\n switch (sortType) {\n case SortType.PRICE:\n this.#eventsList.sort(sortEventsPrice);\n break;\n case SortType.TIME:\n this.#eventsList.sort(sortEventsTime);\n break;\n default:\n this.#eventsList = [...this.#sourcedBoardEvents];\n }\n this.#currentSortType = sortType;\n }\n #handleSortTypeChange = sortType => {\n if (sortType === undefined || this.#currentSortType === sortType) {\n return;\n }\n this.#sortEvents(sortType);\n this.#clearEventList();\n this.#renderBoard();\n };\n #renderSort() {\n this.#sortComponent = new NewTripSortView({\n onSortTypeChange: this.#handleSortTypeChange\n });\n render(this.#sortComponent, this.#container, \'AFTERBEGIN\');\n }\n #renderBoard() {\n if (this.#eventsList.length === 0) {\n this.#renderNoEvents();\n return;\n }\n render(this.#eventsListComponent, this.#container);\n for (let i = 0; i < this.#eventsList.length; i++) {\n this.#renderEvent(this.#eventsList[i]);\n }\n }\n #handleEventChange = updatedEvent => {\n this.#eventsList = updateItem(this.#eventsList, updatedEvent);\n this.#sourcedBoardEvents = updateItem(this.#sourcedBoardEvents, updatedEvent);\n this.#eventPresenters.get(updatedEvent.id).init(updatedEvent);\n };\n #handleModeChange = () => {\n this.#eventPresenters.forEach(presenter => presenter.resetView());\n };\n #clearEventList() {\n this.#eventPresenters.forEach(presenter => presenter.destroy());\n this.#eventPresenters.clear();\n }\n}\n;// CONCATENATED MODULE: ./src/utils/filter.js\n\n\nconst filter = {\n [FilterType.EVERYTHING]: userEvents => userEvents,\n [FilterType.FUTURE]: userEvents => userEvents.filter(userEvent => isEventFuture(userEvent.dateFrom)),\n [FilterType.PRESENT]: userEvents => userEvents.filter(userEvent => isEventPresent(userEvent.dateFrom)),\n [FilterType.PAST]: userEvents => userEvents.filter(userEvent => isEventPast(userEvent.dateFrom))\n};\n\n;// CONCATENATED MODULE: ./src/mock/filter.js\n\nfunction generateFilter(userEvents) {\n return Object.entries(filter).map(([filterType, filterEvents]) => ({\n type: filterType,\n count: filterEvents(userEvents).length\n }));\n}\n\n;// CONCATENATED MODULE: ./src/main.js\n\n\n\n\n\n\nconst tripMainContainer = document.querySelector(\'.trip-main\');\nconst tripFiltersContainer = tripMainContainer.querySelector(\'.trip-controls__filters\');\nconst tripEventsContainer = document.querySelector(\'.trip-events\');\nconst eventsModel = new EventsModel();\nconst boardPresenter = new BoardPresenter({\n container: tripEventsContainer,\n eventsModel\n});\nconst filters = generateFilter(eventsModel.userEvents);\nrender(new NewTripInfoView(), tripMainContainer, \'AFTERBEGIN\');\nrender(new NewTripFiltersView({\n filters\n}), tripFiltersContainer);\nboardPresenter.init();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vc3JjL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcuY3NzP2RmYTYiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldy5qcz80MDczIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL2ZyYW1ld29yay9yZW5kZXIuanM/YjUxZSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy91dGlscy9jb21tb24uanM/YzhjMyIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9jb25zdC5qcz9kZmI2Iiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzP2IzODEiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbW9jay9ldmVudHMuanM/NjQ4ZCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9tb2NrL29mZmVycy5qcz84ZDI5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vY2svZGVzdGluYXRpb25zLmpzP2Q4YmYiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbW9kZWwvZXZlbnRzLWNvbm5lY3Rvci5qcz9hZGU4Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vZGVsL2V2ZW50cy1tb2RlbC5qcz9lMDk5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LXRyaXAtaW5mby12aWV3LmpzPzJmNTgiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uZXctZmlsdGVycy12aWV3LmpzPzQzMzUiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uZXctc29ydC1jb250YWluZXItdmlldy5qcz83ZTQ5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LWV2ZW50cy1saXN0LXZpZXcuanM/NjgwZCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy91dGlscy9ldmVudC5qcz8yYTUxIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LWV2ZW50cy1pdGVtLXZpZXcuanM/NzRiYyIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25ldy1ldmVudC1lZGl0LWVsZW1lbnQtdmlldy5qcz80NDUwIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ByZXNlbnRlci9ldmVudC1wcmVzZW50ZXIuanM/YzVmNSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25vLWV2ZW50cy12aWV3LmpzPzI5ODciLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvcHJlc2VudGVyL2JvYXJkLXByZXNlbnRlci5qcz81YTYwIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3V0aWxzL2ZpbHRlci5qcz9lZmE2Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vY2svZmlsdGVyLmpzPzk0MmIiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbWFpbi5qcz84MTM4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9hYnN0cmFjdC12aWV3LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWJzdHJhY3Qtdmlldy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi4vcmVuZGVyLmpzJztcbmltcG9ydCAnLi9hYnN0cmFjdC12aWV3LmNzcyc7XG5cbi8qKiBAY29uc3Qge3N0cmluZ30g0JrQu9Cw0YHRgSwg0YDQtdCw0LvQuNC30YPRjtGJ0LjQuSDRjdGE0YTQtdC60YIgXCLQv9C+0LrQsNGH0LjQstCw0L3QuNGPINCz0L7Qu9C+0LLQvtC5XCIgKi9cbmNvbnN0IFNIQUtFX0NMQVNTX05BTUUgPSAnc2hha2UnO1xuXG4vKiogQGNvbnN0IHtudW1iZXJ9INCS0YDQtdC80Y8g0LDQvdC40LzQsNGG0LjQuCDQsiDQvNC40LvQu9C40YHQtdC60YPQvdC00LDRhSAqL1xuY29uc3QgU0hBS0VfQU5JTUFUSU9OX1RJTUVPVVQgPSA2MDA7XG5cbi8qKlxuICog0JDQsdGB0YLRgNCw0LrRgtC90YvQuSDQutC70LDRgdGBINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0VmlldyB7XG4gIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR8bnVsbH0g0K3Qu9C10LzQtdC90YIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8gKi9cbiAgI2VsZW1lbnQgPSBudWxsO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAobmV3LnRhcmdldCA9PT0gQWJzdHJhY3RWaWV3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgaW5zdGFudGlhdGUgQWJzdHJhY3RWaWV3LCBvbmx5IGNvbmNyZXRlIG9uZS4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog0JPQtdGC0YLQtdGAINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9INCt0LvQtdC80LXQvdGCINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXG4gICAqL1xuICBnZXQgZWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuI2VsZW1lbnQpIHtcbiAgICAgIHRoaXMuI2VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRoaXMudGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jZWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiDQk9C10YLRgtC10YAg0LTQu9GPINC/0L7Qu9GD0YfQtdC90LjRjyDRgNCw0LfQvNC10YLQutC4INGN0LvQtdC80LXQvdGC0LBcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9INCg0LDQt9C80LXRgtC60LAg0Y3Qu9C10LzQtdC90YLQsCDQsiDQstC40LTQtSDRgdGC0YDQvtC60LhcbiAgICovXG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQ6IGdldCB0ZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqINCc0LXRgtC+0LQg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCAqL1xuICByZW1vdmVFbGVtZW50KCkge1xuICAgIHRoaXMuI2VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCc0LXRgtC+0LQsINGA0LXQsNC70LjQt9GD0Y7RidC40Lkg0Y3RhNGE0LXQutGCIFwi0L/QvtC60LDRh9C40LLQsNC90LjRjyDQs9C+0LvQvtCy0L7QuVwiXG4gICAqIEBwYXJhbSB7c2hha2VDYWxsYmFja30gW2NhbGxiYWNrXSDQpNGD0L3QutGG0LjRjywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQstGL0LfQstCw0L3QsCDQv9C+0YHQu9C1INC30LDQstC10YDRiNC10L3QuNGPINCw0L3QuNC80LDRhtC40LhcbiAgICovXG4gIHNoYWtlKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoU0hBS0VfQ0xBU1NfTkFNRSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShTSEFLRV9DTEFTU19OQU1FKTtcbiAgICAgIGNhbGxiYWNrPy4oKTtcbiAgICB9LCBTSEFLRV9BTklNQVRJT05fVElNRU9VVCk7XG4gIH1cbn1cblxuLyoqXG4gKiDQpNGD0L3QutGG0LjRjywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQstGL0LfQstCw0L3QsCDQvNC10YLQvtC00L7QvCBzaGFrZSDQv9C+0YHQu9C1INC30LDQstC10YDRiNC10L3QuNGPINCw0L3QuNC80LDRhtC40LhcbiAqIEBjYWxsYmFjayBzaGFrZUNhbGxiYWNrXG4gKi8iLCJpbXBvcnQgQWJzdHJhY3RWaWV3IGZyb20gJy4vdmlldy9hYnN0cmFjdC12aWV3LmpzJztcblxuLyoqIEBlbnVtIHtzdHJpbmd9XG4gKiBCRUZPUkVCRUdJTiAtINCy0YHRgtCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YIg0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQUZURVJCRUdJTiAtINCy0YHRgtCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YIg0YHRgNCw0LfRgyDQv9C+0YHQu9C1INC90LDRh9Cw0LvQsCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQkVGT1JFRU5EIC0g0LLRgdGC0LDQstC40YLRjCDRjdC70LXQvNC10L3RgiDQv9C10YDQtdC0INC60L7QvdGG0L7QvCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQUZURVJFTkQgLSDQstGB0YLQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCINGB0YDQsNC30YMg0L/QvtGB0LvQtSDQutC+0L3RhtCwINC60L7QvdGC0LXQudC90LXRgNCwXG4qL1xuY29uc3QgUmVuZGVyUG9zaXRpb24gPSB7XG4gIEJFRk9SRUJFR0lOOiAnYmVmb3JlYmVnaW4nLFxuICBBRlRFUkJFR0lOOiAnYWZ0ZXJiZWdpbicsXG4gIEJFRk9SRUVORDogJ2JlZm9yZWVuZCcsXG4gIEFGVEVSRU5EOiAnYWZ0ZXJlbmQnXG59O1xuXG4vKipcbiAqINCk0YPQvdC60YbQuNGPINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINGN0LvQtdC80LXQvdGC0LAg0L3QsCDQvtGB0L3QvtCy0LUg0YDQsNC30LzQtdGC0LrQuFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlINCg0LDQt9C80LXRgtC60LAg0LIg0LLQuNC00LUg0YHRgtGA0L7QutC4XG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9INCh0L7Qt9C00LDQvdC90YvQuSDRjdC70LXQvNC10L3RglxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlKSB7XG4gIGNvbnN0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSB0ZW1wbGF0ZTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8g0LTQu9GPINC+0YLRgNC40YHQvtCy0LrQuCDRjdC70LXQvNC10L3RgtCwXG4gKiBAcGFyYW0ge0Fic3RyYWN0Vmlld30gY29tcG9uZW50INCa0L7QvNC/0L7QvdC10L3Rgiwg0LrQvtGC0L7RgNGL0Lkg0LTQvtC70LbQtdC9INCx0YvQuyDQvtGC0YDQuNGB0L7QstCw0L1cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciDQrdC70LXQvNC10L3RgiDQsiDQutC+0YLQvtGA0L7QvCDQsdGD0LTQtdGCINC+0YLRgNC40YHQvtCy0LDQvSDQutC+0LzQv9C+0L3QtdC90YJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZSDQn9C+0LfQuNGG0LjRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L4g0LrQvtC90YLQtdC50L3QtdGA0LAuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIC0gYGJlZm9yZWVuZGBcbiAqL1xuZnVuY3Rpb24gcmVuZGVyKGNvbXBvbmVudCwgY29udGFpbmVyLCBwbGFjZSA9IFJlbmRlclBvc2l0aW9uLkJFRk9SRUVORCkge1xuICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFZpZXcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gcmVuZGVyIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRhaW5lciBlbGVtZW50IGRvZXNuXFwndCBleGlzdCcpO1xuICB9XG4gIGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEVsZW1lbnQocGxhY2UsIGNvbXBvbmVudC5lbGVtZW50KTtcbn1cblxuLyoqXG4gKiDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0LfQsNC80LXQvdGLINC+0LTQvdC+0LPQviDQutC+0LzQv9C+0L3QtdC90YLQsCDQvdCwINC00YDRg9Cz0L7QuVxuICogQHBhcmFtIHtBYnN0cmFjdFZpZXd9IG5ld0NvbXBvbmVudCDQmtC+0LzQv9C+0L3QtdC90YIsINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0L/QvtC60LDQt9Cw0YLRjFxuICogQHBhcmFtIHtBYnN0cmFjdFZpZXd9IG9sZENvbXBvbmVudCDQmtC+0LzQv9C+0L3QtdC90YIsINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0YHQutGA0YvRgtGMXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2UobmV3Q29tcG9uZW50LCBvbGRDb21wb25lbnQpIHtcbiAgaWYgKCEobmV3Q29tcG9uZW50IGluc3RhbmNlb2YgQWJzdHJhY3RWaWV3ICYmIG9sZENvbXBvbmVudCBpbnN0YW5jZW9mIEFic3RyYWN0VmlldykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiByZXBsYWNlIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGNvbnN0IG5ld0VsZW1lbnQgPSBuZXdDb21wb25lbnQuZWxlbWVudDtcbiAgY29uc3Qgb2xkRWxlbWVudCA9IG9sZENvbXBvbmVudC5lbGVtZW50O1xuICBjb25zdCBwYXJlbnQgPSBvbGRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBlbGVtZW50IGRvZXNuXFwndCBleGlzdCcpO1xuICB9XG4gIHBhcmVudC5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgb2xkRWxlbWVudCk7XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGC0LBcbiAqIEBwYXJhbSB7QWJzdHJhY3RWaWV3fSBjb21wb25lbnQg0JrQvtC80L/QvtC90LXQvdGCLCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INGD0LTQsNC70LjRgtGMXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZShjb21wb25lbnQpIHtcbiAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFZpZXcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gcmVtb3ZlIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGNvbXBvbmVudC5lbGVtZW50LnJlbW92ZSgpO1xuICBjb21wb25lbnQucmVtb3ZlRWxlbWVudCgpO1xufVxuZXhwb3J0IHsgUmVuZGVyUG9zaXRpb24sIGNyZWF0ZUVsZW1lbnQsIHJlbmRlciwgcmVwbGFjZSwgcmVtb3ZlIH07IiwiY29uc3QgRVNDQVBFX0tFWV9DT0RFID0gMjc7XG5jb25zdCBpc0VzY2FwZUtleSA9IGV2dCA9PiBldnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWV9DT0RFO1xuY29uc3QgZ2V0UmFuZG9tTnVtYmVyID0gKGZyb20sIHRvKSA9PiB7XG4gIGNvbnN0IGxvd2VyID0gTWF0aC5jZWlsKE1hdGgubWluKGZyb20sIHRvKSk7XG4gIGNvbnN0IHVwcGVyID0gTWF0aC5mbG9vcihNYXRoLm1heChmcm9tLCB0bykpO1xuICBjb25zdCByZXN1bHQgPSBNYXRoLnJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSArIGxvd2VyO1xuICByZXR1cm4gTWF0aC5mbG9vcihyZXN1bHQpO1xufTtcbmNvbnN0IGdldFJhbmRvbVN0cmluZyA9IChkZXNpcmVkU3RyaW5nTGVuZ3RoID0gMSkgPT4ge1xuICBjb25zdCBwcmltZXIgPSAnIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgbGV0IHJhbmRvbVN0cmluZyA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc2lyZWRTdHJpbmdMZW5ndGg7IGkrKykge1xuICAgIHJhbmRvbVN0cmluZyArPSBwcmltZXIuY2hhckF0KGdldFJhbmRvbU51bWJlcigwLCBwcmltZXIubGVuZ3RoIC0gMSkpO1xuICB9XG4gIHJldHVybiByYW5kb21TdHJpbmc7XG59O1xuY29uc3QgZ2V0UmFuZG9tQm9vbGVhbiA9ICgpID0+IE1hdGgucmFuZG9tKCkgPj0gMC41O1xuY29uc3QgZ2V0UmFuZG9tQXJyYXlFbGVtZW50ID0gaXRlbXMgPT4gaXRlbXNbZ2V0UmFuZG9tTnVtYmVyKDAsIGl0ZW1zLmxlbmd0aCAtIDEpXTtcbmNvbnN0IGdldFJhbmRvbURhdGUgPSAoKSA9PiB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcih0b2RheS5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGNvbnN0IHJhbmRvbVRpbWUgPSBNYXRoLnJhbmRvbSgpICogKG9uZVllYXJGcm9tTm93IC0gdG9kYXkpICsgdG9kYXkuZ2V0VGltZSgpO1xuICByZXR1cm4gbmV3IERhdGUocmFuZG9tVGltZSk7XG59O1xuY29uc3QgY29udmVydFRvQ2FtZWxDYXNlID0gc3RyID0+IHN0ci5yZXBsYWNlKC8oX1xcdykvZywgbWF0Y2ggPT4gbWF0Y2hbMV0udG9VcHBlckNhc2UoKSk7XG5jb25zdCBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlID0gaXRlbXMgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGNvbnZlcnRLZXlzVG9DYW1lbENhc2UpO1xuICB9XG4gIGlmIChpdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbXMgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGl0ZW1zKS5yZWR1Y2UoKG5ld0l0ZW1zLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIG5ld0l0ZW1zW2NvbnZlcnRUb0NhbWVsQ2FzZShrZXkpXSA9IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UodmFsdWUpO1xuICAgICAgcmV0dXJuIG5ld0l0ZW1zO1xuICAgIH0sIHt9KTtcbiAgfVxuICByZXR1cm4gaXRlbXM7XG59O1xuY29uc3QgdXBkYXRlSXRlbSA9IChpdGVtcywgdXBkYXRlKSA9PiBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkID09PSB1cGRhdGUuaWQgPyB1cGRhdGUgOiBpdGVtKTtcbmV4cG9ydCB7IHVwZGF0ZUl0ZW0sIGdldFJhbmRvbU51bWJlciwgZ2V0UmFuZG9tU3RyaW5nLCBnZXRSYW5kb21Cb29sZWFuLCBnZXRSYW5kb21EYXRlLCBnZXRSYW5kb21BcnJheUVsZW1lbnQsIGNvbnZlcnRLZXlzVG9DYW1lbENhc2UsIGlzRXNjYXBlS2V5IH07IiwiY29uc3QgRVZFTlRTX1RZUEVTID0gWydUYXhpJywgJ0J1cycsICdUcmFpbicsICdTaGlwJywgJ0RyaXZlJywgJ0ZsaWdodCcsICdDaGVjay1pbicsICdTaWdodHNlZWluZycsICdSZXN0YXVyYW50J107XG5jb25zdCBDSVRJRVMgPSBbJ05ldyBZb3JrJywgJ1Rva3lvJywgJ1BhcmlzJywgJ0xvbmRvbicsICdTeWRuZXknLCAnQmVybGluJywgJ1JpbyBkZSBKYW5laXJvJywgJ01vc2NvdycsICdDYWlybycsICdDYXBlIFRvd24nXTtcbmNvbnN0IFNFTlRFTkNFUyA9IFsnTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBhbGlxdWV0IHZhcml1cyBtYWduYSwgbm9uIHBvcnRhIGxpZ3VsYSBmZXVnaWF0IGVnZXQuICcsICdGdXNjZSB0cmlzdGlxdWUgZmVsaXMgYXQgZmVybWVudHVtIHBoYXJldHJhLiAnLCAnQWxpcXVhbSBpZCBvcmNpIHV0IGxlY3R1cyB2YXJpdXMgdml2ZXJyYS4gJywgJ051bGxhbSBudW5jIGV4LCBjb252YWxsaXMgc2VkIGZpbmlidXMgZWdldCwgc29sbGljaXR1ZGluIGVnZXQgYW50ZS4gJywgJ1BoYXNlbGx1cyBlcm9zIG1hdXJpcywgY29uZGltZW50dW0gc2VkIG5pYmggdml0YWUsIHNvZGFsZXMgZWZmaWNpdHVyIGlwc3VtLiAnLCAnU2VkIGJsYW5kaXQsIGVyb3MgdmVsIGFsaXF1YW0gZmF1Y2lidXMsIHB1cnVzIGV4IGV1aXNtb2QgZGlhbSwgZXUgbHVjdHVzIG51bmMgYW50ZSB1dCBkdWkuICcsICdTZWQgc2VkIG5pc2kgc2VkIGF1Z3VlIGNvbnZhbGxpcyBzdXNjaXBpdCBpbiBzZWQgZmVsaXMuICcsICdBbGlxdWFtIGVyYXQgdm9sdXRwYXQuICcsICdOdW5jIGZlcm1lbnR1bSB0b3J0b3IgYWMgcG9ydGEgZGFwaWJ1cy4gJywgJ0luIHJ1dHJ1bSBhYyBwdXJ1cyBzaXQgYW1ldCB0ZW1wdXMuJ107XG5jb25zdCBGaWx0ZXJUeXBlID0ge1xuICBFVkVSWVRISU5HOiAnZXZlcnl0aGluZycsXG4gIEZVVFVSRTogJ2Z1dHVyZScsXG4gIFBSRVNFTlQ6ICdwcmVzZW50JyxcbiAgUEFTVDogJ3Bhc3QnXG59O1xuY29uc3QgU29ydFR5cGUgPSB7XG4gIERFRkFVTFQ6ICdkZWZhdWx0JyxcbiAgUFJJQ0U6ICdwcmljZScsXG4gIFRJTUU6ICd0aW1lJ1xufTtcbmV4cG9ydCB7IEVWRU5UU19UWVBFUywgQ0lUSUVTLCBTRU5URU5DRVMsIEZpbHRlclR5cGUsIFNvcnRUeXBlIH07IiwiZXhwb3J0IHsgdXJsQWxwaGFiZXQgfSBmcm9tICcuL3VybC1hbHBoYWJldC9pbmRleC5qcydcbmV4cG9ydCBsZXQgcmFuZG9tID0gYnl0ZXMgPT4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlcykpXG5leHBvcnQgbGV0IGN1c3RvbVJhbmRvbSA9IChhbHBoYWJldCwgZGVmYXVsdFNpemUsIGdldFJhbmRvbSkgPT4ge1xuICBsZXQgbWFzayA9ICgyIDw8IChNYXRoLmxvZyhhbHBoYWJldC5sZW5ndGggLSAxKSAvIE1hdGguTE4yKSkgLSAxXG4gIGxldCBzdGVwID0gLX4oKDEuNiAqIG1hc2sgKiBkZWZhdWx0U2l6ZSkgLyBhbHBoYWJldC5sZW5ndGgpXG4gIHJldHVybiAoc2l6ZSA9IGRlZmF1bHRTaXplKSA9PiB7XG4gICAgbGV0IGlkID0gJydcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGJ5dGVzID0gZ2V0UmFuZG9tKHN0ZXApXG4gICAgICBsZXQgaiA9IHN0ZXBcbiAgICAgIHdoaWxlIChqLS0pIHtcbiAgICAgICAgaWQgKz0gYWxwaGFiZXRbYnl0ZXNbal0gJiBtYXNrXSB8fCAnJ1xuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSBzaXplKSByZXR1cm4gaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBsZXQgY3VzdG9tQWxwaGFiZXQgPSAoYWxwaGFiZXQsIHNpemUgPSAyMSkgPT5cbiAgY3VzdG9tUmFuZG9tKGFscGhhYmV0LCBzaXplLCByYW5kb20pXG5leHBvcnQgbGV0IG5hbm9pZCA9IChzaXplID0gMjEpID0+XG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSkpLnJlZHVjZSgoaWQsIGJ5dGUpID0+IHtcbiAgICBieXRlICY9IDYzXG4gICAgaWYgKGJ5dGUgPCAzNikge1xuICAgICAgaWQgKz0gYnl0ZS50b1N0cmluZygzNilcbiAgICB9IGVsc2UgaWYgKGJ5dGUgPCA2Mikge1xuICAgICAgaWQgKz0gKGJ5dGUgLSAyNikudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKClcbiAgICB9IGVsc2UgaWYgKGJ5dGUgPiA2Mikge1xuICAgICAgaWQgKz0gJy0nXG4gICAgfSBlbHNlIHtcbiAgICAgIGlkICs9ICdfJ1xuICAgIH1cbiAgICByZXR1cm4gaWRcbiAgfSwgJycpXG4iLCJpbXBvcnQgeyBnZXRSYW5kb21BcnJheUVsZW1lbnQsIGdldFJhbmRvbU51bWJlciwgZ2V0UmFuZG9tQm9vbGVhbiwgZ2V0UmFuZG9tRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBFVkVOVFNfVFlQRVMgfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuY29uc3QgVElNRV9TS0lQID0gMTI1O1xuY29uc3QgZ2V0UmFuZG9tRXZlbnQgPSAoZGF0ZSwgZGVzdGluYXRpb25zTGlzdCkgPT4ge1xuICBjb25zdCBmaXJzdERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgY29uc3Qgc2Vjb25kRGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF0ZSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uc0lkcyA9IGRlc3RpbmF0aW9uc0xpc3QubWFwKGRlc3RpbmF0aW9uID0+IGRlc3RpbmF0aW9uLmlkKTtcbiAgc2Vjb25kRGF0ZS5zZXRNaW51dGVzKGZpcnN0RGF0ZS5nZXRNaW51dGVzKCkgKyBUSU1FX1NLSVApO1xuICBjb25zdCByYW5kb21FdmVudCA9IHtcbiAgICAnaWQnOiBuYW5vaWQoKSxcbiAgICAnYmFzZV9wcmljZSc6IGdldFJhbmRvbU51bWJlcig0OTksIDQ5OTkpLFxuICAgICdkYXRlX2Zyb20nOiBmaXJzdERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAnZGF0ZV90byc6IHNlY29uZERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAnZGVzdGluYXRpb24nOiBnZXRSYW5kb21BcnJheUVsZW1lbnQoZGVzdGluYXRpb25zSWRzKSxcbiAgICAnaXNfZmF2b3JpdGUnOiBnZXRSYW5kb21Cb29sZWFuKCksXG4gICAgJ29mZmVycyc6IFsnMDRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxJywgJzE0YzNlNGU2LTkwNTMtNDJjZS1iNzQ3LWUyODEzMTRiYWEzMScsICcyNGMzZTRlNi05MDUzLTQyY2UtYjc0Ny1lMjgxMzE0YmFhMzEnLCAnMzRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxJ10sXG4gICAgJ3R5cGUnOiBnZXRSYW5kb21BcnJheUVsZW1lbnQoRVZFTlRTX1RZUEVTKVxuICB9O1xuICByZXR1cm4gcmFuZG9tRXZlbnQ7XG59O1xuY29uc3QgZ2V0UmFuZG9tRXZlbnRzID0gKGNvdW50LCBkZXN0aW5hdGlvbnNMaXN0KSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBnZXRSYW5kb21EYXRlKCk7XG4gIGNvbnN0IGV2ZW50cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaChnZXRSYW5kb21FdmVudChkYXRlLCBkZXN0aW5hdGlvbnNMaXN0KSk7XG4gICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgVElNRV9TS0lQKTtcbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbUV2ZW50cyB9OyIsImltcG9ydCB7IGdldFJhbmRvbU51bWJlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5jb25zdCBPRkZFUlNfQ09VTlQgPSA0O1xuY29uc3QgZ2V0UmFuZG9tT2ZmZXIgPSBpZCA9PiB7XG4gIGNvbnN0IG9mZmVyID0ge1xuICAgICdpZCc6IGAke2lkfTRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxYCxcbiAgICAndGl0bGUnOiBgVXBncmFkZSAke2lkfWAsXG4gICAgJ3ByaWNlJzogZ2V0UmFuZG9tTnVtYmVyKDE5LCA0OTkpXG4gIH07XG4gIHJldHVybiBvZmZlcjtcbn07XG5jb25zdCBnZXRSYW5kb21PZmZlcnMgPSB0eXBlID0+IHtcbiAgY29uc3QgcmFuZG9tT2ZmZXJzID0gW3tcbiAgICAndHlwZSc6IHR5cGUsXG4gICAgJ29mZmVycyc6IFtdXG4gIH1dO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE9GRkVSU19DT1VOVDsgaSsrKSB7XG4gICAgcmFuZG9tT2ZmZXJzWzBdLm9mZmVycy5wdXNoKGdldFJhbmRvbU9mZmVyKGkpKTtcbiAgfVxuICByZXR1cm4gcmFuZG9tT2ZmZXJzO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbU9mZmVycyB9OyIsImltcG9ydCB7IGdldFJhbmRvbUFycmF5RWxlbWVudCwgZ2V0UmFuZG9tTnVtYmVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IFNFTlRFTkNFUywgQ0lUSUVTIH0gZnJvbSAnLi4vY29uc3QnO1xuY29uc3QgZ2V0UmFuZG9tRGVzY3JpcHRpb24gPSAoKSA9PiB7XG4gIGxldCByYW5kb21EZXNjcmlwdGlvbiA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGdldFJhbmRvbU51bWJlcigxLCA1KTsgaSsrKSB7XG4gICAgcmFuZG9tRGVzY3JpcHRpb24gKz0gZ2V0UmFuZG9tQXJyYXlFbGVtZW50KFNFTlRFTkNFUyk7XG4gIH1cbiAgcmV0dXJuIHJhbmRvbURlc2NyaXB0aW9uO1xufTtcbmNvbnN0IGdldFJhbmRvbURlc3RpbmF0aW9uID0gaWQgPT4ge1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IHtcbiAgICAnaWQnOiBgJHtpZH1mYTVjYjc1LWExZmUtNGI3Ny1hODNjLTBlNTI4ZTkxMGUwNGAsXG4gICAgJ2Rlc2NyaXB0aW9uJzogZ2V0UmFuZG9tRGVzY3JpcHRpb24oKSxcbiAgICAnbmFtZSc6IENJVElFU1tpZF0sXG4gICAgJ3BpY3R1cmVzJzogW3tcbiAgICAgICdzcmMnOiBgaHR0cHM6Ly9sb3JlbWZsaWNrci5jb20vMjQ4LzE1Mj9yYW5kb209JHtnZXRSYW5kb21OdW1iZXIoMSwgMTAwKX1gLFxuICAgICAgJ2Rlc2NyaXB0aW9uJzogZ2V0UmFuZG9tRGVzY3JpcHRpb24oKVxuICAgIH1dXG4gIH07XG4gIHJldHVybiBkZXN0aW5hdGlvbjtcbn07XG5jb25zdCBnZXRSYW5kb21EZXN0aW5hdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IGRlc3RpbmF0aW9ucyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IENJVElFUy5sZW5ndGg7IGkrKykge1xuICAgIGRlc3RpbmF0aW9ucy5wdXNoKGdldFJhbmRvbURlc3RpbmF0aW9uKGkpKTtcbiAgfVxuICByZXR1cm4gZGVzdGluYXRpb25zO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbURlc3RpbmF0aW9ucyB9OyIsImltcG9ydCB7IGdldFJhbmRvbUV2ZW50cyB9IGZyb20gJy4uL21vY2svZXZlbnRzJztcbmltcG9ydCB7IGdldFJhbmRvbU9mZmVycyB9IGZyb20gJy4uL21vY2svb2ZmZXJzJztcbmltcG9ydCB7IGdldFJhbmRvbURlc3RpbmF0aW9ucyB9IGZyb20gJy4uL21vY2svZGVzdGluYXRpb25zJztcbmltcG9ydCB7IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuY29uc3QgRVZFTlRTX0NPVU5UID0gNTtcbmNvbnN0IGNyZWF0ZVVzZXJFdmVudHMgPSAoKSA9PiB7XG4gIGNvbnN0IG9mZmVyc0xpc3QgPSBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlKGdldFJhbmRvbU9mZmVycygpKTtcbiAgY29uc3QgZGVzdGluYXRpb25zTGlzdCA9IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UoZ2V0UmFuZG9tRGVzdGluYXRpb25zKCkpO1xuICBjb25zdCBldmVudHNMaXN0ID0gY29udmVydEtleXNUb0NhbWVsQ2FzZShnZXRSYW5kb21FdmVudHMoRVZFTlRTX0NPVU5ULCBkZXN0aW5hdGlvbnNMaXN0KSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uc01hcCA9IG5ldyBNYXAoZGVzdGluYXRpb25zTGlzdC5tYXAoZGVzdGluYXRpb24gPT4gW2Rlc3RpbmF0aW9uLmlkLCBkZXN0aW5hdGlvbl0pKTtcbiAgY29uc3Qgb2ZmZXJzID0gb2ZmZXJzTGlzdFswXS5vZmZlcnM7XG4gIGNvbnN0IG1lcmdlZEV2ZW50cyA9IGV2ZW50c0xpc3QubWFwKGV2ZW50ID0+IHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRhdGEgPSBkZXN0aW5hdGlvbnNNYXAuZ2V0KGV2ZW50LmRlc3RpbmF0aW9uKTtcbiAgICBjb25zdCBvZmZlcnNEYXRhID0gZXZlbnQub2ZmZXJzLm1hcChvZmZlcklkID0+IG9mZmVycy5maW5kKG9mZmVyID0+IG9mZmVyLmlkID09PSBvZmZlcklkKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIGlkOiBkZXN0aW5hdGlvbkRhdGEuaWQsXG4gICAgICAgIG5hbWU6IGRlc3RpbmF0aW9uRGF0YS5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzdGluYXRpb25EYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICBwaWN0dXJlczogZGVzdGluYXRpb25EYXRhLnBpY3R1cmVzXG4gICAgICB9LFxuICAgICAgb2ZmZXJzOiBvZmZlcnNEYXRhXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBNYXAobWVyZ2VkRXZlbnRzLm1hcChldmVudCA9PiBbZXZlbnQuaWQsIGV2ZW50XSkpLnZhbHVlcygpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNDb25uZWN0b3Ige1xuICBnZXQgdXNlckV2ZW50cygpIHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKGNyZWF0ZVVzZXJFdmVudHMoKSk7XG4gIH1cbn0iLCJpbXBvcnQgRXZlbnRzQ29ubmVjdG9yIGZyb20gJy4vZXZlbnRzLWNvbm5lY3Rvcic7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNNb2RlbCB7XG4gICNFdmVudHNDb25uZWN0b3IgPSBuZXcgRXZlbnRzQ29ubmVjdG9yKCk7XG4gICNldmVudHNMaXN0ID0gdGhpcy4jRXZlbnRzQ29ubmVjdG9yLnVzZXJFdmVudHM7XG4gIGdldCB1c2VyRXZlbnRzKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHNMaXN0O1xuICB9XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKSB7XG4gIHJldHVybiBgPHNlY3Rpb24gY2xhc3M9XCJ0cmlwLW1haW5fX3RyaXAtaW5mbyAgdHJpcC1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1pbmZvX19tYWluXCI+XG4gICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRyaXAtaW5mb19fdGl0bGVcIj5BbXN0ZXJkYW0gJm1kYXNoOyBDaGFtb25peCAmbWRhc2g7IEdlbmV2YTwvaDE+XG5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0cmlwLWluZm9fX2RhdGVzXCI+MTgmbmJzcDsmbWRhc2g7Jm5ic3A7MjAgTWFyPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidHJpcC1pbmZvX19jb3N0XCI+XG4gICAgICAgICAgICAgIFRvdGFsOiAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cInRyaXAtaW5mb19fY29zdC12YWx1ZVwiPjEyMzA8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9zZWN0aW9uPmA7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdUcmlwSW5mb1ZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5jb25zdCBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUgPSAoZmlsdGVyLCBpc0NoZWNrZWQpID0+IHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY291bnRcbiAgfSA9IGZpbHRlcjtcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwidHJpcC1maWx0ZXJzX19maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJmaWx0ZXItJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRyaXAtZmlsdGVyc19fZmlsdGVyLWlucHV0IHZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRyaXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICAke2lzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgJHtjb3VudCA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ30+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0cmlwLWZpbHRlcnNfX2ZpbHRlci1sYWJlbFwiIGZvcj1cImZpbHRlci0ke3R5cGV9XCI+JHt0eXBlfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlID0gZmlsdGVySXRlbXMgPT4ge1xuICBjb25zdCBmaWx0ZXJJdGVtc1RlbXBsYXRlID0gZmlsdGVySXRlbXMubWFwKChmaWx0ZXIsIGluZGV4KSA9PiBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUoZmlsdGVyLCBpbmRleCA9PT0gMCkpLmpvaW4oJycpO1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1maWx0ZXJzXCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAke2ZpbHRlckl0ZW1zVGVtcGxhdGV9XG4gIDxidXR0b24gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwic3VibWl0XCI+QWNjZXB0IGZpbHRlcjwvYnV0dG9uPjwvZm9ybT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld1RyaXBGaWx0ZXJzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gICNmaWx0ZXJzID0gbnVsbDtcbiAgY29uc3RydWN0b3IoZmlsdGVycykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZmlsdGVycyA9IGZpbHRlcnM7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlKHRoaXMuI2ZpbHRlcnMuZmlsdGVycyk7XG4gIH1cbn0iLCJpbXBvcnQgQWJzdHJhY3RWaWV3IGZyb20gJy4uL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcnO1xuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi9jb25zdCc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCkge1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1ldmVudHNfX3RyaXAtc29ydCAgdHJpcC1zb3J0XCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1kYXlcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC1kYXlcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtZGF5XCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LWRheVwiIGRhdGEtc29ydC10eXBlPVwiJHtTb3J0VHlwZS5ERUZBVUxUfVwiPkRheTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1ldmVudFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJzb3J0LWV2ZW50XCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LWV2ZW50XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRyaXAtc29ydF9fYnRuXCIgZm9yPVwic29ydC1ldmVudFwiPkV2ZW50PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXRpbWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC10aW1lXCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LXRpbWVcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXRpbWVcIiBkYXRhLXNvcnQtdHlwZT1cIiR7U29ydFR5cGUuVElNRX1cIj5UaW1lPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXByaWNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtcHJpY2VcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtcHJpY2VcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXByaWNlXCIgZGF0YS1zb3J0LXR5cGU9XCIke1NvcnRUeXBlLlBSSUNFfVwiPlByaWNlPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLW9mZmVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtb2ZmZXJcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtb2ZmZXJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LW9mZmVyXCI+T2ZmZXJzPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5gO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3VHJpcFNvcnRWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2hhbmRsZVNvcnRUeXBlQ2hhbmdlID0gbnVsbDtcbiAgY29uc3RydWN0b3Ioe1xuICAgIG9uU29ydFR5cGVDaGFuZ2VcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jaGFuZGxlU29ydFR5cGVDaGFuZ2UgPSBvblNvcnRUeXBlQ2hhbmdlO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI3NvcnRUeXBlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCk7XG4gIH1cbiAgI3NvcnRUeXBlQ2hhbmdlSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGV2dC50YXJnZXQudGFnTmFtZSAhPT0gJ0xBQkVMJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVTb3J0VHlwZUNoYW5nZShldnQudGFyZ2V0LmRhdGFzZXQuc29ydFR5cGUpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwRXZlbnRzTGlzdFRlbXBsYXRlKCkge1xuICByZXR1cm4gJzx1bCBjbGFzcz1cInRyaXAtZXZlbnRzX19saXN0XCI+PC91bD4nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRzTGlzdFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNMaXN0VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5jb25zdCBodW1hbml6ZUR1ZURhdGUgPSAoZHVlRGF0ZSwgZGF0ZUZvcm1hdCkgPT4gZHVlRGF0ZSA/IGRheWpzKGR1ZURhdGUpLmZvcm1hdChkYXRlRm9ybWF0KSA6ICcnO1xuY29uc3QgaXNFdmVudEZ1dHVyZSA9IGRhdGVGcm9tID0+IGRhdGVGcm9tICYmIGRheWpzKCkuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKTtcbmNvbnN0IGlzRXZlbnRQcmVzZW50ID0gKGRhdGVGcm9tLCBkYXRlVG8pID0+IHtcbiAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgcmV0dXJuIGRhdGVGcm9tICYmIGRhdGVUbyAmJiBub3cuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKSAmJiBub3cuaXNCZWZvcmUoZGF0ZVRvLCAnRCcpIHx8IG5vdy5pc1NhbWUoZGF0ZVRvLCAnRCcpO1xufTtcbmNvbnN0IGlzRXZlbnRQYXN0ID0gZGF0ZVRvID0+IGRhdGVUbyAmJiBkYXlqcygpLmlzQWZ0ZXIoZGF0ZVRvLCAnRCcpO1xuY29uc3Qgc29ydEV2ZW50c1ByaWNlID0gKGV2ZW50QSwgZXZlbnRCKSA9PiBldmVudEIuYmFzZVByaWNlIC0gZXZlbnRBLmJhc2VQcmljZTtcbmNvbnN0IHNvcnRFdmVudHNUaW1lID0gKGV2ZW50QSwgZXZlbnRCKSA9PiB7XG4gIGNvbnN0IGRhdGVGcm9tQSA9IGRheWpzKGV2ZW50QS5kYXRlRnJvbSk7XG4gIGNvbnN0IGRhdGVUb0EgPSBkYXlqcyhldmVudEEuZGF0ZVRvKTtcbiAgY29uc3QgZGF0ZUZyb21CID0gZGF5anMoZXZlbnRCLmRhdGVGcm9tKTtcbiAgY29uc3QgZGF0ZVRvQiA9IGRheWpzKGV2ZW50Qi5kYXRlVG8pO1xuICBjb25zdCBkdXJhdGlvbkEgPSBkYXRlVG9BLmRpZmYoZGF0ZUZyb21BKTtcbiAgY29uc3QgZHVyYXRpb25CID0gZGF0ZVRvQi5kaWZmKGRhdGVGcm9tQik7XG4gIHJldHVybiBkdXJhdGlvbkIgLSBkdXJhdGlvbkE7XG59O1xuZXhwb3J0IHsgaHVtYW5pemVEdWVEYXRlLCBpc0V2ZW50RnV0dXJlLCBpc0V2ZW50UHJlc2VudCwgaXNFdmVudFBhc3QsIHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfTsiLCJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmltcG9ydCB7IGh1bWFuaXplRHVlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2V2ZW50JztcbmNvbnN0IFRJTUVfUEFUVEVSTiA9ICdoaDptbSc7XG5jb25zdCBIVU1BTklaRURfRVZFTlRfREFURV9QQVRURVJOID0gJ01NTSBERCc7XG5jb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICh0aW1lU3RhcnQsIHRpbWVFbmQpID0+IHtcbiAgY29uc3Qgc3RhcnQgPSBkYXlqcyh0aW1lU3RhcnQpO1xuICBjb25zdCBlbmQgPSBkYXlqcyh0aW1lRW5kKTtcbiAgY29uc3QgZGlmZmVyZW5jZUluRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5Jyk7XG4gIGNvbnN0IGRpZmZlcmVuY2VJbkhvdXJzID0gZW5kLmRpZmYoc3RhcnQsICdob3VyJykgJSAyNDtcbiAgY29uc3QgZGlmZmVyZW5jZUluTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJykgJSA2MDtcbiAgaWYgKGRpZmZlcmVuY2VJbkRheXMgPiAwKSB7XG4gICAgcmV0dXJuIGAke1N0cmluZyhkaWZmZXJlbmNlSW5EYXlzKS5wYWRTdGFydCgyLCAnMCcpfUQgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbkhvdXJzID4gMCkge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluTWludXRlcykucGFkU3RhcnQoMiwgJzAnKX1NYDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU5ld09mZmVyID0gb2ZmZXIgPT4ge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgcHJpY2VcbiAgfSA9IG9mZmVyO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cImV2ZW50X19vZmZlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2ZW50X19vZmZlci10aXRsZVwiPiR7dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAmcGx1czsmZXVybzsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItcHJpY2VcIj4ke3ByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+YDtcbn07XG5jb25zdCBjcmVhdGVPZmZlcnMgPSBvZmZlcnMgPT4ge1xuICBsZXQgb2ZmZXJzSFRNTCA9ICcnO1xuICBvZmZlcnMuZm9yRWFjaChvZmZlciA9PiB7XG4gICAgb2ZmZXJzSFRNTCArPSBjcmVhdGVOZXdPZmZlcihvZmZlcik7XG4gIH0pO1xuICByZXR1cm4gb2ZmZXJzSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRXZlbnRzSXRlbVRlbXBsYXRlID0gZXZlbnREYXRhID0+IHtcbiAgY29uc3Qge1xuICAgIGJhc2VQcmljZSxcbiAgICBkYXRlRnJvbSxcbiAgICBkYXRlVG8sXG4gICAgaXNGYXZvcml0ZSxcbiAgICB0eXBlLFxuICAgIG9mZmVycyxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gZXZlbnREYXRhO1xuICBjb25zdCBmYXZvcml0ZUJ1dHRvbkNsYXNzTmFtZSA9IGlzRmF2b3JpdGUgPyAnZXZlbnRfX2Zhdm9yaXRlLWJ0bi0tYWN0aXZlJyA6ICcnO1xuICBjb25zdCBodW1hbml6ZWRFdmVudERhdGUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIEhVTUFOSVpFRF9FVkVOVF9EQVRFX1BBVFRFUk4pO1xuICBjb25zdCBodW1hbml6ZWRTdGFydFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIFRJTUVfUEFUVEVSTik7XG4gIGNvbnN0IGh1bWFuaXplZEVuZFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZVRvLCBUSU1FX1BBVFRFUk4pO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cInRyaXAtZXZlbnRzX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudFwiPlxuICAgICAgICAgICAgICAgIDx0aW1lIGNsYXNzPVwiZXZlbnRfX2RhdGVcIiBkYXRldGltZT1cIiR7ZGF0ZUZyb219XCI+JHtodW1hbml6ZWRFdmVudERhdGV9PC90aW1lPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImV2ZW50X190eXBlLWljb25cIiB3aWR0aD1cIjQyXCIgaGVpZ2h0PVwiNDJcIiBzcmM9XCJpbWcvaWNvbnMvJHt0eXBlfS5wbmdcIiBhbHQ9XCJFdmVudCB0eXBlIGljb25cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJldmVudF9fdGl0bGVcIj4ke3R5cGV9ICR7ZGVzdGluYXRpb24ubmFtZX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fc2NoZWR1bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3RpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fc3RhcnQtdGltZVwiIGRhdGV0aW1lPVwiJHtkYXRlRnJvbX1cIj4ke2h1bWFuaXplZFN0YXJ0VGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICAgICZtZGFzaDtcbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fZW5kLXRpbWVcIiBkYXRldGltZT1cIiR7ZGF0ZVRvfVwiPiR7aHVtYW5pemVkRW5kVGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImV2ZW50X19kdXJhdGlvblwiPiR7Z2V0VGltZURpZmZlcmVuY2UoZGF0ZUZyb20sIGRhdGVUbyl9PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3ByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cImV2ZW50X19wcmljZS12YWx1ZVwiPiR7YmFzZVByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T2ZmZXJzOjwvaDQ+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXZlbnRfX3NlbGVjdGVkLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICR7Y3JlYXRlT2ZmZXJzKG9mZmVycyl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX2Zhdm9yaXRlLWJ0biAke2Zhdm9yaXRlQnV0dG9uQ2xhc3NOYW1lfVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+QWRkIHRvIGZhdm9yaXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImV2ZW50X19mYXZvcml0ZS1pY29uXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyOCAyOFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDIxbC04LjIyODk5IDQuMzI2MiAxLjU3MTU5LTkuMTYzMUwuNjg1MjA5IDkuNjczNzYgOS44ODU1IDguMzM2ODggMTQgMGw0LjExNDUgOC4zMzY4OCA5LjIwMDMgMS4zMzY4OC02LjY1NzQgNi40ODkzNCAxLjU3MTYgOS4xNjMxTDE0IDIxelwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImV2ZW50X19yb2xsdXAtYnRuXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5PcGVuIGV2ZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld0V2ZW50c0l0ZW1WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2V2ZW50RGF0YSA9IG51bGw7XG4gICNoYW5kbGVDbGljayA9IG51bGw7XG4gICNyb2xsdXBCdXR0b24gPSBudWxsO1xuICAjaGFuZGxlRmF2b3JpdGVDbGljayA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB1c2VyRXZlbnQsXG4gICAgb25DbGljayxcbiAgICBvbkZhdm9yaXRlQ2xpY2tcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZXZlbnREYXRhID0gdXNlckV2ZW50O1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrID0gb25DbGljaztcbiAgICB0aGlzLiNoYW5kbGVGYXZvcml0ZUNsaWNrID0gb25GYXZvcml0ZUNsaWNrO1xuICAgIHRoaXMuI3JvbGx1cEJ1dHRvbiA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX3JvbGx1cC1idG4nKTtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICAgIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX2Zhdm9yaXRlLWljb24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI2Zhdm9yaXRlQ2xpY2tIYW5kbGVyKTtcbiAgfVxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNJdGVtVGVtcGxhdGUodGhpcy4jZXZlbnREYXRhKTtcbiAgfVxuICAjY2xpY2tIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljaygpO1xuICB9O1xuICByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICB9XG4gICNmYXZvcml0ZUNsaWNrSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy4jaGFuZGxlRmF2b3JpdGVDbGljaygpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5pbXBvcnQgeyBodW1hbml6ZUR1ZURhdGUgfSBmcm9tICcuLi91dGlscy9ldmVudCc7XG5jb25zdCBUSU1FX1BBVFRFUk4gPSAnREQvTU0vWVkgaGg6bW0nO1xuY29uc3QgY3JlYXRlTmV3T2ZmZXIgPSBvZmZlciA9PiB7XG4gIGNvbnN0IHtcbiAgICB0aXRsZSxcbiAgICBwcmljZVxuICB9ID0gb2ZmZXI7XG4gIHJldHVybiBgPGRpdiBjbGFzcz1cImV2ZW50X19vZmZlci1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX29mZmVyLWNoZWNrYm94ICB2aXN1YWxseS1oaWRkZW5cIiBpZD1cImV2ZW50LW9mZmVyLWx1Z2dhZ2UtMVwiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmVudC1vZmZlci1sdWdnYWdlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X19vZmZlci1sYWJlbFwiIGZvcj1cImV2ZW50LW9mZmVyLWx1Z2dhZ2UtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2ZW50X19vZmZlci10aXRsZVwiPiR7dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmcGx1czsmZXVybzsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItcHJpY2VcIj4ke3ByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbn07XG5jb25zdCBjcmVhdGVPZmZlcnMgPSBvZmZlcnMgPT4ge1xuICBsZXQgb2ZmZXJzSFRNTCA9ICcnO1xuICBvZmZlcnMuZm9yRWFjaChvZmZlciA9PiB7XG4gICAgb2ZmZXJzSFRNTCArPSBjcmVhdGVOZXdPZmZlcihvZmZlcik7XG4gIH0pO1xuICByZXR1cm4gb2ZmZXJzSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdFdmVudEVkaXRFbGVtZW50VGVtcGxhdGUgPSBldmVudERhdGEgPT4ge1xuICBjb25zdCB7XG4gICAgYmFzZVByaWNlLFxuICAgIGRhdGVGcm9tLFxuICAgIGRhdGVUbyxcbiAgICB0eXBlLFxuICAgIG9mZmVycyxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gZXZlbnREYXRhO1xuICBjb25zdCBkYXRlU3RhcnQgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIFRJTUVfUEFUVEVSTik7XG4gIGNvbnN0IGRhdGVFbmQgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZVRvLCBUSU1FX1BBVFRFUk4pO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cInRyaXAtZXZlbnRzX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZXZlbnQgZXZlbnQtLWVkaXRcIiBhY3Rpb249XCIjXCIgbWV0aG9kPVwicG9zdFwiPlxuICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJldmVudF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZSAgZXZlbnRfX3R5cGUtYnRuXCIgZm9yPVwiZXZlbnQtdHlwZS10b2dnbGUtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2hvb3NlIGV2ZW50IHR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImV2ZW50X190eXBlLWljb25cIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTdcIiBzcmM9XCJpbWcvaWNvbnMvJHt0eXBlfS5wbmdcIiBhbHQ9XCJFdmVudCB0eXBlIGljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX3R5cGUtdG9nZ2xlICB2aXN1YWxseS1oaWRkZW5cIiBpZD1cImV2ZW50LXR5cGUtdG9nZ2xlLTFcIiB0eXBlPVwiY2hlY2tib3hcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImV2ZW50X190eXBlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+RXZlbnQgdHlwZTwvbGVnZW5kPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXRheGktMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJ0YXhpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tdGF4aVwiIGZvcj1cImV2ZW50LXR5cGUtdGF4aS0xXCI+VGF4aTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1idXMtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJidXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS1idXNcIiBmb3I9XCJldmVudC10eXBlLWJ1cy0xXCI+QnVzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXRyYWluLTFcIiBjbGFzcz1cImV2ZW50X190eXBlLWlucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZXZlbnQtdHlwZVwiIHZhbHVlPVwidHJhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS10cmFpblwiIGZvcj1cImV2ZW50LXR5cGUtdHJhaW4tMVwiPlRyYWluPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXNoaXAtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJzaGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tc2hpcFwiIGZvcj1cImV2ZW50LXR5cGUtc2hpcC0xXCI+U2hpcDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1kcml2ZS0xXCIgY2xhc3M9XCJldmVudF9fdHlwZS1pbnB1dCAgdmlzdWFsbHktaGlkZGVuXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImV2ZW50LXR5cGVcIiB2YWx1ZT1cImRyaXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tZHJpdmVcIiBmb3I9XCJldmVudC10eXBlLWRyaXZlLTFcIj5Ecml2ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1mbGlnaHQtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJmbGlnaHRcIiBjaGVja2VkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLWZsaWdodFwiIGZvcj1cImV2ZW50LXR5cGUtZmxpZ2h0LTFcIj5GbGlnaHQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtY2hlY2staW4tMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJjaGVjay1pblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLWNoZWNrLWluXCIgZm9yPVwiZXZlbnQtdHlwZS1jaGVjay1pbi0xXCI+Q2hlY2staW48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtc2lnaHRzZWVpbmctMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJzaWdodHNlZWluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLXNpZ2h0c2VlaW5nXCIgZm9yPVwiZXZlbnQtdHlwZS1zaWdodHNlZWluZy0xXCI+U2lnaHRzZWVpbmc8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtcmVzdGF1cmFudC0xXCIgY2xhc3M9XCJldmVudF9fdHlwZS1pbnB1dCAgdmlzdWFsbHktaGlkZGVuXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImV2ZW50LXR5cGVcIiB2YWx1ZT1cInJlc3RhdXJhbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS1yZXN0YXVyYW50XCIgZm9yPVwiZXZlbnQtdHlwZS1yZXN0YXVyYW50LTFcIj5SZXN0YXVyYW50PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fZmllbGQtZ3JvdXAgIGV2ZW50X19maWVsZC1ncm91cC0tZGVzdGluYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX2xhYmVsICBldmVudF9fdHlwZS1vdXRwdXRcIiBmb3I9XCJldmVudC1kZXN0aW5hdGlvbi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0eXBlfVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJldmVudF9faW5wdXQgIGV2ZW50X19pbnB1dC0tZGVzdGluYXRpb25cIiBpZD1cImV2ZW50LWRlc3RpbmF0aW9uLTFcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1kZXN0aW5hdGlvblwiIHZhbHVlPVwiJHtkZXN0aW5hdGlvbi5uYW1lfVwiIGxpc3Q9XCJkZXN0aW5hdGlvbi1saXN0LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRhdGFsaXN0IGlkPVwiZGVzdGluYXRpb24tbGlzdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFtc3RlcmRhbVwiPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJHZW5ldmFcIj48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ2hhbW9uaXhcIj48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kYXRhbGlzdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX2ZpZWxkLWdyb3VwICBldmVudF9fZmllbGQtZ3JvdXAtLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiZXZlbnQtc3RhcnQtdGltZS0xXCI+RnJvbTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImV2ZW50X19pbnB1dCAgZXZlbnRfX2lucHV0LS10aW1lXCIgaWQ9XCJldmVudC1zdGFydC10aW1lLTFcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1zdGFydC10aW1lXCIgdmFsdWU9XCIke2RhdGVTdGFydH1cIj5cbiAgICAgICAgICAgICAgICAgICAgJm1kYXNoO1xuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJldmVudC1lbmQtdGltZS0xXCI+VG88L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJldmVudF9faW5wdXQgIGV2ZW50X19pbnB1dC0tdGltZVwiIGlkPVwiZXZlbnQtZW5kLXRpbWUtMVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImV2ZW50LWVuZC10aW1lXCIgdmFsdWU9XCIke2RhdGVFbmR9XCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X19maWVsZC1ncm91cCAgZXZlbnRfX2ZpZWxkLWdyb3VwLS1wcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fbGFiZWxcIiBmb3I9XCJldmVudC1wcmljZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAmZXVybztcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX2lucHV0ICBldmVudF9faW5wdXQtLXByaWNlXCIgaWQ9XCJldmVudC1wcmljZS0xXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiZXZlbnQtcHJpY2VcIiB2YWx1ZT1cIiR7YmFzZVByaWNlfVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fc2F2ZS1idG4gIGJ0biAgYnRuLS1ibHVlXCIgdHlwZT1cInN1Ym1pdFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fcmVzZXQtYnRuXCIgdHlwZT1cInJlc2V0XCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX3JvbGx1cC1idG5cIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T3BlbiBldmVudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX2RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24gIGV2ZW50X19zZWN0aW9uLS1vZmZlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24tdGl0bGUgIGV2ZW50X19zZWN0aW9uLXRpdGxlLS1vZmZlcnNcIj5PZmZlcnM8L2gzPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fYXZhaWxhYmxlLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAke2NyZWF0ZU9mZmVycyhvZmZlcnMpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJldmVudF9fc2VjdGlvbiAgZXZlbnRfX3NlY3Rpb24tLWRlc3RpbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImV2ZW50X19zZWN0aW9uLXRpdGxlICBldmVudF9fc2VjdGlvbi10aXRsZS0tZGVzdGluYXRpb25cIj5EZXN0aW5hdGlvbjwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX2Rlc3RpbmF0aW9uLWRlc2NyaXB0aW9uXCI+JHtkZXN0aW5hdGlvbi5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2xpPmA7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRFZGl0RWxlbWVudFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICAjZXZlbnREYXRhID0gbnVsbDtcbiAgI2hhbmRsZUNsaWNrID0gbnVsbDtcbiAgI3JvbGx1cEJ1dHRvbiA9IG51bGw7XG4gICNoYW5kbGVTdWJtaXQgPSBudWxsO1xuICAjZm9ybUVsZW1lbnQgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgdXNlckV2ZW50LFxuICAgIG9uQ2xpY2ssXG4gICAgb25TdWJtaXRcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZXZlbnREYXRhID0gdXNlckV2ZW50O1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrID0gb25DbGljaztcbiAgICB0aGlzLiNoYW5kbGVTdWJtaXQgPSBvblN1Ym1pdDtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24gPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcignLmV2ZW50X19yb2xsdXAtYnRuJyk7XG4gICAgdGhpcy4jcm9sbHVwQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy4jY2xpY2tIYW5kbGVyKTtcbiAgICB0aGlzLiNmb3JtRWxlbWVudCA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnQtLWVkaXQnKTtcbiAgICB0aGlzLiNmb3JtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLiNzdWJtaXRIYW5kbGVyKTtcbiAgfVxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0V2ZW50RWRpdEVsZW1lbnRUZW1wbGF0ZSh0aGlzLiNldmVudERhdGEpO1xuICB9XG4gICNjbGlja0hhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrKHRoaXMuI2V2ZW50RGF0YSk7XG4gIH07XG4gICNzdWJtaXRIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljayh0aGlzLiNldmVudERhdGEpO1xuICB9O1xuICByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICAgIHRoaXMuI2Zvcm1FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuI3N1Ym1pdEhhbmRsZXIpO1xuICB9XG59IiwiaW1wb3J0IHsgcmVuZGVyLCByZXBsYWNlLCByZW1vdmUgfSBmcm9tICcuLi9mcmFtZXdvcmsvcmVuZGVyLmpzJztcbmltcG9ydCB7IGlzRXNjYXBlS2V5IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uLmpzJztcbmltcG9ydCBOZXdFdmVudHNJdGVtVmlldyBmcm9tICcuLi92aWV3L25ldy1ldmVudHMtaXRlbS12aWV3LmpzJztcbmltcG9ydCBOZXdFdmVudEVkaXRFbGVtZW50VmlldyBmcm9tICcuLi92aWV3L25ldy1ldmVudC1lZGl0LWVsZW1lbnQtdmlldy5qcyc7XG5jb25zdCBNb2RlID0ge1xuICBERUZBVUxUOiAnREVGQVVMVCcsXG4gIEVESVRJTkc6ICdFRElUSU5HJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UHJlc2VudGVyIHtcbiAgI2NvbnRhaW5lciA9IG51bGw7XG4gICNoYW5kbGVEYXRhQ2hhbmdlID0gbnVsbDtcbiAgI2hhbmRsZU1vZGVDaGFuZ2UgPSBudWxsO1xuICAjZXZlbnRDb21wb25lbnQgPSBudWxsO1xuICAjZXZlbnRFZGl0Q29tcG9uZW50ID0gbnVsbDtcbiAgI2V2ZW50SXRlbSA9IG51bGw7XG4gICNtb2RlID0gTW9kZS5ERUZBVUxUO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY29udGFpbmVyLFxuICAgIG9uRGF0YUNoYW5nZSxcbiAgICBvbk1vZGVDaGFuZ2VcbiAgfSkge1xuICAgIHRoaXMuI2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiNoYW5kbGVEYXRhQ2hhbmdlID0gb25EYXRhQ2hhbmdlO1xuICAgIHRoaXMuI2hhbmRsZU1vZGVDaGFuZ2UgPSBvbk1vZGVDaGFuZ2U7XG4gIH1cbiAgaW5pdChldmVudEl0ZW0pIHtcbiAgICB0aGlzLiNldmVudEl0ZW0gPSBldmVudEl0ZW07XG4gICAgY29uc3QgcHJldkV2ZW50Q29tcG9uZW50ID0gdGhpcy4jZXZlbnRDb21wb25lbnQ7XG4gICAgY29uc3QgcHJldkV2ZW50RWRpdENvbXBvbmVudCA9IHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudDtcbiAgICB0aGlzLiNldmVudENvbXBvbmVudCA9IG5ldyBOZXdFdmVudHNJdGVtVmlldyh7XG4gICAgICB1c2VyRXZlbnQ6IHRoaXMuI2V2ZW50SXRlbSxcbiAgICAgIG9uQ2xpY2s6IHRoaXMuI2hhbmRsZUVkaXRDbGljayxcbiAgICAgIG9uRmF2b3JpdGVDbGljazogdGhpcy4jaGFuZGxlRmF2b3JpdGVDbGlja1xuICAgIH0pO1xuICAgIHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCA9IG5ldyBOZXdFdmVudEVkaXRFbGVtZW50Vmlldyh7XG4gICAgICB1c2VyRXZlbnQ6IHRoaXMuI2V2ZW50SXRlbSxcbiAgICAgIG9uQ2xpY2s6IHRoaXMuI2hhbmRsZVNhdmVDbGlja1xuICAgIH0pO1xuICAgIGlmIChwcmV2RXZlbnRDb21wb25lbnQgPT09IG51bGwgfHwgcHJldkV2ZW50RWRpdENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmVuZGVyKHRoaXMuI2V2ZW50Q29tcG9uZW50LCB0aGlzLiNjb250YWluZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy4jbW9kZSA9PT0gTW9kZS5ERUZBVUxUKSB7XG4gICAgICByZXBsYWNlKHRoaXMuI2V2ZW50Q29tcG9uZW50LCBwcmV2RXZlbnRDb21wb25lbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy4jbW9kZSA9PT0gTW9kZS5FRElUSU5HKSB7XG4gICAgICByZXBsYWNlKHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCwgcHJldkV2ZW50RWRpdENvbXBvbmVudCk7XG4gICAgfVxuICAgIHJlbW92ZShwcmV2RXZlbnRDb21wb25lbnQpO1xuICAgIHJlbW92ZShwcmV2RXZlbnRFZGl0Q29tcG9uZW50KTtcbiAgfVxuICAjcmVwbGFjZUV2ZW50Q2FyZFRvRWRpdEZvcm0oKSB7XG4gICAgcmVwbGFjZSh0aGlzLiNldmVudEVkaXRDb21wb25lbnQsIHRoaXMuI2V2ZW50Q29tcG9uZW50KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy4jZXNjS2V5RG93bkhhbmRsZXIpO1xuICAgIHRoaXMuI2hhbmRsZU1vZGVDaGFuZ2UoKTtcbiAgICB0aGlzLiNtb2RlID0gTW9kZS5FRElUSU5HO1xuICB9XG4gICNyZXBsYWNlRWRpdEZvcm1Ub0V2ZW50Q2FyZCgpIHtcbiAgICByZXBsYWNlKHRoaXMuI2V2ZW50Q29tcG9uZW50LCB0aGlzLiNldmVudEVkaXRDb21wb25lbnQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLiNlc2NLZXlEb3duSGFuZGxlcik7XG4gICAgdGhpcy4jbW9kZSA9IE1vZGUuREVGQVVMVDtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHJlbW92ZSh0aGlzLiNldmVudENvbXBvbmVudCk7XG4gICAgcmVtb3ZlKHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCk7XG4gIH1cbiAgcmVzZXRWaWV3KCkge1xuICAgIGlmICh0aGlzLiNtb2RlICE9PSBNb2RlLkRFRkFVTFQpIHtcbiAgICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gICAgfVxuICB9XG4gICNlc2NLZXlEb3duSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGlzRXNjYXBlS2V5KGV2dCkpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy4jcmVwbGFjZUVkaXRGb3JtVG9FdmVudENhcmQoKTtcbiAgICB9XG4gIH07XG4gICNoYW5kbGVFZGl0Q2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jcmVwbGFjZUV2ZW50Q2FyZFRvRWRpdEZvcm0oKTtcbiAgfTtcbiAgI2hhbmRsZUZhdm9yaXRlQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZSh7XG4gICAgICAuLi50aGlzLiNldmVudEl0ZW0sXG4gICAgICBpc0Zhdm9yaXRlOiAhdGhpcy4jZXZlbnRJdGVtLmlzRmF2b3JpdGVcbiAgICB9KTtcbiAgfTtcbiAgI2hhbmRsZVNhdmVDbGljayA9IGV2ZW50SXRlbSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZShldmVudEl0ZW0pO1xuICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gIH07XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5vRXZlbnRzVmlld1RlbXBsYXRlKCkge1xuICByZXR1cm4gJzxwIGNsYXNzPVwidHJpcC1ldmVudHNfX21zZ1wiPkxvYWRpbmcuLi48L3A+Jztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vRXZlbnRzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlTm9FdmVudHNWaWV3VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4uL2ZyYW1ld29yay9yZW5kZXIuanMnO1xuaW1wb3J0IHsgdXBkYXRlSXRlbSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbi5qcyc7XG5pbXBvcnQgTmV3VHJpcFNvcnRWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LXNvcnQtY29udGFpbmVyLXZpZXcuanMnO1xuaW1wb3J0IE5ld0V2ZW50c0xpc3RWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LWV2ZW50cy1saXN0LXZpZXcuanMnO1xuaW1wb3J0IEV2ZW50UHJlc2VudGVyIGZyb20gJy4vZXZlbnQtcHJlc2VudGVyLmpzJztcbmltcG9ydCBOb0V2ZW50c1ZpZXcgZnJvbSAnLi4vdmlldy9uby1ldmVudHMtdmlldy5qcyc7XG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL2NvbnN0LmpzJztcbmltcG9ydCB7IHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2FyZFByZXNlbnRlciB7XG4gICNjb250YWluZXIgPSBudWxsO1xuICAjZXZlbnRzTW9kZWwgPSBudWxsO1xuICAjc29ydENvbXBvbmVudCA9IG51bGw7XG4gICNldmVudHNMaXN0Q29tcG9uZW50ID0gbmV3IE5ld0V2ZW50c0xpc3RWaWV3KCk7XG4gICNldmVudHNMaXN0ID0gW107XG4gICNldmVudFByZXNlbnRlcnMgPSBuZXcgTWFwKCk7XG4gICNjdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5ERUZBVUxUO1xuICAjc291cmNlZEJvYXJkRXZlbnRzID0gW107XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjb250YWluZXIsXG4gICAgZXZlbnRzTW9kZWxcbiAgfSkge1xuICAgIHRoaXMuI2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiNldmVudHNNb2RlbCA9IGV2ZW50c01vZGVsO1xuICB9XG4gIGluaXQoKSB7XG4gICAgdGhpcy4jZXZlbnRzTGlzdCA9IFsuLi50aGlzLiNldmVudHNNb2RlbC51c2VyRXZlbnRzXTtcbiAgICB0aGlzLiNzb3VyY2VkQm9hcmRFdmVudHMgPSBbLi4udGhpcy4jZXZlbnRzTW9kZWwudXNlckV2ZW50c107XG4gICAgdGhpcy4jcmVuZGVyQm9hcmQoKTtcbiAgICB0aGlzLiNyZW5kZXJTb3J0KCk7XG4gIH1cbiAgI3JlbmRlckV2ZW50KGlucHV0VXNlckV2ZW50KSB7XG4gICAgY29uc3QgZXZlbnRQcmVzZW50ZXIgPSBuZXcgRXZlbnRQcmVzZW50ZXIoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLiNldmVudHNMaXN0Q29tcG9uZW50LmVsZW1lbnQsXG4gICAgICBvbkRhdGFDaGFuZ2U6IHRoaXMuI2hhbmRsZUV2ZW50Q2hhbmdlLFxuICAgICAgb25Nb2RlQ2hhbmdlOiB0aGlzLiNoYW5kbGVNb2RlQ2hhbmdlXG4gICAgfSk7XG4gICAgZXZlbnRQcmVzZW50ZXIuaW5pdChpbnB1dFVzZXJFdmVudCk7XG4gICAgdGhpcy4jZXZlbnRQcmVzZW50ZXJzLnNldChpbnB1dFVzZXJFdmVudC5pZCwgZXZlbnRQcmVzZW50ZXIpO1xuICB9XG4gICNyZW5kZXJOb0V2ZW50cygpIHtcbiAgICByZW5kZXIobmV3IE5vRXZlbnRzVmlldygpLCB0aGlzLiNjb250YWluZXIpO1xuICB9XG4gICNzb3J0RXZlbnRzKHNvcnRUeXBlKSB7XG4gICAgc3dpdGNoIChzb3J0VHlwZSkge1xuICAgICAgY2FzZSBTb3J0VHlwZS5QUklDRTpcbiAgICAgICAgdGhpcy4jZXZlbnRzTGlzdC5zb3J0KHNvcnRFdmVudHNQcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTb3J0VHlwZS5USU1FOlxuICAgICAgICB0aGlzLiNldmVudHNMaXN0LnNvcnQoc29ydEV2ZW50c1RpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2V2ZW50c0xpc3QgPSBbLi4udGhpcy4jc291cmNlZEJvYXJkRXZlbnRzXTtcbiAgICB9XG4gICAgdGhpcy4jY3VycmVudFNvcnRUeXBlID0gc29ydFR5cGU7XG4gIH1cbiAgI2hhbmRsZVNvcnRUeXBlQ2hhbmdlID0gc29ydFR5cGUgPT4ge1xuICAgIGlmIChzb3J0VHlwZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuI2N1cnJlbnRTb3J0VHlwZSA9PT0gc29ydFR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jc29ydEV2ZW50cyhzb3J0VHlwZSk7XG4gICAgdGhpcy4jY2xlYXJFdmVudExpc3QoKTtcbiAgICB0aGlzLiNyZW5kZXJCb2FyZCgpO1xuICB9O1xuICAjcmVuZGVyU29ydCgpIHtcbiAgICB0aGlzLiNzb3J0Q29tcG9uZW50ID0gbmV3IE5ld1RyaXBTb3J0Vmlldyh7XG4gICAgICBvblNvcnRUeXBlQ2hhbmdlOiB0aGlzLiNoYW5kbGVTb3J0VHlwZUNoYW5nZVxuICAgIH0pO1xuICAgIHJlbmRlcih0aGlzLiNzb3J0Q29tcG9uZW50LCB0aGlzLiNjb250YWluZXIsICdBRlRFUkJFR0lOJyk7XG4gIH1cbiAgI3JlbmRlckJvYXJkKCkge1xuICAgIGlmICh0aGlzLiNldmVudHNMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy4jcmVuZGVyTm9FdmVudHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVuZGVyKHRoaXMuI2V2ZW50c0xpc3RDb21wb25lbnQsIHRoaXMuI2NvbnRhaW5lcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNldmVudHNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLiNyZW5kZXJFdmVudCh0aGlzLiNldmVudHNMaXN0W2ldKTtcbiAgICB9XG4gIH1cbiAgI2hhbmRsZUV2ZW50Q2hhbmdlID0gdXBkYXRlZEV2ZW50ID0+IHtcbiAgICB0aGlzLiNldmVudHNMaXN0ID0gdXBkYXRlSXRlbSh0aGlzLiNldmVudHNMaXN0LCB1cGRhdGVkRXZlbnQpO1xuICAgIHRoaXMuI3NvdXJjZWRCb2FyZEV2ZW50cyA9IHVwZGF0ZUl0ZW0odGhpcy4jc291cmNlZEJvYXJkRXZlbnRzLCB1cGRhdGVkRXZlbnQpO1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5nZXQodXBkYXRlZEV2ZW50LmlkKS5pbml0KHVwZGF0ZWRFdmVudCk7XG4gIH07XG4gICNoYW5kbGVNb2RlQ2hhbmdlID0gKCkgPT4ge1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5mb3JFYWNoKHByZXNlbnRlciA9PiBwcmVzZW50ZXIucmVzZXRWaWV3KCkpO1xuICB9O1xuICAjY2xlYXJFdmVudExpc3QoKSB7XG4gICAgdGhpcy4jZXZlbnRQcmVzZW50ZXJzLmZvckVhY2gocHJlc2VudGVyID0+IHByZXNlbnRlci5kZXN0cm95KCkpO1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5jbGVhcigpO1xuICB9XG59IiwiaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uL2NvbnN0JztcbmltcG9ydCB7IGlzRXZlbnRGdXR1cmUsIGlzRXZlbnRQcmVzZW50LCBpc0V2ZW50UGFzdCB9IGZyb20gJy4vZXZlbnQnO1xuY29uc3QgZmlsdGVyID0ge1xuICBbRmlsdGVyVHlwZS5FVkVSWVRISU5HXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLFxuICBbRmlsdGVyVHlwZS5GVVRVUkVdOiB1c2VyRXZlbnRzID0+IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiBpc0V2ZW50RnV0dXJlKHVzZXJFdmVudC5kYXRlRnJvbSkpLFxuICBbRmlsdGVyVHlwZS5QUkVTRU5UXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLmZpbHRlcih1c2VyRXZlbnQgPT4gaXNFdmVudFByZXNlbnQodXNlckV2ZW50LmRhdGVGcm9tKSksXG4gIFtGaWx0ZXJUeXBlLlBBU1RdOiB1c2VyRXZlbnRzID0+IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiBpc0V2ZW50UGFzdCh1c2VyRXZlbnQuZGF0ZUZyb20pKVxufTtcbmV4cG9ydCB7IGZpbHRlciB9OyIsImltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcyc7XG5mdW5jdGlvbiBnZW5lcmF0ZUZpbHRlcih1c2VyRXZlbnRzKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhmaWx0ZXIpLm1hcCgoW2ZpbHRlclR5cGUsIGZpbHRlckV2ZW50c10pID0+ICh7XG4gICAgdHlwZTogZmlsdGVyVHlwZSxcbiAgICBjb3VudDogZmlsdGVyRXZlbnRzKHVzZXJFdmVudHMpLmxlbmd0aFxuICB9KSk7XG59XG5leHBvcnQgeyBnZW5lcmF0ZUZpbHRlciB9OyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci5qcyc7XG5pbXBvcnQgRXZlbnRzTW9kZWwgZnJvbSAnLi9tb2RlbC9ldmVudHMtbW9kZWwuanMnO1xuaW1wb3J0IE5ld1RyaXBJbmZvVmlldyBmcm9tICcuL3ZpZXcvbmV3LXRyaXAtaW5mby12aWV3LmpzJztcbmltcG9ydCBOZXdUcmlwRmlsdGVyc1ZpZXcgZnJvbSAnLi92aWV3L25ldy1maWx0ZXJzLXZpZXcuanMnO1xuaW1wb3J0IEJvYXJkUHJlc2VudGVyIGZyb20gJy4vcHJlc2VudGVyL2JvYXJkLXByZXNlbnRlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUZpbHRlciB9IGZyb20gJy4vbW9jay9maWx0ZXIuanMnO1xuY29uc3QgdHJpcE1haW5Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudHJpcC1tYWluJyk7XG5jb25zdCB0cmlwRmlsdGVyc0NvbnRhaW5lciA9IHRyaXBNYWluQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50cmlwLWNvbnRyb2xzX19maWx0ZXJzJyk7XG5jb25zdCB0cmlwRXZlbnRzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRyaXAtZXZlbnRzJyk7XG5jb25zdCBldmVudHNNb2RlbCA9IG5ldyBFdmVudHNNb2RlbCgpO1xuY29uc3QgYm9hcmRQcmVzZW50ZXIgPSBuZXcgQm9hcmRQcmVzZW50ZXIoe1xuICBjb250YWluZXI6IHRyaXBFdmVudHNDb250YWluZXIsXG4gIGV2ZW50c01vZGVsXG59KTtcbmNvbnN0IGZpbHRlcnMgPSBnZW5lcmF0ZUZpbHRlcihldmVudHNNb2RlbC51c2VyRXZlbnRzKTtcbnJlbmRlcihuZXcgTmV3VHJpcEluZm9WaWV3KCksIHRyaXBNYWluQ29udGFpbmVyLCAnQUZURVJCRUdJTicpO1xucmVuZGVyKG5ldyBOZXdUcmlwRmlsdGVyc1ZpZXcoe1xuICBmaWx0ZXJzXG59KSwgdHJpcEZpbHRlcnNDb250YWluZXIpO1xuYm9hcmRQcmVzZW50ZXIuaW5pdCgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///89\n')},10:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ".shake {\\n animation: shake 0.6s;\\n position: relative;\\n z-index: 10;\\n}\\n\\n@keyframes shake {\\n 0%,\\n 100% {\\n transform: translateX(0);\\n }\\n\\n 10%,\\n 30%,\\n 50%,\\n 70%,\\n 90% {\\n transform: translateX(-5px);\\n }\\n\\n 20%,\\n 40%,\\n 60%,\\n 80% {\\n transform: translateX(5px);\\n }\\n}\\n", ""]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3LmNzcz9kZjNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9OT19TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvbm9Tb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfTk9fU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2hha2Uge1xcbiAgYW5pbWF0aW9uOiBzaGFrZSAwLjZzO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTA7XFxufVxcblxcbkBrZXlmcmFtZXMgc2hha2Uge1xcbiAgMCUsXFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgfVxcblxcbiAgMTAlLFxcbiAgMzAlLFxcbiAgNTAlLFxcbiAgNzAlLFxcbiAgOTAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpO1xcbiAgfVxcblxcbiAgMjAlLFxcbiAgNDAlLFxcbiAgNjAlLFxcbiAgODAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7XFxuICB9XFxufVxcblwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n')},645:module=>{"use strict";eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += "}";\n }\n if (item[2]) {\n content += "}";\n }\n if (item[4]) {\n content += "}";\n }\n return content;\n }).join("");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///645\n')},81:module=>{"use strict";eval("\n\nmodule.exports = function (i) {\n return i[1];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL25vU291cmNlTWFwcy5qcz8yN2M4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiBpWzFdO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},484:function(module){eval('!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t){"use strict";eval('\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = "".concat(id, " ").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzPzJkYmEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///379\n')},569:module=>{"use strict";eval('\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === "undefined") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzP2IyMTQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///569\n')},216:module=>{"use strict";eval('\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement("style");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE2LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanM/ZGU2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///216\n')},565:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute("nonce", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanM/ZGRjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///565\n')},795:module=>{"use strict";eval('\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = "";\n if (obj.supports) {\n css += "@supports (".concat(obj.supports, ") {");\n }\n if (obj.media) {\n css += "@media ".concat(obj.media, " {");\n }\n var needLayer = typeof obj.layer !== "undefined";\n if (needLayer) {\n css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");\n }\n css += obj.css;\n if (needLayer) {\n css += "}";\n }\n if (obj.media) {\n css += "}";\n }\n if (obj.supports) {\n css += "}";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== "undefined") {\n css += "\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === "undefined") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcz9lNDc5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///795\n')},589:module=>{"use strict";eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaWctdHJpcC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzPzFkZGUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///589\n")}},__webpack_module_cache__={};function __webpack_require__(t){var n=__webpack_module_cache__[t];if(void 0!==n)return n.exports;var e=__webpack_module_cache__[t]={id:t,exports:{}};return __webpack_modules__[t].call(e.exports,e,e.exports,__webpack_require__),e.exports}__webpack_require__.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return __webpack_require__.d(n,{a:n}),n},__webpack_require__.d=(t,n)=>{for(var e in n)__webpack_require__.o(n,e)&&!__webpack_require__.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},__webpack_require__.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),__webpack_require__.nc=void 0;var __webpack_exports__=__webpack_require__(89)})(); \ No newline at end of file diff --git a/6/css/style.css b/6/css/style.css new file mode 100644 index 0000000..c6c86ec --- /dev/null +++ b/6/css/style.css @@ -0,0 +1,833 @@ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url('../fonts/Montserrat-Regular.woff2') format('woff2'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 500; + src: local('Montserrat Medium'), local('Montserrat-Medium'), url('../fonts/Montserrat-Medium.woff2') format('woff2'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 600; + src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url('../fonts/Montserrat-SemiBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: local('Montserrat Bold'), local('Montserrat-Bold'), url('../fonts/Montserrat-Bold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 800; + src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url('../fonts/Montserrat-ExtraBold.woff2') format('woff2'); +} + +html { + height: 100%; } + +body { + padding: 0; + margin: 0; + -webkit-font-smoothing: antialiased; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; } + +main { + display: block; } + +@-moz-document url-prefix() { + body { + font-weight: 200; + -moz-osx-font-smoothing: grayscale; } } + +.visually-hidden { + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + border: 0; } + +.page-body { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; + min-width: 1200px; + padding: 0; + margin: 0; + font-size: 17px; + line-height: 1.2; + font-family: "Montserrat", "Arial", sans-serif; + color: #000000; + background-color: #f2f2f2; } + +.page-body__container { + -ms-flex-positive: 1; + flex-grow: 1; + position: relative; + z-index: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 1200px; + padding: 0 10px; + margin: 0 auto; } + .page-body__container::after { + content: ""; + position: absolute; + z-index: -1; + top: 0; + bottom: 0; + left: 130px; + width: 2px; + background-color: rgba(255, 255, 255, 0.58); } + +.page-body__page-main { + -ms-flex-positive: 1; + flex-grow: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; } + +.btn { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + padding: 4px 16px 5px; + font-weight: 500; + font-size: 17px; + line-height: 21px; + font-family: inherit; + text-decoration: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: none; + border-radius: 15px; + cursor: pointer; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; } + .btn:hover { + opacity: 0.8; } + .btn:active { + opacity: 0.6; } + .btn--big { + padding: 17px 29px 16px; + font-size: 18px; + line-height: 21px; + border-radius: 27px; } + .btn--yellow { + color: #424242; + background-color: #ffd054; } + .btn--blue { + color: #ffffff; + background-color: #0d8ae4; } + .btn:disabled { + opacity: 0.46; + cursor: default; } + +.page-header { + padding-top: 23px; + color: #ffffff; + background-color: #078ff0; + background-image: url("../img/header-bg.png"); + background-size: cover; + background-repeat: no-repeat; } + @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) { + .page-header { + background-image: url("../img/header-bg@2x.png"); } } + +.page-header__container { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + padding-left: 110px; } + +.page-header__logo { + display: block; + width: 42px; + height: 42px; + margin-right: 18px; } + +.trip-main { + -ms-flex-positive: 1; + flex-grow: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding-bottom: 10px; } + .trip-main--hidden { + display: none; } + +.trip-main__trip-info { + width: 100%; + margin-bottom: 35px; } + +.trip-main__trip-controls { + margin-top: 36px; + width: 600px; } + +.trip-main__event-add-btn { + min-width: 170px; + margin-left: auto; } + .trip-main__event-add-btn::before { + content: "\002B\000A0"; } + .trip-main__event-add-btn--hidden { + display: none; } + +.trip-info { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; } + +.trip-info__main { + width: 600px; } + +.trip-info__title { + margin: 0; + margin-bottom: 4px; + font-weight: 800; + font-size: 17px; + line-height: 21px; } + +.trip-info__dates { + margin: 0; + font-weight: 800; + font-size: 13px; + line-height: 16px; + text-transform: uppercase; + opacity: 0.8; } + +.trip-info__cost { + width: 170px; + margin: 0 0 0 auto; + font-weight: 700; + font-size: 21px; + line-height: 25px; + text-align: center; } + +.trip-controls__trip-tabs { + margin-bottom: 9px; } + +.trip-tabs { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: start; + align-items: flex-start; } + +.trip-tabs__btn { + display: block; + font-weight: 500; + font-size: 21px; + line-height: 25px; + text-decoration: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + color: inherit; + opacity: 0.8; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; } + .trip-tabs__btn:not(:last-of-type) { + margin-right: 26px; } + .trip-tabs__btn:hover { + opacity: 1; } + .trip-tabs__btn:active { + opacity: 0.6; } + .trip-tabs__btn--active, .trip-tabs__btn--active:hover, .trip-tabs__btn--active:active { + opacity: 1; + cursor: default; } + +.trip-filters { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: start; + align-items: flex-start; } + .trip-filters--hidden { + display: none; } + +.trip-filters__filter:not(:last-of-type) { + margin-right: 19px; } + +.trip-filters__filter-label { + font-weight: 800; + font-size: 14px; + line-height: 17px; + letter-spacing: 0.5px; + text-transform: uppercase; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + opacity: 0.6; + cursor: pointer; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; } + .trip-filters__filter-label:hover { + opacity: 1; } + .trip-filters__filter-label:active { + opacity: 0.6; } + .trip-filters__filter-input:checked + .trip-filters__filter-label { + opacity: 1; + cursor: default; } + .trip-filters__filter-input:disabled + .trip-filters__filter-label { + opacity: 0.4; + cursor: default; } + +.trip-events { + padding-top: 22px; } + .trip-events--hidden { + display: none; } + +.trip-events__trip-sort { + margin-bottom: 8px; } + +.trip-events__msg { + margin: 0; + margin-top: 280px; + font-weight: 500; + font-size: 44px; + line-height: 60px; + text-align: center; + opacity: 0.89; } + .trip-events__msg--hidden { + display: none; } + +.trip-events__list { + padding: 0; + margin: 0; + list-style: none; } + +.trip-events__item { + margin-bottom: 54px; + margin-left: auto; } + +.trip-sort { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; } + +.trip-sort__item { + margin-right: 15px; + font-weight: 800; + font-size: 13px; + line-height: 16px; + letter-spacing: 0.6px; + text-transform: uppercase; + color: #b4b4b4; + cursor: default; + -webkit-transition: color 0.2s; + transition: color 0.2s; } + .trip-sort__item:last-child { + margin-right: 0; } + .trip-sort__item--day { + width: 55px; + text-align: center; + margin-right: 83px; } + .trip-sort__item--event { + width: 300px; } + .trip-sort__item--time { + width: 225px; } + .trip-sort__item--price { + width: 90px; } + +.trip-sort__btn { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding: 7px 15px 6px 22px; + border: 1px solid transparent; + border-radius: 14px; + cursor: pointer; } + .trip-sort__btn:hover { + color: #000000; } + .trip-sort__input:checked + .trip-sort__btn { + position: relative; + color: #000000; + border-color: #000000; } + .trip-sort__input:checked + .trip-sort__btn::before { + content: ""; + position: absolute; + top: 50%; + left: 8px; + width: 8px; + height: 8px; + background-color: #ffd054; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + +.trip-sort__input:disabled + .trip-sort__btn { + opacity: 0.6; } +.trip-sort__input:disabled + .trip-sort__btn:hover { + color: #b4b4b4; + cursor: default; } + +.event { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; + font-size: 17px; + line-height: 21px; } + .event--edit { + display: block; + margin-left: 80px; + padding: 0; + background-color: #ffffff; + border-radius: 18px; + -webkit-box-shadow: 0 11px 20px rgba(0, 0, 0, 0.043); + box-shadow: 0 11px 20px rgba(0, 0, 0, 0.043); } + +.event__header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 20px; } + +.event__date { + display: block; + min-width: 80px; + font-size: 13px; + line-height: 16px; + text-transform: uppercase; + text-align: left; } + +.event__type-wrapper { + position: relative; } + +.event__type { + -ms-flex-negative: 0; + flex-shrink: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 42px; + height: 42px; + margin-right: 18px; + background-color: #ffffff; + border-radius: 50%; } + +.event__type-btn { + padding: 0; + border: 1px solid #0d8ae4; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; } + +.event__type-icon { + display: block; + width: 17px; + height: 17px; } + +.event__type-list { + position: absolute; + z-index: 2; + top: calc(100% + 7px); + left: -20px; + display: none; + width: 180px; + background-color: #ffffff; + border: 1px solid rgba(151, 151, 151, 0.169724); + -webkit-box-shadow: 0 11px 20px rgba(0, 0, 0, 0.219146); + box-shadow: 0 11px 20px rgba(0, 0, 0, 0.219146); + border-radius: 4px; } + +.event__type-toggle:checked + .event__type-list { + display: block; } + +.event__type-group { + padding: 13px 0 11px; + margin: 0; + border: none; } + .event__type-group:not(:last-of-type) { + border-bottom: 1px solid rgba(151, 151, 151, 0.33); } + +.event__type-item:not(:last-child) { + margin-bottom: 5px; } + +.event__type-label { + position: relative; + display: block; + padding: 5px 10px 5px 62px; + font-size: 17px; + line-height: 21px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + -webkit-transition: color 0.2s; + transition: color 0.2s; } + .event__type-label::before { + content: ""; + position: absolute; + top: calc(50% - 3px); + left: 32px; + width: 17px; + height: 17px; + background-position: 0 0; + background-size: 17px 17px; + background-repeat: no-repeat; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .event__type-label--taxi::before { + background-image: url("../img/icons/taxi.png"); } + .event__type-label--bus::before { + background-image: url("../img/icons/bus.png"); } + .event__type-label--train::before { + background-image: url("../img/icons/train.png"); } + .event__type-label--ship::before { + background-image: url("../img/icons/ship.png"); } + .event__type-label--drive::before { + background-image: url("../img/icons/drive.png"); } + .event__type-label--flight::before { + background-image: url("../img/icons/flight.png"); } + .event__type-label--check-in::before { + background-image: url("../img/icons/check-in.png"); } + .event__type-label--sightseeing::before { + background-image: url("../img/icons/sightseeing.png"); } + .event__type-label--restaurant::before { + background-image: url("../img/icons/restaurant.png"); } + .event__type-label:hover { + color: #ffd054; } + +.event__type-input:checked + .event__type-label { + color: #000000; + background-color: #ffd054; } + .event__type-input:checked + .event__type-label::after { + content: ""; + position: absolute; + top: 50%; + left: 11px; + width: 8px; + height: 8px; + background-color: #ffffff; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + +.event__title { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 298px; + margin: 0; + margin-right: 15px; + font-weight: 400; + font-size: inherit; } + .event__title::first-letter { + text-transform: capitalize; } + +.event__schedule { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 230px; + margin-right: 15px; } + +.event__time { + margin: 0; + margin-bottom: 4px; } + +.event__duration { + margin: 0; + font-size: 14px; + line-height: 17px; + letter-spacing: 0.6px; + text-transform: uppercase; + color: #999999; + opacity: 0.9; } + +.event__price { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 90px; + margin: 0; + margin-right: 15px; } + +.event__selected-offers { + width: 220px; + padding: 0; + margin: 0; + font-weight: 600; + list-style: none; } + +.event__rollup-btn { + position: relative; + display: block; + width: 40px; + height: 40px; + padding: 0; + margin: 0; + background-color: transparent; + border: none; + cursor: pointer; } + .event__rollup-btn::after { + content: ""; + position: absolute; + top: calc(50% - 5px); + left: 50%; + width: 10px; + height: 10px; + border-right: 2px solid #000000; + border-bottom: 2px solid #000000; + -webkit-transform: translate(-50%, -50%) rotate(45deg); + transform: translate(-50%, -50%) rotate(45deg); + -webkit-transition: border-color 0.2s, -webkit-transform 0.6s; + transition: border-color 0.2s, -webkit-transform 0.6s; + transition: border-color 0.2s, transform 0.6s; + transition: border-color 0.2s, transform 0.6s, -webkit-transform 0.6s; } + .event__rollup-btn:hover::after { + border-color: #0d8ae4; } + +.event--edit .event__rollup-btn { + margin-left: auto; } +.event--edit .event__rollup-btn::after { + top: calc(50% + 3px); + -webkit-transform: translate(-50%, -50%) rotate(225deg); + transform: translate(-50%, -50%) rotate(225deg); } + +.event__field-group { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 5px 2px; + margin-right: 18px; + border-bottom: 1px solid #0d8ae4; } + .event__field-group--destination { + width: 290px; } + +.event__label { + margin-right: 5px; + cursor: pointer; } + .event__label::first-letter { + text-transform: capitalize; } + +.event__input { + -ms-flex-positive: 1; + flex-grow: 1; + padding: 0; + font-size: inherit; + line-height: inherit; + font-family: inherit; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; } + .event__input--destination { + width: 150px; } + .event__input--destination::-webkit-calendar-picker-indicator { + display: none; } + .event__input--time { + width: 130px; + text-align: center; } + .event__input--price { + width: 66px; } + +.event__save-btn { + margin-right: 18px; } + +.event__reset-btn { + display: block; + padding: 0; + font-weight: 500; + font-size: 17px; + line-height: 21px; + font-family: inherit; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + color: #0d8ae4; + background-color: transparent; + border: none; + cursor: pointer; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; } + .event__reset-btn:hover { + opacity: 0.8; } + .event__reset-btn:active { + opacity: 0.6; } + +.event__favorite-btn { + margin: 0 10px; + margin-left: auto; + color: #ebebeb; + background-color: transparent; + border: none; + cursor: pointer; + outline: none; + -webkit-transition: color 0.2s; + transition: color 0.2s; } + .event__favorite-btn:hover, + .event__favorite-btn:focus { + color: rgba(255, 208, 84, 0.6); } + .event__favorite-btn--active { + color: #ffd054; + } + +.event__favorite-icon { + display: block; + width: 28px; + height: 28px; + fill: currentColor; + -webkit-transition: fill 0.2s; + transition: fill 0.2s; } + +.event__details { + padding: 20px 0 27px; + border-top: 2px solid #ffd054; } + +.event--blocked .event__details { + position: relative; } + .event--blocked .event__details::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(255, 255, 255, 0.8); + border-radius: 0 0 18px 18px; } + +.event__details-title { + padding-left: 20px; + margin: 0; + margin-bottom: 24px; + font-weight: 500; + font-size: 23px; + line-height: 27px; } + +.event__section:not(:last-child) { + margin-bottom: 28px; } + +.event__section--offers { + padding: 0 20px; } + +.event__section-title { + margin: 0; + font-weight: 800; + font-size: 14px; + line-height: 17px; + letter-spacing: 0.6px; + text-transform: uppercase; + color: #ffd054; } + .event__section-title--offers { + margin-bottom: 15px; } + .event__section-title--destination { + margin-bottom: 8px; + margin-left: 20px; } + +.event__available-offers { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: -6px; } + +.event__offer::first-letter { + text-transform: capitalize; } + +.event__offer-selector { + margin-bottom: 6px; } + .event__offer-selector:not(:last-of-type) { + margin-right: 6px; } + +.event__offer-label { + display: block; + padding: 22px 30px 21px; + font-size: 17px; + line-height: 21px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #f2f2f2; + border-radius: 32px; + cursor: pointer; + -webkit-transition: background-color 0.2s; + transition: background-color 0.2s; } + .event__offer-label:hover { + background-color: rgba(13, 138, 228, 0.6); } + .event__offer-label::first-letter { + text-transform: capitalize; } + +.event__offer-checkbox:checked + .event__offer-label { + background-color: #0d8ae4; } + +.event__destination-description { + width: 560px; + margin: 0; + margin-bottom: 16px; + margin-left: 20px; + font-size: 15px; + line-height: 18px; } + +.event__photos-container { + width: 100%; + overflow-x: scroll; } + +.event__photos-tape { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; } + +.event__photo { + display: block; + height: 152px; + width: auto; + border-radius: 4px; } + .event__photo:first-child { + padding-left: 20px; } + .event__photo:last-child { + padding-right: 20px; } + .event__photo:not(:last-child) { + margin-right: 5px; } diff --git a/6/fonts/Montserrat-Bold.woff2 b/6/fonts/Montserrat-Bold.woff2 new file mode 100644 index 0000000..3d0b409 Binary files /dev/null and b/6/fonts/Montserrat-Bold.woff2 differ diff --git a/6/fonts/Montserrat-ExtraBold.woff2 b/6/fonts/Montserrat-ExtraBold.woff2 new file mode 100644 index 0000000..0abb707 Binary files /dev/null and b/6/fonts/Montserrat-ExtraBold.woff2 differ diff --git a/6/fonts/Montserrat-Medium.woff2 b/6/fonts/Montserrat-Medium.woff2 new file mode 100644 index 0000000..9dc5c7f Binary files /dev/null and b/6/fonts/Montserrat-Medium.woff2 differ diff --git a/6/fonts/Montserrat-Regular.woff2 b/6/fonts/Montserrat-Regular.woff2 new file mode 100644 index 0000000..70788c2 Binary files /dev/null and b/6/fonts/Montserrat-Regular.woff2 differ diff --git a/6/fonts/Montserrat-SemiBold.woff2 b/6/fonts/Montserrat-SemiBold.woff2 new file mode 100644 index 0000000..29cc1a9 Binary files /dev/null and b/6/fonts/Montserrat-SemiBold.woff2 differ diff --git a/6/img/header-bg.png b/6/img/header-bg.png new file mode 100644 index 0000000..c7ccbda Binary files /dev/null and b/6/img/header-bg.png differ diff --git a/6/img/header-bg@2x.png b/6/img/header-bg@2x.png new file mode 100644 index 0000000..26716e3 Binary files /dev/null and b/6/img/header-bg@2x.png differ diff --git a/6/img/icons/bus.png b/6/img/icons/bus.png new file mode 100644 index 0000000..bb2bad6 Binary files /dev/null and b/6/img/icons/bus.png differ diff --git a/6/img/icons/check-in.png b/6/img/icons/check-in.png new file mode 100644 index 0000000..866702e Binary files /dev/null and b/6/img/icons/check-in.png differ diff --git a/6/img/icons/drive.png b/6/img/icons/drive.png new file mode 100644 index 0000000..ef3522d Binary files /dev/null and b/6/img/icons/drive.png differ diff --git a/6/img/icons/flight.png b/6/img/icons/flight.png new file mode 100644 index 0000000..3e690ca Binary files /dev/null and b/6/img/icons/flight.png differ diff --git a/6/img/icons/restaurant.png b/6/img/icons/restaurant.png new file mode 100644 index 0000000..d677771 Binary files /dev/null and b/6/img/icons/restaurant.png differ diff --git a/6/img/icons/ship.png b/6/img/icons/ship.png new file mode 100644 index 0000000..e854301 Binary files /dev/null and b/6/img/icons/ship.png differ diff --git a/6/img/icons/sightseeing.png b/6/img/icons/sightseeing.png new file mode 100644 index 0000000..a87e06b Binary files /dev/null and b/6/img/icons/sightseeing.png differ diff --git a/6/img/icons/taxi.png b/6/img/icons/taxi.png new file mode 100644 index 0000000..f052e81 Binary files /dev/null and b/6/img/icons/taxi.png differ diff --git a/6/img/icons/train.png b/6/img/icons/train.png new file mode 100644 index 0000000..1dfd1f3 Binary files /dev/null and b/6/img/icons/train.png differ diff --git a/6/img/icons/transport.png b/6/img/icons/transport.png new file mode 100644 index 0000000..9200b63 Binary files /dev/null and b/6/img/icons/transport.png differ diff --git a/6/img/logo.png b/6/img/logo.png new file mode 100644 index 0000000..f11c3ae Binary files /dev/null and b/6/img/logo.png differ diff --git a/6/img/photos/1.jpg b/6/img/photos/1.jpg new file mode 100644 index 0000000..2234819 Binary files /dev/null and b/6/img/photos/1.jpg differ diff --git a/6/img/photos/2.jpg b/6/img/photos/2.jpg new file mode 100644 index 0000000..833055b Binary files /dev/null and b/6/img/photos/2.jpg differ diff --git a/6/img/photos/3.jpg b/6/img/photos/3.jpg new file mode 100644 index 0000000..b63e90a Binary files /dev/null and b/6/img/photos/3.jpg differ diff --git a/6/img/photos/4.jpg b/6/img/photos/4.jpg new file mode 100644 index 0000000..de034f4 Binary files /dev/null and b/6/img/photos/4.jpg differ diff --git a/6/img/photos/5.jpg b/6/img/photos/5.jpg new file mode 100644 index 0000000..fa162ab Binary files /dev/null and b/6/img/photos/5.jpg differ diff --git a/6/index.html b/6/index.html new file mode 100644 index 0000000..309cce5 --- /dev/null +++ b/6/index.html @@ -0,0 +1 @@ +Big Trip

    Trip events

    \ No newline at end of file