UNPKG

kickstart-node

Version:

A front-end framework for clean HTML and fast performance

537 lines (444 loc) 53.8 kB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"./lib-core/coffee/app.coffee":[function(require,module,exports){ var Buffer, Buttons, Debounce, Dropdown, Growl, Icons, KS, Modal, Navbar, Status, Tabs, Throttler; KS = require('./ks'); Modal = require('./modal'); Navbar = require('./navbar'); Debounce = require('./debouncer'); Icons = require('./icons'); Status = require('./status'); Tabs = require('./tabs'); Throttler = require('./throttler'); Buttons = require('./buttons'); Buffer = require('./buffer'); Growl = require('./growl'); Dropdown = require('./dropdown'); k$.ready = function() { var $navbar, $tabSet, _i, _j, _len, _len1, _ref, _ref1, _results; k$.icons(); k$.button(); k$.dropdown(); _ref = k$.$$('[data-ks-navbar]'); for (_i = 0, _len = _ref.length; _i < _len; _i++) { $navbar = _ref[_i]; k$.nav($navbar); } _ref1 = k$.$$('[data-ks-tabs]'); _results = []; for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { $tabSet = _ref1[_j]; _results.push(k$.tabs($tabSet)); } return _results; }; document.addEventListener('DOMContentLoaded', function() { return k$.ready(); }); },{"./buffer":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/buffer.coffee","./buttons":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/buttons.coffee","./debouncer":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/debouncer.coffee","./dropdown":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/dropdown.coffee","./growl":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/growl.coffee","./icons":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/icons.coffee","./ks":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/ks.coffee","./modal":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/modal.coffee","./navbar":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/navbar.coffee","./status":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/status.coffee","./tabs":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/tabs.coffee","./throttler":"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/throttler.coffee"}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/buffer.coffee":[function(require,module,exports){ var buffer; buffer = function(fn, delay) { var i; k$.bufferArray = k$.bufferArray || new Array(); if (!k$.bufferArray.length) { k$.bufferArray = new Array(); delay = delay || 500; i = 1; k$.bufferInterval = setInterval(function() { if (k$.bufferArray[i]) { k$.bufferArray[i](); } i++; if (i >= k$.bufferArray.length) { clearInterval(k$.bufferInterval); k$.bufferArray = void 0; return i = 1; } }, delay); } k$.bufferArray.push(fn); if (k$.bufferArray.length === 1) { k$.bufferArray[0](); } return console.info("Function queued (" + k$.bufferArray.length + " in queue)"); }; k$.buffer = buffer; module.exports = buffer; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/buttons.coffee":[function(require,module,exports){ var button; button = function() { var $button, $buttonDropdown, _i, _j, _len, _len1, _ref, _ref1, _results; _ref = k$.$$("button"); for (_i = 0, _len = _ref.length; _i < _len; _i++) { $button = _ref[_i]; if ($button.querySelectorAll('ul').length) { $button.classList.add('menu-item'); } } _ref1 = k$.$$('.button-dropdown'); _results = []; for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { $buttonDropdown = _ref1[_j]; _results.push($buttonDropdown.parentNode.classList.add('menu-item')); } return _results; }; k$.button = button; module.exports = button; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/debouncer.coffee":[function(require,module,exports){ var debounce; debounce = function(fn, id, delay) { var $delay; $delay = delay || 1000; if (k$.debounceQueue === null) { k$.debounceQueue = id; } if (id === k$.debounceQueue) { clearTimeout(k$.debounceTimer); } return k$.debounceTimer = setTimeout(function() { fn(); return k$.debounceQueue = null; }, $delay); }; k$.debounce = debounce; module.exports = debounce; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/dropdown.coffee":[function(require,module,exports){ var dropdown; dropdown = function() { return document.body.addEventListener('click', function(e) { var $menuItem, closeAllMenus, openMenu; $menuItem = null; closeAllMenus = function() { var _$menuItem, _i, _len, _ref, _results; _ref = k$.$$('.menu-item'); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { _$menuItem = _ref[_i]; _results.push(_$menuItem.classList.remove('open')); } return _results; }; openMenu = function() { if ($menuItem.classList.contains('open')) { $menuItem.classList.remove('open'); } else { closeAllMenus(); $menuItem.classList.add('open'); } return e.stopPropagation(); }; if (e.target.classList.contains('menu-item')) { $menuItem = e.target; return openMenu(); } else if (e.target.parentNode.classList.contains('menu-item')) { $menuItem = e.target.parentNode; return openMenu(); } else { closeAllMenus(); } }); }; k$.dropdown = dropdown; module.exports = dropdown; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/growl.coffee":[function(require,module,exports){ var growl; growl = function(params) { return k$.buffer(function() { var className, content, defaults, delay, growlContainer, id; defaults = { title: void 0, text: void 0, delay: 2000, type: 'growl-warn', id: Date.now() }; params = k$.extend(defaults, params); if (!k$.$$('.growl_container').length) { growlContainer = document.createElement('div'); growlContainer.className = 'growl_container'; document.body.appendChild(growlContainer); } growl = document.createElement('div'); className = "alert growl show " + params.type + " growl-" + params.id; growl.className = className; content = ""; if (params.title) { content += "<h1>" + params.title + "</h1>"; } if (params.text) { content += "<p>" + params.text + "</p>"; } growl.innerHTML = content; k$.$('.growl_container').appendChild(growl); delay = params.delay; id = params.id; if (delay > 0) { return (function(delay, id) { return setTimeout(function() { var $growl, $newGrowl; $growl = k$.$(".growl-" + id); $growl.classList.remove('show'); $newGrowl = $growl.cloneNode(true); $growl.parentNode.replaceChild($newGrowl, $growl); $newGrowl.classList.add('hide'); return (function(delay, id) { return setTimeout(function() { if (!k$.$$('.growl.show').length) { return k$.$('.growl_container').parentNode.removeChild(k$.$('.growl_container')); } }, 500); })(delay, id); }, delay); })(delay, id); } }); }; k$.growl = growl; module.exports = growl; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/icons.coffee":[function(require,module,exports){ var icons; icons = function() { var CACHE, IE9TO11, embed, onframe, onload, requestAnimationFrame, uses; uses = document.getElementsByTagName("use"); requestAnimationFrame = window.requestAnimationFrame || window.setTimeout; CACHE = {}; IE9TO11 = true; embed = function(svg, g) { var clone, fragment, viewBox; if (g) { viewBox = g.getAttribute("viewBox"); fragment = document.createDocumentFragment(); clone = g.cloneNode(true); if (viewBox) { svg.setAttribute("viewBox", viewBox); } while (clone.childNodes.length) { fragment.appendChild(clone.childNodes[0]); } svg.appendChild(fragment); } }; onload = function() { var s, x, xhr; xhr = this; x = document.createElement("x"); s = xhr.s; x.innerHTML = xhr.responseText; xhr.onload = function() { s.splice(0).map(function(array) { embed(array[0], x.querySelector("#" + array[1].replace(/(\W)/g, "\\$1"))); }); }; xhr.onload(); }; onframe = function() { var svg, url, url_hash, url_root, use, xhr; use = void 0; while ((use = uses[0])) { svg = use.parentNode; url = use.getAttribute("xlink:href").split("#"); url_root = url[0]; url_hash = url[1]; svg.removeChild(use); if (url_root.length) { xhr = CACHE[url_root] = CACHE[url_root] || new XMLHttpRequest(); if (!xhr.s) { xhr.s = []; xhr.open("GET", url_root); xhr.onload = onload; xhr.send(); } xhr.s.push([svg, url_hash]); if (xhr.readyState === 4) { xhr.onload(); } } else { embed(svg, document.getElementById(url_hash)); } } requestAnimationFrame(onframe); }; if (IE9TO11) { onframe(); } }; k$.icons = icons; module.exports = icons; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/ks.coffee":[function(require,module,exports){ (function (global){ global.k$ = new Object(); k$.$$ = function(el) { return document.querySelectorAll(el); }; k$.$ = function(el) { return k$.$$(el)[0]; }; k$.debounceTimer = false; k$.debounceQueue = null; k$.extend = function(destination, source) { var property; for (property in source) { if (source[property] && source[property].constructor && source[property].constructor === Object) { destination[property] = destination[property] || {}; arguments.callee(destination[property], source[property]); } else { destination[property] = source[property]; } } return destination; }; module.exports = k$; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/modal.coffee":[function(require,module,exports){ var modal; modal = function(el) { var iOS = /(iPad|iPhone|iPod)/g.test( navigator.userAgent ); if (iOS) { document.body.classList.add('dismiss-modal'); } (function(el) { var $closer, $hideModal; $hideModal = function() { return k$.$(el).style.display = 'none'; }; document.body.addEventListener('click', function() { return $hideModal(); }); k$.$(el).addEventListener('click', function(e) { return e.stopPropagation(); }); $closer = k$.$(el).querySelector('a[data-modal-close]'); if ($closer) { return $closer.addEventListener('click', function() { return $hideModal(); }); } })(el); return k$.$(el); }; k$.modal = modal; module.exports = modal; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/navbar.coffee":[function(require,module,exports){ var nav; nav = function(el) { var $button, $menuItem, $menuItems, $navbar, e, _$menuItems, _i, _j, _len, _len1; $navbar = typeof el === 'string' ? k$.$(el) : el; try { $menuItems = $navbar.querySelectorAll('ul > li'); _$menuItems = new Array(); for (_i = 0, _len = $menuItems.length; _i < _len; _i++) { $menuItem = $menuItems[_i]; if ($menuItem.querySelectorAll('ul').length && !$menuItem.querySelectorAll('[role="button"]').length) { _$menuItems.push($menuItem); } } $menuItems = _$menuItems; for (_j = 0, _len1 = $menuItems.length; _j < _len1; _j++) { $menuItem = $menuItems[_j]; $menuItem.classList.add('menu-item'); } } catch (_error) { e = _error; console.error("Could not instantiate as a nav.", e.message); } $button = $navbar.querySelector('.navbar-title button'); if ($button) { return $button.addEventListener('click', function() { var $nav; $nav = $navbar.querySelector('nav'); if ($nav.classList.contains('expand')) { return $nav.classList.remove('expand'); } else { return $nav.classList.add('expand'); } }); } }; k$.nav = nav; module.exports = nav; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/status.coffee":[function(require,module,exports){ var status; status = function(opts) { var $status, $statusBar, defaults, hideStatusBar; defaults = { type: 'status-yellow', delay: 2000 }; status = k$.extend(defaults, opts); if (!k$.$$('#status_bar').length) { $statusBar = document.createElement('div'); $statusBar.id = 'status_bar'; $statusBar.className = 'status_bar'; $statusBar.innerHTML = "<div class='status_bar-status' id='status_bar-status'></div>"; document.body.appendChild($statusBar); } $statusBar = k$.$('#status_bar'); hideStatusBar = function() { $statusBar.classList.add('hide'); return setTimeout(function() { $statusBar.classList.remove('hide'); return $statusBar.parentNode.removeChild($statusBar); }, 250); }; if (status.delay > 0) { k$.debounce(hideStatusBar, 'hideStatusBar', status.delay); } $status = k$.$("#status_bar-status"); $status.innerHTML = status.text; return $status.dataset.type = status.type; }; k$.status = status; module.exports = status; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/tabs.coffee":[function(require,module,exports){ var tabs; tabs = function(el) { var $_tab, $id, $pane, $paneSet, $tab, $tabContainer, $tabLink, $tabSet, _i, _j, _k, _len, _len1, _len2, _results; $tabContainer = typeof el === 'string' ? k$.$(el) : el; $tabSet = $tabContainer.querySelectorAll('li'); for (_i = 0, _len = $tabSet.length; _i < _len; _i++) { $tab = $tabSet[_i]; $tab.classList.add('tab-item'); } $paneSet = new Array(); for (_j = 0, _len1 = $tabSet.length; _j < _len1; _j++) { $_tab = $tabSet[_j]; $id = $_tab.querySelector('a').getAttribute('href'); $pane = k$.$("article" + $id); if ($_tab.classList.contains('open')) { $pane.classList.add('open'); } $paneSet.push($pane); $pane.setAttribute('data-panel', true); } _results = []; for (_k = 0, _len2 = $tabSet.length; _k < _len2; _k++) { $tab = $tabSet[_k]; $tabLink = $tab.querySelector('a'); $tabLink.setAttribute('data-link', $tabLink.getAttribute('href')); $tabLink.href = 'javascript:void(0);'; _results.push((function($tab, $tabLink, $paneSet) { return $tab.addEventListener('click', function() { var _$tab, _l, _len3, _len4, _m; for (_l = 0, _len3 = $paneSet.length; _l < _len3; _l++) { $pane = $paneSet[_l]; $pane.classList.remove('open'); } for (_m = 0, _len4 = $tabSet.length; _m < _len4; _m++) { _$tab = $tabSet[_m]; _$tab.classList.remove('open'); } k$.$("article" + ($tabLink.getAttribute('data-link'))).classList.add('open'); return $tab.classList.add('open'); }); })($tab, $tabLink, $paneSet)); } return _results; }; k$.tabs = tabs; module.exports = tabs; },{}],"/Users/adamkochanowicz/Sites/kickstart/lib-core/coffee/throttler.coffee":[function(require,module,exports){ var throttle; throttle = function(fn, id, delay) {}; k$.throttle = throttle; module.exports = throttle; },{}]},{},["./lib-core/coffee/app.coffee"]) //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvYWRhbWtvY2hhbm93aWN6L1NpdGVzL2tpY2tzdGFydC9saWItY29yZS9jb2ZmZWUvYXBwLmNvZmZlZSIsIi9Vc2Vycy9hZGFta29jaGFub3dpY3ovU2l0ZXMva2lja3N0YXJ0L2xpYi1jb3JlL2NvZmZlZS9idWZmZXIuY29mZmVlIiwiL1VzZXJzL2FkYW1rb2NoYW5vd2ljei9TaXRlcy9raWNrc3RhcnQvbGliLWNvcmUvY29mZmVlL2J1dHRvbnMuY29mZmVlIiwiL1VzZXJzL2FkYW1rb2NoYW5vd2ljei9TaXRlcy9raWNrc3RhcnQvbGliLWNvcmUvY29mZmVlL2RlYm91bmNlci5jb2ZmZWUiLCIvVXNlcnMvYWRhbWtvY2hhbm93aWN6L1NpdGVzL2tpY2tzdGFydC9saWItY29yZS9jb2ZmZWUvZHJvcGRvd24uY29mZmVlIiwiL1VzZXJzL2FkYW1rb2NoYW5vd2ljei9TaXRlcy9raWNrc3RhcnQvbGliLWNvcmUvY29mZmVlL2dyb3dsLmNvZmZlZSIsIi9Vc2Vycy9hZGFta29jaGFub3dpY3ovU2l0ZXMva2lja3N0YXJ0L2xpYi1jb3JlL2NvZmZlZS9pY29ucy5jb2ZmZWUiLCIvVXNlcnMvYWRhbWtvY2hhbm93aWN6L1NpdGVzL2tpY2tzdGFydC9saWItY29yZS9jb2ZmZWUva3MuY29mZmVlIiwiL1VzZXJzL2FkYW1rb2NoYW5vd2ljei9TaXRlcy9raWNrc3RhcnQvbGliLWNvcmUvY29mZmVlL21vZGFsLmNvZmZlZSIsIi9Vc2Vycy9hZGFta29jaGFub3dpY3ovU2l0ZXMva2lja3N0YXJ0L2xpYi1jb3JlL2NvZmZlZS9uYXZiYXIuY29mZmVlIiwiL1VzZXJzL2FkYW1rb2NoYW5vd2ljei9TaXRlcy9raWNrc3RhcnQvbGliLWNvcmUvY29mZmVlL3N0YXR1cy5jb2ZmZWUiLCIvVXNlcnMvYWRhbWtvY2hhbm93aWN6L1NpdGVzL2tpY2tzdGFydC9saWItY29yZS9jb2ZmZWUvdGFicy5jb2ZmZWUiLCIvVXNlcnMvYWRhbWtvY2hhbm93aWN6L1NpdGVzL2tpY2tzdGFydC9saWItY29yZS9jb2ZmZWUvdGhyb3R0bGVyLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLElBQUEsNkZBQUE7O0FBQUEsRUFBQSxHQUFZLE9BQUEsQ0FBUSxNQUFSLENBQVosQ0FBQTs7QUFBQSxLQUNBLEdBQVksT0FBQSxDQUFRLFNBQVIsQ0FEWixDQUFBOztBQUFBLE1BRUEsR0FBWSxPQUFBLENBQVEsVUFBUixDQUZaLENBQUE7O0FBQUEsUUFHQSxHQUFZLE9BQUEsQ0FBUSxhQUFSLENBSFosQ0FBQTs7QUFBQSxLQUlBLEdBQVksT0FBQSxDQUFRLFNBQVIsQ0FKWixDQUFBOztBQUFBLE1BS0EsR0FBWSxPQUFBLENBQVEsVUFBUixDQUxaLENBQUE7O0FBQUEsSUFNQSxHQUFZLE9BQUEsQ0FBUSxRQUFSLENBTlosQ0FBQTs7QUFBQSxTQU9BLEdBQVksT0FBQSxDQUFRLGFBQVIsQ0FQWixDQUFBOztBQUFBLE9BUUEsR0FBWSxPQUFBLENBQVEsV0FBUixDQVJaLENBQUE7O0FBQUEsTUFTQSxHQUFZLE9BQUEsQ0FBUSxVQUFSLENBVFosQ0FBQTs7QUFBQSxLQVVBLEdBQVksT0FBQSxDQUFRLFNBQVIsQ0FWWixDQUFBOztBQUFBLFFBV0EsR0FBWSxPQUFBLENBQVEsWUFBUixDQVhaLENBQUE7O0FBQUEsRUFhRSxDQUFDLEtBQUgsR0FBVyxTQUFBLEdBQUE7QUFDVCxNQUFBLDREQUFBO0FBQUEsRUFBQSxFQUFFLENBQUMsS0FBSCxDQUFBLENBQUEsQ0FBQTtBQUFBLEVBQ0EsRUFBRSxDQUFDLE1BQUgsQ0FBQSxDQURBLENBQUE7QUFBQSxFQUVBLEVBQUUsQ0FBQyxRQUFILENBQUEsQ0FGQSxDQUFBO0FBR0E7QUFBQSxPQUFBLDJDQUFBO3VCQUFBO0FBQUEsSUFBQSxFQUFFLENBQUMsR0FBSCxDQUFPLE9BQVAsQ0FBQSxDQUFBO0FBQUEsR0FIQTtB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QUE7ZUFNQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQWYsQ0FBbUIsTUFBbkIsRUFUNkI7TUFBQSxDQUEvQixFQURDO0lBQUEsQ0FBQSxDQUFILENBQUksSUFBSixFQUFVLFFBQVYsRUFBb0IsUUFBcEIsRUFMQSxDQUZGO0FBQUE7a0JBakJLO0FBQUEsQ0FBUCxDQUFBOztBQUFBLEVBb0NFLENBQUMsSUFBSCxHQUFVLElBcENWLENBQUE7O0FBQUEsTUFzQ00sQ0FBQyxPQUFQLEdBQWlCLElBdENqQixDQUFBOzs7OztBQ0FBLElBQUEsUUFBQTs7QUFBQSxRQUFBLEdBQVcsU0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLEtBQVQsR0FBQSxDQUFYLENBQUE7O0FBQUEsRUFJRSxDQUFDLFFBQUgsR0FBYyxRQUpkLENBQUE7O0FBQUEsTUFNTSxDQUFDLE9BQVAsR0FBaUIsUUFOakIsQ0FBQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJLUyAgICAgICAgPSByZXF1aXJlICcuL2tzJ1xuTW9kYWwgICAgID0gcmVxdWlyZSAnLi9tb2RhbCdcbk5hdmJhciAgICA9IHJlcXVpcmUgJy4vbmF2YmFyJ1xuRGVib3VuY2UgID0gcmVxdWlyZSAnLi9kZWJvdW5jZXInXG5JY29ucyAgICAgPSByZXF1aXJlICcuL2ljb25zJ1xuU3RhdHVzICAgID0gcmVxdWlyZSAnLi9zdGF0dXMnXG5UYWJzICAgICAgPSByZXF1aXJlICcuL3RhYnMnXG5UaHJvdHRsZXIgPSByZXF1aXJlICcuL3Rocm90dGxlcidcbkJ1dHRvbnMgICA9IHJlcXVpcmUgJy4vYnV0dG9ucydcbkJ1ZmZlciAgICA9IHJlcXVpcmUgJy4vYnVmZmVyJ1xuR3Jvd2wgICAgID0gcmVxdWlyZSAnLi9ncm93bCdcbkRyb3Bkb3duICA9IHJlcXVpcmUgJy4vZHJvcGRvd24nXG5cbmskLnJlYWR5ID0gLT5cbiAgayQuaWNvbnMoKVxuICBrJC5idXR0b24oKVxuICBrJC5kcm9wZG93bigpXG4gIGskLm5hdigkbmF2YmFyKSBmb3IgJG5hdmJhciBpbiBrJC4kJCgnW2RhdGEta3MtbmF2YmFyXScpXG4gIGskLnRhYnMoJHRhYlNldCkgZm9yICR0YWJTZXQgaW4gayQuJCQoJ1tkYXRhLWtzLXRhYnNdJylcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAnRE9NQ29udGVudExvYWRlZCcsIC0+IGskLnJlYWR5KClcbiIsImJ1ZmZlciA9IChmbiwgZGVsYXkpIC0+XG5cbiAgIyBDcmVhdGUgYSBuZXcgYnVmZmVyQXJyYXkgaWYgb25lIGRvZXMgbm90IGV4aXN0IGFscmVhZHkuXG4gIGskLmJ1ZmZlckFycmF5ID0gayQuYnVmZmVyQXJyYXkgfHwgbmV3IEFycmF5KClcbiAgaWYgbm90IGskLmJ1ZmZlckFycmF5Lmxlbmd0aFxuICAgIGskLmJ1ZmZlckFycmF5ID0gbmV3IEFycmF5KClcblxuICAgIGRlbGF5ID0gZGVsYXkgfHwgNTAwXG5cbiAgICAjIENyZWF0ZSBhbiBpbnRlcnZhbCB0byBmaXJlIHRoZSBmbnMgaW4gYnVmZmVyQXJyYXlcbiAgICBpID0gMVxuXG4gICAgayQuYnVmZmVySW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCAtPlxuICAgICAgayQuYnVmZmVyQXJyYXlbaV0oKSBpZiBrJC5idWZmZXJBcnJheVtpXVxuICAgICAgaSsrXG4gICAgICBpZiBpID49IGskLmJ1ZmZlckFycmF5Lmxlbmd0aFxuICAgICAgICBjbGVhckludGVydmFsIGskLmJ1ZmZlckludGVydmFsXG4gICAgICAgIGskLmJ1ZmZlckFycmF5ID0gdW5kZWZpbmVkXG4gICAgICAgIGkgPSAxXG4gICAgLCBkZWxheVxuXG4gICMgQWRkIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGFycmF5LlxuICBrJC5idWZmZXJBcnJheS5wdXNoIGZuXG5cbiAgIyBGaXJlIHJpZ2h0IGF3YXkgaWYgaXQncyB0aGUgZmlyc3QgaW4gbGluZS5cbiAgayQuYnVmZmVyQXJyYXlbMF0oKSBpZiBrJC5idWZmZXJBcnJheS5sZW5ndGggPT0gMVxuXG4gIGNvbnNvbGUuaW5mbyBcIkZ1bmN0aW9uIHF1ZXVlZCAoI3trJC5idWZmZXJBcnJheS5sZW5ndGh9IGluIHF1ZXVlKVwiXG5cbmskLmJ1ZmZlciA9IGJ1ZmZlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxuIiwiYnV0dG9uID0gLT5cblxuICAoJGJ1dHRvbi5jbGFzc0xpc3QuYWRkICdtZW51LWl0ZW0nIGlmICRidXR0b24ucXVlcnlTZWxlY3RvckFsbCgndWwnKS5sZW5ndGgpIGZvciAkYnV0dG9uIGluIGskLiQkKFwiYnV0dG9uXCIpXG4gICRidXR0b25Ecm9wZG93bi5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQgJ21lbnUtaXRlbScgZm9yICRidXR0b25Ecm9wZG93biBpbiBrJC4kJCAnLmJ1dHRvbi1kcm9wZG93bidcblxuayQuYnV0dG9uID0gYnV0dG9uXG5cbm1vZHVsZS5leHBvcnRzID0gYnV0dG9uXG4iLCJkZWJvdW5jZSA9IChmbiwgaWQsIGRlbGF5KSAtPlxuXG4gICRkZWxheSA9IGRlbGF5IHx8IDEwMDBcblxuICBrJC5kZWJvdW5jZVF1ZXVlID0gaWQgaWYgayQuZGVib3VuY2VRdWV1ZSA9PSBudWxsXG4gIGNsZWFyVGltZW91dCBrJC5kZWJvdW5jZVRpbWVyIGlmIGlkID09IGskLmRlYm91bmNlUXVldWVcbiAgayQuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQgLT5cbiAgICBmbigpXG4gICAgayQuZGVib3VuY2VRdWV1ZSA9IG51bGxcbiAgLCAkZGVsYXlcblxuayQuZGVib3VuY2UgPSBkZWJvdW5jZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlXG4iLCJkcm9wZG93biA9ICgpIC0+XG5cbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyICdjbGljaycsIChlKSAtPlxuICAgICRtZW51SXRlbSA9IG51bGxcblxuICAgIGNsb3NlQWxsTWVudXMgPSAtPlxuICAgICAgXyRtZW51SXRlbS5jbGFzc0xpc3QucmVtb3ZlICdvcGVuJyBmb3IgXyRtZW51SXRlbSBpbiBrJC4kJCgnLm1lbnUtaXRlbScpXG5cbiAgICAjIFdlJ2xsIG5lZWQgdGhpcyBsYXRlci5cbiAgICBvcGVuTWVudSA9IC0+XG4gICAgICAjIFVzZXIgaGFzIGNsaWNrZWQgb24gYSBtZW51IHRyaWdnZXIuXG4gICAgICBpZiAkbWVudUl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zICdvcGVuJyBcbiAgICAgICAgJG1lbnVJdGVtLmNsYXNzTGlzdC5yZW1vdmUgJ29wZW4nIFxuICAgICAgZWxzZSBcbiAgICAgICAgY2xvc2VBbGxNZW51cygpIFxuICAgICAgICAkbWVudUl0ZW0uY2xhc3NMaXN0LmFkZCAnb3BlbidcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgICMgTGV0J3MgY2hlY2sgaWYgYSB1c2VyIGhhcyBjbGlja2VkIG9uIGEgbWVudSB0cmlnZ2VyOlxuICAgIGlmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyAnbWVudS1pdGVtJ1xuICAgICAgJG1lbnVJdGVtID0gZS50YXJnZXQgXG4gICAgICBvcGVuTWVudSgpXG4gICAgZWxzZSBpZiBlLnRhcmdldC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucyAnbWVudS1pdGVtJ1xuICAgICAgJG1lbnVJdGVtID0gZS50YXJnZXQucGFyZW50Tm9kZVxuICAgICAgb3Blbk1lbnUoKVxuICAgIGVsc2VcbiAgICAgIGNsb3NlQWxsTWVudXMoKVxuICAgICAgcmV0dXJuXG5cblxuXG4gICMgIyBUaGUgZm9sbG93aW5nIHNob3VsZCBhcHBseSB0byBzZXZlcmFsIGVsZW1lbnRzLlxuICAjXG4gICMgJG1lbnVJdGVtcyA9IGskLiQkICcubWVudS1pdGVtJ1xuICAjXG4gICMgZm9yICRfbWVudUl0ZW0gaW4gJG1lbnVJdGVtc1xuICAjXG4gICMgICAkbWVudUl0ZW0gPSAkX21lbnVJdGVtLmNsb25lTm9kZSB0cnVlXG4gICMgICAkX21lbnVJdGVtLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkICRtZW51SXRlbSwgJF9tZW51SXRlbVxuICAjXG4gICMgICBkbyAoJG1lbnVJdGVtKSAtPlxuXG4gICAgICAjIFRPRE8gbWFrZSBvbmx5IG9uZSBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHBhcmVudC5cbiAgICAgICMgJG1lbnVJdGVtLmFkZEV2ZW50TGlzdGVuZXIgJ2NsaWNrJywgKGUpIC0+XG5cbiAgICAgICAgIyAjIEp1c3QgY2xvc2UgaXQgaWYgaXQncyBhbHJlYWR5IG9wZW5cbiAgICAgICAgIyBpZiAkbWVudUl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zICdvcGVuJ1xuICAgICAgICAjICAgJG1lbnVJdGVtLmNsYXNzTGlzdC5yZW1vdmUgJ29wZW4nXG4gICAgICAgICMgICByZXR1cm5cbiAgICAgICAgI1xuICAgICAgICAjICMgUmVzZXQgYWxsXG4gICAgICAgICMgXyRtZW51SXRlbS5jbGFzc0xpc3QucmVtb3ZlICdvcGVuJyBmb3IgXyRtZW51SXRlbSBpbiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtJylcbiAgICAgICAgIyAkb3BlbmFibGUgPSAkbWVudUl0ZW0ucXVlcnlTZWxlY3RvciAndWwnXG4gICAgICAgICNcbiAgICAgICAgIyAjIE9wZW4gdGhpcyBvbmVcbiAgICAgICAgIyBpZiAkb3BlbmFibGVcbiAgICAgICAgIyAgICRtZW51SXRlbS5jbGFzc0xpc3QuYWRkICdvcGVuJ1xuICAgICAgICAjXG4gICAgICAgICMgIyBQcmV2ZW50IGJ1YmJsaW5nXG4gICAgICAgICMgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICMgIyBEaXNtaXNzIGFsbFxuICAjIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lciAnY2xpY2snLCAtPlxuICAjICAgJHVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LnJlbW92ZSAnb3BlbicgZm9yICR1bCBpbiBrJC4kJCgnLm1lbnUtaXRlbSA+IHVsJylcbiAgIyAgICRsaS5jbGFzc0xpc3QucmVtb3ZlICdvcGVuJyBmb3IgJGxpIGluIGskLiQkKCcubWVudS1pdGVtLm9wZW4nKVxuXG5rJC5kcm9wZG93biA9IGRyb3Bkb3duXG5cbm1vZHVsZS5leHBvcnRzID0gZHJvcGRvd25cbiIsImdyb3dsID0gKHBhcmFtcykgLT5cblxuICBrJC5idWZmZXIgLT5cbiAgICBkZWZhdWx0cyA9XG4gICAgICB0aXRsZTogdW5kZWZpbmVkXG4gICAgICB0ZXh0OiB1bmRlZmluZWRcbiAgICAgIGRlbGF5OiAyMDAwXG4gICAgICB0eXBlOiAnZ3Jvd2wtd2FybidcbiAgICAgIGlkOiBEYXRlLm5vdygpXG5cbiAgICBwYXJhbXMgPSBrJC5leHRlbmQgZGVmYXVsdHMsIHBhcmFtc1xuXG4gICAgIyBDcmVhdGUgZ3Jvd2wgY29udGFpbmVyXG4gICAgaWYgbm90IGskLiQkKCcuZ3Jvd2xfY29udGFpbmVyJykubGVuZ3RoXG4gICAgICBncm93bENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgJ2RpdidcbiAgICAgIGdyb3dsQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdncm93bF9jb250YWluZXInXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkIGdyb3dsQ29udGFpbmVyXG5cbiAgICAjIENyZWF0ZSBncm93bFxuICAgIGdyb3dsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAnZGl2J1xuXG4gICAgIyBBZGQgYXBwcm9wcmlhdGUgY2xhc3Nlc1xuICAgIGNsYXNzTmFtZSA9IFwiYWxlcnQgZ3Jvd2wgc2hvdyAje3BhcmFtcy50eXBlfSBncm93bC0je3BhcmFtcy5pZH1cIlxuICAgIGdyb3dsLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuXG4gICAgIyBBZGQgY29udGVudFxuICAgIGNvbnRlbnQgPSBcIlwiXG4gICAgY29udGVudCArPSBcIjxoMT4je3BhcmFtcy50aXRsZX08L2gxPlwiIGlmIHBhcmFtcy50aXRsZVxuICAgIGNvbnRlbnQgKz0gXCI8cD4je3BhcmFtcy50ZXh0fTwvcD5cIiBpZiBwYXJhbXMudGV4dFxuICAgIGdyb3dsLmlubmVySFRNTCA9IGNvbnRlbnRcblxuICAgICMgQXBwZW5kIGNoaWxkIHRvIGNvbnRhaW5lclxuICAgIGskLiQoJy5ncm93bF9jb250YWluZXInKS5hcHBlbmRDaGlsZCBncm93bFxuXG4gICAgZGVsYXkgPSBwYXJhbXMuZGVsYXlcbiAgICBpZCA9IHBhcmFtcy5pZFxuXG4gICAgaWYgZGVsYXkgPiAwXG4gICAgICBkbyAoZGVsYXksIGlkKSAtPlxuICAgICAgICBzZXRUaW1lb3V0IC0+XG4gICAgICAgICAgJGdyb3dsID0gayQuJChcIi5ncm93bC0je2lkfVwiKVxuICAgICAgICAgICRncm93bC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcbiAgICAgICAgICAkbmV3R3Jvd2wgPSAkZ3Jvd2wuY2xvbmVOb2RlIHRydWVcbiAgICAgICAgICAkZ3Jvd2wucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQgJG5ld0dyb3dsLCAkZ3Jvd2xcbiAgICAgICAgICAkbmV3R3Jvd2wuY2xhc3NMaXN0LmFkZCgnaGlkZScpXG5cbiAgICAgICAgICBkbyAoZGVsYXksIGlkKSAtPlxuICAgICAgICAgICAgc2V0VGltZW91dCAtPlxuICAgICAgICAgICAgICAjIFJlbW92ZSBnaG9zdCBncm93bHNcbiAgICAgICAgICAgICAgayQuJCgnLmdyb3dsX2NvbnRhaW5lcicpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQgayQuJCgnLmdyb3dsX2NvbnRhaW5lcicpIGlmIG5vdCBrJC4kJCgnLmdyb3dsLnNob3cnKS5sZW5ndGhcbiAgICAgICAgICAgICwgNTAwXG4gICAgICAgICwgZGVsYXlcblxuayQuZ3Jvd2wgPSBncm93bFxuXG5tb2R1bGUuZXhwb3J0cyA9IGdyb3dsXG4iLCJpY29ucyA9ICgpIC0+XG5cbiAgIyEgc3ZnNGV2ZXJ5Ym9keSB2MS4wLjAgfCBnaXRodWIuY29tL2pvbmF0aGFudG5lYWwvc3ZnNGV2ZXJ5Ym9keSBcbiAgdXNlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidXNlXCIpXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgb3Igd2luZG93LnNldFRpbWVvdXRcbiAgQ0FDSEUgPSB7fVxuICAjIElFOVRPMTEgPSAvVHJpZGVudFxcL1s1NjddXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIG9yIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKS8pIG9yIFtdKVsxXSA8IDUzN1xuICBJRTlUTzExID0gdHJ1ZVxuICAjIEZvcmNpbmcgdGhpcyB0byBzaGltIHJlZ2FyZGxlc3MuXG4gIGVtYmVkID0gKHN2ZywgZykgLT5cbiAgICBpZiBnXG4gICAgICB2aWV3Qm94ID0gZy5nZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpXG4gICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuICAgICAgY2xvbmUgPSBnLmNsb25lTm9kZSh0cnVlKVxuICAgICAgc3ZnLnNldEF0dHJpYnV0ZSBcInZpZXdCb3hcIiwgdmlld0JveCAgaWYgdmlld0JveFxuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQgY2xvbmUuY2hpbGROb2Rlc1swXSAgd2hpbGUgY2xvbmUuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgIHN2Zy5hcHBlbmRDaGlsZCBmcmFnbWVudFxuICAgIHJldHVyblxuICBvbmxvYWQgPSAtPlxuICAgIHhociA9IHRoaXNcbiAgICB4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIilcbiAgICBzID0geGhyLnNcbiAgICB4LmlubmVySFRNTCA9IHhoci5yZXNwb25zZVRleHRcbiAgICB4aHIub25sb2FkID0gLT5cbiAgICAgIHMuc3BsaWNlKDApLm1hcCAoYXJyYXkpIC0+XG4gICAgICAgIGVtYmVkIGFycmF5WzBdLCB4LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBhcnJheVsxXS5yZXBsYWNlKC8oXFxXKS9nLCBcIlxcXFwkMVwiKSlcbiAgICAgICAgcmV0dXJuXG5cbiAgICAgIHJldHVyblxuXG4gICAgeGhyLm9ubG9hZCgpXG4gICAgcmV0dXJuXG4gIG9uZnJhbWUgPSAtPlxuICAgIHVzZSA9IHVuZGVmaW5lZFxuICAgIHdoaWxlICh1c2UgPSB1c2VzWzBdKVxuICAgICAgc3ZnID0gdXNlLnBhcmVudE5vZGVcbiAgICAgIHVybCA9IHVzZS5nZXRBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpLnNwbGl0KFwiI1wiKVxuICAgICAgdXJsX3Jvb3QgPSB1cmxbMF1cbiAgICAgIHVybF9oYXNoID0gdXJsWzFdXG4gICAgICBzdmcucmVtb3ZlQ2hpbGQgdXNlXG4gICAgICBpZiB1cmxfcm9vdC5sZW5ndGhcbiAgICAgICAgeGhyID0gQ0FDSEVbdXJsX3Jvb3RdID0gQ0FDSEVbdXJsX3Jvb3RdIG9yIG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIHVubGVzcyB4aHIuc1xuICAgICAgICAgIHhoci5zID0gW11cbiAgICAgICAgICB4aHIub3BlbiBcIkdFVFwiLCB1cmxfcm9vdFxuICAgICAgICAgIHhoci5vbmxvYWQgPSBvbmxvYWRcbiAgICAgICAgICB4aHIuc2VuZCgpXG4gICAgICAgIHhoci5zLnB1c2ggW1xuICAgICAgICAgIHN2Z1xuICAgICAgICAgIHVybF9oYXNoXG4gICAgICAgIF1cbiAgICAgICAgeGhyLm9ubG9hZCgpICBpZiB4aHIucmVhZHlTdGF0ZSBpcyA0XG4gICAgICBlbHNlXG4gICAgICAgIGVtYmVkIHN2ZywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodXJsX2hhc2gpXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIG9uZnJhbWVcbiAgICByZXR1cm5cbiAgb25mcmFtZSgpICBpZiBJRTlUTzExXG4gIHJldHVyblxuXG5rJC5pY29ucyA9IGljb25zXG5cbm1vZHVsZS5leHBvcnRzID0gaWNvbnNcbiIsImdsb2JhbC5rJCA9IG5ldyBPYmplY3QoKVxuXG5rJC4kJCA9IChlbCkgLT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCBlbFxuayQuJCA9IChlbCkgLT4gayQuJCQoZWwpWzBdXG5rJC5kZWJvdW5jZVRpbWVyID0gZmFsc2VcbmskLmRlYm91bmNlUXVldWUgPSBudWxsXG5rJC5leHRlbmQgPSAoZGVzdGluYXRpb24sIHNvdXJjZSkgLT5cbiAgZm9yIHByb3BlcnR5IG9mIHNvdXJjZVxuICAgIGlmIHNvdXJjZVtwcm9wZXJ0eV0gYW5kIHNvdXJjZVtwcm9wZXJ0eV0uY29uc3RydWN0b3IgYW5kIHNvdXJjZVtwcm9wZXJ0eV0uY29uc3RydWN0b3IgaXMgT2JqZWN0XG4gICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gb3Ige31cbiAgICAgIGFyZ3VtZW50cy5jYWxsZWUgZGVzdGluYXRpb25bcHJvcGVydHldLCBzb3VyY2VbcHJvcGVydHldXG4gICAgZWxzZVxuICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XVxuICBkZXN0aW5hdGlvblxuXG5tb2R1bGUuZXhwb3J0cyA9IGskXG4iLCJtb2RhbCA9IChlbCkgLT5cblxuICBgdmFyIGlPUyA9IC8oaVBhZHxpUGhvbmV8aVBvZCkvZy50ZXN0KCBuYXZpZ2F0b3IudXNlckFnZW50IClgXG4gIFxuICAjIEN1cnNvciBwb2ludGVyIGhhY2sgaWYgaU9TXG4gIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCAnZGlzbWlzcy1tb2RhbCcgaWYgaU9TXG5cbiAgZG8gKGVsKSAtPlxuXG4gICAgJGhpZGVNb2RhbCA9IC0+XG4gICAgICBrJC4kKGVsKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cbiAgICAjIEFsbG93IG1vZGFsIHRvIGRpc21pc3Mgd2hlbiBjbGlja2VkIG91dHNpZGVcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIgJ2NsaWNrJywgLT5cbiAgICAgICRoaWRlTW9kYWwoKVxuXG4gICAgayQuJChlbCkuYWRkRXZlbnRMaXN0ZW5lciAnY2xpY2snLCAoZSkgLT5cbiAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAkY2xvc2VyID0gayQuJChlbCkucXVlcnlTZWxlY3RvcignYVtkYXRhLW1vZGFsLWNsb3NlXScpXG4gICAgaWYgJGNsb3NlclxuICAgICAgJGNsb3Nlci5hZGRFdmVudExpc3RlbmVyICdjbGljaycsIC0+XG4gICAgICAgICRoaWRlTW9kYWwoKVxuXG4gIGskLiQgZWxcblxuayQubW9kYWwgPSBtb2RhbFxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vZGFsXG4iLCJuYXYgPSAoZWwpIC0+XG5cbiAgIyBBY2NlcHQgYm90aCBzdHJpbmdzIGFuZCBlbGVtZW50cy5cbiAgJG5hdmJhciA9IGlmIHR5cGVvZiBlbCA9PSAnc3RyaW5nJyB0aGVuIGskLiQoZWwpIGVsc2UgZWxcblxuICB0cnlcbiAgICAjIFdpcmUgdXAgbWVudSBpdGVtc1xuICAgICRtZW51SXRlbXMgPSAkbmF2YmFyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsID4gbGknKVxuXG4gICAgIyBQcnVuZSBpdGVtcyB0aGF0IGRvbid0IGNvbnRhaW4gdWxzXG4gICAgXyRtZW51SXRlbXMgPSBuZXcgQXJyYXkoKVxuICAgIGZvciAkbWVudUl0ZW0gaW4gJG1lbnVJdGVtc1xuICAgICAgaWYgJG1lbnVJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJykubGVuZ3RoIGFuZCAhJG1lbnVJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPVwiYnV0dG9uXCJdJykubGVuZ3RoXG4gICAgICAgIF8kbWVudUl0ZW1zLnB1c2ggJG1lbnVJdGVtXG5cbiAgICAkbWVudUl0ZW1zID0gXyRtZW51SXRlbXNcbiAgICBmb3IgJG1lbnVJdGVtIGluICRtZW51SXRlbXNcblxuICAgICAgIyBNYXJrIGFzIGEgbWVudSBpdGVtXG4gICAgICAkbWVudUl0ZW0uY2xhc3NMaXN0LmFkZCAnbWVudS1pdGVtJ1xuXG4gI