aui
Version:
Aui is Semantic-UI + React
188 lines (166 loc) • 20 kB
JavaScript
(function() {
var Aui, AuiMixin, AuiOptions, React, cache, jQuery, ref1, ref2, ref3, ref4, ref5,
hasProp = {}.hasOwnProperty,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
ref1 = window || global, React = ref1.React, jQuery = ref1.jQuery;
if (React == null) {
throw new Error("Aui: window.React not found.");
}
if (jQuery == null) {
console.warn("Aui: window.jQuery not found, Modules and Semantic-UI will be disabled.");
}
if ((jQuery != null ? (ref2 = jQuery.site) != null ? (ref3 = ref2.settings) != null ? ref3.modules : void 0 : void 0 : void 0) == null) {
console.warn('Aui: No Semantic-UI window.jQuery.site.settings.modules found, Semantic will be disabled.');
}
AuiMixin = {
$: function(ref) {
return jQuery(React.findDOMNode(this.refs[ref] || ref));
},
componentWillMount: function() {
var render;
render = this.render;
return this.render = function() {
var element;
element = render != null ? typeof render.apply === "function" ? render.apply(this, arguments) : void 0 : void 0;
if (React.isValidElement(element)) {
return Aui.classify(element);
} else {
return Aui.classify(Aui.warning('Aui.Mixin: Child is not a React.isValidElement', element));
}
};
}
};
Aui = React.createClass({
mixins: [AuiMixin],
render: function() {
return Aui.warning('<Aui/> tag is depricated, use Aui.Mixin instead', this.props.children);
},
componentDidMount: function() {
return console.warn(React.findDOMNode(this));
}
});
Aui.Mixin = Aui.AuiMixin = AuiMixin;
Aui.Aui = Aui;
Aui.$ = jQuery;
Aui.classify = function(element, options) {
var classify;
options = AuiOptions(options);
if (!React.isValidElement(element)) {
element = Aui.warning('Aui.classify: element is not a React.isValidElement', element);
}
classify = function(element) {
var className, classNames, i, key, len, modules, props, ref4, ref5, value;
if (!React.isValidElement(element)) {
return element;
}
classNames = {};
modules = null;
props = {};
if (element.props.className != null) {
ref4 = ("" + element.props.className).split(/\s+/g);
for (i = 0, len = ref4.length; i < len; i++) {
className = ref4[i];
classNames[className] = true;
}
}
ref5 = element.props;
for (key in ref5) {
if (!hasProp.call(ref5, key)) continue;
value = ref5[key];
if (value === true) {
classNames[key] = true;
}
if ((!options.disableModules) && (Array.isArray(value)) && (indexOf.call(Aui.modules, key) >= 0)) {
classNames[key] = true;
modules || (modules = {});
modules[key] = value;
}
props[key] = value;
}
props.className = Object.keys(classNames).join(' ');
if (!props.className.length) {
delete props.className;
}
element = React.cloneElement(element, props, options.ignoreChildren ? element.props.children : React.Children.map(element.props.children, classify));
if (modules) {
return React.createElement(Aui.Module, {
modules: modules,
options: options
}, element);
} else {
return element;
}
};
return classify(element);
};
Aui.warning = function(message, element) {
console.warn(message, element);
return React.DOM.span({
'data-warning': message
}, element);
};
Aui.settings = {
disableModules: jQuery == null,
ignoreChildren: false
};
AuiOptions = (function() {
function AuiOptions(options) {
var key, ref4, value;
if (options instanceof AuiOptions) {
return options;
}
if (!(this instanceof AuiOptions)) {
return new AuiOptions(options);
}
options || (options = {});
ref4 = Aui.settings;
for (key in ref4) {
if (!hasProp.call(ref4, key)) continue;
value = ref4[key];
this[key] = options[key] != null ? options[key] : value;
}
}
return AuiOptions;
})();
Aui.modules = ((jQuery != null ? (ref4 = jQuery.site) != null ? (ref5 = ref4.settings) != null ? ref5.modules : void 0 : void 0 : void 0) || []).slice();
cache = {};
Aui.Module = React.createClass({
render: function() {
return React.Children.only(this.props.children);
},
componentDidMount: function() {
return this.callModules(this.props.children.props);
},
componentWillReceiveProps: function(props) {
return this.callModules(props.children.props);
},
callModules: function(props) {
var $element, module, name, options, ref6, stringifiedOptions;
$element = jQuery(React.findDOMNode(this));
this.id = $element.attr('data-reactid');
cache[name = this.id] || (cache[name] = {});
ref6 = this.props.modules;
for (module in ref6) {
if (!hasProp.call(ref6, module)) continue;
options = ref6[module];
stringifiedOptions = JSON.stringify(options);
if (cache[this.id][module] !== stringifiedOptions) {
cache[this.id][module] = stringifiedOptions;
if (typeof $element[module] === "function") {
$element[module].apply($element, this.props.children.props[module]);
}
}
}
},
componentWillUnmount: function() {
return delete cache[this.id];
}
});
if (typeof window !== "undefined" && window !== null) {
window.Aui = Aui;
}
if (typeof module !== "undefined" && module !== null) {
module.exports = Aui;
}
}).call(this);
//# sourceMappingURL=data:application/json;base64,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QUFYLEtBQXdCLGtCQUEzQjtVQUNFLEtBQU0sQ0FBQSxJQUFDLENBQUEsRUFBRCxDQUFLLENBQUEsTUFBQSxDQUFYLEdBQXFCOztZQUNyQixRQUFTLENBQUEsTUFBQSxrQkFBUyxJQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFNLENBQUEsTUFBQTtXQUYxQzs7QUFGRjtJQUpXLENBTGI7SUFlQSxvQkFBQSxFQUFzQixTQUFBO2FBQ3BCLE9BQU8sS0FBTSxDQUFBLElBQUMsQ0FBQSxFQUFEO0lBRE8sQ0FmdEI7R0FEVzs7O0lBbUJiLE1BQU0sQ0FBRSxHQUFSLEdBQWM7Ozs7SUFDZCxNQUFNLENBQUUsT0FBUixHQUFrQjs7QUE1SWxCIiwiZmlsZSI6ImF1aS5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIntSZWFjdCwgalF1ZXJ5fSA9IHdpbmRvdyBvciBnbG9iYWxcclxudW5sZXNzIFJlYWN0PyB0aGVuIHRocm93IG5ldyBFcnJvciBcIkF1aTogd2luZG93LlJlYWN0IG5vdCBmb3VuZC5cIlxyXG51bmxlc3MgalF1ZXJ5PyB0aGVuIGNvbnNvbGUud2FybiBcIkF1aTogd2luZG93LmpRdWVyeSBub3QgZm91bmQsIE1vZHVsZXMgYW5kIFNlbWFudGljLVVJIHdpbGwgYmUgZGlzYWJsZWQuXCJcclxudW5sZXNzIGpRdWVyeT8uc2l0ZT8uc2V0dGluZ3M/Lm1vZHVsZXM/IHRoZW4gY29uc29sZS53YXJuICdBdWk6IE5vIFNlbWFudGljLVVJIHdpbmRvdy5qUXVlcnkuc2l0ZS5zZXR0aW5ncy5tb2R1bGVzIGZvdW5kLCBTZW1hbnRpYyB3aWxsIGJlIGRpc2FibGVkLidcclxuXHJcbiMjIEF1aS5NaXhpblxyXG4jIFtKU0ZpZGRsZSBhcm91bmQgd2l0aCB0aGUgZXhhbXBsZXMgaGVyZSFdKGh0dHA6Ly9qYXZhc2NyaXB0aXNtYWdpYy5naXRodWIuaW8vYXVpLylcclxuIyBBdWkuTWl4aW4gaXMgdGhlIG1haW4gd3JhcHBlciBhcm91bmQgUmVhY3QgQ29tcG9uZW50c1xyXG4jIGl0IHJlY3Vyc2l2ZWx5IGdvZXMgdGhyb3VnaCBhbGwgaXQncyBjaGlsZHJlbixcclxuIyBmaW5kaW5nIHByb3BzIHRoYXQgPT09IHRydWUgb3IgYXJlIG9uIHRoZSBgQXVpLm1vZHVsZXNgIGxpc3QsXHJcbiMgYW5kIG1lcmdlcyB0aGVtIGludG8gdGhlIGNsYXNzTmFtZSBvZiBlYWNoIGVsZW1lbnQuXHJcbkF1aU1peGluID1cclxuICAjIyB0aGlzLiQoJ3JlYWN0IHJlZicpXHJcbiAgIyBqUXVlcnkgd3JhcHMgYSBSZWFjdCByZWYgYDxkaXYgcmVmPVwicmVhY3QgcmVmXCIgLz5gIG9yIGpRdWVyeSBzZWxlY3RvciBgdGhpcy4kKCdyZWFjdCByZWYnKWAuXHJcbiAgIyBUaGlzIGlzIHRoZSBpbnRlbmRlZCB3YXkgdG8gaW50ZXJhY3Qgd2l0aCBqUXVlcnkgdG8gc3VwcGx5IHV0aWxpdHkgZnVuY3Rpb25hbGl0eS5cclxuICAjICoqV2FybmluZyEqKiBVc2UgdGhpcyBvbmx5IGluIGBjb21wb25lbnREaWRNb3VudGAgb3IgZXZlbnQgaGFuZGxlcnMhXHJcbiAgIyBEbyBOT1QgdXNlIGpRdWVyeSB0byByZS1hcmFuZ2UgdGhlIGRvbSBvciB5b3Ugd2lsbCBydW4gaW50byBJbnZhcmllbnQgZXJyb3MgaW4gUmVhY3QsXHJcbiAgIyB1c2UgUmVhY3QgdG8gYXJhbmdlIHlvdXIgZG9tIGFoZWFkIG9mIHRpbWUgYXMgUmVhY3QgaXMgZXhwZWN0aW5nLlxyXG4gICQ6IChyZWYpIC0+IGpRdWVyeSBSZWFjdC5maW5kRE9NTm9kZSBAcmVmc1tyZWZdIG9yIHJlZlxyXG4gIGNvbXBvbmVudFdpbGxNb3VudDogLT5cclxuICAgIHJlbmRlciA9IEByZW5kZXJcclxuICAgIEByZW5kZXIgPSAtPlxyXG4gICAgICBlbGVtZW50ID0gcmVuZGVyPy5hcHBseT8gQCwgYXJndW1lbnRzXHJcbiAgICAgIGlmIFJlYWN0LmlzVmFsaWRFbGVtZW50IGVsZW1lbnRcclxuICAgICAgICBBdWkuY2xhc3NpZnkgZWxlbWVudFxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgQXVpLmNsYXNzaWZ5IEF1aS53YXJuaW5nICdBdWkuTWl4aW46IENoaWxkIGlzIG5vdCBhIFJlYWN0LmlzVmFsaWRFbGVtZW50JywgZWxlbWVudFxyXG5cclxuIyAoZGVwcmljYXRlZCkgYDxBdWkvPmAgdGFnLCB1c2UgQXVpLk1peGluIGluc3RlYWQuXHJcbkF1aSA9IFJlYWN0LmNyZWF0ZUNsYXNzXHJcbiAgbWl4aW5zOiBbQXVpTWl4aW5dXHJcbiAgcmVuZGVyOiAtPlxyXG4gICAgQXVpLndhcm5pbmcgJzxBdWkvPiB0YWcgaXMgZGVwcmljYXRlZCwgdXNlIEF1aS5NaXhpbiBpbnN0ZWFkJywgQHByb3BzLmNoaWxkcmVuXHJcbiAgY29tcG9uZW50RGlkTW91bnQ6IC0+XHJcbiAgICBjb25zb2xlLndhcm4gUmVhY3QuZmluZERPTU5vZGUgQFxyXG5BdWkuTWl4aW4gPSBBdWkuQXVpTWl4aW4gPSBBdWlNaXhpblxyXG5BdWkuQXVpID0gQXVpXHJcbiMjIEF1aS4kXHJcbiMgVGhlIGluc3RhbmNlIG9mIGpRdWVyeSBBdWkgaXMgdXNpbmcsIGlmIG5lZWRlZC5cclxuQXVpLiQgPSBqUXVlcnlcclxuXHJcbiMjIEF1aS5jbGFzc2lmeShlbGVtZW50KVxyXG4jIGZpbmRzIGFsbCB0aGUgcHJvcHMgdGhhdCA9PT0gdHJ1ZSBvciBhcmUgb24gdGhlIGBBdWkubW9kdWxlc2AgbGlzdCxcclxuIyBhbmQgbWVyZ2luZyB0aGVtIHdpdGggdGhlIGNsYXNzTmFtZSBwcm9wLlxyXG4jIFVzZSB0aGlzIGluc2lkZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGxpa2UgYSBSZWFjdCBoZWxwZXIgZnVuY3Rpb24uXHJcbiMgRXhhbXBsZTogYEF1aS5jbGFzc2lmeSg8ZGl2IHVpIGdyaWQ+PGRpdiBjb2x1bW4+Y29udGVudDwvZGl2PjwvZGl2PilgXHJcbiMgcmV0dXJucyBgPGRpdiB1aSBncmlkIGNsYXNzTmFtZT1cInVpIGdyaWRcIj48ZGl2IGNvbHVtbiBjbGFzc05hbWU9XCJjb2x1bW5cIj5jb250ZW50PC9kaXY+PC9kaXY+YFxyXG5BdWkuY2xhc3NpZnkgPSAoZWxlbWVudCwgb3B0aW9ucykgLT5cclxuICBvcHRpb25zID0gQXVpT3B0aW9ucyBvcHRpb25zXHJcbiAgdW5sZXNzIFJlYWN0LmlzVmFsaWRFbGVtZW50IGVsZW1lbnRcclxuICAgIGVsZW1lbnQgPSBBdWkud2FybmluZyAnQXVpLmNsYXNzaWZ5OiBlbGVtZW50IGlzIG5vdCBhIFJlYWN0LmlzVmFsaWRFbGVtZW50JywgZWxlbWVudFxyXG4gIGNsYXNzaWZ5ID0gKGVsZW1lbnQpIC0+XHJcbiAgICByZXR1cm4gZWxlbWVudCB1bmxlc3MgUmVhY3QuaXNWYWxpZEVsZW1lbnQgZWxlbWVudFxyXG4gICAgY2xhc3NOYW1lcyA9IHt9XHJcbiAgICBtb2R1bGVzID0gbnVsbFxyXG4gICAgcHJvcHMgPSB7fVxyXG4gICAgaWYgZWxlbWVudC5wcm9wcy5jbGFzc05hbWU/XHJcbiAgICAgIGZvciBjbGFzc05hbWUgaW4gXCIje2VsZW1lbnQucHJvcHMuY2xhc3NOYW1lfVwiLnNwbGl0IC9cXHMrL2dcclxuICAgICAgICBjbGFzc05hbWVzW2NsYXNzTmFtZV0gPSB5ZXNcclxuICAgIGZvciBvd24ga2V5LCB2YWx1ZSBvZiBlbGVtZW50LnByb3BzXHJcbiAgICAgIGNsYXNzTmFtZXNba2V5XSA9IHllcyBpZiB2YWx1ZSBpcyB5ZXNcclxuICAgICAgaWYgKG5vdCBvcHRpb25zLmRpc2FibGVNb2R1bGVzKSBhbmQgKEFycmF5LmlzQXJyYXkgdmFsdWUpIGFuZCAoa2V5IGluIEF1aS5tb2R1bGVzKVxyXG4gICAgICAgIGNsYXNzTmFtZXNba2V5XSA9IHllc1xyXG4gICAgICAgIG1vZHVsZXMgb3I9IHt9XHJcbiAgICAgICAgbW9kdWxlc1trZXldID0gdmFsdWVcclxuICAgICAgcHJvcHNba2V5XSA9IHZhbHVlXHJcbiAgICBwcm9wcy5jbGFzc05hbWUgPSBPYmplY3Qua2V5cyhjbGFzc05hbWVzKS5qb2luICcgJ1xyXG4gICAgdW5sZXNzIHByb3BzLmNsYXNzTmFtZS5sZW5ndGhcclxuICAgICAgZGVsZXRlIHByb3BzLmNsYXNzTmFtZVxyXG4gICAgZWxlbWVudCA9IFJlYWN0LmNsb25lRWxlbWVudCBlbGVtZW50LCBwcm9wcywgaWYgb3B0aW9ucy5pZ25vcmVDaGlsZHJlbiB0aGVuIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4gZWxzZSBSZWFjdC5DaGlsZHJlbi5tYXAgZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgY2xhc3NpZnlcclxuICAgIGlmIG1vZHVsZXNcclxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudCBBdWkuTW9kdWxlLCB7IG1vZHVsZXMsIG9wdGlvbnMgfSwgZWxlbWVudFxyXG4gICAgZWxzZSBlbGVtZW50XHJcbiAgY2xhc3NpZnkgZWxlbWVudFxyXG5cclxuIyMgQXVpLndhcm5pbmcoJ3N0cmluZycsIGVsZW1lbnQpXHJcbiMgY29uc29sZS53YXJuIGEgd2FybmluZyBtZXNzYWdlIGluc2lkZSBhIFJlYWN0RWxlbWVudCBkdXJyaW5nIGEgUmVhY3QgQ29tcG9uZW50J3MgcmVuZGVyIGZ1bmN0aW9uLlxyXG4jIHJldHVybnMgdGhlIGVsZW1lbnQgd3JhcHBlZCBpbiBhIHdhcm5pbmcgc3Bhbi5cclxuIyBVc2UgaW5zaWRlIHRoZSByZW5kZXIgZnVuY3Rpb24gb2YgYSBSZWFjdCBDb21wb25lbnRcclxuQXVpLndhcm5pbmcgPSAobWVzc2FnZSwgZWxlbWVudCkgLT5cclxuICBjb25zb2xlLndhcm4gbWVzc2FnZSwgZWxlbWVudFxyXG4gIFJlYWN0LkRPTS5zcGFuIHsgJ2RhdGEtd2FybmluZyc6IG1lc3NhZ2UgfSwgZWxlbWVudFxyXG5cclxuQXVpLnNldHRpbmdzID1cclxuICAjIyBBdWkuc2V0dGluZ3MuZGlzYWJsZU1vZHVsZXNcclxuICAjIGRpc2FibGVzIGpRdWVyeSBiYXNlZCBBdWkubW9kdWxlcyBmcm9tIGNhbGxpbmdcclxuICBkaXNhYmxlTW9kdWxlczogbm90IGpRdWVyeT9cclxuICAjIyBBdWkuc2V0dGluZ3MuaWdub3JlQ2hpbGRyZW5cclxuICAjIGRpc2FibGVzIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgYEF1aS5jbGFzc2lmeWAgdG8gYHByb3BzLmNoaWxkcmVuYC5cclxuICBpZ25vcmVDaGlsZHJlbjogbm9cclxuXHJcbiMgKGludGVybmFsKSBBdWlPcHRpb25zIGRlZmF1bHRzIG9wdGlvbnMgZm9yIGBBdWkuY2xhc3NpZnlgXHJcbmNsYXNzIEF1aU9wdGlvbnNcclxuICBjb25zdHJ1Y3RvcjogKG9wdGlvbnMpIC0+XHJcbiAgICBpZiBvcHRpb25zIGluc3RhbmNlb2YgQXVpT3B0aW9uc1xyXG4gICAgICByZXR1cm4gb3B0aW9uc1xyXG4gICAgdW5sZXNzIEAgaW5zdGFuY2VvZiBBdWlPcHRpb25zXHJcbiAgICAgIHJldHVybiBuZXcgQXVpT3B0aW9ucyBvcHRpb25zXHJcbiAgICBvcHRpb25zIG9yPSB7fVxyXG4gICAgZm9yIG93biBrZXksIHZhbHVlIG9mIEF1aS5zZXR0aW5nc1xyXG4gICAgICBAW2tleV0gPSBpZiBvcHRpb25zW2tleV0/IHRoZW4gb3B0aW9uc1trZXldIGVsc2UgdmFsdWVcclxuXHJcbiMjIEF1aS5tb2R1bGVzXHJcbiMgQSB3aGl0ZWxpc3Qgb2YgalF1ZXJ5IG1vZHVsZXMuXHJcbiMgYEF1aS5tb2R1bGVzLnB1c2goJ3dpZGdldCcpYCB0byBjb25maWd1cmUgQXVpIHRvIHN1cHBvcnQgYCQuZm4ud2lkZ2V0YC5cclxuIyBCeSBkZWZhdWx0IHRoaXMgaW5jbHVkZXMgYHdpbmRvdy5qUXVlcnkuc2l0ZS5zZXR0aW5ncy5tb2R1bGVzYCBmcm9tIFNlbWFudGljLVVJLlxyXG4jIFdoZW4gYSBwcm9wZXJ0eSBpcyBlbmNvdW50ZXJlZCBvbiBhIFJlYWN0RWxlbWVudCB0aGF0IG1hdGNoZXMgdGhpcyB3aGl0ZWxpc3QgYW5kIGlzIGFuIEFycmF5LFxyXG4jIHRoZSBjb3Jpc3BvbmRpbmcgYHdpbmRvdy5qUXVlcnkuZm5bbW9kdWxlbmFtZV1gIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHByb3BlcnR5J3MgYXJyYXkgdmFsdWUuXHJcbiMgVGhpcyBpcyBtb3N0bHkgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIFNlbWFudGljLVVJJ3MgamF2YXNjcmlwdCxcclxuIyBidXQgaW4gdGhlb3J5IGNvdWxkIGJlIHVzZWQgdG8gY2FsbCBhbnkgYCQuZm5gIGZ1bmN0aW9uLlxyXG5BdWkubW9kdWxlcyA9IChqUXVlcnk/LnNpdGU/LnNldHRpbmdzPy5tb2R1bGVzIG9yIFtdKS5zbGljZSgpXHJcblxyXG4jIGludGVybmFsIGdsb2JhbCBjYWNoZSBvZiBvcHRpb25zIHBhc3NlZCB0byBtb2R1bGUgZnVuY3Rpb25zLlxyXG5jYWNoZSA9IHt9XHJcblxyXG4jIChpbnRlcm5hbCkgYDxBdWkuTW9kdWxlLz5gXHJcbiMgVGhpcyBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBgQXVpLm1vZHVsZXNgIGludGVybmFsbHkgYW5kIGdlbmVyYWxseSBpcyBub3QgdXNlZCBkaXJlY3RseS5cclxuIyBgPEF1aS5Nb2R1bGUvPmAgaGFuZGxlcyBjYWxsaW5nIGpRdWVyeS5mblttb2R1bGVdIGNhbGxzIHdoZW4gdXNlZCBpbnNpZGUgYSBSZWFjdCBDb21wb25lbnQncyByZW5kZXIuXHJcbiMgYDxkaXYgdWkgY2hlY2tib3g9e1tdfS8+YCB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCBgJC5mbi5jaGVja2JveCgpYCwgYW5kXHJcbiMgYDxmb3JtIHVpIGZvcm09e1t7Li4ufV19PjwvZm9ybT5gIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIGAkLmZuLmZvcm0oey4uLn0pYFxyXG5BdWkuTW9kdWxlID0gUmVhY3QuY3JlYXRlQ2xhc3NcclxuICByZW5kZXI6IC0+IFJlYWN0LkNoaWxkcmVuLm9ubHkgQHByb3BzLmNoaWxkcmVuXHJcbiAgY29tcG9uZW50RGlkTW91bnQ6IC0+XHJcbiAgICBAY2FsbE1vZHVsZXMgQHByb3BzLmNoaWxkcmVuLnByb3BzXHJcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogKHByb3BzKSAtPlxyXG4gICAgQGNhbGxNb2R1bGVzIHByb3BzLmNoaWxkcmVuLnByb3BzXHJcbiAgY2FsbE1vZHVsZXM6IChwcm9wcykgLT5cclxuICAgICRlbGVtZW50ID0galF1ZXJ5IFJlYWN0LmZpbmRET01Ob2RlIEBcclxuICAgIEBpZCA9ICRlbGVtZW50LmF0dHIgJ2RhdGEtcmVhY3RpZCdcclxuICAgIGNhY2hlW0BpZF0gb3I9IHt9XHJcbiAgICBmb3Igb3duIG1vZHVsZSwgb3B0aW9ucyBvZiBAcHJvcHMubW9kdWxlc1xyXG4gICAgICBzdHJpbmdpZmllZE9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSBvcHRpb25zXHJcbiAgICAgIGlmIGNhY2hlW0BpZF1bbW9kdWxlXSBpc250IHN0cmluZ2lmaWVkT3B0aW9uc1xyXG4gICAgICAgIGNhY2hlW0BpZF1bbW9kdWxlXSA9IHN0cmluZ2lmaWVkT3B0aW9uc1xyXG4gICAgICAgICRlbGVtZW50W21vZHVsZV0/IEBwcm9wcy5jaGlsZHJlbi5wcm9wc1ttb2R1bGVdLi4uXHJcbiAgICByZXR1cm5cclxuICBjb21wb25lbnRXaWxsVW5tb3VudDogLT5cclxuICAgIGRlbGV0ZSBjYWNoZVtAaWRdXHJcblxyXG53aW5kb3c/LkF1aSA9IEF1aVxyXG5tb2R1bGU/LmV4cG9ydHMgPSBBdWlcclxuIl19