120 lines
77 KiB
JavaScript
120 lines
77 KiB
JavaScript
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
module.exports = factory();
|
|
else if(typeof define === 'function' && define.amd)
|
|
define([], factory);
|
|
else {
|
|
var a = factory();
|
|
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
}
|
|
})(self, function() {
|
|
return /******/ (function() { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./libs/jquery-repeater/jquery-repeater.js":
|
|
/*!*************************************************!*\
|
|
!*** ./libs/jquery-repeater/jquery-repeater.js ***!
|
|
\*************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"repeater\": function() { return /* reexport module object */ jquery_repeater_jquery_repeater__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var jquery_repeater_jquery_repeater__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery.repeater/jquery.repeater */ \"./node_modules/jquery.repeater/jquery.repeater.js\");\n/* harmony import */ var jquery_repeater_jquery_repeater__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery_repeater_jquery_repeater__WEBPACK_IMPORTED_MODULE_0__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWJzL2pxdWVyeS1yZXBlYXRlci9qcXVlcnktcmVwZWF0ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVnVleHkvLi9saWJzL2pxdWVyeS1yZXBlYXRlci9qcXVlcnktcmVwZWF0ZXIuanM/ZWIyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyByZXBlYXRlciBmcm9tICdqcXVlcnkucmVwZWF0ZXIvanF1ZXJ5LnJlcGVhdGVyJztcclxuXHJcbmV4cG9ydCB7IHJlcGVhdGVyIH07XHJcbiJdLCJuYW1lcyI6WyJyZXBlYXRlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./libs/jquery-repeater/jquery-repeater.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/jquery.repeater/jquery.repeater.js":
|
|
/*!*********************************************************!*\
|
|
!*** ./node_modules/jquery.repeater/jquery.repeater.js ***!
|
|
\*********************************************************/
|
|
/***/ (function() {
|
|
|
|
eval("// jquery.repeater version 1.2.1\n// https://github.com/DubFriend/jquery.repeater\n// (MIT) 09-10-2016\n// Brian Detering <BDeterin@gmail.com> (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar identity = function (x) {\n return x;\n};\n\nvar isArray = function (value) {\n return $.isArray(value);\n};\n\nvar isObject = function (value) {\n return !isArray(value) && (value instanceof Object);\n};\n\nvar isNumber = function (value) {\n return value instanceof Number;\n};\n\nvar isFunction = function (value) {\n return value instanceof Function;\n};\n\nvar indexOf = function (object, value) {\n return $.inArray(value, object);\n};\n\nvar inArray = function (array, value) {\n return indexOf(array, value) !== -1;\n};\n\nvar foreach = function (collection, callback) {\n for(var i in collection) {\n if(collection.hasOwnProperty(i)) {\n callback(collection[i], i, collection);\n }\n }\n};\n\n\nvar last = function (array) {\n return array[array.length - 1];\n};\n\nvar argumentsToArray = function (args) {\n return Array.prototype.slice.call(args);\n};\n\nvar extend = function () {\n var extended = {};\n foreach(argumentsToArray(arguments), function (o) {\n foreach(o, function (val, key) {\n extended[key] = val;\n });\n });\n return extended;\n};\n\nvar mapToArray = function (collection, callback) {\n var mapped = [];\n foreach(collection, function (value, key, coll) {\n mapped.push(callback(value, key, coll));\n });\n return mapped;\n};\n\nvar mapToObject = function (collection, callback, keyCallback) {\n var mapped = {};\n foreach(collection, function (value, key, coll) {\n key = keyCallback ? keyCallback(key, value) : key;\n mapped[key] = callback(value, key, coll);\n });\n return mapped;\n};\n\nvar map = function (collection, callback, keyCallback) {\n return isArray(collection) ?\n mapToArray(collection, callback) :\n mapToObject(collection, callback, keyCallback);\n};\n\nvar pluck = function (arrayOfObjects, key) {\n return map(arrayOfObjects, function (val) {\n return val[key];\n });\n};\n\nvar filter = function (collection, callback) {\n var filtered;\n\n if(isArray(collection)) {\n filtered = [];\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered.push(val);\n }\n });\n }\n else {\n filtered = {};\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered[key] = val;\n }\n });\n }\n\n return filtered;\n};\n\nvar call = function (collection, functionName, args) {\n return map(collection, function (object, name) {\n return object[functionName].apply(object, args || []);\n });\n};\n\n//execute callback immediately and at most one time on the minimumInterval,\n//ignore block attempts\nvar throttle = function (minimumInterval, callback) {\n var timeout = null;\n return function () {\n var that = this, args = arguments;\n if(timeout === null) {\n timeout = setTimeout(function () {\n timeout = null;\n }, minimumInterval);\n callback.apply(that, args);\n }\n };\n};\n\n\nvar mixinPubSub = function (object) {\n object = object || {};\n var topics = {};\n\n object.publish = function (topic, data) {\n foreach(topics[topic], function (callback) {\n callback(data);\n });\n };\n\n object.subscribe = function (topic, callback) {\n topics[topic] = topics[topic] || [];\n topics[topic].push(callback);\n };\n\n object.unsubscribe = function (callback) {\n foreach(topics, function (subscribers) {\n var index = indexOf(subscribers, callback);\n if(index !== -1) {\n subscribers.splice(index, 1);\n }\n });\n };\n\n return object;\n};\n\n// jquery.input version 0.0.0\n// https://github.com/DubFriend/jquery.input\n// (MIT) 09-04-2014\n// Brian Detering <BDeterin@gmail.com> (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar createBaseInput = function (fig, my) {\n var self = mixinPubSub(),\n $self = fig.$;\n\n self.getType = function () {\n throw 'implement me (return type. \"text\", \"radio\", etc.)';\n };\n\n self.$ = function (selector) {\n return selector ? $self.find(selector) : $self;\n };\n\n self.disable = function () {\n self.$().prop('disabled', true);\n self.publish('isEnabled', false);\n };\n\n self.enable = function () {\n self.$().prop('disabled', false);\n self.publish('isEnabled', true);\n };\n\n my.equalTo = function (a, b) {\n return a === b;\n };\n\n my.publishChange = (function () {\n var oldValue;\n return function (e, domElement) {\n var newValue = self.get();\n if(!my.equalTo(newValue, oldValue)) {\n self.publish('change', { e: e, domElement: domElement });\n }\n oldValue = newValue;\n };\n }());\n\n return self;\n};\n\n\nvar createInput = function (fig, my) {\n var self = createBaseInput(fig, my);\n\n self.get = function () {\n return self.$().val();\n };\n\n self.set = function (newValue) {\n self.$().val(newValue);\n };\n\n self.clear = function () {\n self.set('');\n };\n\n my.buildSetter = function (callback) {\n return function (newValue) {\n callback.call(self, newValue);\n };\n };\n\n return self;\n};\n\nvar inputEqualToArray = function (a, b) {\n a = isArray(a) ? a : [a];\n b = isArray(b) ? b : [b];\n\n var isEqual = true;\n if(a.length !== b.length) {\n isEqual = false;\n }\n else {\n foreach(a, function (value) {\n if(!inArray(b, value)) {\n isEqual = false;\n }\n });\n }\n\n return isEqual;\n};\n\nvar createInputButton = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'button';\n };\n\n self.$().on('change', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputCheckbox = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'checkbox';\n };\n\n self.get = function () {\n var values = [];\n self.$().filter(':checked').each(function () {\n values.push($(this).val());\n });\n return values;\n };\n\n self.set = function (newValues) {\n newValues = isArray(newValues) ? newValues : [newValues];\n\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n\n foreach(newValues, function (value) {\n self.$().filter('[value=\"' + value + '\"]')\n .prop('checked', true);\n });\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputEmail = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'email';\n };\n\n return self;\n};\n\nvar createInputFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file';\n };\n\n self.get = function () {\n return last(self.$().val().split('\\\\'));\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('<form>').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n // self.publish('change', self);\n });\n\n return self;\n};\n\nvar createInputHidden = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'hidden';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\nvar createInputMultipleFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file[multiple]';\n };\n\n self.get = function () {\n // http://stackoverflow.com/questions/14035530/how-to-get-value-of-html-5-multiple-file-upload-variable-using-jquery\n var fileListObject = self.$().get(0).files || [],\n names = [], i;\n\n for(i = 0; i < (fileListObject.length || 0); i += 1) {\n names.push(fileListObject[i].name);\n }\n\n return names;\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('<form>').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputMultipleSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select[multiple]';\n };\n\n self.get = function () {\n return self.$().val() || [];\n };\n\n self.set = function (newValues) {\n self.$().val(\n newValues === '' ? [] : isArray(newValues) ? newValues : [newValues]\n );\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputPassword = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'password';\n };\n\n return self;\n};\n\nvar createInputRadio = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'radio';\n };\n\n self.get = function () {\n return self.$().filter(':checked').val() || null;\n };\n\n self.set = function (newValue) {\n if(!newValue) {\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n }\n else {\n self.$().filter('[value=\"' + newValue + '\"]').prop('checked', true);\n }\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputRange = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'range';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputText = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'text';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputTextarea = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'textarea';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputURL = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'url';\n };\n\n return self;\n};\n\nvar buildFormInputs = function (fig) {\n var inputs = {},\n $self = fig.$;\n\n var constructor = fig.constructorOverride || {\n button: createInputButton,\n text: createInputText,\n url: createInputURL,\n email: createInputEmail,\n password: createInputPassword,\n range: createInputRange,\n textarea: createInputTextarea,\n select: createInputSelect,\n 'select[multiple]': createInputMultipleSelect,\n radio: createInputRadio,\n checkbox: createInputCheckbox,\n file: createInputFile,\n 'file[multiple]': createInputMultipleFile,\n hidden: createInputHidden\n };\n\n var addInputsBasic = function (type, selector) {\n var $input = isObject(selector) ? selector : $self.find(selector);\n\n $input.each(function () {\n var name = $(this).attr('name');\n inputs[name] = constructor[type]({\n $: $(this)\n });\n });\n };\n\n var addInputsGroup = function (type, selector) {\n var names = [],\n $input = isObject(selector) ? selector : $self.find(selector);\n\n if(isObject(selector)) {\n inputs[$input.attr('name')] = constructor[type]({\n $: $input\n });\n }\n else {\n // group by name attribute\n $input.each(function () {\n if(indexOf(names, $(this).attr('name')) === -1) {\n names.push($(this).attr('name'));\n }\n });\n\n foreach(names, function (name) {\n inputs[name] = constructor[type]({\n $: $self.find('input[name=\"' + name + '\"]')\n });\n });\n }\n };\n\n\n if($self.is('input, select, textarea')) {\n if($self.is('input[type=\"button\"], button, input[type=\"submit\"]')) {\n addInputsBasic('button', $self);\n }\n else if($self.is('textarea')) {\n addInputsBasic('textarea', $self);\n }\n else if(\n $self.is('input[type=\"text\"]') ||\n $self.is('input') && !$self.attr('type')\n ) {\n addInputsBasic('text', $self);\n }\n else if($self.is('input[type=\"password\"]')) {\n addInputsBasic('password', $self);\n }\n else if($self.is('input[type=\"email\"]')) {\n addInputsBasic('email', $self);\n }\n else if($self.is('input[type=\"url\"]')) {\n addInputsBasic('url', $self);\n }\n else if($self.is('input[type=\"range\"]')) {\n addInputsBasic('range', $self);\n }\n else if($self.is('select')) {\n if($self.is('[multiple]')) {\n addInputsBasic('select[multiple]', $self);\n }\n else {\n addInputsBasic('select', $self);\n }\n }\n else if($self.is('input[type=\"file\"]')) {\n if($self.is('[multiple]')) {\n addInputsBasic('file[multiple]', $self);\n }\n else {\n addInputsBasic('file', $self);\n }\n }\n else if($self.is('input[type=\"hidden\"]')) {\n addInputsBasic('hidden', $self);\n }\n else if($self.is('input[type=\"radio\"]')) {\n addInputsGroup('radio', $self);\n }\n else if($self.is('input[type=\"checkbox\"]')) {\n addInputsGroup('checkbox', $self);\n }\n else {\n //in all other cases default to a \"text\" input interface.\n addInputsBasic('text', $self);\n }\n }\n else {\n addInputsBasic('button', 'input[type=\"button\"], button, input[type=\"submit\"]');\n addInputsBasic('text', 'input[type=\"text\"]');\n addInputsBasic('password', 'input[type=\"password\"]');\n addInputsBasic('email', 'input[type=\"email\"]');\n addInputsBasic('url', 'input[type=\"url\"]');\n addInputsBasic('range', 'input[type=\"range\"]');\n addInputsBasic('textarea', 'textarea');\n addInputsBasic('select', 'select:not([multiple])');\n addInputsBasic('select[multiple]', 'select[multiple]');\n addInputsBasic('file', 'input[type=\"file\"]:not([multiple])');\n addInputsBasic('file[multiple]', 'input[type=\"file\"][multiple]');\n addInputsBasic('hidden', 'input[type=\"hidden\"]');\n addInputsGroup('radio', 'input[type=\"radio\"]');\n addInputsGroup('checkbox', 'input[type=\"checkbox\"]');\n }\n\n return inputs;\n};\n\n$.fn.inputVal = function (newValue) {\n var $self = $(this);\n\n var inputs = buildFormInputs({ $: $self });\n\n if($self.is('input, textarea, select')) {\n if(typeof newValue === 'undefined') {\n return inputs[$self.attr('name')].get();\n }\n else {\n inputs[$self.attr('name')].set(newValue);\n return $self;\n }\n }\n else {\n if(typeof newValue === 'undefined') {\n return call(inputs, 'get');\n }\n else {\n foreach(newValue, function (value, inputName) {\n inputs[inputName].set(value);\n });\n return $self;\n }\n }\n};\n\n$.fn.inputOnChange = function (callback) {\n var $self = $(this);\n var inputs = buildFormInputs({ $: $self });\n foreach(inputs, function (input) {\n input.subscribe('change', function (data) {\n callback.call(data.domElement, data.e);\n });\n });\n return $self;\n};\n\n$.fn.inputDisable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'disable');\n return $self;\n};\n\n$.fn.inputEnable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'enable');\n return $self;\n};\n\n$.fn.inputClear = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'clear');\n return $self;\n};\n\n}(jQuery));\n\n$.fn.repeaterVal = function () {\n var parse = function (raw) {\n var parsed = [];\n\n foreach(raw, function (val, key) {\n var parsedKey = [];\n if(key !== \"undefined\") {\n parsedKey.push(key.match(/^[^\\[]*/)[0]);\n parsedKey = parsedKey.concat(map(\n key.match(/\\[[^\\]]*\\]/g),\n function (bracketed) {\n return bracketed.replace(/[\\[\\]]/g, '');\n }\n ));\n\n parsed.push({\n val: val,\n key: parsedKey\n });\n }\n });\n\n return parsed;\n };\n\n var build = function (parsed) {\n if(\n parsed.length === 1 &&\n (parsed[0].key.length === 0 || parsed[0].key.length === 1 && !parsed[0].key[0])\n ) {\n return parsed[0].val;\n }\n\n foreach(parsed, function (p) {\n p.head = p.key.shift();\n });\n\n var grouped = (function () {\n var grouped = {};\n\n foreach(parsed, function (p) {\n if(!grouped[p.head]) {\n grouped[p.head] = [];\n }\n grouped[p.head].push(p);\n });\n\n return grouped;\n }());\n\n var built;\n\n if(/^[0-9]+$/.test(parsed[0].head)) {\n built = [];\n foreach(grouped, function (group) {\n built.push(build(group));\n });\n }\n else {\n built = {};\n foreach(grouped, function (group, key) {\n built[key] = build(group);\n });\n }\n\n return built;\n };\n\n return build(parse($(this).inputVal()));\n};\n\n$.fn.repeater = function (fig) {\n fig = fig || {};\n\n var setList;\n\n $(this).each(function () {\n\n var $self = $(this);\n\n var show = fig.show || function () {\n $(this).show();\n };\n\n var hide = fig.hide || function (removeElement) {\n removeElement();\n };\n\n var $list = $self.find('[data-repeater-list]').first();\n\n var $filterNested = function ($items, repeaters) {\n return $items.filter(function () {\n return repeaters ?\n $(this).closest(\n pluck(repeaters, 'selector').join(',')\n ).length === 0 : true;\n });\n };\n\n var $items = function () {\n return $filterNested($list.find('[data-repeater-item]'), fig.repeaters);\n };\n\n var $itemTemplate = $list.find('[data-repeater-item]')\n .first().clone().hide();\n\n var $firstDeleteButton = $filterNested(\n $filterNested($(this).find('[data-repeater-item]'), fig.repeaters)\n .first().find('[data-repeater-delete]'),\n fig.repeaters\n );\n\n if(fig.isFirstItemUndeletable && $firstDeleteButton) {\n $firstDeleteButton.remove();\n }\n\n var getGroupName = function () {\n var groupName = $list.data('repeater-list');\n return fig.$parent ?\n fig.$parent.data('item-name') + '[' + groupName + ']' :\n groupName;\n };\n\n var initNested = function ($listItems) {\n if(fig.repeaters) {\n $listItems.each(function () {\n var $item = $(this);\n foreach(fig.repeaters, function (nestedFig) {\n $item.find(nestedFig.selector).repeater(extend(\n nestedFig, { $parent: $item }\n ));\n });\n });\n }\n };\n\n var $foreachRepeaterInItem = function (repeaters, $item, cb) {\n if(repeaters) {\n foreach(repeaters, function (nestedFig) {\n cb.call($item.find(nestedFig.selector)[0], nestedFig);\n });\n }\n };\n\n var setIndexes = function ($items, groupName, repeaters) {\n $items.each(function (index) {\n var $item = $(this);\n $item.data('item-name', groupName + '[' + index + ']');\n $filterNested($item.find('[name]'), repeaters)\n .each(function () {\n var $input = $(this);\n // match non empty brackets (ex: \"[foo]\")\n var matches = $input.attr('name').match(/\\[[^\\]]+\\]/g);\n\n var name = matches ?\n // strip \"[\" and \"]\" characters\n last(matches).replace(/\\[|\\]/g, '') :\n $input.attr('name');\n\n\n var newName = groupName + '[' + index + '][' + name + ']' +\n ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : '');\n\n $input.attr('name', newName);\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n setIndexes(\n $filterNested($repeater.find('[data-repeater-item]'), nestedFig.repeaters || []),\n groupName + '[' + index + ']' +\n '[' + $repeater.find('[data-repeater-list]').first().data('repeater-list') + ']',\n nestedFig.repeaters\n );\n });\n });\n });\n\n $list.find('input[name][checked]')\n .removeAttr('checked')\n .prop('checked', true);\n };\n\n setIndexes($items(), getGroupName(), fig.repeaters);\n initNested($items());\n if(fig.initEmpty) {\n $items().remove();\n }\n\n if(fig.ready) {\n fig.ready(function () {\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n }\n\n var appendItem = (function () {\n var setItemsValues = function ($item, data, repeaters) {\n if(data || fig.defaultValues) {\n var inputNames = {};\n $filterNested($item.find('[name]'), repeaters).each(function () {\n var key = $(this).attr('name').match(/\\[([^\\]]*)(\\]|\\]\\[\\])$/)[1];\n inputNames[key] = $(this).attr('name');\n });\n\n $item.inputVal(map(\n filter(data || fig.defaultValues, function (val, name) {\n return inputNames[name];\n }),\n identity,\n function (name) {\n return inputNames[name];\n }\n ));\n }\n\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n $filterNested(\n $repeater.find('[data-repeater-item]'),\n nestedFig.repeaters\n )\n .each(function () {\n var fieldName = $repeater.find('[data-repeater-list]').data('repeater-list');\n if(data && data[fieldName]) {\n var $template = $(this).clone();\n $repeater.find('[data-repeater-item]').remove();\n foreach(data[fieldName], function (data) {\n var $item = $template.clone();\n setItemsValues(\n $item,\n data,\n nestedFig.repeaters || []\n );\n $repeater.find('[data-repeater-list]').append($item);\n });\n }\n else {\n setItemsValues(\n $(this),\n nestedFig.defaultValues,\n nestedFig.repeaters || []\n );\n }\n });\n });\n\n };\n\n return function ($item, data) {\n $list.append($item);\n setIndexes($items(), getGroupName(), fig.repeaters);\n $item.find('[name]').each(function () {\n $(this).inputClear();\n });\n setItemsValues($item, data || fig.defaultValues, fig.repeaters);\n };\n }());\n\n var addItem = function (data) {\n var $item = $itemTemplate.clone();\n appendItem($item, data);\n if(fig.repeaters) {\n initNested($item);\n }\n show.call($item.get(0));\n };\n\n setList = function (rows) {\n $items().remove();\n foreach(rows, addItem);\n };\n\n $filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(function () {\n addItem();\n });\n\n $list.on('click', '[data-repeater-delete]', function () {\n var self = $(this).closest('[data-repeater-item]').get(0);\n hide.call(self, function () {\n $(self).remove();\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n });\n });\n\n this.setList = setList;\n\n return this;\n};\n\n}(jQuery));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanF1ZXJ5LnJlcGVhdGVyL2pxdWVyeS5yZXBlYXRlci5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyw4QkFBOEI7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQ0FBa0M7QUFDckQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DQUFtQyxVQUFVOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLFVBQVU7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsVUFBVTtBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsVUFBVTtBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsVUFBVTtBQUNyQztBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7O0FBRWpCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1Z1ZXh5Ly4vbm9kZV9tb2R1bGVzL2pxdWVyeS5yZXBlYXRlci9qcXVlcnkucmVwZWF0ZXIuanM/ZTM2ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqcXVlcnkucmVwZWF0ZXIgdmVyc2lvbiAxLjIuMVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0R1YkZyaWVuZC9qcXVlcnkucmVwZWF0ZXJcbi8vIChNSVQpIDA5LTEwLTIwMTZcbi8vIEJyaWFuIERldGVyaW5nIDxCRGV0ZXJpbkBnbWFpbC5jb20+IChodHRwOi8vd3d3LmJyaWFuZGV0ZXJpbmcubmV0LylcbihmdW5jdGlvbiAoJCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4O1xufTtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gJC5pc0FycmF5KHZhbHVlKTtcbn07XG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiAhaXNBcnJheSh2YWx1ZSkgJiYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KTtcbn07XG5cbnZhciBpc051bWJlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcjtcbn07XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XG59O1xuXG52YXIgaW5kZXhPZiA9IGZ1bmN0aW9uIChvYmplY3QsIHZhbHVlKSB7XG4gICAgcmV0dXJuICQuaW5BcnJheSh2YWx1ZSwgb2JqZWN0KTtcbn07XG5cbnZhciBpbkFycmF5ID0gZnVuY3Rpb24gKGFycmF5LCB2YWx1ZSkge1xuICAgIHJldHVybiBpbmRleE9mKGFycmF5LCB2YWx1ZSkgIT09IC0xO1xufTtcblxudmFyIGZvcmVhY2ggPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgY2FsbGJhY2spIHtcbiAgICBmb3IodmFyIGkgaW4gY29sbGVjdGlvbikge1xuICAgICAgICBpZihjb2xsZWN0aW9uLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhjb2xsZWN0aW9uW2ldLCBpLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxudmFyIGxhc3QgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG59O1xuXG52YXIgYXJndW1lbnRzVG9BcnJheSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xufTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kZWQgPSB7fTtcbiAgICBmb3JlYWNoKGFyZ3VtZW50c1RvQXJyYXkoYXJndW1lbnRzKSwgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgZm9yZWFjaChvLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgICAgICAgIGV4dGVuZGVkW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBleHRlbmRlZDtcbn07XG5cbnZhciBtYXBUb0FycmF5ID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgIGZvcmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlLCBrZXksIGNvbGwpIHtcbiAgICAgICAgbWFwcGVkLnB1c2goY2FsbGJhY2sodmFsdWUsIGtleSwgY29sbCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBwZWQ7XG59O1xuXG52YXIgbWFwVG9PYmplY3QgPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgY2FsbGJhY2ssIGtleUNhbGxiYWNrKSB7XG4gICAgdmFyIG1hcHBlZCA9IHt9O1xuICAgIGZvcmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlLCBrZXksIGNvbGwpIHtcbiAgICAgICAga2V5ID0ga2V5Q2FsbGJhY2sgPyBrZXlDYWxsYmFjayhrZXksIHZhbHVlKSA6IGtleTtcbiAgICAgICAgbWFwcGVkW2tleV0gPSBjYWxsYmFjayh2YWx1ZSwga2V5LCBjb2xsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwcGVkO1xufTtcblxudmFyIG1hcCA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBjYWxsYmFjaywga2V5Q2FsbGJhY2spIHtcbiAgICByZXR1cm4gaXNBcnJheShjb2xsZWN0aW9uKSA/XG4gICAgICAgIG1hcFRvQXJyYXkoY29sbGVjdGlvbiwgY2FsbGJhY2spIDpcbiAgICAgICAgbWFwVG9PYmplY3QoY29sbGVjdGlvbiwgY2FsbGJhY2ssIGtleUNhbGxiYWNrKTtcbn07XG5cbnZhciBwbHVjayA9IGZ1bmN0aW9uIChhcnJheU9mT2JqZWN0cywga2V5KSB7XG4gICAgcmV0dXJuIG1hcChhcnJheU9mT2JqZWN0cywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsW2tleV07XG4gICAgfSk7XG59O1xuXG52YXIgZmlsdGVyID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpbHRlcmVkO1xuXG4gICAgaWYoaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICBmaWx0ZXJlZCA9IFtdO1xuICAgICAgICBmb3JlYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSwgY29sbCkge1xuICAgICAgICAgICAgaWYoY2FsbGJhY2sodmFsLCBrZXksIGNvbGwpKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWQucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbHRlcmVkID0ge307XG4gICAgICAgIGZvcmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCwga2V5LCBjb2xsKSB7XG4gICAgICAgICAgICBpZihjYWxsYmFjayh2YWwsIGtleSwgY29sbCkpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFtrZXldID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyZWQ7XG59O1xuXG52YXIgY2FsbCA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpIHtcbiAgICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uIChvYmplY3QsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFtmdW5jdGlvbk5hbWVdLmFwcGx5KG9iamVjdCwgYXJncyB8fCBbXSk7XG4gICAgfSk7XG59O1xuXG4vL2V4ZWN1dGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgYW5kIGF0IG1vc3Qgb25lIHRpbWUgb24gdGhlIG1pbmltdW1JbnRlcnZhbCxcbi8vaWdub3JlIGJsb2NrIGF0dGVtcHRzXG52YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiAobWluaW11bUludGVydmFsLCBjYWxsYmFjaykge1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGlmKHRpbWVvdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIH0sIG1pbmltdW1JbnRlcnZhbCk7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5cbnZhciBtaXhpblB1YlN1YiA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG4gICAgdmFyIHRvcGljcyA9IHt9O1xuXG4gICAgb2JqZWN0LnB1Ymxpc2ggPSBmdW5jdGlvbiAodG9waWMsIGRhdGEpIHtcbiAgICAgICAgZm9yZWFjaCh0b3BpY3NbdG9waWNdLCBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgb2JqZWN0LnN1YnNjcmliZSA9IGZ1bmN0aW9uICh0b3BpYywgY2FsbGJhY2spIHtcbiAgICAgICAgdG9waWNzW3RvcGljXSA9IHRvcGljc1t0b3BpY10gfHwgW107XG4gICAgICAgIHRvcGljc1t0b3BpY10ucHVzaChjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIG9iamVjdC51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBmb3JlYWNoKHRvcGljcywgZnVuY3Rpb24gKHN1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBpbmRleE9mKHN1YnNjcmliZXJzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICBpZihpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9iamVjdDtcbn07XG5cbi8vIGpxdWVyeS5pbnB1dCB2ZXJzaW9uIDAuMC4wXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRHViRnJpZW5kL2pxdWVyeS5pbnB1dFxuLy8gKE1JVCkgMDktMDQtMjAxNFxuLy8gQnJpYW4gRGV0ZXJpbmcgPEJEZXRlcmluQGdtYWlsLmNvbT4gKGh0dHA6Ly93d3cuYnJpYW5kZXRlcmluZy5uZXQvKVxuKGZ1bmN0aW9uICgkKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVCYXNlSW5wdXQgPSBmdW5jdGlvbiAoZmlnLCBteSkge1xuICAgIHZhciBzZWxmID0gbWl4aW5QdWJTdWIoKSxcbiAgICAgICAgJHNlbGYgPSBmaWcuJDtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgJ2ltcGxlbWVudCBtZSAocmV0dXJuIHR5cGUuIFwidGV4dFwiLCBcInJhZGlvXCIsIGV0Yy4pJztcbiAgICB9O1xuXG4gICAgc2VsZi4kID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/ICRzZWxmLmZpbmQoc2VsZWN0b3IpIDogJHNlbGY7XG4gICAgfTtcblxuICAgIHNlbGYuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi4kKCkucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgc2VsZi5wdWJsaXNoKCdpc0VuYWJsZWQnLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIHNlbGYuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLiQoKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgc2VsZi5wdWJsaXNoKCdpc0VuYWJsZWQnLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgbXkuZXF1YWxUbyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG5cbiAgICBteS5wdWJsaXNoQ2hhbmdlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUsIGRvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHNlbGYuZ2V0KCk7XG4gICAgICAgICAgICBpZighbXkuZXF1YWxUbyhuZXdWYWx1ZSwgb2xkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5wdWJsaXNoKCdjaGFuZ2UnLCB7IGU6IGUsIGRvbUVsZW1lbnQ6IGRvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9O1xuICAgIH0oKSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cblxudmFyIGNyZWF0ZUlucHV0ID0gZnVuY3Rpb24gKGZpZywgbXkpIHtcbiAgICB2YXIgc2VsZiA9IGNyZWF0ZUJhc2VJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2VsZi4kKCkudmFsKCk7XG4gICAgfTtcblxuICAgIHNlbGYuc2V0ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHNlbGYuJCgpLnZhbChuZXdWYWx1ZSk7XG4gICAgfTtcblxuICAgIHNlbGYuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0KCcnKTtcbiAgICB9O1xuXG4gICAgbXkuYnVpbGRTZXR0ZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChzZWxmLCBuZXdWYWx1ZSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGlucHV0RXF1YWxUb0FycmF5ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBhID0gaXNBcnJheShhKSA/IGEgOiBbYV07XG4gICAgYiA9IGlzQXJyYXkoYikgPyBiIDogW2JdO1xuXG4gICAgdmFyIGlzRXF1YWwgPSB0cnVlO1xuICAgIGlmKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICBpc0VxdWFsID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3JlYWNoKGEsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYoIWluQXJyYXkoYiwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaXNFcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNFcXVhbDtcbn07XG5cbnZhciBjcmVhdGVJbnB1dEJ1dHRvbiA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2J1dHRvbic7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRDaGVja2JveCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2NoZWNrYm94JztcbiAgICB9O1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgICAgc2VsZi4kKCkuZmlsdGVyKCc6Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goJCh0aGlzKS52YWwoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH07XG5cbiAgICBzZWxmLnNldCA9IGZ1bmN0aW9uIChuZXdWYWx1ZXMpIHtcbiAgICAgICAgbmV3VmFsdWVzID0gaXNBcnJheShuZXdWYWx1ZXMpID8gbmV3VmFsdWVzIDogW25ld1ZhbHVlc107XG5cbiAgICAgICAgc2VsZi4kKCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvcmVhY2gobmV3VmFsdWVzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNlbGYuJCgpLmZpbHRlcignW3ZhbHVlPVwiJyArIHZhbHVlICsgJ1wiXScpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG15LmVxdWFsVG8gPSBpbnB1dEVxdWFsVG9BcnJheTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRFbWFpbCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0VGV4dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdlbWFpbCc7XG4gICAgfTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0RmlsZSA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUJhc2VJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdmaWxlJztcbiAgICB9O1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBsYXN0KHNlbGYuJCgpLnZhbCgpLnNwbGl0KCdcXFxcJykpO1xuICAgIH07XG5cbiAgICBzZWxmLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNDM5NTcvY2xlYXJpbmctaW5wdXQtdHlwZS1maWxlLXVzaW5nLWpxdWVyeVxuICAgICAgICB0aGlzLiQoKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykud3JhcCgnPGZvcm0+JykuY2xvc2VzdCgnZm9ybScpLmdldCgwKS5yZXNldCgpO1xuICAgICAgICAgICAgJCh0aGlzKS51bndyYXAoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgICAgICAvLyBzZWxmLnB1Ymxpc2goJ2NoYW5nZScsIHNlbGYpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRIaWRkZW4gPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xuICAgIH07XG5cbiAgICBzZWxmLiQoKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcbnZhciBjcmVhdGVJbnB1dE11bHRpcGxlRmlsZSA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUJhc2VJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdmaWxlW211bHRpcGxlXSc7XG4gICAgfTtcblxuICAgIHNlbGYuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE0MDM1NTMwL2hvdy10by1nZXQtdmFsdWUtb2YtaHRtbC01LW11bHRpcGxlLWZpbGUtdXBsb2FkLXZhcmlhYmxlLXVzaW5nLWpxdWVyeVxuICAgICAgICB2YXIgZmlsZUxpc3RPYmplY3QgPSBzZWxmLiQoKS5nZXQoMCkuZmlsZXMgfHwgW10sXG4gICAgICAgICAgICBuYW1lcyA9IFtdLCBpO1xuXG4gICAgICAgIGZvcihpID0gMDsgaSA8IChmaWxlTGlzdE9iamVjdC5sZW5ndGggfHwgMCk7IGkgKz0gMSkge1xuICAgICAgICAgICAgbmFtZXMucHVzaChmaWxlTGlzdE9iamVjdFtpXS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9O1xuXG4gICAgc2VsZi5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDQzOTU3L2NsZWFyaW5nLWlucHV0LXR5cGUtZmlsZS11c2luZy1qcXVlcnlcbiAgICAgICAgdGhpcy4kKCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLndyYXAoJzxmb3JtPicpLmNsb3Nlc3QoJ2Zvcm0nKS5nZXQoMCkucmVzZXQoKTtcbiAgICAgICAgICAgICQodGhpcykudW53cmFwKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzZWxmLiQoKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0TXVsdGlwbGVTZWxlY3QgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdzZWxlY3RbbXVsdGlwbGVdJztcbiAgICB9O1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLiQoKS52YWwoKSB8fCBbXTtcbiAgICB9O1xuXG4gICAgc2VsZi5zZXQgPSBmdW5jdGlvbiAobmV3VmFsdWVzKSB7XG4gICAgICAgIHNlbGYuJCgpLnZhbChcbiAgICAgICAgICAgIG5ld1ZhbHVlcyA9PT0gJycgPyBbXSA6IGlzQXJyYXkobmV3VmFsdWVzKSA/IG5ld1ZhbHVlcyA6IFtuZXdWYWx1ZXNdXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIG15LmVxdWFsVG8gPSBpbnB1dEVxdWFsVG9BcnJheTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRQYXNzd29yZCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0VGV4dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdwYXNzd29yZCc7XG4gICAgfTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0UmFkaW8gPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdyYWRpbyc7XG4gICAgfTtcblxuICAgIHNlbGYuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2VsZi4kKCkuZmlsdGVyKCc6Y2hlY2tlZCcpLnZhbCgpIHx8IG51bGw7XG4gICAgfTtcblxuICAgIHNlbGYuc2V0ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmKCFuZXdWYWx1ZSkge1xuICAgICAgICAgICAgc2VsZi4kKCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZWxmLiQoKS5maWx0ZXIoJ1t2YWx1ZT1cIicgKyBuZXdWYWx1ZSArICdcIl0nKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi4kKCkuY2hhbmdlKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dFJhbmdlID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXQoZmlnLCBteSk7XG5cbiAgICBzZWxmLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAncmFuZ2UnO1xuICAgIH07XG5cbiAgICBzZWxmLiQoKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0U2VsZWN0ID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXQoZmlnLCBteSk7XG5cbiAgICBzZWxmLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnc2VsZWN0JztcbiAgICB9O1xuXG4gICAgc2VsZi4kKCkuY2hhbmdlKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dFRleHQgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICB9O1xuXG4gICAgc2VsZi4kKCkub24oJ2NoYW5nZSBrZXl1cCBrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0VGV4dGFyZWEgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICd0ZXh0YXJlYSc7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLm9uKCdjaGFuZ2Uga2V5dXAga2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dFVSTCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0VGV4dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICd1cmwnO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBidWlsZEZvcm1JbnB1dHMgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIGlucHV0cyA9IHt9LFxuICAgICAgICAkc2VsZiA9IGZpZy4kO1xuXG4gICAgdmFyIGNvbnN0cnVjdG9yID0gZmlnLmNvbnN0cnVjdG9yT3ZlcnJpZGUgfHwge1xuICAgICAgICBidXR0b246IGNyZWF0ZUlucHV0QnV0dG9uLFxuICAgICAgICB0ZXh0OiBjcmVhdGVJbnB1dFRleHQsXG4gICAgICAgIHVybDogY3JlYXRlSW5wdXRVUkwsXG4gICAgICAgIGVtYWlsOiBjcmVhdGVJbnB1dEVtYWlsLFxuICAgICAgICBwYXNzd29yZDogY3JlYXRlSW5wdXRQYXNzd29yZCxcbiAgICAgICAgcmFuZ2U6IGNyZWF0ZUlucHV0UmFuZ2UsXG4gICAgICAgIHRleHRhcmVhOiBjcmVhdGVJbnB1dFRleHRhcmVhLFxuICAgICAgICBzZWxlY3Q6IGNyZWF0ZUlucHV0U2VsZWN0LFxuICAgICAgICAnc2VsZWN0W211bHRpcGxlXSc6IGNyZWF0ZUlucHV0TXVsdGlwbGVTZWxlY3QsXG4gICAgICAgIHJhZGlvOiBjcmVhdGVJbnB1dFJhZGlvLFxuICAgICAgICBjaGVja2JveDogY3JlYXRlSW5wdXRDaGVja2JveCxcbiAgICAgICAgZmlsZTogY3JlYXRlSW5wdXRGaWxlLFxuICAgICAgICAnZmlsZVttdWx0aXBsZV0nOiBjcmVhdGVJbnB1dE11bHRpcGxlRmlsZSxcbiAgICAgICAgaGlkZGVuOiBjcmVhdGVJbnB1dEhpZGRlblxuICAgIH07XG5cbiAgICB2YXIgYWRkSW5wdXRzQmFzaWMgPSBmdW5jdGlvbiAodHlwZSwgc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyICRpbnB1dCA9IGlzT2JqZWN0KHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogJHNlbGYuZmluZChzZWxlY3Rvcik7XG5cbiAgICAgICAgJGlucHV0LmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IGNvbnN0cnVjdG9yW3R5cGVdKHtcbiAgICAgICAgICAgICAgICAkOiAkKHRoaXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBhZGRJbnB1dHNHcm91cCA9IGZ1bmN0aW9uICh0eXBlLCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgbmFtZXMgPSBbXSxcbiAgICAgICAgICAgICRpbnB1dCA9IGlzT2JqZWN0KHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogJHNlbGYuZmluZChzZWxlY3Rvcik7XG5cbiAgICAgICAgaWYoaXNPYmplY3Qoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBpbnB1dHNbJGlucHV0LmF0dHIoJ25hbWUnKV0gPSBjb25zdHJ1Y3Rvclt0eXBlXSh7XG4gICAgICAgICAgICAgICAgJDogJGlucHV0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGdyb3VwIGJ5IG5hbWUgYXR0cmlidXRlXG4gICAgICAgICAgICAkaW5wdXQuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYoaW5kZXhPZihuYW1lcywgJCh0aGlzKS5hdHRyKCduYW1lJykpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKCQodGhpcykuYXR0cignbmFtZScpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yZWFjaChuYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBpbnB1dHNbbmFtZV0gPSBjb25zdHJ1Y3Rvclt0eXBlXSh7XG4gICAgICAgICAgICAgICAgICAgICQ6ICRzZWxmLmZpbmQoJ2lucHV0W25hbWU9XCInICsgbmFtZSArICdcIl0nKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBpZigkc2VsZi5pcygnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKSkge1xuICAgICAgICBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgYnV0dG9uLCBpbnB1dFt0eXBlPVwic3VibWl0XCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdidXR0b24nLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygndGV4dGFyZWEnKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3RleHRhcmVhJywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoXG4gICAgICAgICAgICAkc2VsZi5pcygnaW5wdXRbdHlwZT1cInRleHRcIl0nKSB8fFxuICAgICAgICAgICAgJHNlbGYuaXMoJ2lucHV0JykgJiYgISRzZWxmLmF0dHIoJ3R5cGUnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCd0ZXh0JywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoJHNlbGYuaXMoJ2lucHV0W3R5cGU9XCJwYXNzd29yZFwiXScpKSB7XG4gICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygncGFzc3dvcmQnLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cImVtYWlsXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdlbWFpbCcsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwidXJsXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCd1cmwnLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cInJhbmdlXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdyYW5nZScsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdzZWxlY3QnKSkge1xuICAgICAgICAgICAgaWYoJHNlbGYuaXMoJ1ttdWx0aXBsZV0nKSkge1xuICAgICAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdzZWxlY3RbbXVsdGlwbGVdJywgJHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3NlbGVjdCcsICRzZWxmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpKSB7XG4gICAgICAgICAgICBpZigkc2VsZi5pcygnW211bHRpcGxlXScpKSB7XG4gICAgICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2ZpbGVbbXVsdGlwbGVdJywgJHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2ZpbGUnLCAkc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cImhpZGRlblwiXScpKSB7XG4gICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygnaGlkZGVuJywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoJHNlbGYuaXMoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpKSB7XG4gICAgICAgICAgICBhZGRJbnB1dHNHcm91cCgncmFkaW8nLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0dyb3VwKCdjaGVja2JveCcsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vaW4gYWxsIG90aGVyIGNhc2VzIGRlZmF1bHQgdG8gYSBcInRleHRcIiBpbnB1dCBpbnRlcmZhY2UuXG4gICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygndGV4dCcsICRzZWxmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2J1dHRvbicsICdpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBidXR0b24sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0nKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3RleHQnLCAnaW5wdXRbdHlwZT1cInRleHRcIl0nKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3Bhc3N3b3JkJywgJ2lucHV0W3R5cGU9XCJwYXNzd29yZFwiXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnZW1haWwnLCAnaW5wdXRbdHlwZT1cImVtYWlsXCJdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCd1cmwnLCAnaW5wdXRbdHlwZT1cInVybFwiXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygncmFuZ2UnLCAnaW5wdXRbdHlwZT1cInJhbmdlXCJdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCd0ZXh0YXJlYScsICd0ZXh0YXJlYScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnc2VsZWN0JywgJ3NlbGVjdDpub3QoW211bHRpcGxlXSknKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3NlbGVjdFttdWx0aXBsZV0nLCAnc2VsZWN0W211bHRpcGxlXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnZmlsZScsICdpbnB1dFt0eXBlPVwiZmlsZVwiXTpub3QoW211bHRpcGxlXSknKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2ZpbGVbbXVsdGlwbGVdJywgJ2lucHV0W3R5cGU9XCJmaWxlXCJdW211bHRpcGxlXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnaGlkZGVuJywgJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl0nKTtcbiAgICAgICAgYWRkSW5wdXRzR3JvdXAoJ3JhZGlvJywgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgICBhZGRJbnB1dHNHcm91cCgnY2hlY2tib3gnLCAnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0cztcbn07XG5cbiQuZm4uaW5wdXRWYWwgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICB2YXIgJHNlbGYgPSAkKHRoaXMpO1xuXG4gICAgdmFyIGlucHV0cyA9IGJ1aWxkRm9ybUlucHV0cyh7ICQ6ICRzZWxmIH0pO1xuXG4gICAgaWYoJHNlbGYuaXMoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0JykpIHtcbiAgICAgICAgaWYodHlwZW9mIG5ld1ZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0c1skc2VsZi5hdHRyKCduYW1lJyldLmdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRzWyRzZWxmLmF0dHIoJ25hbWUnKV0uc2V0KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAkc2VsZjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYodHlwZW9mIG5ld1ZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGwoaW5wdXRzLCAnZ2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3JlYWNoKG5ld1ZhbHVlLCBmdW5jdGlvbiAodmFsdWUsIGlucHV0TmFtZSkge1xuICAgICAgICAgICAgICAgIGlucHV0c1tpbnB1dE5hbWVdLnNldCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiAkc2VsZjtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbiQuZm4uaW5wdXRPbkNoYW5nZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG4gICAgdmFyIGlucHV0cyA9IGJ1aWxkRm9ybUlucHV0cyh7ICQ6ICRzZWxmIH0pO1xuICAgIGZvcmVhY2goaW5wdXRzLCBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuc3Vic2NyaWJlKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChkYXRhLmRvbUVsZW1lbnQsIGRhdGEuZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiAkc2VsZjtcbn07XG5cbiQuZm4uaW5wdXREaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG4gICAgY2FsbChidWlsZEZvcm1JbnB1dHMoeyAkOiAkc2VsZiB9KSwgJ2Rpc2FibGUnKTtcbiAgICByZXR1cm4gJHNlbGY7XG59O1xuXG4kLmZuLmlucHV0RW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG4gICAgY2FsbChidWlsZEZvcm1JbnB1dHMoeyAkOiAkc2VsZiB9KSwgJ2VuYWJsZScpO1xuICAgIHJldHVybiAkc2VsZjtcbn07XG5cbiQuZm4uaW5wdXRDbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHNlbGYgPSAkKHRoaXMpO1xuICAgIGNhbGwoYnVpbGRGb3JtSW5wdXRzKHsgJDogJHNlbGYgfSksICdjbGVhcicpO1xuICAgIHJldHVybiAkc2VsZjtcbn07XG5cbn0oalF1ZXJ5KSk7XG5cbiQuZm4ucmVwZWF0ZXJWYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcnNlID0gZnVuY3Rpb24gKHJhdykge1xuICAgICAgICB2YXIgcGFyc2VkID0gW107XG5cbiAgICAgICAgZm9yZWFjaChyYXcsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICAgICAgdmFyIHBhcnNlZEtleSA9IFtdO1xuICAgICAgICAgICAgaWYoa2V5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkS2V5LnB1c2goa2V5Lm1hdGNoKC9eW15cXFtdKi8pWzBdKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRLZXkgPSBwYXJzZWRLZXkuY29uY2F0KG1hcChcbiAgICAgICAgICAgICAgICAgICAga2V5Lm1hdGNoKC9cXFtbXlxcXV0qXFxdL2cpLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYnJhY2tldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJhY2tldGVkLnJlcGxhY2UoL1tcXFtcXF1dL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB2YWw6IHZhbCxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBwYXJzZWRLZXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuXG4gICAgdmFyIGJ1aWxkID0gZnVuY3Rpb24gKHBhcnNlZCkge1xuICAgICAgICBpZihcbiAgICAgICAgICAgIHBhcnNlZC5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIChwYXJzZWRbMF0ua2V5Lmxlbmd0aCA9PT0gMCB8fCBwYXJzZWRbMF0ua2V5Lmxlbmd0aCA9PT0gMSAmJiAhcGFyc2VkWzBdLmtleVswXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkWzBdLnZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcmVhY2gocGFyc2VkLCBmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgcC5oZWFkID0gcC5rZXkuc2hpZnQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGdyb3VwZWQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGdyb3VwZWQgPSB7fTtcblxuICAgICAgICAgICAgZm9yZWFjaChwYXJzZWQsIGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICAgICAgaWYoIWdyb3VwZWRbcC5oZWFkXSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkW3AuaGVhZF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFtwLmhlYWRdLnB1c2gocCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWQ7XG4gICAgICAgIH0oKSk7XG5cbiAgICAgICAgdmFyIGJ1aWx0O1xuXG4gICAgICAgIGlmKC9eWzAtOV0rJC8udGVzdChwYXJzZWRbMF0uaGVhZCkpIHtcbiAgICAgICAgICAgIGJ1aWx0ID0gW107XG4gICAgICAgICAgICBmb3JlYWNoKGdyb3VwZWQsIGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICAgICAgICAgIGJ1aWx0LnB1c2goYnVpbGQoZ3JvdXApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVpbHQgPSB7fTtcbiAgICAgICAgICAgIGZvcmVhY2goZ3JvdXBlZCwgZnVuY3Rpb24gKGdyb3VwLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBidWlsdFtrZXldID0gYnVpbGQoZ3JvdXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVpbHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBidWlsZChwYXJzZSgkKHRoaXMpLmlucHV0VmFsKCkpKTtcbn07XG5cbiQuZm4ucmVwZWF0ZXIgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgZmlnID0gZmlnIHx8IHt9O1xuXG4gICAgdmFyIHNldExpc3Q7XG5cbiAgICAkKHRoaXMpLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG5cbiAgICAgICAgdmFyIHNob3cgPSBmaWcuc2hvdyB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaGlkZSA9IGZpZy5oaWRlIHx8IGZ1bmN0aW9uIChyZW1vdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyICRsaXN0ID0gJHNlbGYuZmluZCgnW2RhdGEtcmVwZWF0ZXItbGlzdF0nKS5maXJzdCgpO1xuXG4gICAgICAgIHZhciAkZmlsdGVyTmVzdGVkID0gZnVuY3Rpb24gKCRpdGVtcywgcmVwZWF0ZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gJGl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGVhdGVycyA/XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWNrKHJlcGVhdGVycywgJ3NlbGVjdG9yJykuam9pbignLCcpXG4gICAgICAgICAgICAgICAgICAgICkubGVuZ3RoID09PSAwIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciAkaXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJGZpbHRlck5lc3RlZCgkbGlzdC5maW5kKCdbZGF0YS1yZXBlYXRlci1pdGVtXScpLCBmaWcucmVwZWF0ZXJzKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgJGl0ZW1UZW1wbGF0ZSA9ICRsaXN0LmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maXJzdCgpLmNsb25lKCkuaGlkZSgpO1xuXG4gICAgICAgIHZhciAkZmlyc3REZWxldGVCdXR0b24gPSAkZmlsdGVyTmVzdGVkKFxuICAgICAgICAgICAgJGZpbHRlck5lc3RlZCgkKHRoaXMpLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJyksIGZpZy5yZXBlYXRlcnMpXG4gICAgICAgICAgICAuZmlyc3QoKS5maW5kKCdbZGF0YS1yZXBlYXRlci1kZWxldGVdJyksXG4gICAgICAgICAgICBmaWcucmVwZWF0ZXJzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYoZmlnLmlzRmlyc3RJdGVtVW5kZWxldGFibGUgJiYgJGZpcnN0RGVsZXRlQnV0dG9uKSB7XG4gICAgICAgICAgICAkZmlyc3REZWxldGVCdXR0b24ucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2V0R3JvdXBOYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGdyb3VwTmFtZSA9ICRsaXN0LmRhdGEoJ3JlcGVhdGVyLWxpc3QnKTtcbiAgICAgICAgICAgIHJldHVybiBmaWcuJHBhcmVudCA/XG4gICAgICAgICAgICAgICAgZmlnLiRwYXJlbnQuZGF0YSgnaXRlbS1uYW1lJykgKyAnWycgKyBncm91cE5hbWUgKyAnXScgOlxuICAgICAgICAgICAgICAgIGdyb3VwTmFtZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaW5pdE5lc3RlZCA9IGZ1bmN0aW9uICgkbGlzdEl0ZW1zKSB7XG4gICAgICAgICAgICBpZihmaWcucmVwZWF0ZXJzKSB7XG4gICAgICAgICAgICAgICAgJGxpc3RJdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpdGVtID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaChmaWcucmVwZWF0ZXJzLCBmdW5jdGlvbiAobmVzdGVkRmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKG5lc3RlZEZpZy5zZWxlY3RvcikucmVwZWF0ZXIoZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZEZpZywgeyAkcGFyZW50OiAkaXRlbSB9XG4gICAgICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyICRmb3JlYWNoUmVwZWF0ZXJJbkl0ZW0gPSBmdW5jdGlvbiAocmVwZWF0ZXJzLCAkaXRlbSwgY2IpIHtcbiAgICAgICAgICAgIGlmKHJlcGVhdGVycykge1xuICAgICAgICAgICAgICAgIGZvcmVhY2gocmVwZWF0ZXJzLCBmdW5jdGlvbiAobmVzdGVkRmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiLmNhbGwoJGl0ZW0uZmluZChuZXN0ZWRGaWcuc2VsZWN0b3IpWzBdLCBuZXN0ZWRGaWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzZXRJbmRleGVzID0gZnVuY3Rpb24gKCRpdGVtcywgZ3JvdXBOYW1lLCByZXBlYXRlcnMpIHtcbiAgICAgICAgICAgICRpdGVtcy5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciAkaXRlbSA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgJGl0ZW0uZGF0YSgnaXRlbS1uYW1lJywgZ3JvdXBOYW1lICsgJ1snICsgaW5kZXggKyAnXScpO1xuICAgICAgICAgICAgICAgICRmaWx0ZXJOZXN0ZWQoJGl0ZW0uZmluZCgnW25hbWVdJyksIHJlcGVhdGVycylcbiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBub24gZW1wdHkgYnJhY2tldHMgKGV4OiBcIltmb29dXCIpXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gJGlucHV0LmF0dHIoJ25hbWUnKS5tYXRjaCgvXFxbW15cXF1dK1xcXS9nKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgXCJbXCIgYW5kIFwiXVwiIGNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QobWF0Y2hlcykucmVwbGFjZSgvXFxbfFxcXS9nLCAnJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LmF0dHIoJ25hbWUnKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdOYW1lID0gZ3JvdXBOYW1lICsgJ1snICsgaW5kZXggKyAnXVsnICsgbmFtZSArICddJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAoJGlucHV0LmlzKCc6Y2hlY2tib3gnKSB8fCAkaW5wdXQuYXR0cignbXVsdGlwbGUnKSA/ICdbXScgOiAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJGlucHV0LmF0dHIoJ25hbWUnLCBuZXdOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAkZm9yZWFjaFJlcGVhdGVySW5JdGVtKHJlcGVhdGVycywgJGl0ZW0sIGZ1bmN0aW9uIChuZXN0ZWRGaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkcmVwZWF0ZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5kZXhlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyTmVzdGVkKCRyZXBlYXRlci5maW5kKCdbZGF0YS1yZXBlYXRlci1pdGVtXScpLCBuZXN0ZWRGaWcucmVwZWF0ZXJzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cE5hbWUgKyAnWycgKyBpbmRleCArICddJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1snICsgJHJlcGVhdGVyLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWxpc3RdJykuZmlyc3QoKS5kYXRhKCdyZXBlYXRlci1saXN0JykgKyAnXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkRmlnLnJlcGVhdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJGxpc3QuZmluZCgnaW5wdXRbbmFtZV1bY2hlY2tlZF0nKVxuICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdjaGVja2VkJylcbiAgICAgICAgICAgICAgICAucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldEluZGV4ZXMoJGl0ZW1zKCksIGdldEdyb3VwTmFtZSgpLCBmaWcucmVwZWF0ZXJzKTtcbiAgICAgICAgaW5pdE5lc3RlZCgkaXRlbXMoKSk7XG4gICAgICAgIGlmKGZpZy5pbml0RW1wdHkpIHtcbiAgICAgICAgICAgICRpdGVtcygpLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZmlnLnJlYWR5KSB7XG4gICAgICAgICAgICBmaWcucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNldEluZGV4ZXMoJGl0ZW1zKCksIGdldEdyb3VwTmFtZSgpLCBmaWcucmVwZWF0ZXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFwcGVuZEl0ZW0gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNldEl0ZW1zVmFsdWVzID0gZnVuY3Rpb24gKCRpdGVtLCBkYXRhLCByZXBlYXRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZihkYXRhIHx8IGZpZy5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dE5hbWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJOZXN0ZWQoJGl0ZW0uZmluZCgnW25hbWVdJyksIHJlcGVhdGVycykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gJCh0aGlzKS5hdHRyKCduYW1lJykubWF0Y2goL1xcWyhbXlxcXV0qKShcXF18XFxdXFxbXFxdKSQvKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0TmFtZXNba2V5XSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAkaXRlbS5pbnB1dFZhbChtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZGF0YSB8fCBmaWcuZGVmYXVsdFZhbHVlcywgZnVuY3Rpb24gKHZhbCwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE5hbWVzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TmFtZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgJGZvcmVhY2hSZXBlYXRlckluSXRlbShyZXBlYXRlcnMsICRpdGVtLCBmdW5jdGlvbiAobmVzdGVkRmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcmVwZWF0ZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAkZmlsdGVyTmVzdGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlcGVhdGVyLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRGaWcucmVwZWF0ZXJzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkTmFtZSA9ICRyZXBlYXRlci5maW5kKCdbZGF0YS1yZXBlYXRlci1saXN0XScpLmRhdGEoJ3JlcGVhdGVyLWxpc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEgJiYgZGF0YVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0ZW1wbGF0ZSA9ICQodGhpcykuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwZWF0ZXIuZmluZCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKGRhdGFbZmllbGROYW1lXSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRpdGVtID0gJHRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW1zVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkRmlnLnJlcGVhdGVycyB8fCBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwZWF0ZXIuZmluZCgnW2RhdGEtcmVwZWF0ZXItbGlzdF0nKS5hcHBlbmQoJGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbXNWYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZEZpZy5kZWZhdWx0VmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRGaWcucmVwZWF0ZXJzIHx8IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoJGl0ZW0sIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAkbGlzdC5hcHBlbmQoJGl0ZW0pO1xuICAgICAgICAgICAgICAgIHNldEluZGV4ZXMoJGl0ZW1zKCksIGdldEdyb3VwTmFtZSgpLCBmaWcucmVwZWF0ZXJzKTtcbiAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCdbbmFtZV0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5pbnB1dENsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0SXRlbXNWYWx1ZXMoJGl0ZW0sIGRhdGEgfHwgZmlnLmRlZmF1bHRWYWx1ZXMsIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSgpKTtcblxuICAgICAgICB2YXIgYWRkSXRlbSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgJGl0ZW0gPSAkaXRlbVRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgICAgICBhcHBlbmRJdGVtKCRpdGVtLCBkYXRhKTtcbiAgICAgICAgICAgIGlmKGZpZy5yZXBlYXRlcnMpIHtcbiAgICAgICAgICAgICAgICBpbml0TmVzdGVkKCRpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3cuY2FsbCgkaXRlbS5nZXQoMCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldExpc3QgPSBmdW5jdGlvbiAocm93cykge1xuICAgICAgICAgICAgJGl0ZW1zKCkucmVtb3ZlKCk7XG4gICAgICAgICAgICBmb3JlYWNoKHJvd3MsIGFkZEl0ZW0pO1xuICAgICAgICB9O1xuXG4gICAgICAgICRmaWx0ZXJOZXN0ZWQoJHNlbGYuZmluZCgnW2RhdGEtcmVwZWF0ZXItY3JlYXRlXScpLCBmaWcucmVwZWF0ZXJzKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhZGRJdGVtKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRsaXN0Lm9uKCdjbGljaycsICdbZGF0YS1yZXBlYXRlci1kZWxldGVdJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJykuZ2V0KDApO1xuICAgICAgICAgICAgaGlkZS5jYWxsKHNlbGYsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHNlbGYpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHNldEluZGV4ZXMoJGl0ZW1zKCksIGdldEdyb3VwTmFtZSgpLCBmaWcucmVwZWF0ZXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0TGlzdCA9IHNldExpc3Q7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbn0oalF1ZXJ5KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/jquery.repeater/jquery.repeater.js\n");
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/ // The module cache
|
|
/******/ var __webpack_module_cache__ = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/ // Check if module is in cache
|
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
/******/ if (cachedModule !== undefined) {
|
|
/******/ return cachedModule.exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
/******/ // no module.id needed
|
|
/******/ // no module.loaded needed
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/************************************************************************/
|
|
/******/ /* webpack/runtime/compat get default export */
|
|
/******/ !function() {
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function() { return module['default']; } :
|
|
/******/ function() { return module; };
|
|
/******/ __webpack_require__.d(getter, { a: getter });
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/define property getters */
|
|
/******/ !function() {
|
|
/******/ // define getter functions for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, definition) {
|
|
/******/ for(var key in definition) {
|
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
/******/ }
|
|
/******/ }
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
/******/ !function() {
|
|
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/make namespace object */
|
|
/******/ !function() {
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
|
/******/ var __webpack_exports__ = __webpack_require__("./libs/jquery-repeater/jquery-repeater.js");
|
|
/******/
|
|
/******/ return __webpack_exports__;
|
|
/******/ })()
|
|
;
|
|
}); |