kickstart-node
Version:
A front-end framework for clean HTML and fast performance
537 lines (444 loc) • 53.8 kB
JavaScript
(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