{"version":3,"sources":["pivot.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","_core","webix","Pivot","WebixPivot","i18n","pivot","extend","apply","bar","cancel","chartType","columns","count","date","fields","filters","groupBy","line","logScale","max","min","multicombo","operationNotDefined","layoutIncorrect","pivotMessage","popupHeader","radar","radarArea","rows","select","settings","stackedBar","sum","text","total","values","valuesNotDefined","windowTitle","windowMessage","protoUI","name","_selected","defaults","autoheight","padding","$init","config","this","_get_ui","$ready","push","_after_init","body","view","borderless","template","data","attachEvent","$eventSource","getItem","hide","getSelected","ui","popup","IdSpace","_interopRequireWildcard","obj","__esModule","newObj","key","Object","prototype","hasOwnProperty","_typeof","Symbol","iterator","constructor","_filters","flt","_freeze_totals","frz","cor","_pivottable","_columns","_external_processing","ext","_filters2","version","$view","className","provideApi","_setConfig","_initDataStore","$separator","$divider","Filters","externalProcessing","init","bind","$$","render","structure","_getUI","hidden","cols","table","navigation","leftSplit","resizeColumn","on","onHeaderClick","getTopParentView","getColumnIndex","column","readonly","configure","datatable","_configPopup","_createPopup","functions","i","operations","title","_applyLocale","define","pos","html","offset","getNode","setPosition","x","y","getFields","show","callEvent","setStructure","getFilterView","skipFilters","_getPivotData","_Pivot","formatFilterValues","pull","order","_setData","setColumns","header","processFilters","showFilters","totalColumn","footer","rightSplit","refreshColumns","clearAll","parse","freezeTotals","$exportView","options","filterHTML","value","_applyMap","fieldMap","field","item","fieldsHash","rowsHash","str","result","valuesHash","_pivotFields","length","uid","Math","getIdByIndex","isUndefined","type","operation","isArray","index","sort","getStructure","getConfigWindow","profile_setter","window","console","time","timeEnd","delay","layout","DataLoader","EventSystem","Settings","fvalue","getFormattedValue","isDate","valueOf","toString","trim","f","items","indexes","label","labelAlign","filterLabelAlign","labelWidth","filterLabelWidth","minWidth","filterMinWidth","maxWidth","filterWidth","tagMode","isSelect","distinctValues","indexOf","empty","hash","_pivotOptions","concat","isNumeric","n","isNaN","parseFloat","a","b","val1","val2","toLowerCase","setEvents","elements","event","filter","changeFilterValue","getValue","_popup_clicks","_tablepopup","fieldsColumnWidth","copy","getStructureMap","_setStructure","_lists","_dndCorrection","_afterInit","innerId","each","columnSort","webix_pivot_config_common","clc","_set_structure","_templates","height","width","cancelButtonWidth","applyButtonWidth","head","modal","move","data_setter","lists","forEach","listName","$css","_dropField","ctx","from","to","start","_removeListField","_addListField","list","_handlers","remove","found","_setPivotFieldCss","css","refresh","add","_correctLists","targetItem","clickHandlers","getFirstId","res","_listDragHTML","context","templateStart","popupTemplates","listDrag","templateEnd","_getListEvents","onBeforeDrop","onBeforeDrag","onBeforeDragIn","addCss","DragControl","getFilterOptions","process","e","updateItem","els","getItemNode","childNodes","el","getAttribute","op","selector","filter-selector","autofit","get","sel","close","func_selector","locate","listId","splice","baseName","uiArrays","uiViews","eventH","onViewInit","checkStructure","j","iconHeader","icon","iconContent","tableValues","ops","locale","join","chartValues","color","_getColor","_valueLength","_increaseColorIndex","toolbar","configTitle","subTitle","fieldsLayout","filtersLayout","columnsLayout","rowsLayout","valuesLayout","fieldsHeader","scroll","drag","filtersHeader","onClick","webix_pivot_link","webix_pivot_minus","columnsHeader","rowsHeader","valuesHeader","webix_pivot_plus","freezeTotal","getWidth","totalCount","getTotalCount","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","TypeError","create","enumerable","writable","configurable","setPrototypeOf","__proto__","_classCallCheck","instance","Constructor","undefined","_data","_operations","_helpers","hlp","divider","_initOperations","_pivotData","Data","_pivotOperations","Operations","addOperation","method","addTotalOperation","addTotal","_Pivot2","arguments","getData","option","optionsHash","_createClass","defineProperties","target","props","descriptor","defineProperty","protoProps","staticProps","_header","_total_columns","_footer","_item_values","itm","master","_header_hash","setFilterValues","group","processRows","processColumns","processHeader","addTotalData","addFooter","vname","slice","_i","k","setItemValues","open","calculateItem","setMinMax","filterItem","filterMap","groupItem","func","Array","base","source","force","seed","Date","text0","vConfig","valuesConfig","sortHeader","getHeader","parts","tmp","split","format","addTotalColumns","isNum","setSortConfig","sorting","sortConfig","$last","$default","dir","cIndex","keys","sorted","as","first","h","colspan","string","int","getTotalColumnId","getValues","ids","groups","groupData","groupName","hRowCount","totalCols","getTotalGroups","_pivotColumnGroups","columnWidth","rowspan","groupCount","pop","columnId","getTotal","names","totalMethod","getTotalOptions","calculateColumn","leavesOnly","$pivotValue","$pivotOperation","leaves","fItems","filterItems","selectedItems","isIds","getOption","getKeyLeaves","maxArr","maxValue","minArr","minValue","$cellCss","numHelper","substr","rules","equal","not_equal","more_equal","more","less_equal","less","range","range_inc","multi","contains","map","fvalues","args","totalOperations","parseInt","pullTotal","totalOptions","getOptions","getTotalOption","yScaleWidth","headerTemplate","toFixed","setFirstColumn","readonlyTitle","exportAsTree","extRender","_loadResults","silent","url","$onLoad","load","success","JSON","_selects","multiselect","richselect","clear","getIndex","_pivotchart","_filters3","templates","groupNameToStr","groupNameToObject","arr","seriesTitle","_capitalize","templates_setter","chartMap","border","alpha","radius","borderColor","fill","disableItems","chartMap_setter","editButtonWidth","getUI","align","inputWidth","tooltip","click","paddingY","paddingX","margin","maxHeight","chart","_pivotPopup","scale","withoutFilters","_setChartConfig","_loadFilteredData","mapConfig","xAxis","yAxis","top","_getSeries","series","legend","singleLegendItem","scheme","$group","_pivot_group","$sort","by","removeAllSeries","charAt","toUpperCase","capitalize","_this","getRange","legendTitle","valign","marker","series_names","sConfig","palette","rowIndex","columnIndex","addGroupMethod","GroupMethods","removeGroupMethod","groupMethods_setter","fields_hash","valueNameHash","_chartpopup","chartTypeLabelWidth","chartTypeWidth","logScaleLabelWidth","_hidePopups","alert","temp","chartTypes","types","gravity","webix_link_selection","webix_link_title","webix_color_selection","groupLayout","groupHeader","yCount","colorboard","getBody"],"mappings":"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","file":"pivot.js","sourcesContent":["/*\r\n@license\r\nWebix Pivot v.4.1.0\r\nThis software is covered by Webix Commercial License.\r\nUsage without proper license is prohibited.\r\n(c) XB Software Ltd.\r\n*/\r\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/codebase/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\t__webpack_require__(3);\n\t\n\t__webpack_require__(5);\n\t\n\t__webpack_require__(6);\n\t\n\t__webpack_require__(7);\n\t\n\t__webpack_require__(29);\n\t\n\tvar _core = __webpack_require__(16);\n\t\n\tif (!webix.Pivot) webix.Pivot = _core.WebixPivot;\n\n/***/ },\n/* 1 */,\n/* 2 */,\n/* 3 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\t\"use strict\";\n\n/***/ },\n/* 4 */,\n/* 5 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\twebix.i18n.pivot = webix.extend(webix.i18n.pivot || {}, {\n\t    apply: \"Apply\",\n\t    bar: \"Bar\",\n\t    cancel: \"Cancel\",\n\t    chartType: \"Chart type\",\n\t    columns: \"Columns\",\n\t    count: \"count\",\n\t    date: \"date\",\n\t    fields: \"Fields\",\n\t    filters: \"Filters\",\n\t    groupBy: \"Group By\",\n\t    line: \"Line\",\n\t    logScale: \"Logarithmic scale\",\n\t    max: \"max\",\n\t    min: \"min\",\n\t    multicombo: \"multi-select\",\n\t    operationNotDefined: \"Operation is not defined\",\n\t    layoutIncorrect: \"pivotLayout should be an Array instance\",\n\t    pivotMessage: \"[Click to configure]\",\n\t    popupHeader: \"Pivot Settings\",\n\t    radar: \"Radar\",\n\t    radarArea: \"Area Radar\",\n\t    rows: \"Rows\",\n\t    select: \"select\",\n\t    settings: \"Settings\",\n\t    stackedBar: \"Stacked Bar\",\n\t    sum: \"sum\",\n\t    text: \"text\",\n\t    total: \"Total\",\n\t    values: \"Values\",\n\t    valuesNotDefined: \"Values or Group field are not defined\",\n\t    windowTitle: \"Pivot Configuration\",\n\t    windowMessage: \"move fields into a required sector\"\n\t});\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\twebix.protoUI({\n\t    name: \"webix_pivot_popup\",\n\t    _selected: null,\n\t    defaults: {\n\t        autoheight: true,\n\t        padding: 0\n\t    },\n\t    $init: function $init(config) {\n\t        webix.extend(config, this._get_ui(config));\n\t        this.$ready.push(this._after_init);\n\t    },\n\t    _get_ui: function _get_ui(config) {\n\t        return {\n\t            body: {\n\t                id: \"list\", view: \"list\", borderless: true, autoheight: true, template: \"#title#\", data: config.data\n\t            }\n\t        };\n\t    },\n\t    _after_init: function _after_init() {\n\t        this.attachEvent(\"onItemClick\", function (id) {\n\t            this._selected = this.$eventSource.getItem(id);\n\t            this.hide();\n\t        });\n\t    },\n\t    getSelected: function getSelected() {\n\t        return this._selected;\n\t    }\n\t}, webix.ui.popup, webix.IdSpace);\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _filters = __webpack_require__(8);\n\t\n\tvar flt = _interopRequireWildcard(_filters);\n\t\n\t__webpack_require__(9);\n\t\n\tvar _freeze_totals = __webpack_require__(15);\n\t\n\tvar frz = _interopRequireWildcard(_freeze_totals);\n\t\n\tvar _core = __webpack_require__(16);\n\t\n\tvar cor = _interopRequireWildcard(_core);\n\t\n\tvar _pivottable = __webpack_require__(25);\n\t\n\tvar _columns = __webpack_require__(26);\n\t\n\tvar _external_processing = __webpack_require__(27);\n\t\n\tvar ext = _interopRequireWildcard(_external_processing);\n\t\n\tvar _filters2 = __webpack_require__(28);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\twebix.protoUI({\n\t\tname: \"pivot\",\n\t\tversion: \"{{version}}\",\n\t\tdefaults: _pivottable.defaults,\n\t\t$init: function $init(config) {\n\t\t\tthis.$view.className += \" webix_pivot\";\n\t\t\t// add DataStore API\n\t\t\tthis.data.provideApi(this, true);\n\t\t\t// add configuration properties\n\t\t\tthis._setConfig(config);\n\t\t\t// event event handlers\n\t\t\tthis._initDataStore(config);\n\t\t\t// alias for $separator\n\t\t\tthis.$separator = this.$divider;\n\t\n\t\t\tthis.filters = new _filters2.Filters();\n\t\t},\n\t\t$divider: \"_'_\",\n\t\t_initDataStore: function _initDataStore(config) {\n\t\t\tif (config.externalProcessing) ext.init(this, config);else {\n\t\t\t\t// render on data update\n\t\t\t\tthis.data.attachEvent(\"onStoreUpdated\", webix.bind(function () {\n\t\t\t\t\t// call render if pivot is initialized\n\t\t\t\t\tif (this.$$(\"data\")) this.render();\n\t\t\t\t}, this));\n\t\t\t\t// filtering\n\t\t\t\tthis.attachEvent(\"onFilterChange\", function () {\n\t\t\t\t\tthis.render(true);\n\t\t\t\t});\n\t\t\t\t// initial rendering\n\t\t\t\tthis.$ready.push(this.render);\n\t\t\t}\n\t\t},\n\t\t_setConfig: function _setConfig(config) {\n\t\t\tif (!config.structure) config.structure = {};\n\t\t\twebix.extend(config.structure, { rows: [], columns: [], values: [], filters: [] });\n\t\t\twebix.extend(config, this._getUI(config));\n\t\t},\n\t\n\t\t_getUI: function _getUI(config) {\n\t\t\tvar filters = { id: \"filters\", view: \"toolbar\", hidden: true, cols: [{}] };\n\t\t\tvar table = {\n\t\t\t\tview: \"treetable\",\n\t\t\t\tid: \"data\",\n\t\t\t\tselect: \"row\",\n\t\t\t\tnavigation: true,\n\t\t\t\tleftSplit: 1,\n\t\t\t\tresizeColumn: true,\n\t\t\t\ton: {\n\t\t\t\t\t\"onHeaderClick\": function onHeaderClick(id) {\n\t\t\t\t\t\tvar pivot = this.getTopParentView();\n\t\t\t\t\t\tif (this.getColumnIndex(id.column) === 0 && !pivot.config.readonly) pivot.configure();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcolumns: []\n\t\t\t};\n\t\n\t\t\tif (config.datatable && _typeof(config.datatable) == \"object\") {\n\t\t\t\tdelete config.datatable.id;\n\t\t\t\twebix.extend(table, config.datatable, true);\n\t\t\t}\n\t\n\t\t\treturn { rows: [filters, table] };\n\t\t},\n\t\t/*\n\t * Shows configuration popup\n\t * */\n\t\tconfigure: function configure() {\n\t\t\tif (!this._configPopup) this._createPopup();\n\t\n\t\t\tvar functions = [];\n\t\t\tfor (var i in this.operations) {\n\t\t\t\tfunctions.push({ name: i, title: this._applyLocale(i) });\n\t\t\t}this._configPopup.define(\"operations\", functions);\n\t\t\tvar pos = webix.html.offset(this.$$(\"data\").getNode());\n\t\t\tthis._configPopup.setPosition(pos.x + 10, pos.y + 10);\n\t\t\tthis._configPopup.define(\"data\", this.getFields());\n\t\t\tthis._configPopup.show();\n\t\t},\n\t\t_createPopup: function _createPopup() {\n\t\t\tvar config = { view: \"webix_pivot_config\", operations: [], pivot: this.config.id };\n\t\t\twebix.extend(config, this.config.popup || {});\n\t\t\tthis._configPopup = webix.ui(config);\n\t\t\tthis.callEvent(\"onPopup\", [this._configPopup]);\n\t\t\tthis._configPopup.attachEvent(\"onApply\", webix.bind(this.setStructure, this));\n\t\t},\n\t\tgetFilterView: function getFilterView() {\n\t\t\treturn this.$$(\"filters\");\n\t\t},\n\t\t/*\n\t  * Renders Pivot\n\t  * */\n\t\trender: function render(skipFilters) {\n\t\t\tvar data;\n\t\t\tif (!this._getPivotData) webix.extend(this, new cor._Pivot(this.config));\n\t\t\tflt.formatFilterValues(this.config.structure.filters);\n\t\t\tdata = this._getPivotData(this.data.pull, this.data.order);\n\t\t\tthis._setData(data, skipFilters);\n\t\t},\n\t\t_setData: function _setData(data, skipFilters) {\n\t\t\t(0, _columns.setColumns)(this, data.header);\n\t\n\t\t\tif (!skipFilters) data.filters = flt.processFilters(this);\n\t\n\t\t\tthis.callEvent(\"onBeforeRender\", [data]);\n\t\n\t\t\tif (data.filters) flt.showFilters(this, data.filters);\n\t\n\t\t\tif (this.config.readonly) this.$$(\"data\").$view.className += \" webix_pivot_readonly\";\n\t\n\t\t\tif (this.config.totalColumn) this.$$(\"data\").define(\"math\", true);\n\t\n\t\t\tif (this.config.footer) this.$$(\"data\").define(\"footer\", true);\n\t\n\t\t\tthis.$$(\"data\").config.columns = data.header;\n\t\t\tthis.$$(\"data\").config.rightSplit = 0;\n\t\t\tthis.$$(\"data\").refreshColumns();\n\t\t\tthis.$$(\"data\").clearAll();\n\t\t\tthis.$$(\"data\").parse(data.data);\n\t\n\t\t\tfrz.freezeTotals(this);\n\t\t},\n\t\t$exportView: function $exportView(options) {\n\t\t\twebix.extend(options, { filterHTML: true });\n\t\t\treturn this.$$(\"data\");\n\t\t},\n\t\t_applyLocale: function _applyLocale(value) {\n\t\t\treturn webix.i18n.pivot[value] || value;\n\t\t},\n\t\t_applyMap: function _applyMap(value) {\n\t\t\treturn this.config.fieldMap[value] || value;\n\t\t},\n\t\tgetFields: function getFields() {\n\t\t\tvar i,\n\t\t\t    field,\n\t\t\t    item,\n\t\t\t    text,\n\t\t\t    fields = [],\n\t\t\t    fieldsHash = {},\n\t\t\t    rowsHash = {},\n\t\t\t    str = this.config.structure,\n\t\t\t    result = { fields: [], rows: [], columns: [], values: [], filters: [] },\n\t\t\t    valuesHash = {};\n\t\n\t\t\tif (!this._pivotFields) {\n\t\t\t\tfor (i = 0; i < Math.min(this.data.count() || 5); i++) {\n\t\t\t\t\titem = this.data.getItem(this.data.getIdByIndex(i));\n\t\t\t\t\tfor (field in item) {\n\t\t\t\t\t\tif (!fieldsHash[field]) {\n\t\t\t\t\t\t\tfields.push(field);\n\t\t\t\t\t\t\tfieldsHash[field] = webix.uid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfields = this._pivotFields;\n\t\t\t\tfor (i = 0; i < fields.length; i++) {\n\t\t\t\t\tfieldsHash[fields[i]] = webix.uid();\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < (str.filters || []).length; i++) {\n\t\t\t\tfield = str.filters[i];\n\t\t\t\tif (!webix.isUndefined(fieldsHash[field.name])) {\n\t\t\t\t\ttext = this._applyMap(field.name);\n\t\t\t\t\tresult.filters.push({ name: field.name, text: text, type: field.type, value: field.value, id: fieldsHash[field.name] });\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0; i < str.rows.length; i++) {\n\t\t\t\tfield = str.rows[i];\n\t\t\t\tif (!webix.isUndefined(fieldsHash[field])) {\n\t\t\t\t\tresult.rows.push({ name: field, text: this._applyMap(field), id: fieldsHash[field] });\n\t\t\t\t\trowsHash[field] = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < str.columns.length; i++) {\n\t\t\t\tfield = _typeof(str.columns[i]) == \"object\" ? str.columns[i].id || i : str.columns[i];\n\t\t\t\tif (!webix.isUndefined(fieldsHash[field]) && webix.isUndefined(rowsHash[field])) {\n\t\t\t\t\tresult.columns.push({ name: field, text: this._applyMap(field), id: fieldsHash[field] });\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < str.values.length; i++) {\n\t\t\t\tfield = str.values[i];\n\t\t\t\tif (!webix.isUndefined(fieldsHash[field.name])) {\n\t\t\t\t\tif (webix.isUndefined(valuesHash[field.name])) {\n\t\t\t\t\t\tvaluesHash[field.name] = i;\n\t\t\t\t\t\ttext = this._applyMap(field.name);\n\t\t\t\t\t\tvar value = {\n\t\t\t\t\t\t\tname: field.name, text: text, id: fieldsHash[field.name],\n\t\t\t\t\t\t\toperation: webix.isArray(field.operation) ? field.operation : [field.operation]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresult.values.push(value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar index = valuesHash[field.name];\n\t\t\t\t\t\tresult.values[index].operation.push(field.operation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfields.sort();\n\t\t\tfor (i = 0; i < fields.length; i++) {\n\t\t\t\tfield = fields[i];\n\t\t\t\tif (!webix.isUndefined(fieldsHash[field])) result.fields.push({ name: field, text: this._applyMap(field), id: fieldsHash[field] });\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t},\n\t\tsetStructure: function setStructure(config) {\n\t\t\tthis.define(\"structure\", config);\n\t\t\tthis.render();\n\t\t},\n\t\tgetStructure: function getStructure() {\n\t\t\treturn this.config.structure;\n\t\t},\n\t\tgetConfigWindow: function getConfigWindow() {\n\t\t\treturn this._configPopup;\n\t\t},\n\t\tprofile_setter: function profile_setter(value) {\n\t\t\tvar c = window.console;\n\t\t\tif (value) {\n\t\t\t\tthis.attachEvent(\"onBeforeLoad\", function () {\n\t\t\t\t\tc.time(\"data loading\");\n\t\t\t\t});\n\t\t\t\tthis.data.attachEvent(\"onParse\", function () {\n\t\t\t\t\tc.timeEnd(\"data loading\");c.time(\"data parsing\");\n\t\t\t\t});\n\t\t\t\tthis.data.attachEvent(\"onStoreLoad\", function () {\n\t\t\t\t\tc.timeEnd(\"data parsing\");c.time(\"data processing\");\n\t\t\t\t});\n\t\t\t\tthis.$ready.push(function () {\n\t\t\t\t\tthis.$$(\"data\").attachEvent(\"onBeforeRender\", function () {\n\t\t\t\t\t\tif (this.count()) {\n\t\t\t\t\t\t\tc.timeEnd(\"data processing\");c.time(\"data rendering\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tthis.$$(\"data\").attachEvent(\"onAfterRender\", function () {\n\t\t\t\t\t\tif (this.count()) webix.delay(function () {\n\t\t\t\t\t\t\tc.timeEnd(\"data rendering\");\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, webix.IdSpace, webix.ui.layout, webix.DataLoader, webix.EventSystem, webix.Settings);\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\texports.formatFilterValues = formatFilterValues;\n\texports.processFilters = processFilters;\n\texports.showFilters = showFilters;\n\tfunction formatFilterValues(filters) {\n\t\tfilters = filters || [];\n\t\tfor (var i = 0; i < filters.length; i++) {\n\t\t\tfilters[i].fvalue = getFormattedValue(filters[i].value);\n\t\t}\n\t}\n\t\n\tfunction getFormattedValue(value) {\n\t\tvalue = value || \"\";\n\t\tif (webix.isDate(value)) {\n\t\t\tvalue = value.valueOf().toString();\n\t\t} else if ((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == \"object\") {\n\t\t\tvalue = \"\";\n\t\t} else if (typeof value == \"string\") {\n\t\t\tif (value.trim) value = value.trim();\n\t\t}\n\t\treturn value;\n\t}\n\t\n\tfunction processFilters(view) {\n\t\tvar i,\n\t\t    f,\n\t\t    config = view.config,\n\t\t    filters = config.structure.filters || [],\n\t\t    item,\n\t\t    items = [],\n\t\t    indexes = {};\n\t\tfor (i = 0; i < filters.length; i++) {\n\t\t\tf = filters[i];\n\t\t\tif (webix.isUndefined(indexes[f.type])) indexes[f.type] = [];\n\t\t\tindexes[f.type].push(i);\n\t\t\titem = {\n\t\t\t\tvalue: f.value, label: view._applyMap(f.name), field: f.name, view: f.type,\n\t\t\t\tlabelAlign: config.filterLabelAlign, labelWidth: config.filterLabelWidth,\n\t\t\t\tminWidth: config.filterMinWidth, maxWidth: config.filterWidth\n\t\t\t};\n\t\t\tif (f.type == \"multicombo\") item.tagMode = false;\n\t\n\t\t\tif (view.filters.isSelect(f.type)) item.options = distinctValues(view, f.name, f.type.indexOf(\"multi\") == -1);\n\t\n\t\t\titems.push(item);\n\t\t}\n\t\n\t\treturn items;\n\t}\n\t\n\tfunction distinctValues(view, field, empty) {\n\t\tvar value,\n\t\t    values = [],\n\t\t    data = view.data.pull,\n\t\t    hash = {};\n\t\n\t\tif (empty) values.push({ value: \"\", id: \"\" });\n\t\n\t\tif (view._pivotOptions && view._pivotOptions[field]) return values.concat(view._pivotOptions[field]);\n\t\n\t\tfor (var obj in data) {\n\t\t\tvalue = data[obj][field];\n\t\t\tif (!webix.isUndefined(value)) {\n\t\t\t\tif (!hash[value]) {\n\t\t\t\t\tvalues.push({ value: value.toString(), id: value.toString() });\n\t\t\t\t\thash[value] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tvar isNumeric = function isNumeric(n) {\n\t\t\treturn !isNaN(parseFloat(n));\n\t\t};\n\t\tvalues.sort(function (a, b) {\n\t\t\tvar val1 = a.value;\n\t\t\tvar val2 = b.value;\n\t\t\tif (!val2) return 1;\n\t\t\tif (!val1) return -1;\n\t\t\tif (!isNumeric(val1) || !isNumeric(val2)) {\n\t\t\t\tval1 = val1.toString().toLowerCase();\n\t\t\t\tval2 = val2.toString().toLowerCase();\n\t\t\t}\n\t\t\treturn val1 > val2 ? 1 : val1 < val2 ? -1 : 0;\n\t\t});\n\t\treturn values;\n\t}\n\t\n\tfunction showFilters(view, filters) {\n\t\tsetEvents(view, filters);\n\t\tvar config = { elements: filters };\n\t\tview.callEvent(\"onViewInit\", [\"filters\", config]);\n\t\tif (config.elements && view.getFilterView()) {\n\t\t\tif (filters.length > 0) {\n\t\t\t\tview.getFilterView().show(true);\n\t\t\t\twebix.ui(filters, view.getFilterView());\n\t\t\t} else {\n\t\t\t\tview.getFilterView().hide();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setEvents(view, filters) {\n\t\tfor (var i = 0; i < filters.length; i++) {\n\t\t\tvar event = void 0,\n\t\t\t    filter = filters[i];\n\t\t\tevent = filter.view == \"text\" ? \"onTimedKeyPress\" : \"onChange\";\n\t\t\tfilter.on = {};\n\t\t\tfilter.on[event] = function () {\n\t\t\t\tchangeFilterValue(view, this.config.field, this.getValue());\n\t\t\t};\n\t\t}\n\t}\n\t\n\tfunction changeFilterValue(view, field, value) {\n\t\tvar filters = view.config.structure.filters;\n\t\tfor (var i = 0; i < filters.length; i++) {\n\t\t\tif (filters[i].name == field) {\n\t\t\t\tfilters[i].value = value;\n\t\t\t\tview.callEvent(\"onFilterChange\", [field, value]);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}return false;\n\t}\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\t__webpack_require__(10);\n\t\n\tvar _popup_clicks = __webpack_require__(11);\n\t\n\tvar clc = _interopRequireWildcard(_popup_clicks);\n\t\n\tvar _tablepopup = __webpack_require__(14);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\twebix.protoUI({\n\t    name: \"webix_pivot_config\",\n\t    defaults: {\n\t        fieldsColumnWidth: 180\n\t    },\n\t    $init: function $init(config) {\n\t        this.$view.className += \" webix_popup webix_pivot\";\n\t    },\n\t    _getUI: function _getUI(config) {\n\t        var structure = webix.copy((0, _tablepopup.getStructureMap)(this, config));\n\t        return this._setStructure(structure, config);\n\t    },\n\t    _lists: [\"filters\", \"columns\", \"rows\", \"values\"],\n\t    _dndCorrection: {\n\t        \"rows\": [\"columns\", \"values\"],\n\t        \"columns\": [\"rows\"],\n\t        \"values\": [\"rows\"]\n\t    },\n\t    _afterInit: function _afterInit() {\n\t        this.attachEvent(\"onItemClick\", function (id) {\n\t            var innerId = this.innerId(id);\n\t            if (innerId == \"cancel\" || innerId == \"apply\") {\n\t                //transform button clicks to events\n\t                var structure = this.getStructure();\n\t\n\t                if (webix.$$(this.config.pivot).callEvent(\"onBefore\" + innerId, [structure])) {\n\t                    this.callEvent(\"on\" + innerId, [structure]);\n\t                    this.hide();\n\t                }\n\t            }\n\t        });\n\t    },\n\t    getStructure: function getStructure() {\n\t        var structure = { rows: [], columns: [], values: [], filters: [] };\n\t\n\t        var rows = this.$$(\"rows\");\n\t        rows.data.each(function (obj) {\n\t            structure.rows.push(obj.name);\n\t        });\n\t\n\t        var columns = this.$$(\"columns\");\n\t        columns.data.each(function (obj) {\n\t            structure.columns.push(obj.name);\n\t        });\n\t\n\t        var values = this.$$(\"values\");\n\t        values.data.each(function (obj) {\n\t            structure.values.push(obj);\n\t        });\n\t\n\t        var filters = this.$$(\"filters\");\n\t        filters.data.each(function (obj) {\n\t            structure.filters.push(obj);\n\t        });\n\t\n\t        var pivot = webix.$$(this.config.pivot);\n\t\n\t        if (pivot.config.structure.columnSort) structure.columnSort = pivot.config.structure.columnSort;\n\t\n\t        return structure;\n\t    }\n\t}, webix.ui.webix_pivot_config_common);\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _popup_clicks = __webpack_require__(11);\n\t\n\tvar clc = _interopRequireWildcard(_popup_clicks);\n\t\n\tvar _set_structure = __webpack_require__(12);\n\t\n\tvar _templates = __webpack_require__(13);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\twebix.protoUI({\n\t\tname: \"webix_pivot_config_common\",\n\t\t$init: function $init(config) {\n\t\t\twebix.extend(config, this.defaults);\n\t\t\twebix.extend(config, this._getUI(config));\n\t\t\tthis.$ready.push(this._afterInit);\n\t\t},\n\t\tdefaults: {\n\t\t\tpadding: 8,\n\t\t\theight: 500,\n\t\t\twidth: 700,\n\t\t\tcancelButtonWidth: 100,\n\t\t\tapplyButtonWidth: 100,\n\t\t\thead: false,\n\t\t\tmodal: true,\n\t\t\tmove: true\n\t\t},\n\t\t_getUI: function _getUI() {\n\t\t\treturn {};\n\t\t},\n\t\t_afterInit: function _afterInit() {},\n\t\tsetStructure: function setStructure(config) {\n\t\t\tthis.define(\"structure\", config);\n\t\t\tthis.render();\n\t\t},\n\t\tgetStructure: function getStructure() {\n\t\t\treturn {};\n\t\t},\n\t\t_lists: [],\n\t\t_dndCorrection: {},\n\t\tdata_setter: function data_setter(value) {\n\t\t\tvar data,\n\t\t\t    i,\n\t\t\t    j,\n\t\t\t    fields = value.fields,\n\t\t\t    lists = this._lists;\n\t\n\t\t\tfields.forEach(function (field) {\n\t\t\t\tlists.forEach(function (listName) {\n\t\t\t\t\tdata = value[listName];\n\t\t\t\t\tdata.forEach(function (item) {\n\t\t\t\t\t\tif (item.name == field.name) field.$css = \" webix_pivot_field_selected\";\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\n\t\t\tthis.$$(\"fields\").clearAll();\n\t\t\tthis.$$(\"fields\").parse(fields);\n\t\t\tthis.$$(\"fields\").filter(function (item) {\n\t\t\t\treturn item.name !== \"id\" && item.name.indexOf(\"$\") !== 0;\n\t\t\t});\n\t\n\t\t\tfor (i = 0; i < lists.length; i++) {\n\t\t\t\tthis.$$(lists[i]).clearAll();\n\t\t\t\tthis.$$(lists[i]).parse(value[lists[i]]);\n\t\t\t}\n\t\t},\n\t\t_dropField: function _dropField(ctx) {\n\t\t\tvar item,\n\t\t\t    from = ctx.from,\n\t\t\t    to = ctx.to;\n\t\t\tif (to && to != from) {\n\t\t\t\titem = webix.copy(from.getItem(ctx.start));\n\t\t\t\tif (to == this.$$(\"fields\")) this._removeListField(this.innerId(from.config.id), item);else this._addListField(this.innerId(to.config.id), item, ctx.index);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\t_addListField: function _addListField(list, item, index) {\n\t\t\tthis._handlers[list].call(this, list, item, index);\n\t\t},\n\t\t_removeListField: function _removeListField(list, item) {\n\t\t\tthis.$$(list).remove(item.id);\n\t\t\tvar lists = this._lists;\n\t\t\tvar found = false;\n\t\t\tfor (var i = 0; !found && i < lists.length; i++) {\n\t\t\t\tthis.$$(lists[i]).data.each(function (field) {\n\t\t\t\t\tif (field.name == item.name) found = field;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!found) this._setPivotFieldCss(item.name, \"\");\n\t\t},\n\t\t_setPivotFieldCss: function _setPivotFieldCss(name, css) {\n\t\t\tthis.$$(\"fields\").data.each(function (item) {\n\t\t\t\tif (item.name == name) {\n\t\t\t\t\titem.$css = \" \" + css;\n\t\t\t\t\tthis.refresh(item.id);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t_handlers: {\n\t\t\t\"filters\": function filters(listName, item) {\n\t\t\t\tvar found = false,\n\t\t\t\t    name = item.name,\n\t\t\t\t    list = this.$$(listName);\n\t\n\t\t\t\tlist.data.each(function (field) {\n\t\t\t\t\tif (field.name == name) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!found) {\n\t\t\t\t\tdelete item.id;\n\t\t\t\t\tlist.add(item);\n\t\t\t\t\tthis._setPivotFieldCss(name, \"webix_pivot_field_selected\");\n\t\t\t\t\tthis._correctLists(name, listName);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"rows\": function rows(listName, item) {\n\t\t\t\tvar found = false,\n\t\t\t\t    name = item.name,\n\t\t\t\t    list = this.$$(listName);\n\t\n\t\t\t\tlist.data.each(function (field) {\n\t\t\t\t\tif (field.name == name) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!found) {\n\t\t\t\t\tdelete item.id;\n\t\t\t\t\tlist.add(item);\n\t\t\t\t\tthis._setPivotFieldCss(name, \"webix_pivot_field_selected\");\n\t\t\t\t\tthis._correctLists(name, listName);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"columns\": function columns(listName, item) {\n\t\t\t\tthis._handlers.rows.call(this, listName, item);\n\t\t\t},\n\t\t\t\"values\": function values(listName, item, index) {\n\t\t\t\tvar targetItem = null,\n\t\t\t\t    list = this.$$(listName);\n\t\t\t\tlist.data.each(function (field) {\n\t\t\t\t\tif (field.name == item.name) {\n\t\t\t\t\t\ttargetItem = field;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (targetItem) {\n\t\t\t\t\tclc.clickHandlers.add.call(this, {}, targetItem.id);\n\t\t\t\t} else {\n\t\t\t\t\tthis._setPivotFieldCss(item.name, \"webix_pivot_field_selected\");\n\t\t\t\t\tlist.add(webix.copy(item), index);\n\t\t\t\t}\n\t\t\t\tthis._correctLists(item.name, listName);\n\t\t\t},\n\t\t\t\"groupBy\": function groupBy(listName, item) {\n\t\t\t\tif (this.$$(listName).data.order.length) {\n\t\t\t\t\tvar id = this.$$(listName).getFirstId();\n\t\t\t\t\tthis._removeListField(listName, this.$$(\"groupBy\").getItem(id));\n\t\t\t\t}\n\t\t\t\tthis._setPivotFieldCss(item.name, \"webix_pivot_field_selected\");\n\t\t\t\tdelete item.id;\n\t\t\t\tthis.$$(listName).add(item);\n\t\t\t\tthis._correctLists(item.name, listName);\n\t\t\t}\n\t\t},\n\t\t_correctLists: function _correctLists(name, listName) {\n\t\t\tvar i,\n\t\t\t    res,\n\t\t\t    lists = this._dndCorrection[listName];\n\t\t\tfor (i = 0; lists && i < lists.length; i++) {\n\t\t\t\tres = null;\n\t\t\t\tthis.$$(lists[i]).data.each(function (item) {\n\t\t\t\t\tif (item.name == name) res = item;\n\t\t\t\t});\n\t\t\t\tif (res) this.$$(lists[i]).remove(res.id);\n\t\t\t}\n\t\t},\n\t\t_setStructure: function _setStructure(structure, config) {\n\t\t\treturn (0, _set_structure.setStructure)(this, \"popup\", structure, config);\n\t\t},\n\t\t_listDragHTML: function _listDragHTML(context) {\n\t\t\tif (context.start) {\n\t\t\t\tvar item = this.getItem(context.start);\n\t\t\t\tcontext.html = this.type.templateStart(item, this.type) + _templates.popupTemplates.listDrag(item) + this.type.templateEnd(item, this.type);\n\t\t\t}\n\t\t},\n\t\t_getListEvents: function _getListEvents() {\n\t\t\treturn {\n\t\t\t\tonBeforeDrop: webix.bind(this._dropField, this),\n\t\t\t\tonBeforeDrag: this._listDragHTML,\n\t\t\t\tonBeforeDragIn: function onBeforeDragIn() {\n\t\t\t\t\twebix.html.addCss(webix.DragControl.getNode(), \"webix_pivot_drag_zone\", true);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}, webix.ui.window, webix.IdSpace);\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\tvar clickHandlers = exports.clickHandlers = {\n\t\t\"add\": function add(e, id) {\n\t\t\tvar item = this.$$(\"values\").getItem(id);\n\t\t\titem.operation.push(\"sum\");\n\t\t\tthis.$$(\"values\").updateItem(id);\n\t\n\t\t\twebix.delay(function () {\n\t\t\t\tvar index = item.operation.length - 1;\n\t\t\t\tvar els = this.$$(\"values\").getItemNode(id).childNodes;\n\t\t\t\tvar el = null;\n\t\t\t\tfor (var i = 0; i < els.length; i++) {\n\t\t\t\t\tel = els[i];\n\t\t\t\t\tif (!el.getAttribute) continue;\n\t\t\t\t\tvar op = el.getAttribute(\"webix_operation\");\n\t\t\t\t\tif (!webix.isUndefined(op) && op == index) break;\n\t\t\t\t}\n\t\t\t\tif (el !== null) clickHandlers.selector.call(this, el, id);\n\t\t\t}, this);\n\t\t},\n\t\t\"filter-selector\": function filterSelector(e, id) {\n\t\t\tvar popup,\n\t\t\t    pivot = webix.$$(this.config.pivot),\n\t\t\t    selector = {\n\t\t\t\tview: \"webix_pivot_popup\", autofit: true,\n\t\t\t\tautoheight: true, width: 150,\n\t\t\t\tdata: getFilterOptions(pivot.filters.get(), pivot._applyLocale)\n\t\t\t};\n\t\t\tpopup = webix.ui(selector);\n\t\t\tpopup.show(e);\n\t\t\tpopup.attachEvent(\"onHide\", webix.bind(function () {\n\t\t\t\tvar sel = popup.getSelected();\n\t\t\t\tif (sel !== null) {\n\t\t\t\t\tvar item = this.$$('filters').getItem(id);\n\t\t\t\t\titem.type = sel.name;\n\t\t\t\t\tthis.$$('filters').updateItem(id);\n\t\t\t\t}\n\t\n\t\t\t\tpopup.close();\n\t\t\t}, this));\n\t\t},\n\t\t\"selector\": function selector(e, id) {\n\t\t\tvar func_selector = {\n\t\t\t\tview: \"webix_pivot_popup\", autofit: true,\n\t\t\t\twidth: 150,\n\t\t\t\tdata: this.config.operations || []\n\t\t\t};\n\t\t\tvar p = webix.ui(func_selector);\n\t\t\tp.show(e);\n\t\t\tp.attachEvent(\"onHide\", webix.bind(function () {\n\t\t\t\tvar index = webix.html.locate(e, \"webix_operation\");\n\t\t\t\tvar sel = p.getSelected();\n\t\t\t\tif (sel !== null) {\n\t\t\t\t\tthis.$$(\"values\").getItem(id).operation[index] = sel.name;\n\t\t\t\t\tthis.$$(\"values\").updateItem(id);\n\t\t\t\t}\n\t\n\t\t\t\tp.close();\n\t\t\t}, this));\n\t\t},\n\t\t\"remove\": function remove(e, id) {\n\t\t\tvar list = webix.$$(e);\n\t\t\tvar listId = this.innerId(list.config.id);\n\t\t\tvar item = this.$$(listId).getItem(id);\n\t\t\tif (listId == \"values\") {\n\t\t\t\tvar index = webix.html.locate(e, \"webix_operation\");\n\t\t\t\tif (item.operation.length > 1) {\n\t\t\t\t\titem.operation.splice(index, 1);\n\t\t\t\t\tthis.$$(\"values\").updateItem(id);\n\t\t\t\t} else {\n\t\t\t\t\tthis._removeListField(\"values\", item);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._removeListField(listId, item);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t};\n\t\n\tfunction getFilterOptions(filters, process) {\n\t\tvar i,\n\t\t    name,\n\t\t    items = [];\n\t\tfor (i = 0; i < filters.length; i++) {\n\t\t\tname = filters[i];\n\t\t\titems.push({ name: name, title: process(name) });\n\t\t}\n\t\treturn items;\n\t}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.setStructure = setStructure;\n\tfunction setStructure(view, baseName, structure, config) {\n\t\tvar uiArrays = [\"rows\", \"cols\"],\n\t\t    uiViews = [\"head\", \"body\"],\n\t\t    popup = view,\n\t\t    eventH = config.on ? config.on.onViewInit : null;\n\t\n\t\tvar checkStructure = function checkStructure(id, obj) {\n\t\t\tvar i, j, name, result;\n\t\n\t\t\tfor (i = 0; i < uiViews.length; i++) {\n\t\t\t\tname = null;\n\t\t\t\tif (obj[uiViews[i]]) {\n\t\t\t\t\tif (typeof obj[uiViews[i]] == \"string\") {\n\t\t\t\t\t\tname = obj[uiViews[i]];\n\t\t\t\t\t\tobj[uiViews[i]] = structure[name];\n\t\t\t\t\t}\n\t\t\t\t\tcheckStructure(name, obj[uiViews[i]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0; i < uiArrays.length; i++) {\n\t\t\t\tif (obj[uiArrays[i]]) {\n\t\t\t\t\tvar elements = obj[uiArrays[i]];\n\t\t\t\t\tfor (j = 0; j < elements.length; j++) {\n\t\t\t\t\t\tname = null;\n\t\t\t\t\t\tif (typeof elements[j] == \"string\") {\n\t\t\t\t\t\t\tname = elements[j];\n\t\t\t\t\t\t\tobj[uiArrays[i]][j] = structure[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckStructure(name, obj[uiArrays[i]][j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (id && id != baseName && !obj.id) obj.id = id;\n\t\n\t\t\tif (id) {\n\t\t\t\tif (eventH) eventH.apply(popup, [id, obj]);\n\t\t\t\twebix.callEvent(\"onViewInit\", [id, obj, popup]);\n\t\t\t}\n\t\t};\n\t\tcheckStructure(baseName, structure[baseName]);\n\t\treturn structure[baseName];\n\t}\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\tvar popupTemplates = exports.popupTemplates = {\n\t\theader: function header(obj) {\n\t\t\treturn webix.i18n.pivot[obj.value];\n\t\t},\n\t\ticonHeader: function iconHeader(obj) {\n\t\t\tif (obj.icon) return \"<span class='webix_pivot_header_icon webix_icon fa-\" + obj.icon + \"'></span>\" + webix.i18n.pivot[obj.value];else return \"<span class='webix_pivot_header_icon'>\" + obj.iconContent + \"</span>\" + webix.i18n.pivot[obj.value];\n\t\t},\n\t\ttableValues: function tableValues(obj) {\n\t\t\tobj.operation = obj.operation || [\"sum\"];\n\t\t\tif (!webix.isArray(obj.operation)) obj.operation = [obj.operation];\n\t\n\t\t\tvar ops = [];\n\t\t\tvar locale = webix.$$(this.config.pivot)._applyLocale;\n\t\t\tfor (var i = 0; i < obj.operation.length; i++) {\n\t\t\t\tvar op = \"<span class='webix_pivot_link' webix_operation='\" + i + \"'>\";\n\t\t\t\top += \"<span>\" + obj.text + \"</span>\";\n\t\t\t\top += \"<span class='webix_link_selection'>\" + locale(obj.operation[i]) + \"</span>\";\n\t\t\t\top += \"<span class='webix_pivot_minus webix_icon fa-times'></span>\";\n\t\t\t\top += \"</span>\";\n\t\t\t\tops.push(op);\n\t\t\t}\n\t\t\treturn ops.join(\" \");\n\t\t},\n\t\tchartValues: function chartValues(obj) {\n\t\t\tobj.operation = obj.operation || [\"sum\"];\n\t\t\tif (!webix.isArray(obj.operation)) obj.operation = [obj.operation];\n\t\n\t\t\tvar ops = [];\n\t\t\tvar pivot = webix.$$(this.config.pivot);\n\t\t\tvar locale = pivot._applyLocale;\n\t\n\t\t\tfor (var i = 0; i < obj.operation.length; i++) {\n\t\t\t\tif (!obj.color) obj.color = [pivot._getColor(this._valueLength)];\n\t\t\t\tif (!obj.color[i]) obj.color.push(pivot._getColor(this._valueLength));\n\t\t\t\tvar op = \"<div class='webix_pivot_link' webix_operation='\" + i + \"'>\";\n\t\t\t\top += \"<div class='webix_color_selection'><div style='background-color:\" + locale(obj.color[i]) + \"'></div></div>\";\n\t\t\t\top += \"<div class='webix_link_title'>\" + obj.text + \"</div>\";\n\t\t\t\top += \"<div class='webix_link_selection'>\" + locale(obj.operation[i]) + \"</div>\";\n\t\n\t\t\t\top += \"<div class='webix_pivot_minus webix_icon fa-times'></div>\";\n\t\t\t\top += \"</div>\";\n\t\t\t\tops.push(op);\n\t\t\t}\n\t\t\tif (this._increaseColorIndex) {\n\t\t\t\tthis._increaseColorIndex = false;\n\t\t\t\tthis._valueLength++;\n\t\t\t}\n\t\t\treturn ops.join(\" \");\n\t\t},\n\t\tfilters: function filters(obj) {\n\t\t\tvar pivot = webix.$$(this.config.pivot);\n\t\t\tobj.type = obj.type || \"select\";\n\t\t\tvar html = \"<a class='webix_pivot_link'>\" + obj.text;\n\t\t\thtml += \" <span class='webix_link_selection'>\" + pivot._applyLocale(obj.type) + \"</span>\";\n\t\t\thtml += \"<span class='webix_pivot_minus webix_icon fa-times'></span>\";\n\t\t\thtml += \"</a> \";\n\t\t\treturn html;\n\t\t},\n\t\trows: function rows(obj) {\n\t\t\tvar html = \"<a class='webix_pivot_link'>\" + obj.text;\n\t\t\thtml += \"<span class='webix_pivot_minus webix_icon fa-times'></span>\";\n\t\t\thtml += \"</a> \";\n\t\t\treturn html;\n\t\t},\n\t\tcolumns: function columns(obj) {\n\t\t\tvar html = \"<a class='webix_pivot_link'>\" + obj.text;\n\t\t\thtml += \"<span class='webix_pivot_minus webix_icon fa-times'></span>\";\n\t\t\thtml += \"</a> \";\n\t\t\treturn html;\n\t\t},\n\t\tgroupBy: function groupBy(obj) {\n\t\t\tvar html = \"<a class='webix_pivot_link'>\" + obj.text;\n\t\t\thtml += \"<span class='webix_pivot_minus webix_icon fa-times'></span>\";\n\t\t\thtml += \"</a> \";\n\t\t\treturn html;\n\t\t},\n\t\tlistDrag: function listDrag(obj) {\n\t\t\treturn \"<a class='webix_pivot_link'>\" + obj.text + \"</a> \";\n\t\t}\n\t};\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.getStructureMap = getStructureMap;\n\t\n\tvar _popup_clicks = __webpack_require__(11);\n\t\n\tvar clc = _interopRequireWildcard(_popup_clicks);\n\t\n\tvar _templates = __webpack_require__(13);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction getStructureMap(view, config) {\n\t\treturn {\n\t\t\t\"popup\": {\n\t\t\t\thead: \"toolbar\",\n\t\t\t\tbody: \"body\"\n\t\t\t},\n\t\t\t\"toolbar\": {\n\t\t\t\tview: \"toolbar\",\n\t\t\t\tcols: [\"configTitle\", \"cancel\", \"apply\"]\n\t\t\t},\n\t\t\t\"configTitle\": { id: \"configTitle\", view: \"label\", label: webix.i18n.pivot.windowTitle || \"\" },\n\t\t\t\"cancel\": { view: \"button\", id: \"cancel\", label: webix.i18n.pivot.cancel, width: config.cancelButtonWidth },\n\t\t\t\"apply\": { view: \"button\", id: \"apply\", type: \"form\", label: webix.i18n.pivot.apply, width: config.applyButtonWidth },\n\t\t\t\"body\": {\n\t\t\t\ttype: \"wide\",\n\t\t\t\trows: [{\n\t\t\t\t\tcols: [\"fieldsLayout\", {\n\t\t\t\t\t\ttype: \"space\",\n\t\t\t\t\t\trows: [{\n\t\t\t\t\t\t\ttype: \"wide\",\n\t\t\t\t\t\t\trows: [\"subTitle\", {\n\t\t\t\t\t\t\t\ttype: \"wide\",\n\t\t\t\t\t\t\t\tcols: [\"filtersLayout\", \"columnsLayout\"]\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\ttype: \"wide\",\n\t\t\t\t\t\t\t\tcols: [\"rowsLayout\", \"valuesLayout\"]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t}]\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\t\"subTitle\": {\n\t\t\t\tcss: \"webix_pivot_transparent\",\n\t\t\t\tborderless: true,\n\t\t\t\ttemplate: \"<div class='webix_pivot_fields_msg'>\" + webix.i18n.pivot.windowMessage || \"\" + \"</div>\",\n\t\t\t\theight: 25\n\t\t\t},\n\t\t\t\"fieldsLayout\": {\n\t\t\t\twidth: config.fieldsColumnWidth,\n\t\t\t\trows: [\"fieldsHeader\", \"fields\"]\n\t\t\t},\n\t\t\t\"filtersLayout\": {\n\t\t\t\trows: [\"filtersHeader\", \"filters\"]\n\t\t\t},\n\t\t\t\"columnsLayout\": {\n\t\t\t\trows: [\"columnsHeader\", \"columns\"]\n\t\t\t},\n\t\t\t\"rowsLayout\": {\n\t\t\t\trows: [\"rowsHeader\", \"rows\"]\n\t\t\t},\n\t\t\t\"valuesLayout\": {\n\t\t\t\trows: [\"valuesHeader\", \"values\"]\n\t\t\t},\n\t\t\t\"fieldsHeader\": {\n\t\t\t\tid: \"fieldsHeader\", data: { value: \"fields\" }, css: \"webix_pivot_header_fields\",\n\t\t\t\ttemplate: _templates.popupTemplates.header, height: 45\n\t\t\t},\n\t\t\t\"fields\": {\n\t\t\t\tid: \"fields\", css: \"webix_pivot_fields\", view: \"list\", scroll: true,\n\t\t\t\ttype: { height: \"auto\" }, drag: true, template: \"<span class='webix_pivot_list_marker'></span>#text#\",\n\t\t\t\ton: view._getListEvents()\n\t\t\t},\n\t\t\t\"filtersHeader\": {\n\t\t\t\tid: \"filtersHeader\", data: { value: \"filters\", icon: \"filter\" },\n\t\t\t\ttemplate: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40\n\t\t\t},\n\t\t\t\"filters\": {\n\t\t\t\tid: \"filters\", view: \"list\", drag: true, css: \"webix_pivot_values\",\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.filters, view),\n\t\t\t\ttype: { height: \"auto\" },\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_pivot_link\": webix.bind(clc.clickHandlers[\"filter-selector\"], view),\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t},\n\t\t\t\ton: view._getListEvents()\n\t\t\t},\n\t\t\t\"columnsHeader\": {\n\t\t\t\tid: \"columnsHeader\", data: { value: \"columns\", icon: \"columns\" },\n\t\t\t\ttemplate: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40\n\t\t\t},\n\t\t\t\"columns\": {\n\t\t\t\tid: \"columns\", view: \"list\", drag: true, type: { height: \"auto\" },\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.columns, view),\n\t\t\t\ton: view._getListEvents(),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"rowsHeader\": {\n\t\t\t\tid: \"rowsHeader\", data: { value: \"rows\", icon: \"list\" },\n\t\t\t\ttemplate: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40\n\t\t\t},\n\t\t\t\"rows\": {\n\t\t\t\tid: \"rows\",\n\t\t\t\tview: \"list\",\n\t\t\t\tdrag: true,\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.rows, view),\n\t\t\t\ttype: { height: \"auto\" },\n\t\t\t\ton: view._getListEvents(),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"valuesHeader\": {\n\t\t\t\tid: \"valuesHeader\", data: { value: \"values\", icon: false, iconContent: \"<b>&Sigma;</b>\" },\n\t\t\t\ttemplate: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40\n\t\t\t},\n\t\t\t\"values\": {\n\t\t\t\tid: \"values\", view: \"list\", scroll: true, drag: true, css: \"webix_pivot_values\", type: { height: \"auto\" },\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.tableValues, view),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_pivot_link\": webix.bind(clc.clickHandlers.selector, view),\n\t\t\t\t\t\"webix_pivot_plus\": webix.bind(clc.clickHandlers.add, view),\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t},\n\t\t\t\ton: view._getListEvents()\n\t\t\t}\n\t\t};\n\t}\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.freezeTotals = freezeTotals;\n\tfunction freezeTotals(view) {\n\t\tif (view.config.freezeTotal) {\n\t\t\tvar i,\n\t\t\t    columns = view.$$(\"data\").config.columns;\n\t\t\tvar width = getWidth(columns);\n\t\t\tvar totalCount = getTotalCount(columns);\n\t\n\t\t\tfor (i = 0; i < view.$$(\"data\").config.leftSplit; i++) {\n\t\t\t\twidth -= columns[i].width;\n\t\t\t}for (i = columns.length - 1; i > columns.length - totalCount; i--) {\n\t\t\t\twidth -= columns[i].width;\n\t\t\t}if (width > 100) {\n\t\t\t\tview.$$(\"data\").config.rightSplit = totalCount;\n\t\t\t\tview.$$(\"data\").refreshColumns();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction getTotalCount(columns) {\n\t\tvar count = 0;\n\t\tfor (var i = columns.length - 1; !count && i >= 0; i--) {\n\t\t\tif (columns[i].header[0] && columns[i].header[0].name == \"total\") count = columns.length - i;\n\t\t}\n\t\treturn count;\n\t}\n\t\n\tfunction getWidth(columns) {\n\t\tvar i,\n\t\t    width = 0;\n\t\tfor (i = 0; i < columns.length; i++) {\n\t\t\twidth += columns[i].width;\n\t\t}return width;\n\t}\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.WebixPivot = exports._Pivot = undefined;\n\t\n\tvar _data = __webpack_require__(17);\n\t\n\tvar _operations = __webpack_require__(24);\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar divider = \"_'_\";\n\t\n\tvar _Pivot = exports._Pivot = function () {\n\t\tfunction _Pivot(config) {\n\t\t\t_classCallCheck(this, _Pivot);\n\t\n\t\t\tthis.$divider = divider;\n\t\t\tthis._initOperations();\n\t\t\tthis.config = config;\n\t\t\tthis._pivotData = new _data.Data(this, this.config);\n\t\t\tif (!this.config.structure) this.config.structure = {};\n\t\t\thlp.extend(this.config.structure, { rows: [], columns: [], values: [], filters: [] });\n\t\t}\n\t\n\t\t_Pivot.prototype._getPivotData = function _getPivotData(pull, order) {\n\t\t\treturn this._pivotData.process(pull, order);\n\t\t};\n\t\n\t\t_Pivot.prototype._initOperations = function _initOperations() {\n\t\t\tvar operations = this._pivotOperations = new _operations.Operations();\n\t\t\tthis.operations = operations.pull;\n\t\t};\n\t\n\t\t_Pivot.prototype.addOperation = function addOperation(name, method, options) {\n\t\t\tthis._pivotOperations.add(name, method, options);\n\t\t};\n\t\n\t\t_Pivot.prototype.addTotalOperation = function addTotalOperation(name, method, options) {\n\t\t\tthis._pivotOperations.addTotal(name, method, options);\n\t\t};\n\t\n\t\treturn _Pivot;\n\t}();\n\t\n\tvar WebixPivot = exports.WebixPivot = function (_Pivot2) {\n\t\t_inherits(WebixPivot, _Pivot2);\n\t\n\t\tfunction WebixPivot() {\n\t\t\t_classCallCheck(this, WebixPivot);\n\t\n\t\t\treturn _possibleConstructorReturn(this, _Pivot2.apply(this, arguments));\n\t\t}\n\t\n\t\tWebixPivot.prototype.getData = function getData(data) {\n\t\t\tvar i,\n\t\t\t    id,\n\t\t\t    option,\n\t\t\t    field,\n\t\t\t    fields = [],\n\t\t\t    fieldsHash = {},\n\t\t\t    filters = this.config.structure.filters,\n\t\t\t    pull = {},\n\t\t\t    options = {},\n\t\t\t    optionsHash = {},\n\t\t\t    operations = this.operations,\n\t\t\t    order = [],\n\t\t\t    result = {};\n\t\n\t\t\tfor (i = 0; i < filters.length; i++) {\n\t\t\t\tif (filters[i].type.indexOf(\"select\") != -1) {\n\t\t\t\t\toptions[filters[i].name] = [];\n\t\t\t\t\toptionsHash[filters[i].name] = {};\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < data.length; i++) {\n\t\t\t\tid = data[i].id = data[i].id || hlp.uid();\n\t\t\t\tpull[id] = data[i];\n\t\t\t\torder.push(id);\n\t\n\t\t\t\tif (i < 5) for (field in data[i]) {\n\t\t\t\t\tif (!fieldsHash[field]) {\n\t\t\t\t\t\tfields.push(field);\n\t\t\t\t\t\tfieldsHash[field] = hlp.uid();\n\t\t\t\t\t}\n\t\t\t\t}for (option in options) {\n\t\t\t\t\tvar value = data[i][option];\n\t\t\t\t\tif (!hlp.isUndefined(value)) {\n\t\t\t\t\t\tif (!optionsHash[option][value]) {\n\t\t\t\t\t\t\toptionsHash[option][value] = 1;\n\t\t\t\t\t\t\toptions[option].push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tresult.options = options;\n\t\t\tresult.fields = fields;\n\t\t\tresult.data = this._getPivotData(pull, order);\n\t\n\t\t\tresult.operations = [];\n\t\t\tfor (id in operations) {\n\t\t\t\tresult.operations.push(id);\n\t\t\t}return result;\n\t\t};\n\t\n\t\treturn WebixPivot;\n\t}(_Pivot);\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.Data = undefined;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tvar _header = __webpack_require__(19);\n\t\n\tvar _total_columns = __webpack_require__(20);\n\t\n\tvar _footer = __webpack_require__(21);\n\t\n\tvar _item_values = __webpack_require__(22);\n\t\n\tvar itm = _interopRequireWildcard(_item_values);\n\t\n\tvar _filters = __webpack_require__(23);\n\t\n\tvar flt = _interopRequireWildcard(_filters);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar Data = exports.Data = function () {\n\t\tfunction Data(master, config) {\n\t\t\t_classCallCheck(this, Data);\n\t\n\t\t\tthis.master = master;\n\t\t\tthis.config = config;\n\t\t}\n\t\n\t\tData.prototype.process = function process(data, order) {\n\t\t\tvar columns,\n\t\t\t    fields,\n\t\t\t    header,\n\t\t\t    i,\n\t\t\t    items,\n\t\t\t    structure = this.structure;\n\t\t\tstructure._header = [];\n\t\t\tstructure._header_hash = {};\n\t\n\t\t\tflt.formatFilterValues(structure.filters);\n\t\t\tflt.setFilterValues(structure.filters);\n\t\n\t\t\tfor (i = 0; i < structure.values.length; i++) {\n\t\t\t\tstructure.values[i].operation = structure.values[i].operation || [\"sum\"];\n\t\t\t\tif (!hlp.isArray(structure.values[i].operation)) structure.values[i].operation = [structure.values[i].operation];\n\t\t\t}\n\t\n\t\t\tcolumns = [];\n\t\t\tfor (i = 0; i < structure.columns.length; i++) {\n\t\t\t\tcolumns[i] = _typeof(structure.columns[i]) == \"object\" ? structure.columns[i].id || i : structure.columns[i];\n\t\t\t}\n\t\n\t\t\tfields = structure.rows.concat(columns);\n\t\t\titems = this.group(data, order, fields);\n\t\n\t\t\theader = {};\n\t\t\tif (structure.rows.length > 0) items = this.processRows(items, structure.rows, structure, header);else {\n\t\t\t\t// there are no rows in structure, only columns and values\n\t\t\t\tthis.processColumns(items, columns, structure, header);\n\t\t\t\titems = [];\n\t\t\t}\n\t\n\t\t\theader = (0, _header.processHeader)(this.master, header);\n\t\n\t\t\titems = (0, _total_columns.addTotalData)(this.master, items);\n\t\n\t\t\tif (this.config.footer) (0, _footer.addFooter)(this.master, header, items);\n\t\n\t\t\tdelete structure._header;\n\t\t\tdelete structure._header_hash;\n\t\n\t\t\treturn { header: header, data: items };\n\t\t};\n\t\n\t\tData.prototype.processColumns = function processColumns(data, columns, structure, header, item, name) {\n\t\t\tvar vname;\n\t\n\t\t\titem = item || {};\n\t\t\tif (columns.length > 0) {\n\t\t\t\tname = name || \"\";\n\t\t\t\tfor (var i in data) {\n\t\t\t\t\tif (!header[i]) header[i] = {};\n\t\t\t\t\tdata[i] = this.processColumns(data[i], columns.slice(1), structure, header[i], item, (name.length > 0 ? name + this.divider : \"\") + i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar values = structure.values;\n\t\t\t\tfor (var id in data) {\n\t\t\t\t\tfor (var _i = 0; _i < values.length; _i++) {\n\t\t\t\t\t\tfor (var j = 0; j < values[_i].operation.length; j++) {\n\t\t\t\t\t\t\tif (name) vname = name + this.divider + values[_i].operation[j] + this.divider + values[_i].name;else // if no columns\n\t\t\t\t\t\t\t\tvname = values[_i].operation[j] + this.divider + values[_i].name;\n\t\t\t\t\t\t\tif (!structure._header_hash[vname]) {\n\t\t\t\t\t\t\t\tstructure._header.push(vname);\n\t\t\t\t\t\t\t\tstructure._header_hash[vname] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (hlp.isUndefined(item[vname])) {\n\t\t\t\t\t\t\t\titem[vname] = [];\n\t\t\t\t\t\t\t\theader[values[_i].operation[j] + this.divider + values[_i].name] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\titem[vname].push({ value: data[id][values[_i].name], id: id });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn item;\n\t\t};\n\t\n\t\tData.prototype.processRows = function processRows(data, rows, structure, header) {\n\t\t\tvar i,\n\t\t\t    item,\n\t\t\t    j,\n\t\t\t    k,\n\t\t\t    value,\n\t\t\t    items = [];\n\t\t\tif (rows.length > 1) {\n\t\t\t\tfor (i in data) {\n\t\t\t\t\tdata[i] = this.processRows(data[i], rows.slice(1), structure, header);\n\t\t\t\t}var values = structure._header;\n\t\n\t\t\t\tfor (i in data) {\n\t\t\t\t\titem = { data: data[i] };\n\t\t\t\t\tfor (j = 0; j < item.data.length; j++) {\n\t\t\t\t\t\tfor (k = 0; k < values.length; k++) {\n\t\t\t\t\t\t\tvalue = values[k];\n\t\t\t\t\t\t\tif (hlp.isUndefined(item[value])) item[value] = [];\n\t\t\t\t\t\t\titem[value].push(item.data[j][value]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setItemValues(item);\n\t\t\t\t\titem.name = i;\n\t\t\t\t\titem.open = true;\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in data) {\n\t\t\t\t\titem = this.processColumns(data[i], structure.columns, structure, header);\n\t\t\t\t\titem.name = i;\n\t\t\t\t\tthis.setItemValues(item);\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn items;\n\t\t};\n\t\n\t\tData.prototype.setItemValues = function setItemValues(item) {\n\t\t\titem = itm.calculateItem(item, {\n\t\t\t\theader: this.structure._header,\n\t\t\t\tdivider: this.divider,\n\t\t\t\toperations: this.operations\n\t\t\t});\n\t\t\titem = itm.setMinMax(item, {\n\t\t\t\theader: this.structure._header,\n\t\t\t\tmax: this.config.max,\n\t\t\t\tmin: this.config.min,\n\t\t\t\tvalues: this.structure.values\n\t\t\t});\n\t\t\treturn item;\n\t\t};\n\t\n\t\tData.prototype.group = function group(data, order, fields) {\n\t\t\tvar i,\n\t\t\t    id,\n\t\t\t    item,\n\t\t\t    hash = {};\n\t\n\t\t\tfor (i = 0; i < order.length; i++) {\n\t\t\t\tid = order[i];\n\t\t\t\titem = data[id];\n\t\t\t\tif (item && flt.filterItem(this.structure.filters, item, this.config.filterMap)) {\n\t\t\t\t\tthis.groupItem(hash, item, fields);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hash;\n\t\t};\n\t\n\t\tData.prototype.groupItem = function groupItem(hash, item, fields) {\n\t\t\tif (fields.length) {\n\t\t\t\tvar value = item[fields[0]];\n\t\t\t\tif (hlp.isUndefined(hash[value])) hash[value] = {};\n\t\t\t\tthis.groupItem(hash[value], item, fields.slice(1));\n\t\t\t} else hash[item.id] = item;\n\t\t};\n\t\n\t\tData.prototype.filterItem = function filterItem(item) {\n\t\t\tvar filters = this.structure.filters || [];\n\t\t\tfor (var i = 0; i < filters.length; i++) {\n\t\t\t\tvar f = filters[i];\n\t\t\t\tif (f.fvalue) {\n\t\t\t\t\tif (hlp.isUndefined(item[f.name])) return false;\n\t\n\t\t\t\t\tvar value = item[f.name].toString().toLowerCase();\n\t\t\t\t\tvar result = f.func(f.fvalue, value);\n\t\n\t\t\t\t\tif (!result) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\n\t\t_createClass(Data, [{\n\t\t\tkey: \"operations\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.master._pivotOperations;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"divider\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.master.$divider;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"structure\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.config.structure;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Data;\n\t}();\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.isArray = isArray;\n\texports.isUndefined = isUndefined;\n\texports.extend = extend;\n\texports.uid = uid;\n\tfunction isArray(obj) {\n\t\treturn Array.isArray ? Array.isArray(obj) : Object.prototype.toString.call(obj) === '[object Array]';\n\t}\n\t\n\tfunction isUndefined(a) {\n\t\treturn typeof a == \"undefined\";\n\t}\n\t\n\tfunction extend(base, source, force) {\n\t\t//copy methods, overwrite existing ones in case of conflict\n\t\tfor (var method in source) {\n\t\t\tif (!base[method] || force) base[method] = source[method];\n\t\t}return base;\n\t}\n\t\n\tvar seed;\n\t\n\tfunction uid() {\n\t\tif (!seed) seed = new Date().valueOf();\n\t\tseed++;\n\t\treturn seed;\n\t}\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.processHeader = processHeader;\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tvar _total_columns = __webpack_require__(20);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\t// default sorting properties\n\tvar sortConfig = {\n\t\tdir: 1,\n\t\tas: function as(a, b) {\n\t\t\tif (isNum(a) && isNum(b)) return sorting.int(a, b);\n\t\t\treturn sorting.string(a, b);\n\t\t}\n\t};\n\t\n\tvar sorting = {\n\t\t\"date\": function date(a, b) {\n\t\t\ta = a - 0;b = b - 0;\n\t\t\treturn a > b ? 1 : a < b ? -1 : 0;\n\t\t},\n\t\t\"int\": function int(a, b) {\n\t\t\ta = a * 1;b = b * 1;\n\t\t\treturn a > b ? 1 : a < b ? -1 : 0;\n\t\t},\n\t\t\"string\": function string(a, b) {\n\t\t\tif (!b) return 1;\n\t\t\tif (!a) return -1;\n\t\t\ta = a.toString().toLowerCase();b = b.toString().toLowerCase();\n\t\t\treturn a > b ? 1 : a < b ? -1 : 0;\n\t\t}\n\t};\n\t\n\tfunction processHeader(view, header) {\n\t\tvar i,\n\t\t    j,\n\t\t    p,\n\t\t    text0,\n\t\t    vConfig,\n\t\t    valuesConfig = view.config.structure.values;\n\t\n\t\theader = sortHeader(view.config.structure, header);\n\t\n\t\theader = getHeader(view, header);\n\t\n\t\tfor (i = 0; i < header.length; i++) {\n\t\t\tvar parts = [];\n\t\t\tfor (j = 0; j < header[i].length; j++) {\n\t\t\t\tparts.push(header[i][j].name);\n\t\t\t} // find value configuration\n\t\t\tvConfig = null;\n\t\t\tvar tmp = parts[parts.length - 1].split(view.$divider);\n\t\t\tfor (j = 0; j < valuesConfig.length && !vConfig; j++) {\n\t\t\t\tif (valuesConfig[j].operation) for (p = 0; p < valuesConfig[j].operation.length; p++) {\n\t\t\t\t\tif (valuesConfig[j].name == tmp[1] && valuesConfig[j].operation[p] == tmp[0]) {\n\t\t\t\t\t\tvConfig = valuesConfig[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\theader[i] = { id: parts.join(view.$divider), header: header[i] };\n\t\t\t// add format\n\t\t\tif (tmp[0] != \"count\") header[i].format = vConfig && vConfig.format ? vConfig.format : view.config.format;\n\t\t}\n\t\n\t\tif (view.callEvent) view.callEvent(\"onHeaderInit\", [header]);\n\t\n\t\tif (view.config.totalColumn && header.length) header = (0, _total_columns.addTotalColumns)(view, header);\n\t\n\t\theader.splice(0, 0, { id: \"name\", template: \"{common.treetable()} #name#\", header: { text: text0 } });\n\t\n\t\treturn header;\n\t}\n\t\n\tfunction isNum(value) {\n\t\treturn !isNaN(parseFloat(value));\n\t}\n\t\n\t/*\n\t* get sort properties for a column\n\t* */\n\tfunction setSortConfig(config, column) {\n\t\tvar sorting = sortConfig;\n\t\tif (config) {\n\t\t\t// for a specific columns\n\t\t\tif (config[column]) sorting = config[column];\n\t\t\t// for the last column (ex. \"gdp (min)\")\n\t\t\telse if (!column && config.$last) sorting = config.$last;\n\t\t\t\t// for any other column\n\t\t\t\telse if (config.$default) sorting = config.$default;\n\t\n\t\t\tif (sorting.dir) sorting.dir = sorting.dir == \"desc\" ? -1 : 1;\n\t\t\thlp.extend(sorting, sortConfig);\n\t\t}\n\t\treturn sorting;\n\t}\n\t\n\tfunction sortHeader(config, header, cIndex) {\n\t\tvar column,\n\t\t    i,\n\t\t    key,\n\t\t    keys,\n\t\t    sorting,\n\t\t    sorted = [];\n\t\n\t\tif (Object.keys && config.columnSort !== false) {\n\t\t\tcIndex = cIndex || 0;\n\t\n\t\t\tcolumn = config.columns[cIndex];\n\t\t\tsorting = setSortConfig(config.columnSort, column);\n\t\t\tkeys = Object.keys(header).sort(function (a, b) {\n\t\t\t\treturn sorting.as(a, b) * sorting.dir;\n\t\t\t});\n\t\t\tcIndex++;\n\t\n\t\t\tfor (i = 0; i < keys.length; i++) {\n\t\t\t\tkey = keys[i];\n\t\t\t\tsorted.push({\n\t\t\t\t\tkey: key,\n\t\t\t\t\tdata: sortHeader(config, header[key], cIndex)\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (key in header) {\n\t\t\t\tsorted.push({\n\t\t\t\t\tkey: key,\n\t\t\t\t\tdata: sortHeader(config, header[key])\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\n\t\treturn sorted;\n\t}\n\t\n\tfunction getHeader(view, data) {\n\t\n\t\tvar first,\n\t\t    i,\n\t\t    item,\n\t\t    j,\n\t\t    h,\n\t\t    tmp,\n\t\t    header = [];\n\t\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\titem = data[i];\n\t\n\t\t\tif (item.data.length) {\n\t\t\t\tvar result = getHeader(view, item.data);\n\t\t\t\tfirst = false;\n\t\t\t\tfor (j = 0; j < result.length; j++) {\n\t\t\t\t\th = result[j];\n\t\t\t\t\th.splice(0, 0, { name: item.key });\n\t\t\t\t\tif (!first) {\n\t\t\t\t\t\th[0].colspan = result.length;\n\t\t\t\t\t\tfirst = true;\n\t\t\t\t\t}\n\t\t\t\t\theader.push(h);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = data[i].key.split(view.$divider);\n\t\t\t\theader.push([{ name: data[i].key, operation: keys[0], text: keys[1] }]);\n\t\t\t}\n\t\t}\n\t\treturn header;\n\t}\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.addTotalColumns = addTotalColumns;\n\texports.addTotalData = addTotalData;\n\tfunction getTotalColumnId(master, name) {\n\t\treturn \"$webixtotal\" + master.$divider + name;\n\t}\n\t\n\tfunction getValues(item, ids) {\n\t\tvar i,\n\t\t    value,\n\t\t    values = [];\n\t\tfor (i = 0; i < ids.length; i++) {\n\t\t\tvalue = item[ids[i]];\n\t\t\tif (!isNaN(parseFloat(value))) values.push(value);\n\t\t}\n\t\treturn values;\n\t}\n\t\n\tfunction addTotalColumns(master, header) {\n\t\tvar groups,\n\t\t    groupData,\n\t\t    groupName,\n\t\t    h,\n\t\t    i,\n\t\t    hRowCount,\n\t\t    parts,\n\t\t    totalCols = [];\n\t\n\t\thRowCount = header[0].header.length;\n\t\t// if no selected columns\n\t\tif (hRowCount < 2) return header;\n\t\n\t\tgroupData = getTotalGroups(master, header);\n\t\tgroups = groupData.groups;\n\t\tmaster._pivotColumnGroups = groups;\n\t\tfor (groupName in groups) {\n\t\t\t// column config\n\t\t\th = {\n\t\t\t\tid: getTotalColumnId(master, groupName),\n\t\t\t\theader: [],\n\t\t\t\tsort: \"int\",\n\t\t\t\twidth: master.config.columnWidth,\n\t\t\t\tformat: master.config.format\n\t\t\t};\n\t\n\t\t\t// set top headers\n\t\t\tfor (i = 0; i < hRowCount - 1; i++) {\n\t\t\t\tif (!i && !totalCols.length) {\n\t\t\t\t\th.header.push({\n\t\t\t\t\t\tname: \"total\",\n\t\t\t\t\t\trowspan: hRowCount - 1,\n\t\t\t\t\t\tcolspan: groupData.count\n\t\t\t\t\t});\n\t\t\t\t} else h.header.push(\"\");\n\t\t\t}\n\t\n\t\t\t// set bottom header\n\t\t\tparts = groupName.split(master.$divider);\n\t\t\th.header.push({\n\t\t\t\tname: groupName,\n\t\t\t\toperation: parts[0],\n\t\t\t\ttext: parts[1]\n\t\t\t});\n\t\n\t\t\ttotalCols.push(h);\n\t\t}\n\t\n\t\treturn header.concat(totalCols);\n\t}\n\t\n\tfunction getOperation(master, name) {\n\t\treturn master._pivotOperations.getTotal(name) || master.operations[name] || null;\n\t}\n\t\n\tfunction getTotalGroups(master, header) {\n\t\tvar groupName,\n\t\t    i,\n\t\t    name,\n\t\t    operation,\n\t\t    parts,\n\t\t    groups = {},\n\t\t    groupCount = 0;\n\t\n\t\tfor (i = 0; i < header.length; i++) {\n\t\t\tparts = header[i].id.split(master.$divider);\n\t\t\tname = parts.pop();\n\t\t\toperation = parts.pop();\n\t\t\tif (operation == \"sum\" || master.config.totalColumn != \"sumOnly\") {\n\t\t\t\tgroupName = operation + master.$divider + name;\n\t\t\t\tif (!groups[groupName]) {\n\t\t\t\t\tgroupCount++;\n\t\t\t\t\tgroups[groupName] = {\n\t\t\t\t\t\toperation: operation,\n\t\t\t\t\t\tids: [],\n\t\t\t\t\t\tformat: header.format\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tgroups[groupName].ids.push(header[i].id);\n\t\t\t}\n\t\t}\n\t\treturn { groups: groups, count: groupCount };\n\t}\n\t\n\tfunction addTotalData(master, items) {\n\t\tvar groups = master._pivotColumnGroups;\n\t\tif (groups) {\n\t\t\tvar group = void 0,\n\t\t\t    i = void 0,\n\t\t\t    ids = void 0,\n\t\t\t    name = void 0;\n\t\t\tfor (name in groups) {\n\t\t\t\tgroup = groups[name];\n\t\t\t\tids = group.ids;\n\t\n\t\t\t\tfor (i = 0; i < items.length; i++) {\n\t\t\t\t\tvar operation = void 0,\n\t\t\t\t\t    columnId = getTotalColumnId(master, name),\n\t\t\t\t\t    result = \"\",\n\t\t\t\t\t    values = getValues(items[i], ids);\n\t\t\t\t\tif (values.length) {\n\t\t\t\t\t\tif (operation = master._pivotOperations.getTotal(name.split(master.$divider)[0])) result = operation.call(master, values, columnId, items[i]);\n\t\t\t\t\t}\n\t\n\t\t\t\t\titems[i][columnId] = result;\n\t\t\t\t\tif (items[i].data) items[i].data = addTotalData(master, items[i].data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t}\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\texports.addFooter = addFooter;\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction addFooter(master, columns, items) {\n\t\tvar config, i, names, operation;\n\t\n\t\tfor (i = 1; i < columns.length; i++) {\n\t\t\tconfig = null;\n\t\t\tnames = columns[i].id.split(master.$divider);\n\t\t\toperation = names[names.length - 2];\n\t\t\tif (master.config.footer == \"sumOnly\") {\n\t\t\t\tif (operation != \"sum\") config = \" \";\n\t\t\t}\n\t\t\tvar totalMethod = master._pivotOperations.getTotal(operation);\n\t\t\tif (!config && totalMethod) {\n\t\t\t\tvar options = master._pivotOperations.getTotalOptions(operation);\n\t\t\t\tvar result = calculateColumn(items, columns[i].id, totalMethod, options && options.leavesOnly);\n\t\t\t\tconfig = {\n\t\t\t\t\t$pivotValue: result,\n\t\t\t\t\t$pivotOperation: operation\n\t\t\t\t};\n\t\t\t} else config = \" \";\n\t\t\tcolumns[i].footer = config;\n\t\n\t\t\tif (_typeof(master.config.footer) == \"object\") {\n\t\t\t\thlp.extend(columns[i].footer, master.config.footer, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction calculateColumn(items, columnId, totalMethod, leaves) {\n\t\tvar i,\n\t\t    fItems = [],\n\t\t    value,\n\t\t    values = [];\n\t\t// filter items\n\t\titems = filterItems(items, leaves);\n\t\t// get column values\n\t\tfor (i = 0; i < items.length; i++) {\n\t\t\tvalue = items[i][columnId];\n\t\t\tif (!isNaN(parseFloat(value))) {\n\t\t\t\tvalues.push(value * 1);\n\t\t\t\tfItems.push(items[i]);\n\t\t\t}\n\t\t}\n\t\treturn totalMethod(values, columnId, fItems);\n\t}\n\t\n\tfunction filterItems(items, leaves, selectedItems) {\n\t\tif (!selectedItems) selectedItems = [];\n\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\tif (leaves && items[i].data) filterItems(items[i].data, leaves, selectedItems);else selectedItems.push(items[i]);\n\t\t}\n\t\treturn selectedItems;\n\t}\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\texports.calculateItem = calculateItem;\n\texports.setMinMax = setMinMax;\n\tfunction calculateItem(item, config) {\n\t\tvar i,\n\t\t    isIds,\n\t\t    key,\n\t\t    leaves,\n\t\t    operation,\n\t\t    tmp,\n\t\t    values,\n\t\t    header = config.header;\n\t\n\t\tfor (i = 0; i < header.length; i++) {\n\t\t\tkey = header[i];\n\t\t\ttmp = key.split(config.divider);\n\t\t\toperation = tmp[tmp.length - 2];\n\t\n\t\t\tvalues = item[key];\n\t\n\t\t\tleaves = config.operations.getOption(operation, \"leavesOnly\");\n\t\t\tisIds = config.operations.getOption(operation, \"ids\");\n\t\t\tif (leaves && item.data) {\n\t\t\t\tvalues = [];\n\t\t\t\tgetKeyLeaves(item.data, key, values);\n\t\t\t}\n\t\t\tif (values) {\n\t\t\t\tvar data = [];\n\t\t\t\tvar ids = [];\n\t\t\t\tfor (var j = 0; j < values.length; j++) {\n\t\t\t\t\tvar value = values[j];\n\t\t\t\t\tvar id = null;\n\t\t\t\t\tif ((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == \"object\") {\n\t\t\t\t\t\tvalue = value.value;\n\t\t\t\t\t\tid = values[j].id;\n\t\t\t\t\t}\n\t\t\t\t\tif (value || value == \"0\") {\n\t\t\t\t\t\tdata.push(value);\n\t\t\t\t\t\tif (id) ids.push(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (data.length) item[key] = config.operations.get(operation)(data, key, item, isIds ? ids : null);else item[key] = '';\n\t\t\t} else item[key] = '';\n\t\t}\n\t\treturn item;\n\t}\n\t\n\tfunction getKeyLeaves(data, key, result) {\n\t\tvar i;\n\t\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tif (data[i].data) getKeyLeaves(data[i].data, key, result);else result.push(data[i][key]);\n\t\t}\n\t}\n\t\n\tfunction setMinMax(item, config) {\n\t\tvar i,\n\t\t    j,\n\t\t    key,\n\t\t    maxArr,\n\t\t    maxValue,\n\t\t    minArr,\n\t\t    minValue,\n\t\t    value,\n\t\t    header = config.header,\n\t\t    max = config.max,\n\t\t    min = config.min,\n\t\t    values = config.values;\n\t\n\t\t// nothing to do\n\t\tif (!min && !max) return item;\n\t\n\t\t//values = structure.values;\n\t\tif (!item.$cellCss) item.$cellCss = {};\n\t\n\t\t// calculating for each value\n\t\tfor (i = 0; i < values.length; i++) {\n\t\t\tvalue = values[i];\n\t\t\tmaxArr = [];\n\t\t\tmaxValue = -99999999;\n\t\t\tminArr = [];\n\t\t\tminValue = 99999999;\n\t\n\t\t\tfor (j = 0; j < header.length; j++) {\n\t\t\t\tkey = header[j];\n\t\t\t\tif (isNaN(item[key])) continue;\n\t\t\t\t// it's a another value\n\t\t\t\tif (key.indexOf(value.name) === -1) continue;\n\t\n\t\t\t\tif (max && item[key] > maxValue) {\n\t\t\t\t\tmaxArr = [key];\n\t\t\t\t\tmaxValue = item[key];\n\t\t\t\t} else if (item[key] == maxValue) {\n\t\t\t\t\tmaxArr.push(key);\n\t\t\t\t}\n\t\t\t\tif (min && item[key] < minValue) {\n\t\t\t\t\tminArr = [key];\n\t\t\t\t\tminValue = item[key];\n\t\t\t\t} else if (item[key] == minValue) {\n\t\t\t\t\tminArr.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (j = 0; j < minArr.length; j++) {\n\t\t\t\titem.$cellCss[minArr[j]] = \"webix_min\";\n\t\t\t}\n\t\t\tfor (j = 0; j < maxArr.length; j++) {\n\t\t\t\titem.$cellCss[maxArr[j]] = \"webix_max\";\n\t\t\t}\n\t\t}\n\t\treturn item;\n\t}\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.rules = undefined;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\texports.setFilterValues = setFilterValues;\n\texports.formatFilterValues = formatFilterValues;\n\texports.filterItem = filterItem;\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction numHelper(fvalue, value, func) {\n\t\tif ((typeof fvalue === \"undefined\" ? \"undefined\" : _typeof(fvalue)) == \"object\") {\n\t\t\tfor (var i = 0; i < fvalue.length; i++) {\n\t\t\t\tfvalue[i] = parseFloat(fvalue[i]);\n\t\t\t\tif (isNaN(fvalue[i])) return true;\n\t\t\t}\n\t\t} else {\n\t\t\tfvalue = parseFloat(fvalue);\n\t\t\t// if filter value is not a number then ignore such filter\n\t\t\tif (isNaN(fvalue)) return true;\n\t\t}\n\t\t// if row value is not a number then don't show this row\n\t\tif (isNaN(value)) return false;\n\t\treturn func(fvalue, value);\n\t}\n\t\n\tvar rules = exports.rules = {\n\t\tcontains: function contains(fvalue, value) {\n\t\t\treturn value.indexOf(fvalue.toString().toLowerCase()) >= 0;\n\t\t},\n\t\tequal: function equal(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn fvalue == value;\n\t\t\t});\n\t\t},\n\t\tnot_equal: function not_equal(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn fvalue != value;\n\t\t\t});\n\t\t},\n\t\tless: function less(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value < fvalue;\n\t\t\t});\n\t\t},\n\t\tless_equal: function less_equal(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value <= fvalue;\n\t\t\t});\n\t\t},\n\t\tmore: function more(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value > fvalue;\n\t\t\t});\n\t\t},\n\t\tmore_equal: function more_equal(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value >= fvalue;\n\t\t\t});\n\t\t},\n\t\tmulti: function multi(fvalues, value) {\n\t\t\tvar result = false;\n\t\t\tfvalues = fvalues.split(\",\");\n\t\t\tfor (var i = 0; i < fvalues.length; i++) {\n\t\t\t\tresult = result || value.indexOf(fvalues[i].toString().toLowerCase()) >= 0;\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\trange: function range(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value < fvalue[1] && value >= fvalue[0];\n\t\t\t});\n\t\t},\n\t\trange_inc: function range_inc(fvalue, value) {\n\t\t\treturn numHelper(fvalue, value, function (fvalue, value) {\n\t\t\t\treturn value <= fvalue[1] && value >= fvalue[0];\n\t\t\t});\n\t\t}\n\t};\n\t\n\tfunction setFilterValues(filters) {\n\t\n\t\tfilters = filters || [];\n\t\tfor (var i = 0; i < filters.length; i++) {\n\t\t\tvar f = filters[i],\n\t\t\t    fvalue = f.fvalue;\n\t\t\tif (typeof fvalue == \"function\") {\n\t\t\t\tf.func = fvalue;\n\t\t\t} else if (fvalue.substr(0, 1) == \"=\") {\n\t\t\t\tf.func = rules.equal;\n\t\t\t\tfvalue = fvalue.substr(1);\n\t\t\t} else if (fvalue.substr(0, 2) == \"<>\") {\n\t\t\t\tf.func = rules.not_equal;\n\t\t\t\tfvalue = fvalue.substr(2);\n\t\t\t} else if (fvalue.substr(0, 2) == \">=\") {\n\t\t\t\tf.func = rules.more_equal;\n\t\t\t\tfvalue = fvalue.substr(2);\n\t\t\t} else if (fvalue.substr(0, 1) == \">\") {\n\t\t\t\tf.func = rules.more;\n\t\t\t\tfvalue = fvalue.substr(1);\n\t\t\t} else if (fvalue.substr(0, 2) == \"<=\") {\n\t\t\t\tf.func = rules.less_equal;\n\t\t\t\tfvalue = fvalue.substr(2);\n\t\t\t} else if (fvalue.substr(0, 1) == \"<\") {\n\t\t\t\tf.func = rules.less;\n\t\t\t\tfvalue = fvalue.substr(1);\n\t\t\t} else if (fvalue.indexOf(\"...\") > 0) {\n\t\t\t\tf.func = rules.range;\n\t\t\t\tfvalue = fvalue.split(\"...\");\n\t\t\t} else if (fvalue.indexOf(\"..\") > 0) {\n\t\t\t\tf.func = rules.range_inc;\n\t\t\t\tfvalue = fvalue.split(\"..\");\n\t\t\t} else if (f.type.indexOf(\"multi\") > -1) {\n\t\t\t\tf.func = rules.multi;\n\t\t\t} else if (f.type == \"datepicker\") {\n\t\t\t\tf.func = function (fvalue, value) {\n\t\t\t\t\treturn fvalue == value;\n\t\t\t\t};\n\t\t\t} else f.func = rules.contains;\n\t\n\t\t\tf.fvalue = fvalue;\n\t\t}\n\t}\n\t\n\tfunction formatFilterValues(filters) {\n\t\tvar i, fvalue;\n\t\tfilters = filters || [];\n\t\tfor (i = 0; i < filters.length; i++) {\n\t\t\tfvalue = filters[i].fvalue || filters[i].value || \"\";\n\t\t\tif (typeof fvalue == \"string\") {\n\t\t\t\tif (fvalue.trim) fvalue = fvalue.trim();\n\t\t\t}\n\t\t\tfilters[i].fvalue = fvalue;\n\t\t}\n\t}\n\t\n\tfunction filterItem(filters, item, map) {\n\t\tif (filters) {\n\t\t\tvar i = void 0,\n\t\t\t    f = void 0;\n\t\t\tfor (i = 0; i < filters.length; i++) {\n\t\t\t\tf = filters[i];\n\t\t\t\tif (f.fvalue) {\n\t\t\t\t\tvar field = map && map[f.name] ? map[f.name] : f.name;\n\t\t\t\t\tif (hlp.isUndefined(item[field])) return false;\n\t\n\t\t\t\t\tvar value = item[field].toString().toLowerCase();\n\t\t\t\t\tvar result = f.func(f.fvalue, value);\n\t\n\t\t\t\t\tif (!result) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.Operations = undefined;\n\t\n\tvar _helpers = __webpack_require__(18);\n\t\n\tvar hlp = _interopRequireWildcard(_helpers);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar operations = {\n\t\tsum: function sum(values) {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\tvar value = values[i];\n\t\t\t\tvalue = parseFloat(value, 10);\n\t\t\t\tif (!isNaN(value)) sum += value;\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\tcount: function count(data, key, item) {\n\t\t\tvar count = 0;\n\t\t\tif (!item.data) count = data.length;else {\n\t\t\t\tfor (var i = 0; i < item.data.length; i++) {\n\t\t\t\t\tcount += item.data[i][key] || 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\t\tmax: function max(args) {\n\t\t\tif (args.length == 1) return args[0];\n\t\t\treturn Math.max.apply(this, args);\n\t\t},\n\t\tmin: function min(args) {\n\t\t\tif (args.length == 1) return args[0];\n\t\t\treturn Math.min.apply(this, args);\n\t\t}\n\t};\n\t\n\tvar totalOperations = {\n\t\t\"sum\": function sum(values) {\n\t\t\tvar i,\n\t\t\t    sum = 0;\n\t\t\tfor (i = 0; i < values.length; i++) {\n\t\t\t\tsum += values[i];\n\t\t\t}return sum;\n\t\t},\n\t\t\"min\": function min(values) {\n\t\t\tif (values.length == 1) return values[0];\n\t\t\treturn Math.min.apply(null, values);\n\t\t},\n\t\t\"max\": function max(values) {\n\t\t\tif (values.length == 1) return values[0];\n\t\t\treturn Math.max.apply(null, values);\n\t\t},\n\t\t\"count\": function count(values) {\n\t\t\tvar value = totalOperations.sum.call(this, values);\n\t\t\treturn value ? parseInt(value, 10) : \"\";\n\t\t}\n\t};\n\t\n\tvar Operations = exports.Operations = function () {\n\t\tfunction Operations() {\n\t\t\t_classCallCheck(this, Operations);\n\t\n\t\t\tthis.pull = hlp.extend({}, operations);\n\t\t\tthis.options = {};\n\t\t\tthis.pullTotal = hlp.extend({}, totalOperations);\n\t\t\tthis.totalOptions = {};\n\t\t}\n\t\n\t\tOperations.prototype.add = function add(name, method, options) {\n\t\t\tthis.pull[name] = method;\n\t\t\tif (options) this.options[name] = options;\n\t\t};\n\t\n\t\tOperations.prototype.addTotal = function addTotal(name, method, options) {\n\t\t\tthis.pullTotal[name] = method;\n\t\t\tif (options) this.totalOptions[name] = options;\n\t\t};\n\t\n\t\tOperations.prototype.get = function get(name) {\n\t\t\treturn this.pull[name] || null;\n\t\t};\n\t\n\t\tOperations.prototype.getOptions = function getOptions(name) {\n\t\t\treturn this.options[name] || null;\n\t\t};\n\t\n\t\tOperations.prototype.getOption = function getOption(name, option) {\n\t\t\treturn this.options[name] ? this.options[name][option] : null;\n\t\t};\n\t\n\t\tOperations.prototype.getTotal = function getTotal(name) {\n\t\t\treturn this.pullTotal[name] || this.pull[name] || null;\n\t\t};\n\t\n\t\tOperations.prototype.getTotalOptions = function getTotalOptions(name) {\n\t\t\treturn this.pullTotal[name] ? this.totalOptions[name] || null : this.options[name] || null;\n\t\t};\n\t\n\t\tOperations.prototype.getTotalOption = function getTotalOption(name, option) {\n\t\t\tvar options = this.getTotalOptions(name);\n\t\t\treturn options ? options[name][option] : null;\n\t\t};\n\t\n\t\treturn Operations;\n\t}();\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\tvar defaults = exports.defaults = {\n\t\tfieldMap: {},\n\t\tyScaleWidth: 300,\n\t\tcolumnWidth: 150,\n\t\tfilterLabelAlign: \"right\",\n\t\tfilterWidth: 300,\n\t\tfilterMinWidth: 150,\n\t\tfilterLabelWidth: 100,\n\t\theaderTemplate: function headerTemplate(config) {\n\t\t\treturn this._applyMap(config.text) + \" (\" + this._applyLocale(config.operation) + \")\";\n\t\t},\n\t\tformat: function format(value) {\n\t\t\treturn value && value != \"0\" ? parseFloat(value).toFixed(3) : value;\n\t\t}\n\t};\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.setColumns = setColumns;\n\tfunction setColumns(master, columns) {\n\t\tvar format = master.config.format;\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tif (!i) {\n\t\t\t\tsetFirstColumn(master, columns[i]);\n\t\t\t} else {\n\t\t\t\twebix.extend(columns[i], {\n\t\t\t\t\tformat: format,\n\t\t\t\t\tsort: \"int\",\n\t\t\t\t\twidth: master.config.columnWidth\n\t\t\t\t});\n\t\t\t\tvar header = columns[i].header;\n\t\n\t\t\t\tfor (var j = 0; j < header.length; j++) {\n\t\t\t\t\tvar h = header[j];\n\t\t\t\t\tif (h) {\n\t\t\t\t\t\tif (!j && h.name == \"total\") h.text = master._applyLocale(\"total\");else if (j == header.length - 1) {\n\t\t\t\t\t\t\th.text = master.config.headerTemplate.call(master, h);\n\t\t\t\t\t\t} else h.text = h.name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tvar footer = columns[i].footer;\n\t\t\t\tif (footer) {\n\t\t\t\t\tvar text = !webix.isUndefined(footer.$pivotValue) ? footer.$pivotValue : footer.text;\n\t\t\t\t\tfooter.text = format && footer.$pivotOperation != \"count\" ? format(text) : text;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setFirstColumn(master, column) {\n\t\tvar text = \"\";\n\t\tif (master.config.readonly) text = master.config.readonlyTitle || \"\";else text = \"<div class='webix_pivot_config_msg'>\" + webix.i18n.pivot.pivotMessage + \"</div>\";\n\t\tcolumn.header = text;\n\t\tcolumn.width = master.config.yScaleWidth;\n\t\tcolumn.exportAsTree = true;\n\t\tif (master.config.footer) column.footer = master._applyLocale(\"total\");\n\t}\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.init = init;\n\t\n\tvar _filters = __webpack_require__(8);\n\t\n\tvar flt = _interopRequireWildcard(_filters);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tfunction init(view, config) {\n\t\twebix.extend(view, extRender, true);\n\t\t// filtering\n\t\tview.attachEvent(\"onFilterChange\", function () {\n\t\t\tflt.formatFilterValues(this.config.structure.filters);\n\t\t\tthis._loadResults(true);\n\t\t});\n\t}\n\t\n\tvar extRender = {\n\t\trender: function render(data) {\n\t\t\tthis.data.silent(function () {\n\t\t\t\tvar url = this.url;\n\t\t\t\tthis.clearAll();\n\t\t\t\tthis.url = url;\n\t\t\t});\n\t\t\tflt.formatFilterValues(this.config.structure.filters);\n\t\t\tif (!data) this._loadResults();else this._setData(data);\n\t\t},\n\t\t$onLoad: function $onLoad(data) {\n\t\t\tif (data.fields) this._pivotFields = data.fields;\n\t\t\tif (data.options) this._pivotOptions = data.options;\n\t\t\tif (data.structure) this.config.structure = data.structure;\n\t\n\t\t\tif (data.operations) {\n\t\t\t\tthis.operations = {};\n\t\t\t\tfor (var i = 0; i < data.operations.length; i++) {\n\t\t\t\t\tthis.operations[data.operations[i]] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (data.data) this.render(data.data);\n\t\t},\n\t\t_loadResults: function _loadResults() {\n\t\t\tvar structure = this.config.structure,\n\t\t\t    url = this.data.url;\n\t\n\t\t\tif (url) {\n\t\t\t\tif (url.load) url.load(this, {\n\t\t\t\t\tsuccess: function success(data) {\n\t\t\t\t\t\tthis.parse(JSON.parse(data));\n\t\t\t\t\t}\n\t\t\t\t}, { structure: structure });else if (typeof url == \"string\") this.load(\"post->\" + url, \"json\", { structure: structure });\n\t\t\t}\n\t\t}\n\t};\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar Filters = exports.Filters = function () {\n\t\tfunction Filters(view) {\n\t\t\t_classCallCheck(this, Filters);\n\t\n\t\t\tthis._filters = [\"datepicker\", \"multicombo\", \"select\", \"text\"];\n\t\t\tthis._selects = { \"multicombo\": 1, \"multiselect\": 1, \"select\": 1, \"richselect\": 1 };\n\t\t}\n\t\n\t\tFilters.prototype.add = function add(name, isSelect) {\n\t\t\tthis._filters.push(name);\n\t\t\tif (!webix.isUndefined(isSelect)) this._selects[name] = isSelect;\n\t\t};\n\t\n\t\tFilters.prototype.isSelect = function isSelect(name) {\n\t\t\treturn this._selects[name];\n\t\t};\n\t\n\t\tFilters.prototype.clear = function clear() {\n\t\t\tthis._filters = [];\n\t\t};\n\t\n\t\tFilters.prototype.remove = function remove(name) {\n\t\t\tvar i = this.getIndex(name);\n\t\t\tif (i >= 0) this._filters.splice(i, 1);\n\t\t};\n\t\n\t\tFilters.prototype.getIndex = function getIndex(name) {\n\t\t\tfor (var i = 0; i < this._filters.length; i++) {\n\t\t\t\tif (this._filters[i] == name) return i;\n\t\t\t}return -1;\n\t\t};\n\t\n\t\tFilters.prototype.get = function get() {\n\t\t\treturn this._filters;\n\t\t};\n\t\n\t\treturn Filters;\n\t}();\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _filters = __webpack_require__(8);\n\t\n\tvar flt = _interopRequireWildcard(_filters);\n\t\n\t__webpack_require__(30);\n\t\n\tvar _pivotchart = __webpack_require__(32);\n\t\n\tvar _filters2 = __webpack_require__(23);\n\t\n\tvar _filters3 = __webpack_require__(28);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\twebix.protoUI({\n\t\tname: \"pivot-chart\",\n\t\tversion: \"{{version}}\",\n\t\tdefaults: _pivotchart.defaults,\n\t\ttemplates: {\n\t\t\tgroupNameToStr: function groupNameToStr(name, operation) {\n\t\t\t\treturn name + \"_\" + operation;\n\t\t\t},\n\t\t\tgroupNameToObject: function groupNameToObject(name) {\n\t\t\t\tvar arr = name.split(\"_\");\n\t\t\t\treturn { name: arr[0], operation: arr[1] };\n\t\t\t},\n\t\t\tseriesTitle: function seriesTitle(data, i) {\n\t\t\t\tvar name = this.config.fieldMap[data.name] || this._capitalize(data.name);\n\t\t\t\tvar operation = webix.isArray(data.operation) ? data.operation[i] : data.operation;\n\t\t\t\treturn name + \" ( \" + (webix.i18n.pivot[operation] || operation) + \")\";\n\t\t\t}\n\t\t},\n\t\ttemplates_setter: function templates_setter(obj) {\n\t\t\tif ((typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj)) == \"object\") webix.extend(this.templates, obj);\n\t\t},\n\t\tchartMap: {\n\t\t\tbar: function bar(color) {\n\t\t\t\treturn {\n\t\t\t\t\tborder: 0,\n\t\t\t\t\talpha: 1,\n\t\t\t\t\tradius: 0,\n\t\t\t\t\tcolor: color\n\t\t\t\t};\n\t\t\t},\n\t\t\tline: function line(color) {\n\t\t\t\treturn {\n\t\t\t\t\talpha: 1,\n\t\t\t\t\titem: {\n\t\t\t\t\t\tborderColor: color,\n\t\t\t\t\t\tcolor: color\n\t\t\t\t\t},\n\t\t\t\t\tline: {\n\t\t\t\t\t\tcolor: color,\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tradar: function radar(color) {\n\t\t\t\treturn {\n\t\t\t\t\talpha: 1,\n\t\t\t\t\tfill: false,\n\t\t\t\t\tdisableItems: true,\n\t\t\t\t\titem: {\n\t\t\t\t\t\tborderColor: color,\n\t\t\t\t\t\tcolor: color\n\t\t\t\t\t},\n\t\t\t\t\tline: {\n\t\t\t\t\t\tcolor: color,\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tchartMap_setter: function chartMap_setter(obj) {\n\t\t\tif ((typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj)) == \"object\") webix.extend(this.chartMap, obj, true);\n\t\t},\n\t\t$init: function $init(config) {\n\t\t\tthis.data.provideApi(this, true);\n\t\t\tif (!config.structure) config.structure = {};\n\t\t\twebix.extend(config.structure, { groupBy: \"\", values: [], filters: [] });\n\t\n\t\t\tthis.$view.className += \" webix_pivot_chart\";\n\t\t\twebix.extend(config, { editButtonWidth: this.defaults.editButtonWidth });\n\t\t\twebix.extend(config, this.getUI(config));\n\t\n\t\t\tthis.$ready.push(webix.bind(function () {\n\t\t\t\twebix.delay(this.render, this); // delay needed for correct legend rendering\n\t\t\t}, this));\n\t\t\tthis.data.attachEvent(\"onStoreUpdated\", webix.bind(function () {\n\t\t\t\t// call render if pivot is initialized\n\t\t\t\tif (this.$$(\"chart\")) this.render();\n\t\t\t}, this));\n\t\n\t\t\tthis.attachEvent(\"onFilterChange\", function () {\n\t\t\t\tthis.render(true);\n\t\t\t});\n\t\n\t\t\tthis.filters = new _filters3.Filters();\n\t\t},\n\t\tgetUI: function getUI(config) {\n\t\t\tvar cols = [];\n\t\t\tcols.push({ id: \"filters\", hidden: true, cols: [] });\n\t\t\tif (!config.readonly) {\n\t\t\t\tcols.push({}, {\n\t\t\t\t\tid: \"edit\", view: \"icon\", type: \"iconButton\", align: \"right\", icon: \"pencil-square-o\", inputWidth: config.editButtonWidth,\n\t\t\t\t\ttooltip: this._applyLocale(\"settings\"), click: webix.bind(this.configure, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar header = {\n\t\t\t\tpaddingY: 10,\n\t\t\t\tpaddingX: 5,\n\t\t\t\tmargin: 10,\n\t\t\t\tmaxHeight: 5,\n\t\t\t\tid: \"toolbar\",\n\t\t\t\tcols: cols\n\t\t\t};\n\t\n\t\t\tvar chart = { id: \"bodyLayout\", type: \"line\", margin: 10, cols: [{ id: \"chart\", view: \"chart\" }] };\n\t\t\treturn { type: \"clean\", rows: [header, chart] };\n\t\t},\n\t\tconfigure: function configure() {\n\t\t\tif (!this._pivotPopup) {\n\t\t\t\tvar config = { view: \"webix_pivot_chart_config\", operations: [], pivot: this.config.id };\n\t\t\t\twebix.extend(config, this.config.popup || {});\n\t\n\t\t\t\tthis._pivotPopup = webix.ui(config);\n\t\t\t\tthis.callEvent(\"onPopup\", [this._pivotPopup]);\n\t\t\t\tthis._pivotPopup.attachEvent(\"onApply\", webix.bind(function (structure) {\n\t\t\t\t\tthis.config.chartType = this._pivotPopup.$$(\"chartType\") ? this._pivotPopup.$$(\"chartType\").getValue() : \"bar\";\n\t\t\t\t\tthis.config.chart.scale = this._pivotPopup.$$(\"logScale\").getValue() ? \"logarithmic\" : \"linear\";\n\t\t\t\t\twebix.extend(this.config.structure, structure, true);\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this));\n\t\t\t}\n\t\n\t\t\tvar functions = [];\n\t\t\tfor (var i in this.operations) {\n\t\t\t\tfunctions.push({ name: i, title: this._applyLocale(i) });\n\t\t\t}this._pivotPopup._valueLength = this._valueLength;\n\t\t\tthis._pivotPopup.define(\"operations\", functions);\n\t\t\tvar pos = webix.html.offset(this.$$(\"chart\").getNode());\n\t\t\tthis._pivotPopup.setPosition(pos.x + 10, pos.y + 10);\n\t\t\tthis._pivotPopup.define(\"data\", this.getFields());\n\t\t\tthis._pivotPopup.show();\n\t\t},\n\t\trender: function render(withoutFilters) {\n\t\t\tif (!withoutFilters) {\n\t\t\t\t// render filters\n\t\t\t\tvar filters = flt.processFilters(this);\n\t\t\t\tflt.showFilters(this, filters);\n\t\t\t}\n\t\t\tthis._setChartConfig();\n\t\t\tthis._loadFilteredData();\n\t\t},\n\t\t_setChartConfig: function _setChartConfig() {\n\t\t\tvar config = this.config;\n\t\t\tvar values = config.structure.values;\n\t\n\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\tvalues[i].operation = values[i].operation || [\"sum\"];\n\t\t\t\tif (!webix.isArray(values[i].operation)) values[i].operation = [values[i].operation];\n\t\t\t}\n\t\n\t\t\tvar chartType = this.config.chartType || \"bar\";\n\t\t\tvar mapConfig = this.chartMap[chartType];\n\t\n\t\t\tvar chart = {\n\t\t\t\t\"type\": mapConfig && mapConfig(\"\").type ? mapConfig(\"\").type : chartType,\n\t\t\t\t\"xAxis\": webix.extend({ template: \"#id#\" }, config.chart.xAxis || {}, true),\n\t\t\t\t\"yAxis\": webix.extend({}, config.chart.yAxis || {})\n\t\t\t};\n\t\n\t\t\twebix.extend(chart, config.chart);\n\t\t\tif (!chart.padding) {\n\t\t\t\tchart.padding = { top: 17 };\n\t\t\t}\n\t\n\t\t\tvar result = this._getSeries();\n\t\n\t\t\tchart.series = result.series;\n\t\n\t\t\tchart.legend = false;\n\t\t\tif (config.singleLegendItem || this._valueLength > 1) {\n\t\t\t\tchart.legend = result.legend;\n\t\t\t}\n\t\n\t\t\tchart.scheme = {\n\t\t\t\t$group: this._pivot_group,\n\t\t\t\t$sort: {\n\t\t\t\t\tby: \"id\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.$$(\"chart\").removeAllSeries();\n\t\t\tfor (var c in chart) {\n\t\t\t\tthis.$$(\"chart\").define(c, chart[c]);\n\t\t\t}\n\t\t},\n\t\t_applyLocale: function _applyLocale(value) {\n\t\t\treturn webix.i18n.pivot[value] || value;\n\t\t},\n\t\t_capitalize: function _capitalize(value) {\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t\t},\n\t\t_applyMap: function _applyMap(value, capitalize) {\n\t\t\treturn this.config.fieldMap[value] || (capitalize ? this._capitalize(value) : value);\n\t\t},\n\t\t_loadFilteredData: function _loadFilteredData() {\n\t\t\tvar filters = this.config.structure.filters;\n\t\n\t\t\tflt.formatFilterValues(filters);\n\t\t\t(0, _filters2.setFilterValues)(filters);\n\t\n\t\t\tthis.data.silent(function () {\n\t\t\t\tvar _this = this;\n\t\n\t\t\t\tthis.data.filter(function (item) {\n\t\t\t\t\treturn (0, _filters2.filterItem)(filters, item, _this.config.filterMap);\n\t\t\t\t});\n\t\t\t}, this);\n\t\t\tthis.$$(\"chart\").data.silent(function () {\n\t\t\t\tthis.$$(\"chart\").clearAll();\n\t\t\t}, this);\n\t\t\tthis.$$(\"chart\").parse(this.data.getRange());\n\t\t\t// reset filtering\n\t\t\tthis.data.silent(function () {\n\t\t\t\tthis.data.filter(\"\");\n\t\t\t}, this);\n\t\t},\n\t\tgroupNameToStr: function groupNameToStr(obj) {\n\t\t\treturn obj.name + \"_\" + obj.operation;\n\t\t},\n\t\tgroupNameToObject: function groupNameToObject(name) {\n\t\t\tvar arr = name.split(\"_\");\n\t\t\treturn { name: arr[0], operation: arr[1] };\n\t\t},\n\t\t_getSeries: function _getSeries() {\n\t\t\tvar i,\n\t\t\t    j,\n\t\t\t    legend,\n\t\t\t    map = {},\n\t\t\t    name,\n\t\t\t    legendTitle,\n\t\t\t    series = [],\n\t\t\t    values = this.config.structure.values;\n\t\n\t\t\t// legend definition\n\t\t\tlegend = {\n\t\t\t\tvalign: \"middle\",\n\t\t\t\talign: \"right\",\n\t\t\t\twidth: 140,\n\t\t\t\tlayout: \"y\"\n\t\t\t};\n\t\t\twebix.extend(legend, this.config.chart.legend || {}, true);\n\t\t\tlegend.values = [];\n\t\t\tif (!legend.marker) legend.marker = {};\n\t\t\tlegend.marker.type = this.config.chartType == \"line\" ? \"item\" : \"s\";\n\t\n\t\t\tthis.series_names = [];\n\t\t\tthis._valueLength = 0;\n\t\n\t\t\tfor (i = 0; i < values.length; i++) {\n\t\t\t\tif (!webix.isArray(values[i].operation)) {\n\t\t\t\t\tvalues[i].operation = [values[i].operation];\n\t\t\t\t}\n\t\t\t\tif (!webix.isArray(values[i].color)) {\n\t\n\t\t\t\t\tvalues[i].color = [values[i].color || this._getColor(this._valueLength)];\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < values[i].operation.length; j++) {\n\t\n\t\t\t\t\tname = this.templates.groupNameToStr(values[i].name, values[i].operation[j]);\n\t\t\t\t\tthis.series_names.push(name);\n\t\t\t\t\tif (!values[i].color[j]) values[i].color[j] = this._getColor(this._valueLength);\n\t\t\t\t\tvar color = values[i].color[j];\n\t\t\t\t\tvar sConfig = this.chartMap[this.config.chartType](color) || {};\n\t\t\t\t\tsConfig.value = \"#\" + name + \"#\";\n\t\t\t\t\tsConfig.tooltip = {\n\t\t\t\t\t\ttemplate: webix.bind(function (obj) {\n\t\t\t\t\t\t\treturn obj[this].toFixed(3);\n\t\t\t\t\t\t}, name)\n\t\t\t\t\t};\n\t\n\t\t\t\t\tseries.push(sConfig);\n\t\t\t\t\tlegendTitle = this.templates.seriesTitle.call(this, values[i], j);\n\t\t\t\t\tlegend.values.push({\n\t\t\t\t\t\ttext: legendTitle,\n\t\t\t\t\t\tcolor: color\n\t\t\t\t\t});\n\t\t\t\t\tmap[name] = [values[i].name, values[i].operation[j]];\n\t\t\t\t\tthis._valueLength++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._pivot_group = {};\n\t\t\tif (values.length) this._pivot_group = webix.copy({\n\t\t\t\tby: this.config.structure.groupBy,\n\t\t\t\tmap: map\n\t\t\t});\n\t\n\t\t\treturn { series: series, legend: legend };\n\t\t},\n\t\t_getColor: function _getColor(i) {\n\t\t\tvar palette = this.config.palette;\n\t\t\tvar rowIndex = i / palette[0].length;\n\t\t\trowIndex = rowIndex > palette.length ? 0 : parseInt(rowIndex, 10);\n\t\t\tvar columnIndex = i % palette[0].length;\n\t\t\treturn palette[rowIndex][columnIndex];\n\t\t},\n\t\toperations: { sum: 1, count: 1, max: 1, min: 1 },\n\t\taddGroupMethod: function addGroupMethod(name, method) {\n\t\t\tthis.operations[name] = 1;\n\t\t\tif (method) webix.GroupMethods[name] = method;\n\t\t},\n\t\tremoveGroupMethod: function removeGroupMethod(name) {\n\t\t\tdelete this.operations[name];\n\t\t},\n\t\tgroupMethods_setter: function groupMethods_setter(obj) {\n\t\t\tfor (var a in obj) {\n\t\t\t\tif (obj.hasOwnProperty(a)) this.addGroupMethod(a, obj[a]);\n\t\t\t}\n\t\t},\n\t\t// fields for edit popup\n\t\tgetFields: function getFields() {\n\t\t\tvar i,\n\t\t\t    fields = [],\n\t\t\t    fields_hash = {};\n\t\n\t\t\tfor (i = 0; i < Math.min(this.data.count() || 5); i++) {\n\t\t\t\tvar item = this.data.getItem(this.data.getIdByIndex(i));\n\t\t\t\tfor (var f in item) {\n\t\t\t\t\tif (!fields_hash[f]) {\n\t\t\t\t\t\tfields.push(f);\n\t\t\t\t\t\tfields_hash[f] = webix.uid();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tvar str = this.config.structure;\n\t\t\tvar result = { fields: [], groupBy: [], values: [], filters: [] };\n\t\n\t\t\tvar field = _typeof(str.groupBy) == \"object\" ? str.groupBy[0] : str.groupBy;\n\t\t\tif (!webix.isUndefined(fields_hash[field])) {\n\t\t\t\tresult.groupBy.push({ name: field, text: this._applyMap(field), id: fields_hash[field] });\n\t\t\t}\n\t\n\t\t\tvar valueNameHash = {};\n\t\t\tvar text;\n\t\t\tfor (i = 0; i < str.values.length; i++) {\n\t\t\t\tfield = str.values[i];\n\t\t\t\tif (!webix.isUndefined(fields_hash[field.name])) {\n\t\t\t\t\ttext = this._applyMap(field.name);\n\t\t\t\t\tif (webix.isUndefined(valueNameHash[field.name])) {\n\t\t\t\t\t\tvalueNameHash[field.name] = result.values.length;\n\t\t\t\t\t\tresult.values.push({ name: field.name, text: text, operation: field.operation, color: field.color || [this._getColor(i)], id: fields_hash[field.name] });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar value = result.values[valueNameHash[field.name]];\n\t\t\t\t\t\tvalue.operation = value.operation.concat(field.operation);\n\t\t\t\t\t\tvalue.color = value.color.concat(field.color || [this._getColor(i)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < (str.filters || []).length; i++) {\n\t\t\t\tfield = str.filters[i];\n\t\t\t\tif (!webix.isUndefined(fields_hash[field.name])) {\n\t\t\t\t\ttext = this._applyMap(field.name);\n\t\t\t\t\tresult.filters.push({ name: field.name, text: text, type: field.type, value: field.value, id: fields_hash[field] });\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfields.sort();\n\t\n\t\t\tfor (i = 0; i < fields.length; i++) {\n\t\t\t\tfield = fields[i];\n\t\t\t\tif (!webix.isUndefined(fields_hash[field])) result.fields.push({ name: field, text: this._applyMap(field), id: fields_hash[field] });\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t},\n\t\tgetStructure: function getStructure() {\n\t\t\treturn this.config.structure;\n\t\t},\n\t\tgetConfigWindow: function getConfigWindow() {\n\t\t\treturn this._pivotPopup;\n\t\t},\n\t\tgetFilterView: function getFilterView() {\n\t\t\treturn this.$$(\"filters\");\n\t\t}\n\t}, webix.IdSpace, webix.ui.layout, webix.DataLoader, webix.EventSystem, webix.Settings);\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\t__webpack_require__(10);\n\t\n\tvar _chartpopup = __webpack_require__(31);\n\t\n\twebix.protoUI({\n\t    name: \"webix_pivot_chart_config\",\n\t    $init: function $init(config) {\n\t        this.$view.className += \" webix_pivot_chart_popup\";\n\t    },\n\t    defaults: {\n\t        chartTypeLabelWidth: 80,\n\t        chartTypeWidth: 250,\n\t        logScaleLabelWidth: 125,\n\t        fieldsColumnWidth: 280\n\t    },\n\t    _getUI: function _getUI(config) {\n\t        var structure = webix.copy((0, _chartpopup.getStructureMap)(this, config));\n\t        return this._setStructure(structure, config);\n\t    },\n\t    _lists: [\"filters\", \"values\", \"groupBy\"],\n\t    _dndCorrection: {\n\t        \"values\": [\"groupBy\"],\n\t        \"groupBy\": [\"values\"]\n\t    },\n\t    _hidePopups: function _hidePopups() {\n\t        webix.callEvent(\"onClick\", []);\n\t    },\n\t    _afterInit: function _afterInit() {\n\t        this.attachEvent(\"onItemClick\", function (id) {\n\t            if (this.$eventSource.name == \"button\") {\n\t                //transform button clicks to events\n\t                var innerId = this.innerId(id),\n\t                    structure = this.getStructure();\n\t\n\t                if (innerId == \"apply\" && (!structure.values.length || !structure.groupBy)) {\n\t                    webix.alert(webix.i18n.pivot.valuesNotDefined);\n\t                } else {\n\t                    if (webix.$$(this.config.pivot).callEvent(\"onBefore\" + innerId, [structure])) {\n\t                        this.callEvent(\"on\" + innerId, [structure]);\n\t                        this.hide();\n\t                    }\n\t                }\n\t            }\n\t        });\n\t    },\n\t    getStructure: function getStructure() {\n\t        var structure = { groupBy: \"\", values: [], filters: [] };\n\t\n\t        var groupBy = this.$$(\"groupBy\");\n\t        if (groupBy.count()) structure.groupBy = groupBy.getItem(groupBy.getFirstId()).name;\n\t\n\t        var values = this.$$(\"values\");\n\t        var temp;\n\t        values.data.each(webix.bind(function (obj) {\n\t            for (var j = 0; j < obj.operation.length; j++) {\n\t                temp = webix.copy(obj);\n\t\n\t                webix.extend(temp, { operation: obj.operation[j], color: obj.color[j] || webix.$$(this.config.pivot).config.color }, true);\n\t\n\t                structure.values.push(temp);\n\t            }\n\t        }, this));\n\t\n\t        var filters = this.$$(\"filters\");\n\t        filters.data.each(function (obj) {\n\t            structure.filters.push(obj);\n\t        });\n\t\n\t        return structure;\n\t    }\n\t}, webix.ui.webix_pivot_config_common);\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.getStructureMap = getStructureMap;\n\t\n\tvar _popup_clicks = __webpack_require__(11);\n\t\n\tvar clc = _interopRequireWildcard(_popup_clicks);\n\t\n\tvar _templates = __webpack_require__(13);\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\t\n\tvar clickHandlers = webix.extend({\n\t\t\"color\": function color(e, id) {\n\t\t\tvar colorboard = {\n\t\t\t\tview: \"colorboard\",\n\t\t\t\tborderless: true\n\t\n\t\t\t};\n\t\t\tif (webix.$$(this.config.pivot).config.colorboard) {\n\t\t\t\twebix.extend(colorboard, webix.$$(this.config.pivot).config.colorboard);\n\t\t\t} else {\n\t\t\t\twebix.extend(colorboard, {\n\t\t\t\t\twidth: 150,\n\t\t\t\t\theight: 150,\n\t\t\t\t\tpalette: webix.$$(this.config.pivot).config.palette\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\tvar p = webix.ui({\n\t\t\t\tview: \"popup\",\n\t\t\t\tid: \"colorsPopup\",\n\t\t\t\tbody: colorboard\n\t\t\t});\n\t\t\tp.show(e);\n\t\t\tp.getBody().attachEvent(\"onSelect\", function () {\n\t\t\t\tp.hide();\n\t\t\t});\n\t\t\tp.attachEvent(\"onHide\", webix.bind(function () {\n\t\t\t\tvar index = webix.html.locate(e, \"webix_operation\");\n\t\t\t\tvar value = p.getBody().getValue();\n\t\t\t\tif (value) {\n\t\t\t\t\tthis.$$(\"values\").getItem(id).color[index] = value;\n\t\t\t\t\tthis.$$(\"values\").updateItem(id);\n\t\t\t\t}\n\t\t\t\tp.close();\n\t\t\t}, this));\n\t\t\treturn false;\n\t\t}\n\t}, clc.clickHandlers);\n\t\n\tfunction getStructureMap(view, config) {\n\t\tvar chartTypes = [];\n\t\tvar pivot = webix.$$(config.pivot);\n\t\tvar types = pivot.chartMap;\n\t\tfor (var type in types) {\n\t\t\tchartTypes.push({ id: type, value: pivot._applyLocale(type) });\n\t\t}\n\t\n\t\treturn {\n\t\t\t\"popup\": {\n\t\t\t\thead: \"toolbar\",\n\t\t\t\tbody: \"body\"\n\t\t\t},\n\t\t\t\"toolbar\": {\n\t\t\t\tview: \"toolbar\",\n\t\t\t\tcols: [\"configTitle\", \"cancel\", \"apply\"]\n\t\t\t},\n\t\t\t\"configTitle\": { id: \"configTitle\", view: \"label\", label: webix.i18n.pivot.windowTitle },\n\t\t\t\"cancel\": { view: \"button\", id: \"cancel\", label: pivot._applyLocale(\"cancel\"), width: config.cancelButtonWidth },\n\t\t\t\"apply\": { view: \"button\", id: \"apply\", type: \"form\", css: \"webix_pivot_apply\", label: pivot._applyLocale(\"apply\"), width: config.applyButtonWidth },\n\t\t\t\"body\": {\n\t\t\t\ttype: \"space\",\n\t\t\t\trows: [{\n\t\n\t\t\t\t\ttype: \"wide\",\n\t\t\t\t\tcols: [\"fieldsLayout\", {\n\t\t\t\t\t\ttype: \"wide\",\n\t\t\t\t\t\trows: [\"filtersLayout\", \"valuesLayout\", \"groupLayout\"]\n\t\t\t\t\t}]\n\t\t\t\t}, \"footer\"]\n\t\t\t},\n\t\t\t\"fieldsLayout\": {\n\t\t\t\twidth: config.fieldsColumnWidth,\n\t\t\t\trows: [\"fieldsHeader\", \"fields\"]\n\t\t\t},\n\t\t\t\"fieldsHeader\": { css: \"webix_pivot_header_fields\", template: \"<div class='webix_pivot_fields_msg'>\" + webix.i18n.pivot.windowMessage || \"\" + \"</div>\", height: 40 },\n\t\t\t\"fields\": {\n\t\t\t\tview: \"list\", type: { height: \"auto\" }, drag: true, template: \"<span class='webix_pivot_list_marker'></span>#text#\",\n\t\t\t\ton: view._getListEvents()\n\t\t\t},\n\t\t\t\"filtersLayout\": {\n\t\t\t\trows: [\"filtersHeader\", \"filters\"]\n\t\t\t},\n\t\t\t\"filtersHeader\": { data: { value: \"filters\", icon: \"filter\" }, template: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40 },\n\t\t\t\"filters\": {\n\t\t\t\tview: \"list\", scroll: true, type: { height: \"auto\" }, gravity: 2, drag: true, css: \"webix_pivot_values\",\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.filters, view),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_link_selection\": webix.bind(clickHandlers[\"filter-selector\"], view),\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t},\n\t\t\t\ton: view._getListEvents()\n\t\t\t},\n\t\t\t\"valuesLayout\": {\n\t\t\t\trows: [\"valuesHeader\", \"values\"]\n\t\t\t},\n\t\t\t\"valuesHeader\": { data: { value: \"values\", icon: \"bar-chart\" }, template: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40 },\n\t\t\t\"values\": {\n\t\t\t\tview: \"list\", scroll: true, gravity: 3, drag: true, css: \"webix_pivot_values\", type: { height: \"auto\" },\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.chartValues, view),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_link_title\": webix.bind(clickHandlers.selector, view),\n\t\t\t\t\t\"webix_link_selection\": webix.bind(clickHandlers.selector, view),\n\t\t\t\t\t\"webix_color_selection\": webix.bind(clickHandlers.color, view),\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clickHandlers.remove, view)\n\t\t\t\t},\n\t\t\t\ton: view._getListEvents()\n\t\t\t},\n\t\t\t\"groupLayout\": {\n\t\t\t\trows: [\"groupHeader\", \"groupBy\"]\n\t\t\t},\n\t\t\t\"groupHeader\": { data: { value: \"groupBy\", icon: \"sitemap\" }, template: _templates.popupTemplates.iconHeader, css: \"webix_pivot_popup_title\", height: 40 },\n\t\t\t\"groupBy\": {\n\t\t\t\tview: \"list\", yCount: 1, scroll: false, drag: true, type: { height: 35 },\n\t\t\t\ttemplate: webix.bind(_templates.popupTemplates.groupBy, view),\n\t\t\t\ton: view._getListEvents(),\n\t\t\t\tonClick: {\n\t\t\t\t\t\"webix_pivot_minus\": webix.bind(clc.clickHandlers.remove, view)\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"footer\": {\n\t\t\t\tborderless: true,\n\t\t\t\tcss: \"webix_pivot_footer\",\n\t\t\t\tcols: [\"logScale\", {}, \"chartType\"]\n\t\t\t},\n\t\t\t\"logScale\": {\n\t\t\t\tview: \"checkbox\", value: pivot.config.chart.scale && pivot.config.chart.scale == \"logarithmic\", label: webix.i18n.pivot.logScale,\n\t\t\t\tlabelWidth: config.logScaleLabelWidth, width: config.logScaleLabelWidth + 20\n\t\t\t},\n\t\t\t\"chartType\": {\n\t\t\t\tview: \"select\", value: pivot.config.chartType, label: webix.i18n.pivot.chartType, options: chartTypes,\n\t\t\t\tlabelWidth: config.chartTypeLabelWidth, width: config.chartTypeWidth\n\t\t\t}\n\t\t};\n\t}\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\tvar defaults = exports.defaults = {\n\t\tfieldMap: {},\n\t\trows: [],\n\t\tfilterLabelAlign: \"right\",\n\t\tfilterWidth: 300,\n\t\tfilterMinWidth: 180,\n\t\teditButtonWidth: 110,\n\t\tfilterLabelWidth: 100,\n\t\tchartType: \"bar\",\n\t\tcolor: \"#36abee\",\n\t\tchart: {},\n\t\tsingleLegendItem: 1,\n\t\tpalette: [[\"#e33fc7\", \"#a244ea\", \"#476cee\", \"#36abee\", \"#58dccd\", \"#a7ee70\"], [\"#d3ee36\", \"#eed236\", \"#ee9336\", \"#ee4339\", \"#595959\", \"#b85981\"], [\"#c670b8\", \"#9984ce\", \"#b9b9e2\", \"#b0cdfa\", \"#a0e4eb\", \"#7faf1b\"], [\"#b4d9a4\", \"#f2f79a\", \"#ffaa7d\", \"#d6806f\", \"#939393\", \"#d9b0d1\"], [\"#780e3b\", \"#684da9\", \"#242464\", \"#205793\", \"#5199a4\", \"#065c27\"], [\"#54b15a\", \"#ecf125\", \"#c65000\", \"#990001\", \"#363636\", \"#800f3e\"]]\n\t};\n\n/***/ }\n/******/ ]);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYTJmODE4ZTYxY2ZmODA4ODQ2NzUiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9waXZvdC5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL2xvY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL3BvcHVwcy9tZW51LmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvcGl2b3R0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL29wZXJhdGlvbnMvZmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL3BvcHVwcy90YWJsZXBvcHVwLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvcG9wdXBzL2NvbW1vbnBvcHVwLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvb3BlcmF0aW9ucy9wb3B1cF9jbGlja3MuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9vcGVyYXRpb25zL3NldF9zdHJ1Y3R1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9zdHJ1Y3R1cmVzL3RlbXBsYXRlcy5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL3N0cnVjdHVyZXMvdGFibGVwb3B1cC5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL29wZXJhdGlvbnMvZnJlZXplX3RvdGFscy5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL2RhdGEvY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL2RhdGEvZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL2RhdGEvaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zb3VyY2VzL2RhdGEvaGVhZGVyLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvZGF0YS90b3RhbF9jb2x1bW5zLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvZGF0YS9mb290ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9kYXRhL2l0ZW1fdmFsdWVzLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvZGF0YS9maWx0ZXJzLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvZGF0YS9vcGVyYXRpb25zLmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvY29uZmlnL3Bpdm90dGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9vcGVyYXRpb25zL2NvbHVtbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9vcGVyYXRpb25zL2V4dGVybmFsX3Byb2Nlc3NpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9zdHJ1Y3R1cmVzL2ZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9waXZvdGNoYXJ0LmpzIiwid2VicGFjazovLy8uL3NvdXJjZXMvcG9wdXBzL2NoYXJ0cG9wdXAuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9zdHJ1Y3R1cmVzL2NoYXJ0cG9wdXAuanMiLCJ3ZWJwYWNrOi8vLy4vc291cmNlcy9jb25maWcvcGl2b3RjaGFydC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7O0FDdENBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBLEtBQUcsQ0FBQyxNQUFNLEtBQVYsRUFDQyxNQUFNLEtBQU4sb0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZELE9BQU0sSUFBTixDQUFXLEtBQVgsR0FBbUIsTUFBTSxNQUFOLENBQWMsTUFBTSxJQUFOLENBQVcsS0FBWCxJQUFrQixFQUFoQyxFQUFvQztBQUNuRCxZQUFPLE9BRDRDO0FBRW5ELFVBQUssS0FGOEM7QUFHbkQsYUFBUSxRQUgyQztBQUluRCxnQkFBVyxZQUp3QztBQUtuRCxjQUFTLFNBTDBDO0FBTW5ELFlBQU8sT0FONEM7QUFPbkQsV0FB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LE9BQU8sbUJBRlIsRUFFOEIsT0FBTyxPQUFPO0FBRjVDO0FBL0dOLEdBQVA7QUFvSEEsRTs7Ozs7Ozs7O0FDdktNLEtBQU0sOEJBQVc7QUFDdkIsWUFBVSxFQURhO0FBRXZCLFFBQUssRUFGa0I7QUFHdkIsb0JBQWtCLE9BSEs7QUFJdkIsZUFBYSxHQUpVO0FBS3ZCLGtCQUFnQixHQUxPO0FBTXZCLG1CQUFpQixHQU5NO0FBT3ZCLG9CQUFrQixHQVBLO0FBUXZCLGFBQVcsS0FSWTtBQVN2QixTQUFPLFNBVGdCO0FBVXZCLFNBQU0sRUFWaUI7QUFXdkIsb0JBQWtCLENBWEs7QUFZdkIsV0FBUyxDQUNSLENBQUMsU0FBRCxFQUFXLFNBQVgsRUFBcUIsU0FBckIsRUFBK0IsU0FBL0IsRUFBeUMsU0FBekMsRUFBbUQsU0FBbkQsQ0FEUSxFQUVSLENBQUMsU0FBRCxFQUFXLFNBQVgsRUFBcUIsU0FBckIsRUFBK0IsU0FBL0IsRUFBeUMsU0FBekMsRUFBbUQsU0FBbkQsQ0FGUSxFQUdSLENBQUUsU0FBRixFQUFZLFNBQVosRUFBc0IsU0FBdEIsRUFBZ0MsU0FBaEMsRUFBMEMsU0FBMUMsRUFBb0QsU0FBcEQsQ0FIUSxFQUlSLENBQUUsU0FBRixFQUFhLFNBQWIsRUFBdUIsU0FBdkIsRUFBa0MsU0FBbEMsRUFBNkMsU0FBN0MsRUFBd0QsU0FBeEQsQ0FKUSxFQUtSLENBQUMsU0FBRCxFQUFXLFNBQVgsRUFBcUIsU0FBckIsRUFBK0IsU0FBL0IsRUFBeUMsU0FBekMsRUFBb0QsU0FBcEQsQ0FMUSxFQU1SLENBQUMsU0FBRCxFQUFXLFNBQVgsRUFBcUIsU0FBckIsRUFBK0IsU0FBL0IsRUFBeUMsU0FBekMsRUFBb0QsU0FBcEQsQ0FOUTtBQVpjLEVBQWpCLEMiLCJmaWxlIjoicGl2b3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvY29kZWJhc2UvXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL2Jvb3RzdHJhcCBhMmY4MThlNjFjZmY4MDg4NDY3NVxuICoqLyIsImltcG9ydCBcImxlc3MvcGl2b3QubGVzc1wiO1xuXG5pbXBvcnQgXCJsb2NhbGUuanNcIjtcbmltcG9ydCBcInBvcHVwcy9tZW51LmpzXCI7XG5pbXBvcnQgXCJwaXZvdHRhYmxlLmpzXCI7XG5pbXBvcnQgXCJwaXZvdGNoYXJ0LmpzXCI7XG5cbmltcG9ydCB7V2ViaXhQaXZvdH0gZnJvbSBcImRhdGEvY29yZS5qc1wiO1xuXG5pZighd2ViaXguUGl2b3QpXG5cdHdlYml4LlBpdm90ID0gV2ViaXhQaXZvdDtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9waXZvdC5qc1xuICoqLyIsIndlYml4LmkxOG4ucGl2b3QgPSB3ZWJpeC5leHRlbmQoKHdlYml4LmkxOG4ucGl2b3R8fHt9KSx7XG4gICAgYXBwbHk6IFwiQXBwbHlcIixcbiAgICBiYXI6IFwiQmFyXCIsXG4gICAgY2FuY2VsOiBcIkNhbmNlbFwiLFxuICAgIGNoYXJ0VHlwZTogXCJDaGFydCB0eXBlXCIsXG4gICAgY29sdW1uczogXCJDb2x1bW5zXCIsXG4gICAgY291bnQ6IFwiY291bnRcIixcbiAgICBkYXRlOiBcImRhdGVcIixcbiAgICBmaWVsZHM6IFwiRmllbGRzXCIsXG4gICAgZmlsdGVyczogXCJGaWx0ZXJzXCIsXG4gICAgZ3JvdXBCeTogXCJHcm91cCBCeVwiLFxuICAgIGxpbmU6IFwiTGluZVwiLFxuICAgIGxvZ1NjYWxlOiBcIkxvZ2FyaXRobWljIHNjYWxlXCIsXG4gICAgbWF4OiBcIm1heFwiLFxuICAgIG1pbjogXCJtaW5cIixcbiAgICBtdWx0aWNvbWJvOiBcIm11bHRpLXNlbGVjdFwiLFxuICAgIG9wZXJhdGlvbk5vdERlZmluZWQ6IFwiT3BlcmF0aW9uIGlzIG5vdCBkZWZpbmVkXCIsXG4gICAgbGF5b3V0SW5jb3JyZWN0OiBcInBpdm90TGF5b3V0IHNob3VsZCBiZSBhbiBBcnJheSBpbnN0YW5jZVwiLFxuICAgIHBpdm90TWVzc2FnZTogXCJbQ2xpY2sgdG8gY29uZmlndXJlXVwiLFxuICAgIHBvcHVwSGVhZGVyOiBcIlBpdm90IFNldHRpbmdzXCIsXG4gICAgcmFkYXI6IFwiUmFkYXJcIixcbiAgICByYWRhckFyZWE6IFwiQXJlYSBSYWRhclwiLFxuICAgIHJvd3M6IFwiUm93c1wiLFxuICAgIHNlbGVjdDogXCJzZWxlY3RcIixcbiAgICBzZXR0aW5nczogXCJTZXR0aW5nc1wiLFxuICAgIHN0YWNrZWRCYXI6IFwiU3RhY2tlZCBCYXJcIixcbiAgICBzdW06IFwic3VtXCIsXG4gICAgdGV4dDogXCJ0ZXh0XCIsXG4gICAgdG90YWw6IFwiVG90YWxcIixcbiAgICB2YWx1ZXM6IFwiVmFsdWVzXCIsXG4gICAgdmFsdWVzTm90RGVmaW5lZDogXCJWYWx1ZXMgb3IgR3JvdXAgZmllbGQgYXJlIG5vdCBkZWZpbmVkXCIsXG4gICAgd2luZG93VGl0bGU6IFwiUGl2b3QgQ29uZmlndXJhdGlvblwiLFxuICAgIHdpbmRvd01lc3NhZ2U6IFwibW92ZSBmaWVsZHMgaW50byBhIHJlcXVpcmVkIHNlY3RvclwiXG59KTtcblxuXG5cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9sb2NhbGUuanNcbiAqKi8iLCJ3ZWJpeC5wcm90b1VJKHtcbiAgICBuYW1lOlwid2ViaXhfcGl2b3RfcG9wdXBcIixcbiAgICBfc2VsZWN0ZWQ6IG51bGwsXG4gICAgZGVmYXVsdHM6e1xuICAgICAgICBhdXRvaGVpZ2h0OiB0cnVlLFxuICAgICAgICBwYWRkaW5nOjBcbiAgICB9LFxuICAgICRpbml0OiBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgd2ViaXguZXh0ZW5kKGNvbmZpZywgdGhpcy5fZ2V0X3VpKGNvbmZpZykpO1xuICAgICAgICB0aGlzLiRyZWFkeS5wdXNoKHRoaXMuX2FmdGVyX2luaXQpO1xuICAgIH0sXG4gICAgX2dldF91aTogZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgaWQ6XCJsaXN0XCIsIHZpZXc6XCJsaXN0XCIsIGJvcmRlcmxlc3M6IHRydWUsIGF1dG9oZWlnaHQ6IHRydWUsIHRlbXBsYXRlOlwiI3RpdGxlI1wiLCBkYXRhOiBjb25maWcuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgX2FmdGVyX2luaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmF0dGFjaEV2ZW50KFwib25JdGVtQ2xpY2tcIiwgZnVuY3Rpb24oaWQpe1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLiRldmVudFNvdXJjZS5nZXRJdGVtKGlkKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGdldFNlbGVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbn0sIHdlYml4LnVpLnBvcHVwLCB3ZWJpeC5JZFNwYWNlKTtcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvcG9wdXBzL21lbnUuanNcbiAqKi8iLCJpbXBvcnQgKiBhcyBmbHQgZnJvbSBcIm9wZXJhdGlvbnMvZmlsdGVycy5qc1wiO1xuXG5pbXBvcnQgXCJwb3B1cHMvdGFibGVwb3B1cC5qc1wiO1xuaW1wb3J0ICogYXMgZnJ6IGZyb20gXCJvcGVyYXRpb25zL2ZyZWV6ZV90b3RhbHMuanNcIjtcbmltcG9ydCAqIGFzIGNvciBmcm9tIFwiZGF0YS9jb3JlLmpzXCI7XG5pbXBvcnQge2RlZmF1bHRzfSBmcm9tIFwiY29uZmlnL3Bpdm90dGFibGUuanNcIjtcbmltcG9ydCB7c2V0Q29sdW1uc30gZnJvbSBcIm9wZXJhdGlvbnMvY29sdW1ucy5qc1wiO1xuaW1wb3J0ICogYXMgZXh0IGZyb20gXCJvcGVyYXRpb25zL2V4dGVybmFsX3Byb2Nlc3NpbmcuanNcIjtcbmltcG9ydCB7RmlsdGVyc30gZnJvbSBcInN0cnVjdHVyZXMvZmlsdGVycy5qc1wiO1xuXG53ZWJpeC5wcm90b1VJKHtcblx0bmFtZTpcInBpdm90XCIsXG5cdHZlcnNpb246XCJ7e3ZlcnNpb259fVwiLFxuXHRkZWZhdWx0czogZGVmYXVsdHMsXG5cdCRpbml0OiBmdW5jdGlvbihjb25maWcpIHtcblx0XHR0aGlzLiR2aWV3LmNsYXNzTmFtZSArPVwiIHdlYml4X3Bpdm90XCI7XG5cdFx0Ly8gYWRkIERhdGFTdG9yZSBBUElcblx0XHR0aGlzLmRhdGEucHJvdmlkZUFwaSh0aGlzLCB0cnVlKTtcblx0XHQvLyBhZGQgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0dGhpcy5fc2V0Q29uZmlnKGNvbmZpZyk7XG5cdFx0Ly8gZXZlbnQgZXZlbnQgaGFuZGxlcnNcblx0XHR0aGlzLl9pbml0RGF0YVN0b3JlKGNvbmZpZyk7XG5cdFx0Ly8gYWxpYXMgZm9yICRzZXBhcmF0b3Jcblx0XHR0aGlzLiRzZXBhcmF0b3IgPSB0aGlzLiRkaXZpZGVyO1xuXG5cdFx0dGhpcy5maWx0ZXJzID0gbmV3IEZpbHRlcnMoKTtcblx0fSxcblx0JGRpdmlkZXI6IFwiXydfXCIsXG5cdF9pbml0RGF0YVN0b3JlOiBmdW5jdGlvbihjb25maWcpe1xuXHRcdGlmKGNvbmZpZy5leHRlcm5hbFByb2Nlc3NpbmcpXG5cdFx0XHRleHQuaW5pdCh0aGlzLGNvbmZpZyk7XG5cdFx0ZWxzZXtcblx0XHRcdC8vIHJlbmRlciBvbiBkYXRhIHVwZGF0ZVxuXHRcdFx0dGhpcy5kYXRhLmF0dGFjaEV2ZW50KFwib25TdG9yZVVwZGF0ZWRcIiwgd2ViaXguYmluZChmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gY2FsbCByZW5kZXIgaWYgcGl2b3QgaXMgaW5pdGlhbGl6ZWRcblx0XHRcdFx0aWYgKHRoaXMuJCQoXCJkYXRhXCIpKSB0aGlzLnJlbmRlcigpO1xuXHRcdFx0fSwgdGhpcykpO1xuXHRcdFx0Ly8gZmlsdGVyaW5nXG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwib25GaWx0ZXJDaGFuZ2VcIiwgZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy5yZW5kZXIodHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdC8vIGluaXRpYWwgcmVuZGVyaW5nXG5cdFx0XHR0aGlzLiRyZWFkeS5wdXNoKHRoaXMucmVuZGVyKTtcblx0XHR9XG5cdH0sXG5cdF9zZXRDb25maWc6IGZ1bmN0aW9uKGNvbmZpZyl7XG5cdFx0aWYgKCFjb25maWcuc3RydWN0dXJlKVxuXHRcdFx0Y29uZmlnLnN0cnVjdHVyZSA9IHt9O1xuXHRcdHdlYml4LmV4dGVuZChjb25maWcuc3RydWN0dXJlLCB7IHJvd3M6W10sIGNvbHVtbnM6W10sIHZhbHVlczpbXSwgZmlsdGVyczpbXSB9KTtcblx0XHR3ZWJpeC5leHRlbmQoY29uZmlnLCB0aGlzLl9nZXRVSShjb25maWcpKTtcblx0fSxcblxuXHRfZ2V0VUk6IGZ1bmN0aW9uKGNvbmZpZykge1xuXHRcdHZhciBmaWx0ZXJzID0geyBpZDpcImZpbHRlcnNcIiwgdmlldzpcInRvb2xiYXJcIiwgaGlkZGVuOnRydWUsIGNvbHM6W1xuXHRcdFx0eyAgfVxuXHRcdF19O1xuXHRcdHZhciB0YWJsZSA9IHtcblx0XHRcdHZpZXc6XCJ0cmVldGFibGVcIixcblx0XHRcdGlkOlwiZGF0YVwiLFxuXHRcdFx0c2VsZWN0OiBcInJvd1wiLFxuXHRcdFx0bmF2aWdhdGlvbjp0cnVlLFxuXHRcdFx0bGVmdFNwbGl0OjEsXG5cdFx0XHRyZXNpemVDb2x1bW46dHJ1ZSxcblx0XHRcdG9uOntcblx0XHRcdFx0XCJvbkhlYWRlckNsaWNrXCI6IGZ1bmN0aW9uKGlkKXtcblx0XHRcdFx0XHR2YXIgcGl2b3QgPSB0aGlzLmdldFRvcFBhcmVudFZpZXcoKTtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRDb2x1bW5JbmRleChpZC5jb2x1bW4pID09PSAwICYmICFwaXZvdC5jb25maWcucmVhZG9ubHkpXG5cdFx0XHRcdFx0XHRwaXZvdC5jb25maWd1cmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6W11cblx0XHR9O1xuXG5cdFx0aWYoY29uZmlnLmRhdGF0YWJsZSAmJiB0eXBlb2YgY29uZmlnLmRhdGF0YWJsZSA9PSBcIm9iamVjdFwiICl7XG5cdFx0XHRkZWxldGUgY29uZmlnLmRhdGF0YWJsZS5pZDtcblx0XHRcdHdlYml4LmV4dGVuZCh0YWJsZSxjb25maWcuZGF0YXRhYmxlLHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IHJvd3M6IFsgZmlsdGVycywgdGFibGUgXSB9O1xuXHR9LFxuXHQvKlxuXHQqIFNob3dzIGNvbmZpZ3VyYXRpb24gcG9wdXBcblx0KiAqL1xuXHRjb25maWd1cmU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICghdGhpcy5fY29uZmlnUG9wdXApXG5cdFx0XHR0aGlzLl9jcmVhdGVQb3B1cCgpO1xuXG5cdFx0dmFyIGZ1bmN0aW9ucyA9IFtdO1xuXHRcdGZvciAodmFyIGkgaW4gdGhpcy5vcGVyYXRpb25zKSBmdW5jdGlvbnMucHVzaCh7bmFtZTogaSwgdGl0bGU6IHRoaXMuX2FwcGx5TG9jYWxlKGkpfSk7XG5cblx0XHR0aGlzLl9jb25maWdQb3B1cC5kZWZpbmUoXCJvcGVyYXRpb25zXCIsIGZ1bmN0aW9ucyk7XG5cdFx0dmFyIHBvcyA9IHdlYml4Lmh0bWwub2Zmc2V0KHRoaXMuJCQoXCJkYXRhXCIpLmdldE5vZGUoKSk7XG5cdFx0dGhpcy5fY29uZmlnUG9wdXAuc2V0UG9zaXRpb24ocG9zLnggKyAxMCwgcG9zLnkgKyAxMCk7XG5cdFx0dGhpcy5fY29uZmlnUG9wdXAuZGVmaW5lKFwiZGF0YVwiLCB0aGlzLmdldEZpZWxkcygpKTtcblx0XHR0aGlzLl9jb25maWdQb3B1cC5zaG93KCk7XG5cdH0sXG5cdF9jcmVhdGVQb3B1cDogZnVuY3Rpb24oKXtcblx0XHR2YXIgY29uZmlnID0geyB2aWV3Olwid2ViaXhfcGl2b3RfY29uZmlnXCIsIG9wZXJhdGlvbnM6W10sIHBpdm90OiB0aGlzLmNvbmZpZy5pZCB9O1xuXHRcdHdlYml4LmV4dGVuZChjb25maWcgLCB0aGlzLmNvbmZpZy5wb3B1cHx8e30pO1xuXHRcdHRoaXMuX2NvbmZpZ1BvcHVwID0gd2ViaXgudWkoY29uZmlnKTtcblx0XHR0aGlzLmNhbGxFdmVudChcIm9uUG9wdXBcIixbdGhpcy5fY29uZmlnUG9wdXBdKTtcblx0XHR0aGlzLl9jb25maWdQb3B1cC5hdHRhY2hFdmVudChcIm9uQXBwbHlcIiwgd2ViaXguYmluZCh0aGlzLnNldFN0cnVjdHVyZSwgdGhpcykpO1xuXHR9LFxuXHRnZXRGaWx0ZXJWaWV3OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLiQkKFwiZmlsdGVyc1wiKTtcblx0fSxcblx0Lypcblx0ICogUmVuZGVycyBQaXZvdFxuXHQgKiAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKHNraXBGaWx0ZXJzKSB7XG5cdFx0dmFyIGRhdGE7XG5cdFx0aWYoIXRoaXMuX2dldFBpdm90RGF0YSlcblx0XHRcdHdlYml4LmV4dGVuZCh0aGlzLCBuZXcgY29yLl9QaXZvdCh0aGlzLmNvbmZpZykpO1xuXHRcdGZsdC5mb3JtYXRGaWx0ZXJWYWx1ZXModGhpcy5jb25maWcuc3RydWN0dXJlLmZpbHRlcnMpO1xuXHRcdGRhdGEgPSB0aGlzLl9nZXRQaXZvdERhdGEodGhpcy5kYXRhLnB1bGwsIHRoaXMuZGF0YS5vcmRlcik7XG5cdFx0dGhpcy5fc2V0RGF0YShkYXRhLCBza2lwRmlsdGVycyk7XG5cdH0sXG5cdF9zZXREYXRhOiBmdW5jdGlvbihkYXRhLCBza2lwRmlsdGVycyl7XG5cdFx0c2V0Q29sdW1ucyh0aGlzLCBkYXRhLmhlYWRlcik7XG5cblx0XHRpZiAoIXNraXBGaWx0ZXJzKVxuXHRcdFx0ZGF0YS5maWx0ZXJzID0gZmx0LnByb2Nlc3NGaWx0ZXJzKHRoaXMpO1xuXG5cdFx0dGhpcy5jYWxsRXZlbnQoXCJvbkJlZm9yZVJlbmRlclwiLFtkYXRhXSk7XG5cblx0XHRpZiAoZGF0YS5maWx0ZXJzKVxuXHRcdFx0Zmx0LnNob3dGaWx0ZXJzKHRoaXMsIGRhdGEuZmlsdGVycyk7XG5cblx0XHRpZih0aGlzLmNvbmZpZy5yZWFkb25seSlcblx0XHRcdHRoaXMuJCQoXCJkYXRhXCIpLiR2aWV3LmNsYXNzTmFtZSArPSBcIiB3ZWJpeF9waXZvdF9yZWFkb25seVwiO1xuXG5cdFx0aWYodGhpcy5jb25maWcudG90YWxDb2x1bW4pXG5cdFx0XHR0aGlzLiQkKFwiZGF0YVwiKS5kZWZpbmUoXCJtYXRoXCIsIHRydWUpO1xuXG5cdFx0aWYodGhpcy5jb25maWcuZm9vdGVyKVxuXHRcdFx0dGhpcy4kJChcImRhdGFcIikuZGVmaW5lKFwiZm9vdGVyXCIsIHRydWUpO1xuXG5cdFx0dGhpcy4kJChcImRhdGFcIikuY29uZmlnLmNvbHVtbnMgPSBkYXRhLmhlYWRlcjtcblx0XHR0aGlzLiQkKFwiZGF0YVwiKS5jb25maWcucmlnaHRTcGxpdCA9IDA7XG5cdFx0dGhpcy4kJChcImRhdGFcIikucmVmcmVzaENvbHVtbnMoKTtcblx0XHR0aGlzLiQkKFwiZGF0YVwiKS5jbGVhckFsbCgpO1xuXHRcdHRoaXMuJCQoXCJkYXRhXCIpLnBhcnNlKGRhdGEuZGF0YSk7XG5cblx0XHRmcnouZnJlZXplVG90YWxzKHRoaXMpO1xuXHR9LFxuXHQkZXhwb3J0VmlldzpmdW5jdGlvbihvcHRpb25zKXtcblx0XHR3ZWJpeC5leHRlbmQob3B0aW9ucywgeyBmaWx0ZXJIVE1MOiB0cnVlIH0pO1xuXHRcdHJldHVybiB0aGlzLiQkKFwiZGF0YVwiKTtcblx0fSxcblx0X2FwcGx5TG9jYWxlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmV0dXJuIHdlYml4LmkxOG4ucGl2b3RbdmFsdWVdfHx2YWx1ZTtcblx0fSxcblx0X2FwcGx5TWFwOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlnLmZpZWxkTWFwW3ZhbHVlXXx8dmFsdWU7XG5cdH0sXG5cdGdldEZpZWxkczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGksIGZpZWxkLCBpdGVtLCB0ZXh0LFxuXHRcdFx0ZmllbGRzID0gW10sXG5cdFx0XHRmaWVsZHNIYXNoID0ge30sXG5cdFx0XHRyb3dzSGFzaCA9IHt9LFxuXHRcdFx0c3RyID0gdGhpcy5jb25maWcuc3RydWN0dXJlLFxuXHRcdFx0cmVzdWx0ID0geyBmaWVsZHM6W10sIHJvd3M6W10sIGNvbHVtbnM6W10sIHZhbHVlczpbXSwgZmlsdGVyczpbXSB9LFxuXHRcdFx0dmFsdWVzSGFzaCA9IHt9O1xuXG5cdFx0aWYoIXRoaXMuX3Bpdm90RmllbGRzKXtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBNYXRoLm1pbih0aGlzLmRhdGEuY291bnQoKSB8fCA1KTsgaSsrKSB7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRhdGEuZ2V0SXRlbSh0aGlzLmRhdGEuZ2V0SWRCeUluZGV4KGkpKTtcblx0XHRcdFx0Zm9yIChmaWVsZCBpbiBpdGVtKSB7XG5cdFx0XHRcdFx0aWYgKCFmaWVsZHNIYXNoW2ZpZWxkXSl7XG5cdFx0XHRcdFx0XHRmaWVsZHMucHVzaChmaWVsZCk7XG5cdFx0XHRcdFx0XHRmaWVsZHNIYXNoW2ZpZWxkXSA9IHdlYml4LnVpZCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRmaWVsZHMgPSB0aGlzLl9waXZvdEZpZWxkcztcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspXG5cdFx0XHRcdGZpZWxkc0hhc2hbZmllbGRzW2ldXSA9IHdlYml4LnVpZCgpO1xuXHRcdH1cblxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IChzdHIuZmlsdGVycyB8fCBbXSkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGZpZWxkID0gc3RyLmZpbHRlcnNbaV07XG5cdFx0XHRpZiAoIXdlYml4LmlzVW5kZWZpbmVkKGZpZWxkc0hhc2hbZmllbGQubmFtZV0pKSB7XG5cdFx0XHRcdHRleHQgPSB0aGlzLl9hcHBseU1hcChmaWVsZC5uYW1lKTtcblx0XHRcdFx0cmVzdWx0LmZpbHRlcnMucHVzaCh7bmFtZTogZmllbGQubmFtZSwgdGV4dDogdGV4dCwgdHlwZTpmaWVsZC50eXBlLCB2YWx1ZTpmaWVsZC52YWx1ZSwgaWQ6IGZpZWxkc0hhc2hbZmllbGQubmFtZV19KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChpID0gMDsgaSA8IHN0ci5yb3dzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmaWVsZCA9IHN0ci5yb3dzW2ldO1xuXHRcdFx0aWYgKCF3ZWJpeC5pc1VuZGVmaW5lZChmaWVsZHNIYXNoW2ZpZWxkXSkpIHtcblx0XHRcdFx0cmVzdWx0LnJvd3MucHVzaCh7bmFtZTogZmllbGQsIHRleHQ6IHRoaXMuX2FwcGx5TWFwKGZpZWxkKSwgaWQ6IGZpZWxkc0hhc2hbZmllbGRdfSk7XG5cdFx0XHRcdHJvd3NIYXNoW2ZpZWxkXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHN0ci5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmaWVsZCA9ICh0eXBlb2Ygc3RyLmNvbHVtbnNbaV0gPT0gXCJvYmplY3RcIj8gKHN0ci5jb2x1bW5zW2ldLmlkfHxpKTogc3RyLmNvbHVtbnNbaV0pO1xuXHRcdFx0aWYgKCF3ZWJpeC5pc1VuZGVmaW5lZChmaWVsZHNIYXNoW2ZpZWxkXSkgJiYgd2ViaXguaXNVbmRlZmluZWQocm93c0hhc2hbZmllbGRdKSkge1xuXHRcdFx0XHRyZXN1bHQuY29sdW1ucy5wdXNoKHtuYW1lOiBmaWVsZCwgdGV4dDogdGhpcy5fYXBwbHlNYXAoZmllbGQpLCBpZDogZmllbGRzSGFzaFtmaWVsZF19KTtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBzdHIudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmaWVsZCA9IHN0ci52YWx1ZXNbaV07XG5cdFx0XHRpZiAoIXdlYml4LmlzVW5kZWZpbmVkKGZpZWxkc0hhc2hbZmllbGQubmFtZV0pKSB7XG5cdFx0XHRcdGlmKHdlYml4LmlzVW5kZWZpbmVkKHZhbHVlc0hhc2hbZmllbGQubmFtZV0pKXtcblx0XHRcdFx0XHR2YWx1ZXNIYXNoW2ZpZWxkLm5hbWVdID0gaTtcblx0XHRcdFx0XHR0ZXh0ID0gdGhpcy5fYXBwbHlNYXAoZmllbGQubmFtZSk7XG5cdFx0XHRcdFx0bGV0IHZhbHVlID0ge1xuXHRcdFx0XHRcdFx0bmFtZTogZmllbGQubmFtZSwgdGV4dDogdGV4dCwgaWQ6IGZpZWxkc0hhc2hbZmllbGQubmFtZV0sXG5cdFx0XHRcdFx0XHRvcGVyYXRpb246d2ViaXguaXNBcnJheShmaWVsZC5vcGVyYXRpb24pP2ZpZWxkLm9wZXJhdGlvbjpbZmllbGQub3BlcmF0aW9uXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0cmVzdWx0LnZhbHVlcy5wdXNoKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdGxldCBpbmRleCA9IHZhbHVlc0hhc2hbZmllbGQubmFtZV07XG5cdFx0XHRcdFx0cmVzdWx0LnZhbHVlc1tpbmRleF0ub3BlcmF0aW9uLnB1c2goZmllbGQub3BlcmF0aW9uKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaWVsZHMuc29ydCgpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGZpZWxkID0gZmllbGRzW2ldO1xuXHRcdFx0aWYgKCF3ZWJpeC5pc1VuZGVmaW5lZChmaWVsZHNIYXNoW2ZpZWxkXSkpXG5cdFx0XHRcdHJlc3VsdC5maWVsZHMucHVzaCh7bmFtZTpmaWVsZCwgdGV4dDogdGhpcy5fYXBwbHlNYXAoZmllbGQpLCBpZDogZmllbGRzSGFzaFtmaWVsZF19KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXHRzZXRTdHJ1Y3R1cmU6IGZ1bmN0aW9uKGNvbmZpZyl7XG5cdFx0dGhpcy5kZWZpbmUoXCJzdHJ1Y3R1cmVcIiwgY29uZmlnKTtcblx0XHR0aGlzLnJlbmRlcigpO1xuXHR9LFxuXHRnZXRTdHJ1Y3R1cmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZy5zdHJ1Y3R1cmU7XG5cdH0sXG5cdGdldENvbmZpZ1dpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5fY29uZmlnUG9wdXA7XG5cdH0sXG5cdHByb2ZpbGVfc2V0dGVyOmZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgYyA9IHdpbmRvdy5jb25zb2xlO1xuXHRcdGlmICh2YWx1ZSl7XG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwib25CZWZvcmVMb2FkXCIsIGZ1bmN0aW9uKCl7IGMudGltZShcImRhdGEgbG9hZGluZ1wiKTsgIH0pO1xuXHRcdFx0dGhpcy5kYXRhLmF0dGFjaEV2ZW50KFwib25QYXJzZVwiLCBmdW5jdGlvbigpeyBjLnRpbWVFbmQoXCJkYXRhIGxvYWRpbmdcIik7IGMudGltZShcImRhdGEgcGFyc2luZ1wiKTsgIH0pO1xuXHRcdFx0dGhpcy5kYXRhLmF0dGFjaEV2ZW50KFwib25TdG9yZUxvYWRcIiwgZnVuY3Rpb24oKXsgYy50aW1lRW5kKFwiZGF0YSBwYXJzaW5nXCIpOyBjLnRpbWUoXCJkYXRhIHByb2Nlc3NpbmdcIik7ICB9KTtcblx0XHRcdHRoaXMuJHJlYWR5LnB1c2goZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy4kJChcImRhdGFcIikuYXR0YWNoRXZlbnQoXCJvbkJlZm9yZVJlbmRlclwiLCBmdW5jdGlvbigpeyBpZiAodGhpcy5jb3VudCgpKSB7IGMudGltZUVuZChcImRhdGEgcHJvY2Vzc2luZ1wiKTsgYy50aW1lKFwiZGF0YSByZW5kZXJpbmdcIik7IH0gfSk7XG5cdFx0XHRcdHRoaXMuJCQoXCJkYXRhXCIpLmF0dGFjaEV2ZW50KFwib25BZnRlclJlbmRlclwiLCBmdW5jdGlvbigpeyBpZiAodGhpcy5jb3VudCgpKSB3ZWJpeC5kZWxheShmdW5jdGlvbigpeyBjLnRpbWVFbmQoXCJkYXRhIHJlbmRlcmluZ1wiKTsgfSk7ICB9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufSwgd2ViaXguSWRTcGFjZSwgd2ViaXgudWkubGF5b3V0LCB3ZWJpeC5EYXRhTG9hZGVyLCB3ZWJpeC5FdmVudFN5c3RlbSwgd2ViaXguU2V0dGluZ3MpO1xuXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvcGl2b3R0YWJsZS5qc1xuICoqLyIsImV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWx0ZXJWYWx1ZXMoZmlsdGVycykge1xuXHRmaWx0ZXJzID0gZmlsdGVycyB8fCBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKVxuXHRcdGZpbHRlcnNbaV0uZnZhbHVlID0gZ2V0Rm9ybWF0dGVkVmFsdWUoZmlsdGVyc1tpXS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZFZhbHVlKHZhbHVlKXtcblx0dmFsdWUgPSB2YWx1ZSB8fCBcIlwiO1xuXHRpZiAod2ViaXguaXNEYXRlKHZhbHVlKSkge1xuXHRcdHZhbHVlID0gdmFsdWUudmFsdWVPZigpLnRvU3RyaW5nKCk7XG5cdH1cblx0ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIil7XG5cdFx0dmFsdWUgPSBcIlwiO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKHZhbHVlLnRyaW0pXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsdGVycyh2aWV3KSB7XG5cdHZhciBpLCBmLFxuXHRcdGNvbmZpZyA9IHZpZXcuY29uZmlnLFxuXHRcdGZpbHRlcnMgPSBjb25maWcuc3RydWN0dXJlLmZpbHRlcnMgfHwgW10sXG5cdFx0aXRlbSwgaXRlbXMgPSBbXSxcblx0XHRpbmRleGVzID0ge307XG5cdGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZiA9IGZpbHRlcnNbaV07XG5cdFx0aWYod2ViaXguaXNVbmRlZmluZWQoaW5kZXhlc1tmLnR5cGVdKSlcblx0XHRcdGluZGV4ZXNbZi50eXBlXSA9IFtdO1xuXHRcdGluZGV4ZXNbZi50eXBlXS5wdXNoKGkpO1xuXHRcdGl0ZW0gPSB7XG5cdFx0XHR2YWx1ZTogZi52YWx1ZSwgbGFiZWw6IHZpZXcuX2FwcGx5TWFwKGYubmFtZSksIGZpZWxkOiBmLm5hbWUsIHZpZXc6IGYudHlwZSxcblx0XHRcdGxhYmVsQWxpZ246IGNvbmZpZy5maWx0ZXJMYWJlbEFsaWduLCBsYWJlbFdpZHRoOiBjb25maWcuZmlsdGVyTGFiZWxXaWR0aCxcblx0XHRcdG1pbldpZHRoOiBjb25maWcuZmlsdGVyTWluV2lkdGgsIG1heFdpZHRoOiBjb25maWcuZmlsdGVyV2lkdGhcblx0XHR9O1xuXHRcdGlmKGYudHlwZSA9PSBcIm11bHRpY29tYm9cIilcblx0XHRcdGl0ZW0udGFnTW9kZSA9IGZhbHNlO1xuXG5cdFx0aWYgKHZpZXcuZmlsdGVycy5pc1NlbGVjdChmLnR5cGUpKVxuXHRcdFx0aXRlbS5vcHRpb25zID0gZGlzdGluY3RWYWx1ZXModmlldywgZi5uYW1lLCBmLnR5cGUuaW5kZXhPZihcIm11bHRpXCIpID09IC0xKTtcblxuXHRcdGl0ZW1zLnB1c2goaXRlbSk7XG5cdH1cblxuXHRyZXR1cm4gaXRlbXM7XG59XG5cbmZ1bmN0aW9uIGRpc3RpbmN0VmFsdWVzKHZpZXcsIGZpZWxkLCBlbXB0eSkge1xuXHR2YXIgdmFsdWUsIHZhbHVlcyA9IFtdLFxuXHRcdGRhdGEgPSB2aWV3LmRhdGEucHVsbCxcblx0XHRoYXNoID0ge307XG5cblx0aWYoZW1wdHkpXG5cdFx0dmFsdWVzLnB1c2goe3ZhbHVlOlwiXCIsaWQ6XCJcIn0pO1xuXG5cdGlmKHZpZXcuX3Bpdm90T3B0aW9ucyAmJiB2aWV3Ll9waXZvdE9wdGlvbnNbZmllbGRdKVxuXHRcdHJldHVybiB2YWx1ZXMuY29uY2F0KHZpZXcuX3Bpdm90T3B0aW9uc1tmaWVsZF0pO1xuXG5cdGZvciAobGV0IG9iaiBpbiBkYXRhKSB7XG5cdFx0dmFsdWUgPSBkYXRhW29ial1bZmllbGRdO1xuXHRcdGlmICghd2ViaXguaXNVbmRlZmluZWQodmFsdWUpKXtcblx0XHRcdGlmICghaGFzaFt2YWx1ZV0pIHtcblx0XHRcdFx0dmFsdWVzLnB1c2goeyB2YWx1ZTp2YWx1ZS50b1N0cmluZygpLCBpZDp2YWx1ZS50b1N0cmluZygpIH0pO1xuXHRcdFx0XHRoYXNoW3ZhbHVlXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGlzTnVtZXJpYyA9IGZ1bmN0aW9uKG4pe1xuXHRcdHJldHVybiAgIWlzTmFOKHBhcnNlRmxvYXQobikpO1xuXHR9O1xuXHR2YWx1ZXMuc29ydChmdW5jdGlvbihhLGIpIHtcblx0XHR2YXIgdmFsMSA9IGEudmFsdWU7XG5cdFx0dmFyIHZhbDIgPSBiLnZhbHVlO1xuXHRcdGlmICghdmFsMikgcmV0dXJuIDE7XG5cdFx0aWYgKCF2YWwxKSByZXR1cm4gLTE7XG5cdFx0aWYoIWlzTnVtZXJpYyh2YWwxKSB8fCAhaXNOdW1lcmljKHZhbDIpICl7XG5cdFx0XHR2YWwxID0gdmFsMS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR2YWwyPXZhbDIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsMT52YWwyPzE6KHZhbDE8dmFsMj8tMTowKTtcblx0fSk7XG5cdHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93RmlsdGVycyh2aWV3LCBmaWx0ZXJzKXtcblx0c2V0RXZlbnRzKHZpZXcsIGZpbHRlcnMpO1xuXHR2YXIgY29uZmlnID0ge2VsZW1lbnRzOiBmaWx0ZXJzfTtcblx0dmlldy5jYWxsRXZlbnQoXCJvblZpZXdJbml0XCIsIFtcImZpbHRlcnNcIiwgY29uZmlnXSk7XG5cdGlmIChjb25maWcuZWxlbWVudHMgJiYgdmlldy5nZXRGaWx0ZXJWaWV3KCkpe1xuXHRcdGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdHZpZXcuZ2V0RmlsdGVyVmlldygpLnNob3codHJ1ZSk7XG5cdFx0XHR3ZWJpeC51aShmaWx0ZXJzLHZpZXcuZ2V0RmlsdGVyVmlldygpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlldy5nZXRGaWx0ZXJWaWV3KCkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG5cbmZ1bmN0aW9uIHNldEV2ZW50cyh2aWV3LCBmaWx0ZXJzKXtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IGV2ZW50LFxuXHRcdFx0ZmlsdGVyID0gZmlsdGVyc1tpXTtcblx0XHRldmVudCA9IChmaWx0ZXIudmlldyA9PSBcInRleHRcIj9cIm9uVGltZWRLZXlQcmVzc1wiOlwib25DaGFuZ2VcIik7XG5cdFx0ZmlsdGVyLm9uID0ge307XG5cdFx0ZmlsdGVyLm9uW2V2ZW50XSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRjaGFuZ2VGaWx0ZXJWYWx1ZSh2aWV3LCB0aGlzLmNvbmZpZy5maWVsZCwgdGhpcy5nZXRWYWx1ZSgpKTtcblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUZpbHRlclZhbHVlKHZpZXcsIGZpZWxkLCB2YWx1ZSl7XG5cdHZhciBmaWx0ZXJzID0gdmlldy5jb25maWcuc3RydWN0dXJlLmZpbHRlcnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKylcblx0XHRpZiAoZmlsdGVyc1tpXS5uYW1lID09IGZpZWxkKSB7XG5cdFx0XHRmaWx0ZXJzW2ldLnZhbHVlID0gdmFsdWU7XG5cdFx0XHR2aWV3LmNhbGxFdmVudChcIm9uRmlsdGVyQ2hhbmdlXCIsIFtmaWVsZCwgdmFsdWVdKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9vcGVyYXRpb25zL2ZpbHRlcnMuanNcbiAqKi8iLCJpbXBvcnQgXCIuL2NvbW1vbnBvcHVwLmpzXCI7XG5pbXBvcnQgKiBhcyBjbGMgZnJvbSBcIm9wZXJhdGlvbnMvcG9wdXBfY2xpY2tzLmpzXCI7XG5pbXBvcnQge2dldFN0cnVjdHVyZU1hcH0gZnJvbSBcInN0cnVjdHVyZXMvdGFibGVwb3B1cC5qc1wiO1xuXG5cbndlYml4LnByb3RvVUkoe1xuICAgIG5hbWU6IFwid2ViaXhfcGl2b3RfY29uZmlnXCIsXG4gICAgZGVmYXVsdHM6e1xuICAgICAgICBmaWVsZHNDb2x1bW5XaWR0aDogMTgwXG4gICAgfSxcbiAgICAkaW5pdDogZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIHRoaXMuJHZpZXcuY2xhc3NOYW1lICs9IFwiIHdlYml4X3BvcHVwIHdlYml4X3Bpdm90XCI7XG4gICAgfSxcbiAgICBfZ2V0VUk6IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICB2YXIgc3RydWN0dXJlID0gd2ViaXguY29weShnZXRTdHJ1Y3R1cmVNYXAodGhpcywgY29uZmlnKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRTdHJ1Y3R1cmUoc3RydWN0dXJlLCBjb25maWcpO1xuICAgIH0sXG4gICAgX2xpc3RzOltcImZpbHRlcnNcIixcImNvbHVtbnNcIixcInJvd3NcIixcInZhbHVlc1wiXSxcbiAgICBfZG5kQ29ycmVjdGlvbjoge1xuICAgICAgICBcInJvd3NcIjogW1wiY29sdW1uc1wiLFwidmFsdWVzXCJdLFxuICAgICAgICBcImNvbHVtbnNcIjogW1wicm93c1wiXSxcbiAgICAgICAgXCJ2YWx1ZXNcIjogW1wicm93c1wiXVxuICAgIH0sXG4gICAgX2FmdGVySW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoRXZlbnQoXCJvbkl0ZW1DbGlja1wiLCBmdW5jdGlvbihpZCl7XG4gICAgICAgICAgICB2YXIgaW5uZXJJZCA9IHRoaXMuaW5uZXJJZChpZCk7XG4gICAgICAgICAgICBpZiAoaW5uZXJJZCA9PSBcImNhbmNlbFwiIHx8IGlubmVySWQgPT0gXCJhcHBseVwiKXtcbiAgICAgICAgICAgICAgICAvL3RyYW5zZm9ybSBidXR0b24gY2xpY2tzIHRvIGV2ZW50c1xuICAgICAgICAgICAgICAgIHZhciBzdHJ1Y3R1cmUgPSB0aGlzLmdldFN0cnVjdHVyZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYod2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpLmNhbGxFdmVudChcIm9uQmVmb3JlXCIraW5uZXJJZCwgW3N0cnVjdHVyZV0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRXZlbnQoXCJvblwiK2lubmVySWQsIFtzdHJ1Y3R1cmVdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGdldFN0cnVjdHVyZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdHJ1Y3R1cmUgPSB7IHJvd3M6W10sIGNvbHVtbnM6W10sdmFsdWVzOltdLGZpbHRlcnM6W10gfTtcblxuICAgICAgICB2YXIgcm93cyA9IHRoaXMuJCQoXCJyb3dzXCIpO1xuICAgICAgICByb3dzLmRhdGEuZWFjaChmdW5jdGlvbihvYmope1xuICAgICAgICAgICAgc3RydWN0dXJlLnJvd3MucHVzaChvYmoubmFtZSk7IH0pO1xuXG4gICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy4kJChcImNvbHVtbnNcIik7XG4gICAgICAgIGNvbHVtbnMuZGF0YS5lYWNoKGZ1bmN0aW9uKG9iail7XG4gICAgICAgICAgICBzdHJ1Y3R1cmUuY29sdW1ucy5wdXNoKG9iai5uYW1lKTsgfSk7XG5cblxuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy4kJChcInZhbHVlc1wiKTtcbiAgICAgICAgdmFsdWVzLmRhdGEuZWFjaChmdW5jdGlvbihvYmope1xuICAgICAgICAgICAgc3RydWN0dXJlLnZhbHVlcy5wdXNoKG9iaik7IH0pO1xuXG4gICAgICAgIHZhciBmaWx0ZXJzID0gdGhpcy4kJChcImZpbHRlcnNcIik7XG4gICAgICAgIGZpbHRlcnMuZGF0YS5lYWNoKGZ1bmN0aW9uKG9iail7XG4gICAgICAgICAgICBzdHJ1Y3R1cmUuZmlsdGVycy5wdXNoKG9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBwaXZvdCA9IHdlYml4LiQkKHRoaXMuY29uZmlnLnBpdm90KTtcblxuICAgICAgICBpZihwaXZvdC5jb25maWcuc3RydWN0dXJlLmNvbHVtblNvcnQpXG4gICAgICAgICAgICBzdHJ1Y3R1cmUuY29sdW1uU29ydCA9IHBpdm90LmNvbmZpZy5zdHJ1Y3R1cmUuY29sdW1uU29ydDtcblxuICAgICAgICByZXR1cm4gc3RydWN0dXJlO1xuICAgIH1cbn0sIHdlYml4LnVpLndlYml4X3Bpdm90X2NvbmZpZ19jb21tb24pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9wb3B1cHMvdGFibGVwb3B1cC5qc1xuICoqLyIsImltcG9ydCAqIGFzIGNsYyBmcm9tIFwib3BlcmF0aW9ucy9wb3B1cF9jbGlja3MuanNcIjtcbmltcG9ydCB7c2V0U3RydWN0dXJlfSBmcm9tIFwib3BlcmF0aW9ucy9zZXRfc3RydWN0dXJlLmpzXCI7XG5pbXBvcnQge3BvcHVwVGVtcGxhdGVzfSBmcm9tIFwic3RydWN0dXJlcy90ZW1wbGF0ZXMuanNcIjtcblxud2ViaXgucHJvdG9VSSh7XG5cdG5hbWU6IFwid2ViaXhfcGl2b3RfY29uZmlnX2NvbW1vblwiLFxuXHQkaW5pdDogZnVuY3Rpb24oY29uZmlnKSB7XG5cdFx0d2ViaXguZXh0ZW5kKGNvbmZpZyx0aGlzLmRlZmF1bHRzKTtcblx0XHR3ZWJpeC5leHRlbmQoY29uZmlnLCB0aGlzLl9nZXRVSShjb25maWcpKTtcblx0XHR0aGlzLiRyZWFkeS5wdXNoKHRoaXMuX2FmdGVySW5pdCk7XG5cdH0sXG5cdGRlZmF1bHRzOntcblx0XHRwYWRkaW5nOjgsXG5cdFx0aGVpZ2h0OiA1MDAsXG5cdFx0d2lkdGg6IDcwMCxcblx0XHRjYW5jZWxCdXR0b25XaWR0aDogMTAwLFxuXHRcdGFwcGx5QnV0dG9uV2lkdGg6IDEwMCxcblx0XHRoZWFkOiBmYWxzZSxcblx0XHRtb2RhbDp0cnVlLFxuXHRcdG1vdmU6IHRydWVcblx0fSxcblx0X2dldFVJOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge307XG5cdH0sXG5cdF9hZnRlckluaXQ6IGZ1bmN0aW9uKCkge30sXG5cdHNldFN0cnVjdHVyZTogZnVuY3Rpb24oY29uZmlnKXtcblx0XHR0aGlzLmRlZmluZShcInN0cnVjdHVyZVwiLCBjb25maWcpO1xuXHRcdHRoaXMucmVuZGVyKCk7XG5cdH0sXG5cdGdldFN0cnVjdHVyZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9LFxuXHRfbGlzdHM6W10sXG5cdF9kbmRDb3JyZWN0aW9uOnt9LFxuXHRkYXRhX3NldHRlcjogZnVuY3Rpb24odmFsdWUpIHtcblx0XHR2YXIgZGF0YSwgaSwgaixcblx0XHRcdGZpZWxkcyA9IHZhbHVlLmZpZWxkcyxcblx0XHRcdGxpc3RzID0gdGhpcy5fbGlzdHM7XG5cblx0XHRmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7XG5cdFx0XHRsaXN0cy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3ROYW1lKXtcblx0XHRcdFx0ZGF0YSA9IHZhbHVlW2xpc3ROYW1lXTtcblx0XHRcdFx0ZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0XHRcdGlmKGl0ZW0ubmFtZSA9PSBmaWVsZC5uYW1lKVxuXHRcdFx0XHRcdFx0ZmllbGQuJGNzcyA9IFwiIHdlYml4X3Bpdm90X2ZpZWxkX3NlbGVjdGVkXCI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLiQkKFwiZmllbGRzXCIpLmNsZWFyQWxsKCk7XG5cdFx0dGhpcy4kJChcImZpZWxkc1wiKS5wYXJzZShmaWVsZHMpO1xuXHRcdHRoaXMuJCQoXCJmaWVsZHNcIikuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubmFtZSAhPT0gXCJpZFwiICYmIGl0ZW0ubmFtZS5pbmRleE9mKFwiJFwiKSAhPT0gMDtcblx0XHR9KTtcblxuXHRcdGZvciggaT0wOyBpIDwgbGlzdHMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dGhpcy4kJChsaXN0c1tpXSkuY2xlYXJBbGwoKTtcblx0XHRcdHRoaXMuJCQobGlzdHNbaV0pLnBhcnNlKHZhbHVlW2xpc3RzW2ldXSk7XG5cdFx0fVxuXHR9LFxuXHRfZHJvcEZpZWxkOiBmdW5jdGlvbihjdHgpe1xuXHRcdHZhciBpdGVtLFxuXHRcdFx0ZnJvbSA9IGN0eC5mcm9tLFxuXHRcdFx0dG8gPSBjdHgudG87XG5cdFx0aWYodG8gJiYgdG8gIT0gZnJvbSl7XG5cdFx0XHRpdGVtID0gd2ViaXguY29weShmcm9tLmdldEl0ZW0oY3R4LnN0YXJ0KSk7XG5cdFx0XHRpZih0byA9PSB0aGlzLiQkKFwiZmllbGRzXCIpKVxuXHRcdFx0XHR0aGlzLl9yZW1vdmVMaXN0RmllbGQodGhpcy5pbm5lcklkKGZyb20uY29uZmlnLmlkKSxpdGVtKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy5fYWRkTGlzdEZpZWxkKHRoaXMuaW5uZXJJZCh0by5jb25maWcuaWQpLCBpdGVtLCBjdHguaW5kZXgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0X2FkZExpc3RGaWVsZDogZnVuY3Rpb24obGlzdCwgaXRlbSwgaW5kZXgpe1xuXHRcdHRoaXMuX2hhbmRsZXJzW2xpc3RdLmNhbGwodGhpcywgbGlzdCwgaXRlbSwgaW5kZXgpO1xuXHR9LFxuXHRfcmVtb3ZlTGlzdEZpZWxkOiBmdW5jdGlvbihsaXN0LCBpdGVtKXtcblx0XHR0aGlzLiQkKGxpc3QpLnJlbW92ZShpdGVtLmlkKTtcblx0XHR2YXIgbGlzdHMgPSB0aGlzLl9saXN0cztcblx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRmb3IodmFyIGkgPTA7ICFmb3VuZCAmJiBpIDwgbGlzdHMubGVuZ3RoO2krKyl7XG5cdFx0XHR0aGlzLiQkKGxpc3RzW2ldKS5kYXRhLmVhY2goZnVuY3Rpb24oZmllbGQpe1xuXHRcdFx0XHRpZihmaWVsZC5uYW1lID09IGl0ZW0ubmFtZSlcblx0XHRcdFx0XHRmb3VuZCA9IGZpZWxkO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmKCFmb3VuZClcblx0XHRcdHRoaXMuX3NldFBpdm90RmllbGRDc3MoaXRlbS5uYW1lLFwiXCIpO1xuXHR9LFxuXHRfc2V0UGl2b3RGaWVsZENzczogZnVuY3Rpb24obmFtZSwgY3NzKXtcblx0XHR0aGlzLiQkKFwiZmllbGRzXCIpLmRhdGEuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdGlmKGl0ZW0ubmFtZSA9PSBuYW1lKXtcblx0XHRcdFx0aXRlbS4kY3NzID0gXCIgXCIrY3NzO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goaXRlbS5pZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cdF9oYW5kbGVyczoge1xuXHRcdFwiZmlsdGVyc1wiOiBmdW5jdGlvbihsaXN0TmFtZSwgaXRlbSl7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZSxcblx0XHRcdFx0bmFtZSA9IGl0ZW0ubmFtZSxcblx0XHRcdFx0bGlzdCA9IHRoaXMuJCQobGlzdE5hbWUpO1xuXG5cdFx0XHRsaXN0LmRhdGEuZWFjaChmdW5jdGlvbihmaWVsZCl7XG5cdFx0XHRcdGlmKGZpZWxkLm5hbWUgPT0gbmFtZSl7XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmKCFmb3VuZCl7XG5cdFx0XHRcdGRlbGV0ZSBpdGVtLmlkO1xuXHRcdFx0XHRsaXN0LmFkZChpdGVtKTtcblx0XHRcdFx0dGhpcy5fc2V0UGl2b3RGaWVsZENzcyhuYW1lLFwid2ViaXhfcGl2b3RfZmllbGRfc2VsZWN0ZWRcIik7XG5cdFx0XHRcdHRoaXMuX2NvcnJlY3RMaXN0cyhuYW1lLCBsaXN0TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRcInJvd3NcIjogZnVuY3Rpb24obGlzdE5hbWUsIGl0ZW0pe1xuXHRcdFx0dmFyIGZvdW5kID0gZmFsc2UsXG5cdFx0XHRcdG5hbWUgPSBpdGVtLm5hbWUsXG5cdFx0XHRcdGxpc3QgPSB0aGlzLiQkKGxpc3ROYW1lKTtcblxuXHRcdFx0bGlzdC5kYXRhLmVhY2goZnVuY3Rpb24oZmllbGQpe1xuXHRcdFx0XHRpZihmaWVsZC5uYW1lID09IG5hbWUpe1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZighZm91bmQpe1xuXHRcdFx0XHRkZWxldGUgaXRlbS5pZDtcblx0XHRcdFx0bGlzdC5hZGQoaXRlbSk7XG5cdFx0XHRcdHRoaXMuX3NldFBpdm90RmllbGRDc3MobmFtZSxcIndlYml4X3Bpdm90X2ZpZWxkX3NlbGVjdGVkXCIpO1xuXHRcdFx0XHR0aGlzLl9jb3JyZWN0TGlzdHMobmFtZSwgbGlzdE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XCJjb2x1bW5zXCI6IGZ1bmN0aW9uKGxpc3ROYW1lLCBpdGVtKXtcblx0XHRcdHRoaXMuX2hhbmRsZXJzLnJvd3MuY2FsbCh0aGlzLGxpc3ROYW1lLCBpdGVtKTtcblx0XHR9LFxuXHRcdFwidmFsdWVzXCI6IGZ1bmN0aW9uKGxpc3ROYW1lLCBpdGVtLCBpbmRleCl7XG5cdFx0XHR2YXIgdGFyZ2V0SXRlbSA9IG51bGwsXG5cdFx0XHRcdGxpc3QgPSB0aGlzLiQkKGxpc3ROYW1lKTtcblx0XHRcdGxpc3QuZGF0YS5lYWNoKGZ1bmN0aW9uKGZpZWxkKXtcblx0XHRcdFx0aWYoZmllbGQubmFtZSA9PSBpdGVtLm5hbWUpe1xuXHRcdFx0XHRcdHRhcmdldEl0ZW0gPSBmaWVsZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZih0YXJnZXRJdGVtKXtcblx0XHRcdFx0Y2xjLmNsaWNrSGFuZGxlcnMuYWRkLmNhbGwodGhpcyx7fSx0YXJnZXRJdGVtLmlkKTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHRoaXMuX3NldFBpdm90RmllbGRDc3MoaXRlbS5uYW1lLFwid2ViaXhfcGl2b3RfZmllbGRfc2VsZWN0ZWRcIik7XG5cdFx0XHRcdGxpc3QuYWRkKHdlYml4LmNvcHkoaXRlbSksaW5kZXgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fY29ycmVjdExpc3RzKGl0ZW0ubmFtZSwgbGlzdE5hbWUpO1xuXHRcdH0sXG5cdFx0XCJncm91cEJ5XCI6IGZ1bmN0aW9uKGxpc3ROYW1lLCBpdGVtKXtcblx0XHRcdGlmKHRoaXMuJCQobGlzdE5hbWUpLmRhdGEub3JkZXIubGVuZ3RoKXtcblx0XHRcdFx0dmFyIGlkID0gdGhpcy4kJChsaXN0TmFtZSkuZ2V0Rmlyc3RJZCgpO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVMaXN0RmllbGQobGlzdE5hbWUsIHRoaXMuJCQoXCJncm91cEJ5XCIpLmdldEl0ZW0oaWQpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NldFBpdm90RmllbGRDc3MoaXRlbS5uYW1lLFwid2ViaXhfcGl2b3RfZmllbGRfc2VsZWN0ZWRcIik7XG5cdFx0XHRkZWxldGUgaXRlbS5pZDtcblx0XHRcdHRoaXMuJCQobGlzdE5hbWUpLmFkZChpdGVtKTtcblx0XHRcdHRoaXMuX2NvcnJlY3RMaXN0cyhpdGVtLm5hbWUsIGxpc3ROYW1lKTtcblx0XHR9XG5cdH0sXG5cdF9jb3JyZWN0TGlzdHM6IGZ1bmN0aW9uKG5hbWUsIGxpc3ROYW1lKXtcblx0XHR2YXIgaSwgcmVzLFxuXHRcdFx0bGlzdHMgPSB0aGlzLl9kbmRDb3JyZWN0aW9uW2xpc3ROYW1lXTtcblx0XHRmb3IoIGk9MDsgbGlzdHMgJiYgaTwgbGlzdHMubGVuZ3RoOyBpKysgKXtcblx0XHRcdHJlcyA9IG51bGw7XG5cdFx0XHR0aGlzLiQkKGxpc3RzW2ldKS5kYXRhLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRcdGlmKGl0ZW0ubmFtZSA9PSBuYW1lKVxuXHRcdFx0XHRcdHJlcyA9IGl0ZW07XG5cdFx0XHR9KTtcblx0XHRcdGlmKHJlcylcblx0XHRcdFx0dGhpcy4kJChsaXN0c1tpXSkucmVtb3ZlKHJlcy5pZCk7XG5cdFx0fVxuXHR9LFxuXHRfc2V0U3RydWN0dXJlOiBmdW5jdGlvbihzdHJ1Y3R1cmUsIGNvbmZpZyl7XG5cdFx0cmV0dXJuIHNldFN0cnVjdHVyZSh0aGlzLFwicG9wdXBcIixzdHJ1Y3R1cmUsIGNvbmZpZyk7XG5cdH0sXG5cdF9saXN0RHJhZ0hUTUw6IGZ1bmN0aW9uKGNvbnRleHQpe1xuXHRcdGlmKGNvbnRleHQuc3RhcnQpe1xuXHRcdFx0dmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW0oY29udGV4dC5zdGFydCk7XG5cdFx0XHRjb250ZXh0Lmh0bWwgPSB0aGlzLnR5cGUudGVtcGxhdGVTdGFydChpdGVtLHRoaXMudHlwZSkrcG9wdXBUZW1wbGF0ZXMubGlzdERyYWcoaXRlbSkrdGhpcy50eXBlLnRlbXBsYXRlRW5kKGl0ZW0sIHRoaXMudHlwZSk7XG5cblx0XHR9XG5cdH0sXG5cdF9nZXRMaXN0RXZlbnRzOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7XG5cdFx0XHRvbkJlZm9yZURyb3A6IHdlYml4LmJpbmQodGhpcy5fZHJvcEZpZWxkLHRoaXMpLFxuXHRcdFx0b25CZWZvcmVEcmFnOiB0aGlzLl9saXN0RHJhZ0hUTUwsXG5cdFx0XHRvbkJlZm9yZURyYWdJbjogZnVuY3Rpb24oKXtcblx0XHRcdFx0d2ViaXguaHRtbC5hZGRDc3Mod2ViaXguRHJhZ0NvbnRyb2wuZ2V0Tm9kZSgpLFwid2ViaXhfcGl2b3RfZHJhZ196b25lXCIsdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSwgd2ViaXgudWkud2luZG93LCB3ZWJpeC5JZFNwYWNlKTtcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvcG9wdXBzL2NvbW1vbnBvcHVwLmpzXG4gKiovIiwiZXhwb3J0IGNvbnN0IGNsaWNrSGFuZGxlcnMgPSB7XG5cdFwiYWRkXCI6IGZ1bmN0aW9uKGUsaWQpIHtcblx0XHR2YXIgaXRlbSA9IHRoaXMuJCQoXCJ2YWx1ZXNcIikuZ2V0SXRlbShpZCk7XG5cdFx0aXRlbS5vcGVyYXRpb24ucHVzaChcInN1bVwiKTtcblx0XHR0aGlzLiQkKFwidmFsdWVzXCIpLnVwZGF0ZUl0ZW0oaWQpO1xuXG5cdFx0d2ViaXguZGVsYXkoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBpbmRleCA9IGl0ZW0ub3BlcmF0aW9uLmxlbmd0aC0xO1xuXHRcdFx0dmFyIGVscyA9IHRoaXMuJCQoXCJ2YWx1ZXNcIikuZ2V0SXRlbU5vZGUoaWQpLmNoaWxkTm9kZXM7XG5cdFx0XHR2YXIgZWwgPSBudWxsO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ZWwgPSBlbHNbaV07XG5cdFx0XHRcdGlmICghZWwuZ2V0QXR0cmlidXRlKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR2YXIgb3AgPSBlbC5nZXRBdHRyaWJ1dGUoXCJ3ZWJpeF9vcGVyYXRpb25cIik7XG5cdFx0XHRcdGlmICghd2ViaXguaXNVbmRlZmluZWQob3ApICYmIG9wID09IGluZGV4KSBicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChlbCE9PW51bGwpXG5cdFx0XHRcdGNsaWNrSGFuZGxlcnMuc2VsZWN0b3IuY2FsbCh0aGlzLCBlbCwgaWQpO1xuXHRcdH0sIHRoaXMpO1xuXHR9LFxuXHRcImZpbHRlci1zZWxlY3RvclwiOiBmdW5jdGlvbihlLGlkKSB7XG5cdFx0dmFyIHBvcHVwLFxuXHRcdFx0cGl2b3QgPSB3ZWJpeC4kJCh0aGlzLmNvbmZpZy5waXZvdCksXG5cdFx0XHRzZWxlY3RvciA9IHtcblx0XHRcdFx0dmlldzogXCJ3ZWJpeF9waXZvdF9wb3B1cFwiLCBhdXRvZml0OnRydWUsXG5cdFx0XHRcdGF1dG9oZWlnaHQ6IHRydWUsIHdpZHRoOiAxNTAsXG5cdFx0XHRcdGRhdGE6IGdldEZpbHRlck9wdGlvbnMocGl2b3QuZmlsdGVycy5nZXQoKSwgcGl2b3QuX2FwcGx5TG9jYWxlKVxuXHRcdFx0fTtcblx0XHRwb3B1cCA9IHdlYml4LnVpKHNlbGVjdG9yKTtcblx0XHRwb3B1cC5zaG93KGUpO1xuXHRcdHBvcHVwLmF0dGFjaEV2ZW50KFwib25IaWRlXCIsIHdlYml4LmJpbmQoZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsID0gcG9wdXAuZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdGlmIChzZWwgIT09IG51bGwpIHtcblx0XHRcdFx0dmFyIGl0ZW0gPSB0aGlzLiQkKCdmaWx0ZXJzJykuZ2V0SXRlbShpZCk7XG5cdFx0XHRcdGl0ZW0udHlwZSA9IHNlbC5uYW1lO1xuXHRcdFx0XHR0aGlzLiQkKCdmaWx0ZXJzJykudXBkYXRlSXRlbShpZCk7XG5cdFx0XHR9XG5cblx0XHRcdHBvcHVwLmNsb3NlKCk7XG5cdFx0fSwgdGhpcykpO1xuXHR9LFxuXHRcInNlbGVjdG9yXCI6IGZ1bmN0aW9uKGUsaWQpIHtcblx0XHR2YXIgZnVuY19zZWxlY3RvciA9IHtcblx0XHRcdHZpZXc6IFwid2ViaXhfcGl2b3RfcG9wdXBcIiwgYXV0b2ZpdDp0cnVlLFxuXHRcdFx0d2lkdGg6IDE1MCxcblx0XHRcdGRhdGE6IHRoaXMuY29uZmlnLm9wZXJhdGlvbnN8fFtdXG5cdFx0fTtcblx0XHR2YXIgcCA9IHdlYml4LnVpKGZ1bmNfc2VsZWN0b3IpO1xuXHRcdHAuc2hvdyhlKTtcblx0XHRwLmF0dGFjaEV2ZW50KFwib25IaWRlXCIsIHdlYml4LmJpbmQoZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXggPSB3ZWJpeC5odG1sLmxvY2F0ZShlLCBcIndlYml4X29wZXJhdGlvblwiKTtcblx0XHRcdHZhciBzZWwgPSBwLmdldFNlbGVjdGVkKCk7XG5cdFx0XHRpZiAoc2VsICE9PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMuJCQoXCJ2YWx1ZXNcIikuZ2V0SXRlbShpZCkub3BlcmF0aW9uW2luZGV4XSA9IHNlbC5uYW1lO1xuXHRcdFx0XHR0aGlzLiQkKFwidmFsdWVzXCIpLnVwZGF0ZUl0ZW0oaWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRwLmNsb3NlKCk7XG5cdFx0fSwgdGhpcykpO1xuXHR9LFxuXHRcInJlbW92ZVwiOiBmdW5jdGlvbihlLCBpZCkge1xuXHRcdHZhciBsaXN0ID0gd2ViaXguJCQoZSk7XG5cdFx0dmFyIGxpc3RJZCA9IHRoaXMuaW5uZXJJZChsaXN0LmNvbmZpZy5pZCk7XG5cdFx0dmFyIGl0ZW0gPSB0aGlzLiQkKGxpc3RJZCkuZ2V0SXRlbShpZCk7XG5cdFx0aWYobGlzdElkID09IFwidmFsdWVzXCIpe1xuXHRcdFx0bGV0IGluZGV4ID0gd2ViaXguaHRtbC5sb2NhdGUoZSwgXCJ3ZWJpeF9vcGVyYXRpb25cIik7XG5cdFx0XHRpZiAoaXRlbS5vcGVyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRpdGVtLm9wZXJhdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHR0aGlzLiQkKFwidmFsdWVzXCIpLnVwZGF0ZUl0ZW0oaWQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlTGlzdEZpZWxkKFwidmFsdWVzXCIsIGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0dGhpcy5fcmVtb3ZlTGlzdEZpZWxkKGxpc3RJZCwgaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJPcHRpb25zKGZpbHRlcnMsIHByb2Nlc3Mpe1xuXHR2YXIgaSwgbmFtZSwgaXRlbXMgPSBbXTtcblx0Zm9yKGkgPTA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKXtcblx0XHRuYW1lID0gZmlsdGVyc1tpXTtcblx0XHRpdGVtcy5wdXNoKHtuYW1lOiBuYW1lLCB0aXRsZTogcHJvY2VzcyhuYW1lKX0pO1xuXHR9XG5cdHJldHVybiBpdGVtcztcbn1cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvb3BlcmF0aW9ucy9wb3B1cF9jbGlja3MuanNcbiAqKi8iLCJleHBvcnQgZnVuY3Rpb24gc2V0U3RydWN0dXJlKHZpZXcsIGJhc2VOYW1lLCBzdHJ1Y3R1cmUsIGNvbmZpZyl7XG5cdHZhciB1aUFycmF5cyA9IFtcInJvd3NcIiwgXCJjb2xzXCJdLFxuXHRcdHVpVmlld3MgPSBbXCJoZWFkXCIsIFwiYm9keVwiXSxcblx0XHRwb3B1cCA9IHZpZXcsXG5cdFx0ZXZlbnRIID0gY29uZmlnLm9uP2NvbmZpZy5vbi5vblZpZXdJbml0Om51bGw7XG5cblx0dmFyIGNoZWNrU3RydWN0dXJlID0gZnVuY3Rpb24oaWQsb2JqKXtcblx0XHR2YXIgaSwgaiwgbmFtZSwgcmVzdWx0O1xuXG5cdFx0Zm9yKGkgPTA7IGkgPCB1aVZpZXdzLmxlbmd0aDtpKysgKXtcblx0XHRcdG5hbWUgPSBudWxsO1xuXHRcdFx0aWYob2JqW3VpVmlld3NbaV1dKXtcblx0XHRcdFx0aWYodHlwZW9mIG9ialt1aVZpZXdzW2ldXSA9PSBcInN0cmluZ1wiKXtcblx0XHRcdFx0XHRuYW1lID0gb2JqW3VpVmlld3NbaV1dO1xuXHRcdFx0XHRcdG9ialt1aVZpZXdzW2ldXSA9IHN0cnVjdHVyZVtuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjaGVja1N0cnVjdHVyZShuYW1lLCBvYmpbdWlWaWV3c1tpXV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IoaSA9MDsgaSA8IHVpQXJyYXlzLmxlbmd0aDtpKysgKXtcblx0XHRcdGlmKG9ialt1aUFycmF5c1tpXV0pe1xuXHRcdFx0XHRsZXQgZWxlbWVudHMgPSBvYmpbdWlBcnJheXNbaV1dO1xuXHRcdFx0XHRmb3Ioaj0wOyBqIDwgZWxlbWVudHMubGVuZ3RoO2orKyl7XG5cdFx0XHRcdFx0bmFtZSA9IG51bGw7XG5cdFx0XHRcdFx0aWYodHlwZW9mIGVsZW1lbnRzW2pdID09IFwic3RyaW5nXCIpe1xuXHRcdFx0XHRcdFx0bmFtZSA9IGVsZW1lbnRzW2pdO1xuXHRcdFx0XHRcdFx0b2JqW3VpQXJyYXlzW2ldXVtqXSA9IHN0cnVjdHVyZVtuYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2hlY2tTdHJ1Y3R1cmUobmFtZSwgb2JqW3VpQXJyYXlzW2ldXVtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoaWQgJiYgaWQhPWJhc2VOYW1lICYmICFvYmouaWQpXG5cdFx0XHRvYmouaWQgPSBpZDtcblxuXHRcdGlmKGlkKXtcblx0XHRcdGlmKGV2ZW50SClcblx0XHRcdFx0ZXZlbnRILmFwcGx5KHBvcHVwLFtpZCxvYmpdKTtcblx0XHRcdHdlYml4LmNhbGxFdmVudChcIm9uVmlld0luaXRcIixbaWQsb2JqLHBvcHVwXSk7XG5cdFx0fVxuXHR9O1xuXHRjaGVja1N0cnVjdHVyZShiYXNlTmFtZSxzdHJ1Y3R1cmVbYmFzZU5hbWVdKTtcblx0cmV0dXJuIHN0cnVjdHVyZVtiYXNlTmFtZV07XG5cbn1cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvb3BlcmF0aW9ucy9zZXRfc3RydWN0dXJlLmpzXG4gKiovIiwiZXhwb3J0IGNvbnN0IHBvcHVwVGVtcGxhdGVzID0ge1xuXHRoZWFkZXI6IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHdlYml4LmkxOG4ucGl2b3Rbb2JqLnZhbHVlXTtcblx0fSxcblx0aWNvbkhlYWRlcjogZnVuY3Rpb24ob2JqKXtcblx0XHRpZihvYmouaWNvbilcblx0XHRcdHJldHVybiBcIjxzcGFuIGNsYXNzPSd3ZWJpeF9waXZvdF9oZWFkZXJfaWNvbiB3ZWJpeF9pY29uIGZhLVwiK29iai5pY29uK1wiJz48L3NwYW4+XCIrd2ViaXguaTE4bi5waXZvdFtvYmoudmFsdWVdO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBcIjxzcGFuIGNsYXNzPSd3ZWJpeF9waXZvdF9oZWFkZXJfaWNvbic+XCIrb2JqLmljb25Db250ZW50K1wiPC9zcGFuPlwiK3dlYml4LmkxOG4ucGl2b3Rbb2JqLnZhbHVlXTtcblx0fSxcblx0dGFibGVWYWx1ZXM6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRvYmoub3BlcmF0aW9uID0gb2JqLm9wZXJhdGlvbiB8fCBbXCJzdW1cIl07XG5cdFx0aWYgKCF3ZWJpeC5pc0FycmF5KG9iai5vcGVyYXRpb24pKVxuXHRcdFx0b2JqLm9wZXJhdGlvbiA9IFtvYmoub3BlcmF0aW9uXTtcblxuXHRcdHZhciBvcHMgPSBbXTtcblx0XHR2YXIgbG9jYWxlID0gd2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpLl9hcHBseUxvY2FsZTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iai5vcGVyYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBvcCA9IFwiPHNwYW4gY2xhc3M9J3dlYml4X3Bpdm90X2xpbmsnIHdlYml4X29wZXJhdGlvbj0nXCIgKyBpICsgXCInPlwiO1xuXHRcdFx0b3AgKz0gXCI8c3Bhbj5cIiArIG9iai50ZXh0ICsgXCI8L3NwYW4+XCI7XG5cdFx0XHRvcCArPSBcIjxzcGFuIGNsYXNzPSd3ZWJpeF9saW5rX3NlbGVjdGlvbic+XCIgKyBsb2NhbGUob2JqLm9wZXJhdGlvbltpXSkgKyBcIjwvc3Bhbj5cIjtcblx0XHRcdG9wICs9IFwiPHNwYW4gY2xhc3M9J3dlYml4X3Bpdm90X21pbnVzIHdlYml4X2ljb24gZmEtdGltZXMnPjwvc3Bhbj5cIjtcblx0XHRcdG9wICs9IFwiPC9zcGFuPlwiO1xuXHRcdFx0b3BzLnB1c2gob3ApO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BzLmpvaW4oXCIgXCIpO1xuXHR9LFxuXHRjaGFydFZhbHVlczogZnVuY3Rpb24gKG9iaikge1xuXHRcdG9iai5vcGVyYXRpb24gPSBvYmoub3BlcmF0aW9uIHx8IFtcInN1bVwiXTtcblx0XHRpZiAoIXdlYml4LmlzQXJyYXkob2JqLm9wZXJhdGlvbikpXG5cdFx0XHRvYmoub3BlcmF0aW9uID0gW29iai5vcGVyYXRpb25dO1xuXG5cdFx0dmFyIG9wcyA9IFtdO1xuXHRcdHZhciBwaXZvdCA9IHdlYml4LiQkKHRoaXMuY29uZmlnLnBpdm90KTtcblx0XHR2YXIgbG9jYWxlID0gcGl2b3QuX2FwcGx5TG9jYWxlO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmoub3BlcmF0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZighb2JqLmNvbG9yKVxuXHRcdFx0XHRvYmouY29sb3IgPSBbcGl2b3QuX2dldENvbG9yKHRoaXMuX3ZhbHVlTGVuZ3RoKV07XG5cdFx0XHRpZighb2JqLmNvbG9yW2ldKVxuXHRcdFx0XHRvYmouY29sb3IucHVzaChwaXZvdC5fZ2V0Q29sb3IodGhpcy5fdmFsdWVMZW5ndGgpKTtcblx0XHRcdHZhciBvcCA9IFwiPGRpdiBjbGFzcz0nd2ViaXhfcGl2b3RfbGluaycgd2ViaXhfb3BlcmF0aW9uPSdcIiArIGkgKyBcIic+XCI7XG5cdFx0XHRvcCArPSBcIjxkaXYgY2xhc3M9J3dlYml4X2NvbG9yX3NlbGVjdGlvbic+PGRpdiBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjpcIitsb2NhbGUob2JqLmNvbG9yW2ldKStcIic+PC9kaXY+PC9kaXY+XCI7XG5cdFx0XHRvcCArPSBcIjxkaXYgY2xhc3M9J3dlYml4X2xpbmtfdGl0bGUnPlwiICsgb2JqLnRleHQgKyBcIjwvZGl2PlwiO1xuXHRcdFx0b3AgKz0gXCI8ZGl2IGNsYXNzPSd3ZWJpeF9saW5rX3NlbGVjdGlvbic+XCIgKyBsb2NhbGUob2JqLm9wZXJhdGlvbltpXSkgKyBcIjwvZGl2PlwiO1xuXG5cdFx0XHRvcCArPSBcIjxkaXYgY2xhc3M9J3dlYml4X3Bpdm90X21pbnVzIHdlYml4X2ljb24gZmEtdGltZXMnPjwvZGl2PlwiO1xuXHRcdFx0b3AgKz0gXCI8L2Rpdj5cIjtcblx0XHRcdG9wcy5wdXNoKG9wKTtcblx0XHR9XG5cdFx0aWYodGhpcy5faW5jcmVhc2VDb2xvckluZGV4KXtcblx0XHRcdHRoaXMuX2luY3JlYXNlQ29sb3JJbmRleD0gZmFsc2U7XG5cdFx0XHR0aGlzLl92YWx1ZUxlbmd0aCsrO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BzLmpvaW4oXCIgXCIpO1xuXHR9LFxuXHRmaWx0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0dmFyIHBpdm90ID0gd2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpO1xuXHRcdG9iai50eXBlID0gb2JqLnR5cGUgfHwgXCJzZWxlY3RcIjtcblx0XHR2YXIgaHRtbCA9IFwiPGEgY2xhc3M9J3dlYml4X3Bpdm90X2xpbmsnPlwiICsgb2JqLnRleHQ7XG5cdFx0aHRtbCArPSBcIiA8c3BhbiBjbGFzcz0nd2ViaXhfbGlua19zZWxlY3Rpb24nPlwiICsgcGl2b3QuX2FwcGx5TG9jYWxlKG9iai50eXBlKSArIFwiPC9zcGFuPlwiO1xuXHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0nd2ViaXhfcGl2b3RfbWludXMgd2ViaXhfaWNvbiBmYS10aW1lcyc+PC9zcGFuPlwiO1xuXHRcdGh0bWwgKz0gXCI8L2E+IFwiO1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXHRyb3dzOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0dmFyIGh0bWwgPSBcIjxhIGNsYXNzPSd3ZWJpeF9waXZvdF9saW5rJz5cIiArIG9iai50ZXh0O1xuXHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0nd2ViaXhfcGl2b3RfbWludXMgd2ViaXhfaWNvbiBmYS10aW1lcyc+PC9zcGFuPlwiO1xuXHRcdGh0bWwgKz0gXCI8L2E+IFwiO1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXHRjb2x1bW5zOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0dmFyIGh0bWwgPSBcIjxhIGNsYXNzPSd3ZWJpeF9waXZvdF9saW5rJz5cIiArIG9iai50ZXh0O1xuXHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0nd2ViaXhfcGl2b3RfbWludXMgd2ViaXhfaWNvbiBmYS10aW1lcyc+PC9zcGFuPlwiO1xuXHRcdGh0bWwgKz0gXCI8L2E+IFwiO1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXHRncm91cEJ5OiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0dmFyIGh0bWwgPSBcIjxhIGNsYXNzPSd3ZWJpeF9waXZvdF9saW5rJz5cIiArIG9iai50ZXh0O1xuXHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0nd2ViaXhfcGl2b3RfbWludXMgd2ViaXhfaWNvbiBmYS10aW1lcyc+PC9zcGFuPlwiO1xuXHRcdGh0bWwgKz0gXCI8L2E+IFwiO1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXHRsaXN0RHJhZzogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gXCI8YSBjbGFzcz0nd2ViaXhfcGl2b3RfbGluayc+XCIgKyBvYmoudGV4dCtcIjwvYT4gXCI7XG5cdH1cbn07XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL3N0cnVjdHVyZXMvdGVtcGxhdGVzLmpzXG4gKiovIiwiaW1wb3J0ICogYXMgY2xjIGZyb20gXCJvcGVyYXRpb25zL3BvcHVwX2NsaWNrcy5qc1wiO1xuaW1wb3J0IHtwb3B1cFRlbXBsYXRlc30gZnJvbSBcIi4vdGVtcGxhdGVzLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJ1Y3R1cmVNYXAodmlldywgY29uZmlnKSB7XG5cdHJldHVybiB7XG5cdFx0XCJwb3B1cFwiOiB7XG5cdFx0XHRoZWFkOiBcInRvb2xiYXJcIixcblx0XHRcdGJvZHk6IFwiYm9keVwiXG5cdFx0fSxcblx0XHRcInRvb2xiYXJcIjoge1xuXHRcdFx0dmlldzogXCJ0b29sYmFyXCIsXG5cdFx0XHRjb2xzOiBbXG5cdFx0XHRcdFwiY29uZmlnVGl0bGVcIixcblx0XHRcdFx0XCJjYW5jZWxcIixcblx0XHRcdFx0XCJhcHBseVwiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRcImNvbmZpZ1RpdGxlXCI6IHtpZDogXCJjb25maWdUaXRsZVwiLCB2aWV3OiBcImxhYmVsXCIsIGxhYmVsOiB3ZWJpeC5pMThuLnBpdm90LndpbmRvd1RpdGxlIHx8IFwiXCJ9LFxuXHRcdFwiY2FuY2VsXCI6IHt2aWV3OiBcImJ1dHRvblwiLCBpZDogXCJjYW5jZWxcIiwgbGFiZWw6IHdlYml4LmkxOG4ucGl2b3QuY2FuY2VsLCB3aWR0aDogY29uZmlnLmNhbmNlbEJ1dHRvbldpZHRofSxcblx0XHRcImFwcGx5XCI6IHt2aWV3OiBcImJ1dHRvblwiLCBpZDogXCJhcHBseVwiLCB0eXBlOiBcImZvcm1cIiwgbGFiZWw6IHdlYml4LmkxOG4ucGl2b3QuYXBwbHksIHdpZHRoOiBjb25maWcuYXBwbHlCdXR0b25XaWR0aH0sXG5cdFx0XCJib2R5XCI6IHtcblx0XHRcdHR5cGU6IFwid2lkZVwiLFxuXHRcdFx0cm93czogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29sczogW1xuXHRcdFx0XHRcdFx0XCJmaWVsZHNMYXlvdXRcIixcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJzcGFjZVwiLFxuXHRcdFx0XHRcdFx0XHRyb3dzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJ3aWRlXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwic3ViVGl0bGVcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwid2lkZVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZmlsdGVyc0xheW91dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2x1bW5zTGF5b3V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIndpZGVcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xzOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd3NMYXlvdXRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwidmFsdWVzTGF5b3V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdFwic3ViVGl0bGVcIjoge1xuXHRcdFx0Y3NzOiBcIndlYml4X3Bpdm90X3RyYW5zcGFyZW50XCIsXG5cdFx0XHRib3JkZXJsZXNzOiB0cnVlLFxuXHRcdFx0dGVtcGxhdGU6IFwiPGRpdiBjbGFzcz0nd2ViaXhfcGl2b3RfZmllbGRzX21zZyc+XCIgKyB3ZWJpeC5pMThuLnBpdm90LndpbmRvd01lc3NhZ2UgfHwgXCJcIiArIFwiPC9kaXY+XCIsXG5cdFx0XHRoZWlnaHQ6IDI1XG5cdFx0fSxcblx0XHRcImZpZWxkc0xheW91dFwiOiB7XG5cdFx0XHR3aWR0aDogY29uZmlnLmZpZWxkc0NvbHVtbldpZHRoLFxuXHRcdFx0cm93czogW1xuXHRcdFx0XHRcImZpZWxkc0hlYWRlclwiLFxuXHRcdFx0XHRcImZpZWxkc1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRcImZpbHRlcnNMYXlvdXRcIjoge1xuXHRcdFx0cm93czogW1xuXHRcdFx0XHRcImZpbHRlcnNIZWFkZXJcIixcblx0XHRcdFx0XCJmaWx0ZXJzXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdFwiY29sdW1uc0xheW91dFwiOiB7XG5cdFx0XHRyb3dzOiBbXG5cdFx0XHRcdFwiY29sdW1uc0hlYWRlclwiLFxuXHRcdFx0XHRcImNvbHVtbnNcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XCJyb3dzTGF5b3V0XCI6IHtcblx0XHRcdHJvd3M6IFtcblx0XHRcdFx0XCJyb3dzSGVhZGVyXCIsXG5cdFx0XHRcdFwicm93c1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRcInZhbHVlc0xheW91dFwiOiB7XG5cdFx0XHRyb3dzOiBbXG5cdFx0XHRcdFwidmFsdWVzSGVhZGVyXCIsXG5cdFx0XHRcdFwidmFsdWVzXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdFwiZmllbGRzSGVhZGVyXCI6IHtcblx0XHRcdGlkOiBcImZpZWxkc0hlYWRlclwiLCBkYXRhOiB7dmFsdWU6IFwiZmllbGRzXCJ9LCBjc3M6IFwid2ViaXhfcGl2b3RfaGVhZGVyX2ZpZWxkc1wiLFxuXHRcdFx0dGVtcGxhdGU6IHBvcHVwVGVtcGxhdGVzLmhlYWRlciwgaGVpZ2h0OiA0NVxuXHRcdH0sXG5cdFx0XCJmaWVsZHNcIjoge1xuXHRcdFx0aWQ6IFwiZmllbGRzXCIsIGNzczogXCJ3ZWJpeF9waXZvdF9maWVsZHNcIiwgdmlldzogXCJsaXN0XCIsIHNjcm9sbDogdHJ1ZSxcblx0XHRcdHR5cGU6IHtoZWlnaHQ6IFwiYXV0b1wifSwgZHJhZzogdHJ1ZSwgdGVtcGxhdGU6IFwiPHNwYW4gY2xhc3M9J3dlYml4X3Bpdm90X2xpc3RfbWFya2VyJz48L3NwYW4+I3RleHQjXCIsXG5cdFx0XHRvbjogdmlldy5fZ2V0TGlzdEV2ZW50cygpXG5cdFx0fSxcblx0XHRcImZpbHRlcnNIZWFkZXJcIjoge1xuXHRcdFx0aWQ6IFwiZmlsdGVyc0hlYWRlclwiLCBkYXRhOiB7dmFsdWU6IFwiZmlsdGVyc1wiLCBpY29uOiBcImZpbHRlclwifSxcblx0XHRcdHRlbXBsYXRlOiBwb3B1cFRlbXBsYXRlcy5pY29uSGVhZGVyLCBjc3M6IFwid2ViaXhfcGl2b3RfcG9wdXBfdGl0bGVcIiwgaGVpZ2h0OiA0MFxuXHRcdH0sXG5cdFx0XCJmaWx0ZXJzXCI6IHtcblx0XHRcdGlkOiBcImZpbHRlcnNcIiwgdmlldzogXCJsaXN0XCIsIGRyYWc6IHRydWUsIGNzczogXCJ3ZWJpeF9waXZvdF92YWx1ZXNcIixcblx0XHRcdHRlbXBsYXRlOiB3ZWJpeC5iaW5kKHBvcHVwVGVtcGxhdGVzLmZpbHRlcnMsIHZpZXcpLFxuXHRcdFx0dHlwZToge2hlaWdodDogXCJhdXRvXCJ9LFxuXHRcdFx0b25DbGljazoge1xuXHRcdFx0XHRcIndlYml4X3Bpdm90X2xpbmtcIjogd2ViaXguYmluZChjbGMuY2xpY2tIYW5kbGVyc1tcImZpbHRlci1zZWxlY3RvclwiXSwgdmlldyksXG5cdFx0XHRcdFwid2ViaXhfcGl2b3RfbWludXNcIjogd2ViaXguYmluZChjbGMuY2xpY2tIYW5kbGVycy5yZW1vdmUsIHZpZXcpXG5cdFx0XHR9LFxuXHRcdFx0b246IHZpZXcuX2dldExpc3RFdmVudHMoKVxuXHRcdH0sXG5cdFx0XCJjb2x1bW5zSGVhZGVyXCI6IHtcblx0XHRcdGlkOiBcImNvbHVtbnNIZWFkZXJcIiwgZGF0YToge3ZhbHVlOiBcImNvbHVtbnNcIiwgaWNvbjogXCJjb2x1bW5zXCJ9LFxuXHRcdFx0dGVtcGxhdGU6IHBvcHVwVGVtcGxhdGVzLmljb25IZWFkZXIsIGNzczogXCJ3ZWJpeF9waXZvdF9wb3B1cF90aXRsZVwiLCBoZWlnaHQ6IDQwXG5cdFx0fSxcblx0XHRcImNvbHVtbnNcIjoge1xuXHRcdFx0aWQ6IFwiY29sdW1uc1wiLCB2aWV3OiBcImxpc3RcIiwgZHJhZzogdHJ1ZSwgdHlwZToge2hlaWdodDogXCJhdXRvXCJ9LFxuXHRcdFx0dGVtcGxhdGU6IHdlYml4LmJpbmQocG9wdXBUZW1wbGF0ZXMuY29sdW1ucywgdmlldyksXG5cdFx0XHRvbjogdmlldy5fZ2V0TGlzdEV2ZW50cygpLFxuXHRcdFx0b25DbGljazoge1xuXHRcdFx0XHRcIndlYml4X3Bpdm90X21pbnVzXCI6IHdlYml4LmJpbmQoY2xjLmNsaWNrSGFuZGxlcnMucmVtb3ZlLCB2aWV3KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XCJyb3dzSGVhZGVyXCI6IHtcblx0XHRcdGlkOiBcInJvd3NIZWFkZXJcIiwgZGF0YToge3ZhbHVlOiBcInJvd3NcIiwgaWNvbjogXCJsaXN0XCJ9LFxuXHRcdFx0dGVtcGxhdGU6IHBvcHVwVGVtcGxhdGVzLmljb25IZWFkZXIsIGNzczogXCJ3ZWJpeF9waXZvdF9wb3B1cF90aXRsZVwiLCBoZWlnaHQ6IDQwXG5cdFx0fSxcblx0XHRcInJvd3NcIjoge1xuXHRcdFx0aWQ6IFwicm93c1wiLFxuXHRcdFx0dmlldzogXCJsaXN0XCIsXG5cdFx0XHRkcmFnOiB0cnVlLFxuXHRcdFx0dGVtcGxhdGU6IHdlYml4LmJpbmQocG9wdXBUZW1wbGF0ZXMucm93cywgdmlldyksXG5cdFx0XHR0eXBlOiB7aGVpZ2h0OiBcImF1dG9cIn0sXG5cdFx0XHRvbjogdmlldy5fZ2V0TGlzdEV2ZW50cygpLFxuXHRcdFx0b25DbGljazoge1xuXHRcdFx0XHRcIndlYml4X3Bpdm90X21pbnVzXCI6IHdlYml4LmJpbmQoY2xjLmNsaWNrSGFuZGxlcnMucmVtb3ZlLCB2aWV3KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XCJ2YWx1ZXNIZWFkZXJcIjoge1xuXHRcdFx0aWQ6IFwidmFsdWVzSGVhZGVyXCIsIGRhdGE6IHt2YWx1ZTogXCJ2YWx1ZXNcIiwgaWNvbjogZmFsc2UsIGljb25Db250ZW50OiBcIjxiPiZTaWdtYTs8L2I+XCJ9LFxuXHRcdFx0dGVtcGxhdGU6IHBvcHVwVGVtcGxhdGVzLmljb25IZWFkZXIsIGNzczogXCJ3ZWJpeF9waXZvdF9wb3B1cF90aXRsZVwiLCBoZWlnaHQ6IDQwXG5cdFx0fSxcblx0XHRcInZhbHVlc1wiOiB7XG5cdFx0XHRpZDogXCJ2YWx1ZXNcIiwgdmlldzogXCJsaXN0XCIsIHNjcm9sbDogdHJ1ZSwgZHJhZzogdHJ1ZSwgY3NzOiBcIndlYml4X3Bpdm90X3ZhbHVlc1wiLCB0eXBlOiB7aGVpZ2h0OiBcImF1dG9cIn0sXG5cdFx0XHR0ZW1wbGF0ZTogd2ViaXguYmluZChwb3B1cFRlbXBsYXRlcy50YWJsZVZhbHVlcywgdmlldyksXG5cdFx0XHRvbkNsaWNrOiB7XG5cdFx0XHRcdFwid2ViaXhfcGl2b3RfbGlua1wiOiB3ZWJpeC5iaW5kKGNsYy5jbGlja0hhbmRsZXJzLnNlbGVjdG9yLCB2aWV3KSxcblx0XHRcdFx0XCJ3ZWJpeF9waXZvdF9wbHVzXCI6IHdlYml4LmJpbmQoY2xjLmNsaWNrSGFuZGxlcnMuYWRkLCB2aWV3KSxcblx0XHRcdFx0XCJ3ZWJpeF9waXZvdF9taW51c1wiOiB3ZWJpeC5iaW5kKGNsYy5jbGlja0hhbmRsZXJzLnJlbW92ZSwgdmlldylcblx0XHRcdH0sXG5cdFx0XHRvbjogdmlldy5fZ2V0TGlzdEV2ZW50cygpXG5cdFx0fVxuXHR9O1xufVxuXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvc3RydWN0dXJlcy90YWJsZXBvcHVwLmpzXG4gKiovIiwiZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZVRvdGFscyh2aWV3KXtcblx0aWYodmlldy5jb25maWcuZnJlZXplVG90YWwpe1xuXHRcdHZhciBpLCBjb2x1bW5zID0gdmlldy4kJChcImRhdGFcIikuY29uZmlnLmNvbHVtbnM7XG5cdFx0bGV0IHdpZHRoID0gZ2V0V2lkdGgoY29sdW1ucyk7XG5cdFx0bGV0IHRvdGFsQ291bnQgPSBnZXRUb3RhbENvdW50KGNvbHVtbnMpO1xuXG5cdFx0Zm9yKCBpID0wOyBpIDwgdmlldy4kJChcImRhdGFcIikuY29uZmlnLmxlZnRTcGxpdDtpKyspXG5cdFx0XHR3aWR0aCAtPSBjb2x1bW5zW2ldLndpZHRoO1xuXG5cdFx0Zm9yKCBpID1jb2x1bW5zLmxlbmd0aC0xOyBpID4gY29sdW1ucy5sZW5ndGgtdG90YWxDb3VudDtpLS0pXG5cdFx0XHR3aWR0aCAtPWNvbHVtbnNbaV0ud2lkdGg7XG5cblx0XHRpZih3aWR0aCA+IDEwMCl7XG5cdFx0XHR2aWV3LiQkKFwiZGF0YVwiKS5jb25maWcucmlnaHRTcGxpdCA9IHRvdGFsQ291bnQ7XG5cdFx0XHR2aWV3LiQkKFwiZGF0YVwiKS5yZWZyZXNoQ29sdW1ucygpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRUb3RhbENvdW50KGNvbHVtbnMpe1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGk9Y29sdW1ucy5sZW5ndGgtMTsgIWNvdW50ICYmaSA+PTA7IGktLSl7XG5cdFx0aWYoY29sdW1uc1tpXS5oZWFkZXJbMF0gJiYgY29sdW1uc1tpXS5oZWFkZXJbMF0ubmFtZSA9PSBcInRvdGFsXCIpXG5cdFx0XHRjb3VudCA9IGNvbHVtbnMubGVuZ3RoLWk7XG5cdH1cblx0cmV0dXJuIGNvdW50O1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aChjb2x1bW5zKXtcblx0dmFyIGksIHdpZHRoID0wO1xuXHRmb3IoIGkgPTA7IGkgPCBjb2x1bW5zLmxlbmd0aDtpKysgKVxuXHRcdHdpZHRoICs9Y29sdW1uc1tpXS53aWR0aDtcblx0cmV0dXJuIHdpZHRoO1xufVxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9vcGVyYXRpb25zL2ZyZWV6ZV90b3RhbHMuanNcbiAqKi8iLCJpbXBvcnQge0RhdGF9IGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCB7T3BlcmF0aW9uc30gZnJvbSBcIi4vb3BlcmF0aW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgaGxwIGZyb20gXCIuL2hlbHBlcnMuanNcIjtcblxuY29uc3QgZGl2aWRlciA9IFwiXydfXCI7XG5cbmV4cG9ydCBjbGFzcyBfUGl2b3R7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyl7XG5cdFx0dGhpcy4kZGl2aWRlciA9IGRpdmlkZXI7XG5cdFx0dGhpcy5faW5pdE9wZXJhdGlvbnMoKTtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0XHR0aGlzLl9waXZvdERhdGEgPSBuZXcgRGF0YSh0aGlzLCB0aGlzLmNvbmZpZyk7XG5cdFx0aWYgKCF0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUpXG5cdFx0XHR0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUgPSB7fTtcblx0XHRobHAuZXh0ZW5kKHRoaXMuY29uZmlnLnN0cnVjdHVyZSwgeyByb3dzOltdLCBjb2x1bW5zOltdLCB2YWx1ZXM6W10sIGZpbHRlcnM6W10gfSk7XG5cdH1cblxuXHRfZ2V0UGl2b3REYXRhKHB1bGwsIG9yZGVyKXtcblx0XHRyZXR1cm4gdGhpcy5fcGl2b3REYXRhLnByb2Nlc3MocHVsbCwgb3JkZXIpO1xuXHR9XG5cdF9pbml0T3BlcmF0aW9ucygpe1xuXHRcdHZhciBvcGVyYXRpb25zID0gdGhpcy5fcGl2b3RPcGVyYXRpb25zID0gbmV3IE9wZXJhdGlvbnMoKTtcblx0XHR0aGlzLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zLnB1bGw7XG5cdH1cblxuXHRhZGRPcGVyYXRpb24obmFtZSwgbWV0aG9kLCBvcHRpb25zKXtcblx0XHR0aGlzLl9waXZvdE9wZXJhdGlvbnMuYWRkKG5hbWUsIG1ldGhvZCwgb3B0aW9ucyk7XG5cdH1cblx0YWRkVG90YWxPcGVyYXRpb24obmFtZSwgbWV0aG9kLCBvcHRpb25zKXtcblx0XHR0aGlzLl9waXZvdE9wZXJhdGlvbnMuYWRkVG90YWwobmFtZSwgbWV0aG9kLCBvcHRpb25zKTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgV2ViaXhQaXZvdCBleHRlbmRzIF9QaXZvdHtcblx0Z2V0RGF0YShkYXRhKXtcblx0XHR2YXIgaSwgaWQsIG9wdGlvbixcblx0XHRcdGZpZWxkLCBmaWVsZHMgPSBbXSwgZmllbGRzSGFzaCA9IHt9LFxuXHRcdFx0ZmlsdGVycyA9IHRoaXMuY29uZmlnLnN0cnVjdHVyZS5maWx0ZXJzLFxuXHRcdFx0cHVsbCA9IHt9LCAgb3B0aW9ucyA9IHt9LCBvcHRpb25zSGFzaCA9IHt9LFxuXHRcdFx0b3BlcmF0aW9ucyA9IHRoaXMub3BlcmF0aW9ucyxcblx0XHRcdG9yZGVyID0gW10sXG5cdFx0XHRyZXN1bHQgPSB7fTtcblxuXHRcdGZvcihpPTA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKXtcblx0XHRcdGlmKGZpbHRlcnNbaV0udHlwZS5pbmRleE9mKFwic2VsZWN0XCIpICE9IC0xICl7XG5cdFx0XHRcdG9wdGlvbnNbZmlsdGVyc1tpXS5uYW1lXSA9IFtdO1xuXHRcdFx0XHRvcHRpb25zSGFzaFtmaWx0ZXJzW2ldLm5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKGk9MDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspe1xuXHRcdFx0aWQgPSBkYXRhW2ldLmlkID0gZGF0YVtpXS5pZCB8fGhscC51aWQoKTtcblx0XHRcdHB1bGxbaWRdID0gZGF0YVtpXTtcblx0XHRcdG9yZGVyLnB1c2goaWQpO1xuXG5cdFx0XHRpZihpIDwgNSlcblx0XHRcdFx0Zm9yIChmaWVsZCBpbiBkYXRhW2ldKVxuXHRcdFx0XHRcdGlmICghZmllbGRzSGFzaFtmaWVsZF0pIHtcblx0XHRcdFx0XHRcdGZpZWxkcy5wdXNoKGZpZWxkKTtcblx0XHRcdFx0XHRcdGZpZWxkc0hhc2hbZmllbGRdID0gaGxwLnVpZCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0Zm9yKG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdFx0bGV0IHZhbHVlID0gZGF0YVtpXVtvcHRpb25dO1xuXHRcdFx0XHRpZighaGxwLmlzVW5kZWZpbmVkKHZhbHVlKSl7XG5cdFx0XHRcdFx0aWYoIW9wdGlvbnNIYXNoW29wdGlvbl1bdmFsdWVdKXtcblx0XHRcdFx0XHRcdG9wdGlvbnNIYXNoW29wdGlvbl1bdmFsdWVdPSAxO1xuXHRcdFx0XHRcdFx0b3B0aW9uc1tvcHRpb25dLnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVzdWx0Lm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHJlc3VsdC5maWVsZHMgPSBmaWVsZHM7XG5cdFx0cmVzdWx0LmRhdGEgPSB0aGlzLl9nZXRQaXZvdERhdGEocHVsbCwgb3JkZXIpO1xuXG5cdFx0cmVzdWx0Lm9wZXJhdGlvbnMgPSBbXTtcblx0XHRmb3IoaWQgaW4gb3BlcmF0aW9ucylcblx0XHRcdHJlc3VsdC5vcGVyYXRpb25zLnB1c2goaWQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuXG5cblxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL2RhdGEvY29yZS5qc1xuICoqLyIsImltcG9ydCAqIGFzIGhscCBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQge3Byb2Nlc3NIZWFkZXJ9IGZyb20gXCIuL2hlYWRlci5qc1wiO1xuaW1wb3J0IHthZGRUb3RhbERhdGF9IGZyb20gXCIuL3RvdGFsX2NvbHVtbnMuanNcIjtcbmltcG9ydCB7YWRkRm9vdGVyfSBmcm9tIFwiLi9mb290ZXIuanNcIjtcbmltcG9ydCAqIGFzIGl0bSBmcm9tIFwiLi9pdGVtX3ZhbHVlcy5qc1wiO1xuaW1wb3J0ICogYXMgZmx0IGZyb20gXCIuL2ZpbHRlcnMuanNcIjtcblxuZXhwb3J0IGNsYXNzIERhdGF7XG5cdGNvbnN0cnVjdG9yKG1hc3RlciwgY29uZmlnKXtcblx0XHR0aGlzLm1hc3RlciA9IG1hc3Rlcjtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0fVxuXG5cdGdldCBvcGVyYXRpb25zKCl7XG5cdFx0cmV0dXJuIHRoaXMubWFzdGVyLl9waXZvdE9wZXJhdGlvbnM7XG5cdH1cblxuXHRnZXQgZGl2aWRlcigpe1xuXHRcdHJldHVybiB0aGlzLm1hc3Rlci4kZGl2aWRlcjtcblx0fVxuXHRnZXQgc3RydWN0dXJlKCl7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlnLnN0cnVjdHVyZTtcblx0fVxuXG5cdHByb2Nlc3MoZGF0YSwgb3JkZXIpe1xuXHRcdHZhciBjb2x1bW5zLCBmaWVsZHMsIGhlYWRlciwgaSwgaXRlbXMsXG5cdFx0XHRzdHJ1Y3R1cmUgPSB0aGlzLnN0cnVjdHVyZTtcblx0XHRcdHN0cnVjdHVyZS5faGVhZGVyID0gW107XG5cdFx0XHRzdHJ1Y3R1cmUuX2hlYWRlcl9oYXNoID0ge307XG5cblx0XHRmbHQuZm9ybWF0RmlsdGVyVmFsdWVzKHN0cnVjdHVyZS5maWx0ZXJzKTtcblx0XHRmbHQuc2V0RmlsdGVyVmFsdWVzKHN0cnVjdHVyZS5maWx0ZXJzKTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBzdHJ1Y3R1cmUudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzdHJ1Y3R1cmUudmFsdWVzW2ldLm9wZXJhdGlvbiA9IHN0cnVjdHVyZS52YWx1ZXNbaV0ub3BlcmF0aW9uIHx8IFtcInN1bVwiXTtcblx0XHRcdGlmICghaGxwLmlzQXJyYXkoc3RydWN0dXJlLnZhbHVlc1tpXS5vcGVyYXRpb24pKVxuXHRcdFx0XHRzdHJ1Y3R1cmUudmFsdWVzW2ldLm9wZXJhdGlvbiA9IFtzdHJ1Y3R1cmUudmFsdWVzW2ldLm9wZXJhdGlvbl07XG5cdFx0fVxuXG5cdFx0Y29sdW1ucyA9IFtdO1xuXHRcdGZvcihpPTA7aTwgc3RydWN0dXJlLmNvbHVtbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0Y29sdW1uc1tpXSA9ICh0eXBlb2Ygc3RydWN0dXJlLmNvbHVtbnNbaV0gPT0gXCJvYmplY3RcIj8oc3RydWN0dXJlLmNvbHVtbnNbaV0uaWR8fGkpOnN0cnVjdHVyZS5jb2x1bW5zW2ldKTtcblx0XHR9XG5cblx0XHRmaWVsZHMgPSBzdHJ1Y3R1cmUucm93cy5jb25jYXQoY29sdW1ucyk7XG5cdFx0aXRlbXMgPSB0aGlzLmdyb3VwKGRhdGEsIG9yZGVyLCBmaWVsZHMpO1xuXG5cdFx0aGVhZGVyID0ge307XG5cdFx0aWYgKHN0cnVjdHVyZS5yb3dzLmxlbmd0aCA+IDApXG5cdFx0XHRpdGVtcyA9IHRoaXMucHJvY2Vzc1Jvd3MoaXRlbXMsIHN0cnVjdHVyZS5yb3dzLCBzdHJ1Y3R1cmUsIGhlYWRlcik7XG5cdFx0ZWxzZSB7XG5cdFx0XHQvLyB0aGVyZSBhcmUgbm8gcm93cyBpbiBzdHJ1Y3R1cmUsIG9ubHkgY29sdW1ucyBhbmQgdmFsdWVzXG5cdFx0XHR0aGlzLnByb2Nlc3NDb2x1bW5zKGl0ZW1zLCBjb2x1bW5zLCBzdHJ1Y3R1cmUsIGhlYWRlcik7XG5cdFx0XHRpdGVtcyA9IFtdO1xuXHRcdH1cblxuXHRcdGhlYWRlciA9IHByb2Nlc3NIZWFkZXIodGhpcy5tYXN0ZXIsIGhlYWRlcik7XG5cblx0XHRpdGVtcyA9IGFkZFRvdGFsRGF0YSh0aGlzLm1hc3RlciwgaXRlbXMpO1xuXG5cdFx0aWYodGhpcy5jb25maWcuZm9vdGVyKVxuXHRcdFx0YWRkRm9vdGVyKHRoaXMubWFzdGVyLCBoZWFkZXIsIGl0ZW1zKTtcblxuXHRcdGRlbGV0ZSBzdHJ1Y3R1cmUuX2hlYWRlcjtcblx0XHRkZWxldGUgc3RydWN0dXJlLl9oZWFkZXJfaGFzaDtcblxuXHRcdHJldHVybiB7IGhlYWRlcjogaGVhZGVyLCBkYXRhOiBpdGVtcyB9O1xuXHR9XG5cblx0cHJvY2Vzc0NvbHVtbnMoZGF0YSwgY29sdW1ucywgc3RydWN0dXJlLCBoZWFkZXIsIGl0ZW0sIG5hbWUpIHtcblx0XHR2YXIgdm5hbWU7XG5cblx0XHRpdGVtID0gaXRlbSB8fCB7fTtcblx0XHRpZiAoY29sdW1ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRuYW1lID0gbmFtZSB8fCBcIlwiO1xuXHRcdFx0Zm9yIChsZXQgaSBpbiBkYXRhKSB7XG5cdFx0XHRcdGlmKCFoZWFkZXJbaV0pXG5cdFx0XHRcdFx0aGVhZGVyW2ldID0ge307XG5cdFx0XHRcdGRhdGFbaV0gPSB0aGlzLnByb2Nlc3NDb2x1bW5zKGRhdGFbaV0sIGNvbHVtbnMuc2xpY2UoMSksIHN0cnVjdHVyZSwgaGVhZGVyW2ldLCBpdGVtLCAobmFtZS5sZW5ndGg+MCA/IChuYW1lICsgdGhpcy5kaXZpZGVyKSA6XCJcIikgKyBpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHZhbHVlcyA9IHN0cnVjdHVyZS52YWx1ZXM7XG5cdFx0XHRmb3IgKHZhciBpZCBpbiBkYXRhKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZXNbaV0ub3BlcmF0aW9uLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRpZihuYW1lKVxuXHRcdFx0XHRcdFx0XHR2bmFtZSA9IG5hbWUgKyB0aGlzLmRpdmlkZXIgKyB2YWx1ZXNbaV0ub3BlcmF0aW9uW2pdICsgdGhpcy5kaXZpZGVyICsgdmFsdWVzW2ldLm5hbWU7XG5cdFx0XHRcdFx0XHRlbHNlIC8vIGlmIG5vIGNvbHVtbnNcblx0XHRcdFx0XHRcdFx0dm5hbWUgPSB2YWx1ZXNbaV0ub3BlcmF0aW9uW2pdICsgdGhpcy5kaXZpZGVyICsgdmFsdWVzW2ldLm5hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIXN0cnVjdHVyZS5faGVhZGVyX2hhc2hbdm5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdHN0cnVjdHVyZS5faGVhZGVyLnB1c2godm5hbWUpO1xuXHRcdFx0XHRcdFx0XHRzdHJ1Y3R1cmUuX2hlYWRlcl9oYXNoW3ZuYW1lXSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaGxwLmlzVW5kZWZpbmVkKGl0ZW1bdm5hbWVdKSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtW3ZuYW1lXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJbdmFsdWVzW2ldLm9wZXJhdGlvbltqXSArIHRoaXMuZGl2aWRlciArIHZhbHVlc1tpXS5uYW1lXSA9IHt9O1xuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpdGVtW3ZuYW1lXS5wdXNoKHt2YWx1ZTpkYXRhW2lkXVt2YWx1ZXNbaV0ubmFtZV0saWQ6IGlkfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpdGVtO1xuXHR9XG5cblx0cHJvY2Vzc1Jvd3MoZGF0YSwgcm93cywgc3RydWN0dXJlLCBoZWFkZXIpIHtcblx0XHR2YXIgaSwgaXRlbSwgaiwgaywgdmFsdWUsXG5cdFx0XHRpdGVtcyA9IFtdO1xuXHRcdGlmIChyb3dzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAoaSBpbiBkYXRhKVxuXHRcdFx0XHRkYXRhW2ldID0gdGhpcy5wcm9jZXNzUm93cyhkYXRhW2ldLCByb3dzLnNsaWNlKDEpLCBzdHJ1Y3R1cmUsIGhlYWRlcik7XG5cblx0XHRcdHZhciB2YWx1ZXMgPSBzdHJ1Y3R1cmUuX2hlYWRlcjtcblxuXHRcdFx0Zm9yIChpIGluIGRhdGEpIHtcblx0XHRcdFx0aXRlbSA9IHsgZGF0YTogZGF0YVtpXSB9O1xuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgaXRlbS5kYXRhLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0Zm9yIChrID0gMDsgayA8IHZhbHVlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNba107XG5cdFx0XHRcdFx0XHRpZiAoaGxwLmlzVW5kZWZpbmVkKGl0ZW1bdmFsdWVdKSlcblx0XHRcdFx0XHRcdFx0aXRlbVt2YWx1ZV0gPSBbXTtcblx0XHRcdFx0XHRcdGl0ZW1bdmFsdWVdLnB1c2goaXRlbS5kYXRhW2pdW3ZhbHVlXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0SXRlbVZhbHVlcyhpdGVtKTtcblx0XHRcdFx0aXRlbS5uYW1lID0gaTtcblx0XHRcdFx0aXRlbS5vcGVuID0gdHJ1ZTtcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChpIGluIGRhdGEpIHtcblx0XHRcdFx0aXRlbSA9IHRoaXMucHJvY2Vzc0NvbHVtbnMoZGF0YVtpXSwgc3RydWN0dXJlLmNvbHVtbnMsIHN0cnVjdHVyZSwgaGVhZGVyKTtcblx0XHRcdFx0aXRlbS5uYW1lID0gaTtcblx0XHRcdFx0dGhpcy5zZXRJdGVtVmFsdWVzKGl0ZW0pO1xuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaXRlbXM7XG5cdH1cblxuXHRzZXRJdGVtVmFsdWVzKGl0ZW0pe1xuXHRcdGl0ZW0gPSBpdG0uY2FsY3VsYXRlSXRlbShpdGVtLCB7XG5cdFx0XHRoZWFkZXI6IHRoaXMuc3RydWN0dXJlLl9oZWFkZXIsXG5cdFx0XHRkaXZpZGVyOiB0aGlzLmRpdmlkZXIsXG5cdFx0XHRvcGVyYXRpb25zOiB0aGlzLm9wZXJhdGlvbnNcblx0XHR9KTtcblx0XHRpdGVtID0gaXRtLnNldE1pbk1heChpdGVtLHtcblx0XHRcdGhlYWRlcjogdGhpcy5zdHJ1Y3R1cmUuX2hlYWRlcixcblx0XHRcdG1heDogdGhpcy5jb25maWcubWF4LFxuXHRcdFx0bWluOiB0aGlzLmNvbmZpZy5taW4sXG5cdFx0XHR2YWx1ZXM6IHRoaXMuc3RydWN0dXJlLnZhbHVlc1xuXHRcdH0pO1xuXHRcdHJldHVybiBpdGVtO1xuXHR9XG5cblx0Z3JvdXAoZGF0YSwgb3JkZXIsIGZpZWxkcyApe1xuXHRcdHZhciBpLCBpZCwgaXRlbSxcblx0XHRcdGhhc2ggPSB7fTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWQgPSBvcmRlcltpXTtcblx0XHRcdGl0ZW0gPSBkYXRhW2lkXTtcblx0XHRcdGlmIChpdGVtICYmIGZsdC5maWx0ZXJJdGVtKHRoaXMuc3RydWN0dXJlLmZpbHRlcnMsIGl0ZW0sIHRoaXMuY29uZmlnLmZpbHRlck1hcCkpe1xuXHRcdFx0XHR0aGlzLmdyb3VwSXRlbShoYXNoLCBpdGVtLCBmaWVsZHMgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGhhc2g7XG5cdH1cblxuXHRncm91cEl0ZW0oaGFzaCwgaXRlbSwgZmllbGRzICl7XG5cdFx0aWYoZmllbGRzLmxlbmd0aCl7XG5cdFx0XHR2YXIgdmFsdWUgPSBpdGVtW2ZpZWxkc1swXV07XG5cdFx0XHRpZihobHAuaXNVbmRlZmluZWQoaGFzaFt2YWx1ZV0pKVxuXHRcdFx0XHRoYXNoW3ZhbHVlXSA9IHt9O1xuXHRcdFx0dGhpcy5ncm91cEl0ZW0oaGFzaFt2YWx1ZV0sIGl0ZW0sIGZpZWxkcy5zbGljZSgxKSk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHRcdGhhc2hbaXRlbS5pZF0gPSBpdGVtO1xuXHR9XG5cblx0ZmlsdGVySXRlbShpdGVtKXtcblx0XHR2YXIgZmlsdGVycyA9IHRoaXMuc3RydWN0dXJlLmZpbHRlcnMgfHwgW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZiA9IGZpbHRlcnNbaV07XG5cdFx0XHRpZiAoZi5mdmFsdWUpe1xuXHRcdFx0XHRpZiAoaGxwLmlzVW5kZWZpbmVkKGl0ZW1bZi5uYW1lXSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW1bZi5uYW1lXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBmLmZ1bmMoZi5mdmFsdWUsIHZhbHVlKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdClcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvZGF0YS9kYXRhLmpzXG4gKiovIiwiZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkob2JqKTooT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQoYSl7XG5cdHJldHVybiB0eXBlb2YgYSA9PSBcInVuZGVmaW5lZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKGJhc2UsIHNvdXJjZSwgZm9yY2Upe1xuXHQvL2NvcHkgbWV0aG9kcywgb3ZlcndyaXRlIGV4aXN0aW5nIG9uZXMgaW4gY2FzZSBvZiBjb25mbGljdFxuXHRmb3IgKHZhciBtZXRob2QgaW4gc291cmNlKVxuXHRcdGlmICghYmFzZVttZXRob2RdIHx8IGZvcmNlKVxuXHRcdFx0YmFzZVttZXRob2RdID0gc291cmNlW21ldGhvZF07XG5cdHJldHVybiBiYXNlO1xufVxuXG52YXIgc2VlZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHVpZCgpe1xuXHRpZiAoIXNlZWQpXG5cdFx0c2VlZD0obmV3IERhdGUoKSkudmFsdWVPZigpO1xuXHRzZWVkKys7XG5cdHJldHVybiBzZWVkO1xufVxuXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvZGF0YS9oZWxwZXJzLmpzXG4gKiovIiwiaW1wb3J0ICogYXMgaGxwIGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7YWRkVG90YWxDb2x1bW5zfSBmcm9tIFwiLi90b3RhbF9jb2x1bW5zLmpzXCI7XG5cblxuLy8gZGVmYXVsdCBzb3J0aW5nIHByb3BlcnRpZXNcbnZhciBzb3J0Q29uZmlnID0ge1xuXHRkaXI6IDEsXG5cdGFzOiBmdW5jdGlvbihhLGIpe1xuXHRcdGlmKGlzTnVtKGEpICYmIGlzTnVtKGIpKVxuXHRcdFx0cmV0dXJuIHNvcnRpbmcuaW50KGEsYik7XG5cdFx0cmV0dXJuIHNvcnRpbmcuc3RyaW5nKGEsYik7XG5cdH1cbn07XG5cbnZhciBzb3J0aW5nID0ge1xuXHRcImRhdGVcIjpmdW5jdGlvbihhLGIpe1xuXHRcdGE9YS0wOyBiPWItMDtcblx0XHRyZXR1cm4gYT5iPzE6KGE8Yj8tMTowKTtcblx0fSxcblx0XCJpbnRcIjpmdW5jdGlvbihhLGIpe1xuXHRcdGEgPSBhKjE7IGI9YioxO1xuXHRcdHJldHVybiBhPmI/MTooYTxiPy0xOjApO1xuXHR9LFxuXHRcInN0cmluZ1wiOmZ1bmN0aW9uKGEsYil7XG5cdFx0aWYgKCFiKSByZXR1cm4gMTtcblx0XHRpZiAoIWEpIHJldHVybiAtMTtcblx0XHRhID0gYS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7IGI9Yi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIGE+Yj8xOihhPGI/LTE6MCk7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZpZXcsIGhlYWRlcikge1xuXHR2YXIgaSwgaiwgcCwgdGV4dDAsIHZDb25maWcsXG5cdFx0dmFsdWVzQ29uZmlnID0gdmlldy5jb25maWcuc3RydWN0dXJlLnZhbHVlcztcblxuXHRoZWFkZXIgPSBzb3J0SGVhZGVyKHZpZXcuY29uZmlnLnN0cnVjdHVyZSwgaGVhZGVyKTtcblxuXHRoZWFkZXIgPSBnZXRIZWFkZXIodmlldywgaGVhZGVyKTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgaGVhZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBhcnRzID0gW107XG5cdFx0Zm9yIChqID0gMDsgaiA8IGhlYWRlcltpXS5sZW5ndGg7IGorKylcblx0XHRcdHBhcnRzLnB1c2goaGVhZGVyW2ldW2pdLm5hbWUpO1xuXG5cdFx0Ly8gZmluZCB2YWx1ZSBjb25maWd1cmF0aW9uXG5cdFx0dkNvbmZpZyA9IG51bGw7XG5cdFx0dmFyIHRtcCA9IHBhcnRzW3BhcnRzLmxlbmd0aC0xXS5zcGxpdCh2aWV3LiRkaXZpZGVyKTtcblx0XHRmb3IoaiA9MDsgaiA8IHZhbHVlc0NvbmZpZy5sZW5ndGggJiYgIXZDb25maWc7IGorKyl7XG5cdFx0XHRpZih2YWx1ZXNDb25maWdbal0ub3BlcmF0aW9uKVxuXHRcdFx0XHRmb3IocCA9MDsgcDwgdmFsdWVzQ29uZmlnW2pdLm9wZXJhdGlvbi5sZW5ndGg7IHArKyl7XG5cdFx0XHRcdFx0aWYodmFsdWVzQ29uZmlnW2pdLm5hbWUgPT0gdG1wWzFdICYmIHZhbHVlc0NvbmZpZ1tqXS5vcGVyYXRpb25bcF0gPT0gdG1wWzBdKXtcblx0XHRcdFx0XHRcdHZDb25maWcgPSB2YWx1ZXNDb25maWdbal07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGVhZGVyW2ldID0ge2lkOiBwYXJ0cy5qb2luKHZpZXcuJGRpdmlkZXIpLCBoZWFkZXI6IGhlYWRlcltpXX07XG5cdFx0Ly8gYWRkIGZvcm1hdFxuXHRcdGlmKHRtcFswXSAhPSBcImNvdW50XCIpXG5cdFx0XHRoZWFkZXJbaV0uZm9ybWF0ID0gKHZDb25maWcgJiYgdkNvbmZpZy5mb3JtYXQ/dkNvbmZpZy5mb3JtYXQ6dmlldy5jb25maWcuZm9ybWF0KTtcblx0fVxuXG5cdGlmKHZpZXcuY2FsbEV2ZW50KVxuXHRcdHZpZXcuY2FsbEV2ZW50KFwib25IZWFkZXJJbml0XCIsIFtoZWFkZXJdKTtcblxuXHRpZih2aWV3LmNvbmZpZy50b3RhbENvbHVtbiAmJiBoZWFkZXIubGVuZ3RoKVxuXHRcdGhlYWRlciA9IGFkZFRvdGFsQ29sdW1ucyh2aWV3LCBoZWFkZXIpO1xuXG5cdGhlYWRlci5zcGxpY2UoMCwgMCwge2lkOlwibmFtZVwiLCB0ZW1wbGF0ZTpcIntjb21tb24udHJlZXRhYmxlKCl9ICNuYW1lI1wiLCBoZWFkZXI6eyB0ZXh0OiAgdGV4dDB9fSk7XG5cblx0cmV0dXJuIGhlYWRlcjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odmFsdWUpe1xuXHRyZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcbn1cblxuLypcbiogZ2V0IHNvcnQgcHJvcGVydGllcyBmb3IgYSBjb2x1bW5cbiogKi9cbmZ1bmN0aW9uIHNldFNvcnRDb25maWcoY29uZmlnLCBjb2x1bW4pe1xuXHR2YXIgc29ydGluZyA9IHNvcnRDb25maWc7XG5cdGlmKGNvbmZpZyl7XG5cdFx0Ly8gZm9yIGEgc3BlY2lmaWMgY29sdW1uc1xuXHRcdGlmKGNvbmZpZ1tjb2x1bW5dKVxuXHRcdFx0c29ydGluZyA9IGNvbmZpZ1tjb2x1bW5dO1xuXHRcdC8vIGZvciB0aGUgbGFzdCBjb2x1bW4gKGV4LiBcImdkcCAobWluKVwiKVxuXHRcdGVsc2UgaWYoIWNvbHVtbiAmJiBjb25maWcuJGxhc3QpXG5cdFx0XHRzb3J0aW5nID0gY29uZmlnLiRsYXN0O1xuXHRcdC8vIGZvciBhbnkgb3RoZXIgY29sdW1uXG5cdFx0ZWxzZSBpZihjb25maWcuJGRlZmF1bHQpXG5cdFx0XHRzb3J0aW5nID0gY29uZmlnLiRkZWZhdWx0O1xuXG5cdFx0aWYoc29ydGluZy5kaXIpXG5cdFx0XHRzb3J0aW5nLmRpciA9IHNvcnRpbmcuZGlyPT1cImRlc2NcIj8tMToxO1xuXHRcdGhscC5leHRlbmQoc29ydGluZyxzb3J0Q29uZmlnKTtcblx0fVxuXHRyZXR1cm4gc29ydGluZztcbn1cblxuXG5mdW5jdGlvbiBzb3J0SGVhZGVyKGNvbmZpZywgaGVhZGVyLGNJbmRleCl7XG5cdHZhciBjb2x1bW4sIGksIGtleSwga2V5cywgc29ydGluZyxcblx0XHRzb3J0ZWQgPSBbXTtcblxuXHRpZihPYmplY3Qua2V5cyAmJiBjb25maWcuY29sdW1uU29ydCAhPT0gZmFsc2Upe1xuXHRcdGNJbmRleCA9IGNJbmRleHx8MDtcblxuXHRcdGNvbHVtbiA9IGNvbmZpZy5jb2x1bW5zW2NJbmRleF07XG5cdFx0c29ydGluZyA9IHNldFNvcnRDb25maWcoY29uZmlnLmNvbHVtblNvcnQsIGNvbHVtbik7XG5cdFx0a2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcikuc29ydChmdW5jdGlvbihhLGIpe1xuXHRcdFx0IHJldHVybiBzb3J0aW5nLmFzKGEsYikqc29ydGluZy5kaXI7XG5cdFx0fSk7XG5cdFx0Y0luZGV4Kys7XG5cblx0XHRmb3IoaT0wOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRrZXkgPSBrZXlzW2ldO1xuXHRcdFx0c29ydGVkLnB1c2goe1xuXHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0ZGF0YTogc29ydEhlYWRlcihjb25maWcsIGhlYWRlcltrZXldLCBjSW5kZXgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0ZWxzZXtcblx0XHRmb3Ioa2V5IGluIGhlYWRlcil7XG5cdFx0XHRzb3J0ZWQucHVzaCh7XG5cdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRkYXRhOiBzb3J0SGVhZGVyKGNvbmZpZywgaGVhZGVyW2tleV0pXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc29ydGVkO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXIodmlldywgZGF0YSkge1xuXG5cdHZhciBmaXJzdCwgaSwgaXRlbSwgaiwgaCwgdG1wLFxuXHRcdGhlYWRlciA9IFtdO1xuXG5cdGZvciAoaSA9MDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRpdGVtID0gZGF0YVtpXTtcblxuXHRcdGlmIChpdGVtLmRhdGEubGVuZ3RoKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gZ2V0SGVhZGVyKHZpZXcsIGl0ZW0uZGF0YSk7XG5cdFx0XHRmaXJzdCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRoID0gcmVzdWx0W2pdO1xuXHRcdFx0XHRoLnNwbGljZSgwLCAwLCB7IG5hbWU6aXRlbS5rZXl9KTtcblx0XHRcdFx0aWYgKCFmaXJzdCkge1xuXHRcdFx0XHRcdGhbMF0uY29sc3BhbiA9IHJlc3VsdC5sZW5ndGg7XG5cdFx0XHRcdFx0Zmlyc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhlYWRlci5wdXNoKGgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQga2V5cyA9IGRhdGFbaV0ua2V5LnNwbGl0KHZpZXcuJGRpdmlkZXIpO1xuXHRcdFx0aGVhZGVyLnB1c2goW3sgbmFtZTogZGF0YVtpXS5rZXksIG9wZXJhdGlvbjprZXlzWzBdLCB0ZXh0OmtleXNbMV19XSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoZWFkZXI7XG59XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL2RhdGEvaGVhZGVyLmpzXG4gKiovIiwiZnVuY3Rpb24gZ2V0VG90YWxDb2x1bW5JZChtYXN0ZXIsIG5hbWUpe1xuXHRyZXR1cm4gXCIkd2ViaXh0b3RhbFwiICsgbWFzdGVyLiRkaXZpZGVyICsgbmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVzKGl0ZW0sIGlkcyl7XG5cdHZhciBpLCB2YWx1ZSwgdmFsdWVzID0gW107XG5cdGZvcihpPTA7IGk8IGlkcy5sZW5ndGg7aSsrKXtcblx0XHR2YWx1ZSA9IGl0ZW1baWRzW2ldXTtcblx0XHRpZighaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpKVxuXHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb3RhbENvbHVtbnMobWFzdGVyLCBoZWFkZXIpe1xuXHR2YXIgZ3JvdXBzLCBncm91cERhdGEsIGdyb3VwTmFtZSwgaCwgaSxcblx0XHRoUm93Q291bnQsIHBhcnRzLFxuXHRcdHRvdGFsQ29scyA9IFtdO1xuXG5cblx0aFJvd0NvdW50ID0gaGVhZGVyWzBdLmhlYWRlci5sZW5ndGg7XG5cdC8vIGlmIG5vIHNlbGVjdGVkIGNvbHVtbnNcblx0aWYoaFJvd0NvdW50IDwgMilcblx0XHRyZXR1cm4gaGVhZGVyO1xuXG5cdGdyb3VwRGF0YSA9IGdldFRvdGFsR3JvdXBzKG1hc3RlciwgaGVhZGVyKTtcblx0Z3JvdXBzID0gZ3JvdXBEYXRhLmdyb3Vwcztcblx0bWFzdGVyLl9waXZvdENvbHVtbkdyb3VwcyA9IGdyb3Vwcztcblx0Zm9yKCBncm91cE5hbWUgaW4gZ3JvdXBzKXtcblx0XHQvLyBjb2x1bW4gY29uZmlnXG5cdFx0aCA9IHtcblx0XHRcdGlkOiBnZXRUb3RhbENvbHVtbklkKG1hc3RlciwgZ3JvdXBOYW1lKSxcblx0XHRcdGhlYWRlcjpbXSxcblx0XHRcdHNvcnQ6XCJpbnRcIixcblx0XHRcdHdpZHRoOiBtYXN0ZXIuY29uZmlnLmNvbHVtbldpZHRoLFxuXHRcdFx0Zm9ybWF0OiBtYXN0ZXIuY29uZmlnLmZvcm1hdFxuXHRcdH07XG5cblx0XHQvLyBzZXQgdG9wIGhlYWRlcnNcblx0XHRmb3IoIGkgPTA7IGkgPCBoUm93Q291bnQtMTsgaSsrKXtcblx0XHRcdGlmKCFpICYmICF0b3RhbENvbHMubGVuZ3RoKXtcblx0XHRcdFx0aC5oZWFkZXIucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogXCJ0b3RhbFwiLFxuXHRcdFx0XHRcdHJvd3NwYW46IGhSb3dDb3VudC0xLFxuXHRcdFx0XHRcdGNvbHNwYW46IGdyb3VwRGF0YS5jb3VudFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0aC5oZWFkZXIucHVzaChcIlwiKTtcblx0XHR9XG5cblx0XHQvLyBzZXQgYm90dG9tIGhlYWRlclxuXHRcdHBhcnRzID0gZ3JvdXBOYW1lLnNwbGl0KG1hc3Rlci4kZGl2aWRlcik7XG5cdFx0aC5oZWFkZXIucHVzaCh7XG5cdFx0XHRuYW1lOmdyb3VwTmFtZSxcblx0XHRcdG9wZXJhdGlvbjogcGFydHNbMF0sXG5cdFx0XHR0ZXh0OiBwYXJ0c1sxXVxuXHRcdH0pO1xuXG5cdFx0dG90YWxDb2xzLnB1c2goaCk7XG5cdH1cblxuXHRyZXR1cm4gaGVhZGVyLmNvbmNhdCh0b3RhbENvbHMpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbihtYXN0ZXIsIG5hbWUpe1xuXHRyZXR1cm4gbWFzdGVyLl9waXZvdE9wZXJhdGlvbnMuZ2V0VG90YWwobmFtZSkgfHwgbWFzdGVyLm9wZXJhdGlvbnNbbmFtZV18fG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRvdGFsR3JvdXBzKG1hc3RlciwgaGVhZGVyKXtcblx0dmFyIGdyb3VwTmFtZSwgaSwgbmFtZSwgb3BlcmF0aW9uLCBwYXJ0cyxcblx0XHRncm91cHMgPSB7fSxcblx0XHRncm91cENvdW50ID0gMDtcblxuXHRmb3IoaSA9IDA7IGk8IGhlYWRlci5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzID0gaGVhZGVyW2ldLmlkLnNwbGl0KG1hc3Rlci4kZGl2aWRlcik7XG5cdFx0bmFtZSA9IHBhcnRzLnBvcCgpO1xuXHRcdG9wZXJhdGlvbiA9IHBhcnRzLnBvcCgpO1xuXHRcdGlmIChvcGVyYXRpb24gPT0gXCJzdW1cIiB8fCBtYXN0ZXIuY29uZmlnLnRvdGFsQ29sdW1uICE9IFwic3VtT25seVwiKSB7XG5cdFx0XHRncm91cE5hbWUgPSBvcGVyYXRpb24gKyBtYXN0ZXIuJGRpdmlkZXIgKyBuYW1lO1xuXHRcdFx0aWYgKCFncm91cHNbZ3JvdXBOYW1lXSl7XG5cdFx0XHRcdGdyb3VwQ291bnQrKztcblx0XHRcdFx0Z3JvdXBzW2dyb3VwTmFtZV0gPSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBvcGVyYXRpb24sXG5cdFx0XHRcdFx0aWRzOltdLFxuXHRcdFx0XHRcdGZvcm1hdDogaGVhZGVyLmZvcm1hdFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzW2dyb3VwTmFtZV0uaWRzLnB1c2goaGVhZGVyW2ldLmlkKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtncm91cHM6IGdyb3VwcywgY291bnQ6IGdyb3VwQ291bnR9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb3RhbERhdGEobWFzdGVyLCBpdGVtcyl7XG5cdHZhciBncm91cHMgPSBtYXN0ZXIuX3Bpdm90Q29sdW1uR3JvdXBzO1xuXHRpZihncm91cHMpe1xuXHRcdGxldCBncm91cCwgaSwgaWRzLCBuYW1lO1xuXHRcdGZvcihuYW1lIGluIGdyb3Vwcyl7XG5cdFx0XHRncm91cCA9IGdyb3Vwc1tuYW1lXTtcblx0XHRcdGlkcyA9IGdyb3VwLmlkcztcblxuXHRcdFx0Zm9yKGkgPTA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGxldCBvcGVyYXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uSWQgPSBnZXRUb3RhbENvbHVtbklkKG1hc3RlciwgbmFtZSksXG5cdFx0XHRcdFx0cmVzdWx0ID0gXCJcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBnZXRWYWx1ZXMoaXRlbXNbaV0sIGlkcyk7XG5cdFx0XHRcdGlmKHZhbHVlcy5sZW5ndGgpe1xuXHRcdFx0XHRcdGlmKChvcGVyYXRpb24gPSBtYXN0ZXIuX3Bpdm90T3BlcmF0aW9ucy5nZXRUb3RhbChuYW1lLnNwbGl0KG1hc3Rlci4kZGl2aWRlcilbMF0pKSlcblx0XHRcdFx0XHRcdHJlc3VsdCA9IG9wZXJhdGlvbi5jYWxsKG1hc3RlciwgdmFsdWVzLCBjb2x1bW5JZCwgaXRlbXNbaV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aXRlbXNbaV1bY29sdW1uSWRdID0gcmVzdWx0O1xuXHRcdFx0XHRpZihpdGVtc1tpXS5kYXRhKVxuXHRcdFx0XHRcdGl0ZW1zW2ldLmRhdGEgPSBhZGRUb3RhbERhdGEobWFzdGVyLCBpdGVtc1tpXS5kYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGl0ZW1zO1xufVxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9kYXRhL3RvdGFsX2NvbHVtbnMuanNcbiAqKi8iLCJpbXBvcnQgKiBhcyBobHAgZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRm9vdGVyKG1hc3RlciwgY29sdW1ucywgaXRlbXMpe1xuXHR2YXIgY29uZmlnLCBpLCBuYW1lcywgb3BlcmF0aW9uO1xuXG5cdGZvcihpPTE7IGkgPCBjb2x1bW5zLmxlbmd0aDtpKyspe1xuXHRcdGNvbmZpZyA9IG51bGw7XG5cdFx0bmFtZXMgPSBjb2x1bW5zW2ldLmlkLnNwbGl0KG1hc3Rlci4kZGl2aWRlcik7XG5cdFx0b3BlcmF0aW9uID0gbmFtZXNbbmFtZXMubGVuZ3RoLTJdO1xuXHRcdGlmKG1hc3Rlci5jb25maWcuZm9vdGVyID09IFwic3VtT25seVwiKXtcblx0XHRcdGlmKG9wZXJhdGlvbiAhPSBcInN1bVwiKVxuXHRcdFx0XHRjb25maWcgPSBcIiBcIjtcblx0XHR9XG5cdFx0bGV0IHRvdGFsTWV0aG9kID0gbWFzdGVyLl9waXZvdE9wZXJhdGlvbnMuZ2V0VG90YWwob3BlcmF0aW9uKTtcblx0XHRpZighY29uZmlnICYmIHRvdGFsTWV0aG9kKXtcblx0XHRcdGxldCBvcHRpb25zID0gbWFzdGVyLl9waXZvdE9wZXJhdGlvbnMuZ2V0VG90YWxPcHRpb25zKG9wZXJhdGlvbik7XG5cdFx0XHRsZXQgcmVzdWx0ID0gY2FsY3VsYXRlQ29sdW1uKGl0ZW1zLCBjb2x1bW5zW2ldLmlkLCB0b3RhbE1ldGhvZCwgb3B0aW9ucyYmb3B0aW9ucy5sZWF2ZXNPbmx5KTtcblx0XHRcdGNvbmZpZyA9IHtcblx0XHRcdFx0JHBpdm90VmFsdWU6IHJlc3VsdCxcblx0XHRcdFx0JHBpdm90T3BlcmF0aW9uOiBvcGVyYXRpb25cblx0XHRcdH07XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHRcdGNvbmZpZyA9IFwiIFwiO1xuXHRcdGNvbHVtbnNbaV0uZm9vdGVyID0gY29uZmlnO1xuXG5cdFx0aWYodHlwZW9mIG1hc3Rlci5jb25maWcuZm9vdGVyID09IFwib2JqZWN0XCIpe1xuXHRcdFx0aGxwLmV4dGVuZChjb2x1bW5zW2ldLmZvb3RlciwgbWFzdGVyLmNvbmZpZy5mb290ZXIsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW4oaXRlbXMsIGNvbHVtbklkLCB0b3RhbE1ldGhvZCwgbGVhdmVzKXtcblx0dmFyIGksIGZJdGVtcz0gW10sIHZhbHVlLCB2YWx1ZXMgPSBbXTtcblx0Ly8gZmlsdGVyIGl0ZW1zXG5cdGl0ZW1zID0gZmlsdGVySXRlbXMoaXRlbXMsIGxlYXZlcyk7XG5cdC8vIGdldCBjb2x1bW4gdmFsdWVzXG5cdGZvcihpPTA7IGk8IGl0ZW1zLmxlbmd0aDsgaSsrKXtcblx0XHR2YWx1ZSA9IGl0ZW1zW2ldW2NvbHVtbklkXTtcblx0XHRpZiAoIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZXMucHVzaCh2YWx1ZSoxKTtcblx0XHRcdGZJdGVtcy5wdXNoKGl0ZW1zW2ldKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRvdGFsTWV0aG9kKHZhbHVlcywgY29sdW1uSWQsIGZJdGVtcyk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckl0ZW1zKGl0ZW1zLCBsZWF2ZXMsIHNlbGVjdGVkSXRlbXMpe1xuXHRpZighc2VsZWN0ZWRJdGVtcylcblx0XHRzZWxlY3RlZEl0ZW1zID0gW107XG5cdGZvcih2YXIgaT0wOyBpIDwgaXRlbXMubGVuZ3RoO2krKyl7XG5cdFx0aWYobGVhdmVzICYmIGl0ZW1zW2ldLmRhdGEpXG5cdFx0XHRmaWx0ZXJJdGVtcyhpdGVtc1tpXS5kYXRhLCBsZWF2ZXMsIHNlbGVjdGVkSXRlbXMpO1xuXHRcdGVsc2Vcblx0XHRcdHNlbGVjdGVkSXRlbXMucHVzaChpdGVtc1tpXSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGVkSXRlbXM7XG59XG5cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9kYXRhL2Zvb3Rlci5qc1xuICoqLyIsImV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVJdGVtKGl0ZW0sIGNvbmZpZykge1xuXHR2YXIgaSwgaXNJZHMsIGtleSwgbGVhdmVzLCBvcGVyYXRpb24sIHRtcCwgdmFsdWVzLFxuXHRcdGhlYWRlciA9IGNvbmZpZy5oZWFkZXI7XG5cblx0Zm9yIChpID0gMDsgaSA8IGhlYWRlci5sZW5ndGg7IGkrKykge1xuXHRcdGtleSA9IGhlYWRlcltpXTtcblx0XHR0bXAgPSBrZXkuc3BsaXQoY29uZmlnLmRpdmlkZXIpO1xuXHRcdG9wZXJhdGlvbiA9IHRtcFt0bXAubGVuZ3RoLTJdO1xuXG5cdFx0dmFsdWVzID0gaXRlbVtrZXldO1xuXG5cdFx0bGVhdmVzID0gY29uZmlnLm9wZXJhdGlvbnMuZ2V0T3B0aW9uKG9wZXJhdGlvbixcImxlYXZlc09ubHlcIik7XG5cdFx0aXNJZHMgPSBjb25maWcub3BlcmF0aW9ucy5nZXRPcHRpb24ob3BlcmF0aW9uLFwiaWRzXCIpO1xuXHRcdGlmKGxlYXZlcyAmJiBpdGVtLmRhdGEpe1xuXHRcdFx0dmFsdWVzID0gW107XG5cdFx0XHRnZXRLZXlMZWF2ZXMoaXRlbS5kYXRhLGtleSx2YWx1ZXMpO1xuXHRcdH1cblx0XHRpZiAodmFsdWVzKXtcblx0XHRcdHZhciBkYXRhID0gW107XG5cdFx0XHR2YXIgaWRzID0gW107XG5cdFx0XHRmb3IodmFyIGo9MDsgaiA8IHZhbHVlcy5sZW5ndGg7aisrKXtcblx0XHRcdFx0bGV0IHZhbHVlID0gdmFsdWVzW2pdO1xuXHRcdFx0XHRsZXQgaWQgPSBudWxsO1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuXHRcdFx0XHRcdGlkID0gdmFsdWVzW2pdLmlkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh2YWx1ZSB8fCB2YWx1ZSA9PSBcIjBcIikge1xuXHRcdFx0XHRcdGRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0aWYgKGlkKSBpZHMucHVzaChpZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKGRhdGEubGVuZ3RoKVxuXHRcdFx0XHRpdGVtW2tleV0gPSBjb25maWcub3BlcmF0aW9ucy5nZXQob3BlcmF0aW9uKShkYXRhLCBrZXksIGl0ZW0sIGlzSWRzP2lkczpudWxsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0aXRlbVtrZXldID0gJyc7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHRcdGl0ZW1ba2V5XSA9ICcnO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufVxuXG5mdW5jdGlvbiBnZXRLZXlMZWF2ZXMoZGF0YSwga2V5LCByZXN1bHQpe1xuXHR2YXIgaTtcblxuXHRmb3IoaT0wOyBpIDwgZGF0YS5sZW5ndGg7aSsrKXtcblx0XHRpZihkYXRhW2ldLmRhdGEpXG5cdFx0XHRnZXRLZXlMZWF2ZXMoZGF0YVtpXS5kYXRhLGtleSxyZXN1bHQpO1xuXHRcdGVsc2Vcblx0XHRcdHJlc3VsdC5wdXNoKGRhdGFbaV1ba2V5XSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1pbk1heChpdGVtLCBjb25maWcpIHtcblx0dmFyIGksIGosIGtleSxcblx0XHRtYXhBcnIsIG1heFZhbHVlLCBtaW5BcnIsIG1pblZhbHVlLFxuXHRcdHZhbHVlLFxuXHRcdGhlYWRlciA9IGNvbmZpZy5oZWFkZXIsXG5cdFx0bWF4ID0gY29uZmlnLm1heCxcblx0XHRtaW4gPSBjb25maWcubWluLFxuXHRcdHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG5cblx0Ly8gbm90aGluZyB0byBkb1xuXHRpZiAoIW1pbiAmJiAhbWF4KVxuXHRcdHJldHVybiBpdGVtO1xuXG5cdC8vdmFsdWVzID0gc3RydWN0dXJlLnZhbHVlcztcblx0aWYgKCFpdGVtLiRjZWxsQ3NzKSBpdGVtLiRjZWxsQ3NzID0ge307XG5cblx0Ly8gY2FsY3VsYXRpbmcgZm9yIGVhY2ggdmFsdWVcblx0Zm9yIChpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhbHVlID0gdmFsdWVzW2ldO1xuXHRcdG1heEFycj1bXTtcblx0XHRtYXhWYWx1ZT0tOTk5OTk5OTk7XG5cdFx0bWluQXJyPVtdO1xuXHRcdG1pblZhbHVlPTk5OTk5OTk5O1xuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGhlYWRlci5sZW5ndGg7IGorKykge1xuXHRcdFx0a2V5ID0gaGVhZGVyW2pdO1xuXHRcdFx0aWYgKGlzTmFOKGl0ZW1ba2V5XSkpIGNvbnRpbnVlO1xuXHRcdFx0Ly8gaXQncyBhIGFub3RoZXIgdmFsdWVcblx0XHRcdGlmIChrZXkuaW5kZXhPZih2YWx1ZS5uYW1lKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAobWF4ICYmIGl0ZW1ba2V5XSA+IG1heFZhbHVlKSB7XG5cdFx0XHRcdG1heEFyciA9IFsga2V5IF07XG5cdFx0XHRcdG1heFZhbHVlID0gaXRlbVtrZXldO1xuXHRcdFx0fSBlbHNlIGlmIChpdGVtW2tleV0gPT0gbWF4VmFsdWUpIHtcblx0XHRcdFx0bWF4QXJyLnB1c2goa2V5KTtcblx0XHRcdH1cblx0XHRcdGlmIChtaW4gJiYgaXRlbVtrZXldIDwgbWluVmFsdWUpIHtcblx0XHRcdFx0bWluQXJyID0gWyBrZXkgXTtcblx0XHRcdFx0bWluVmFsdWUgPSBpdGVtW2tleV07XG5cdFx0XHR9IGVsc2UgaWYgKGl0ZW1ba2V5XSA9PSBtaW5WYWx1ZSkge1xuXHRcdFx0XHRtaW5BcnIucHVzaChrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBtaW5BcnIubGVuZ3RoOyBqKyspIHtcblx0XHRcdGl0ZW0uJGNlbGxDc3NbbWluQXJyW2pdXSA9IFwid2ViaXhfbWluXCI7XG5cdFx0fVxuXHRcdGZvciAoaiA9IDA7IGogPCBtYXhBcnIubGVuZ3RoOyBqKyspIHtcblx0XHRcdGl0ZW0uJGNlbGxDc3NbbWF4QXJyW2pdXSA9IFwid2ViaXhfbWF4XCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpdGVtO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL2RhdGEvaXRlbV92YWx1ZXMuanNcbiAqKi8iLCJpbXBvcnQgKiBhcyBobHAgZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuZnVuY3Rpb24gbnVtSGVscGVyKGZ2YWx1ZSwgdmFsdWUsIGZ1bmMpIHtcblx0aWYodHlwZW9mIGZ2YWx1ZSA9PSBcIm9iamVjdFwiKXtcblx0XHRmb3IodmFyIGk9MDsgaSA8IGZ2YWx1ZS5sZW5ndGg7IGkrKyl7XG5cdFx0XHRmdmFsdWVbaV0gPSBwYXJzZUZsb2F0KGZ2YWx1ZVtpXSk7XG5cdFx0XHRpZiAoaXNOYU4oZnZhbHVlW2ldKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdGVsc2V7XG5cdFx0ZnZhbHVlID0gcGFyc2VGbG9hdChmdmFsdWUpO1xuXHRcdC8vIGlmIGZpbHRlciB2YWx1ZSBpcyBub3QgYSBudW1iZXIgdGhlbiBpZ25vcmUgc3VjaCBmaWx0ZXJcblx0XHRpZiAoaXNOYU4oZnZhbHVlKSkgcmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gaWYgcm93IHZhbHVlIGlzIG5vdCBhIG51bWJlciB0aGVuIGRvbid0IHNob3cgdGhpcyByb3dcblx0aWYgKGlzTmFOKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gZnVuYyhmdmFsdWUsIHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1bGVzID0ge1xuXHRjb250YWluczogZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5pbmRleE9mKGZ2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpID49IDA7XG5cdH0sXG5cdGVxdWFsOiBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIG51bUhlbHBlcihmdmFsdWUsIHZhbHVlLCBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gKGZ2YWx1ZSA9PSB2YWx1ZSk7XG5cdFx0fSk7XG5cdH0sXG5cdG5vdF9lcXVhbDogZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdHJldHVybiBudW1IZWxwZXIoZnZhbHVlLCB2YWx1ZSwgZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIChmdmFsdWUgIT0gdmFsdWUpO1xuXHRcdH0pO1xuXHR9LFxuXHRsZXNzOiBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIG51bUhlbHBlcihmdmFsdWUsIHZhbHVlLCBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gKHZhbHVlIDwgZnZhbHVlKTtcblx0XHR9KTtcblx0fSxcblx0bGVzc19lcXVhbDogZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdHJldHVybiBudW1IZWxwZXIoZnZhbHVlLCB2YWx1ZSwgZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuICh2YWx1ZSA8PSBmdmFsdWUpO1xuXHRcdH0pO1xuXHR9LFxuXHRtb3JlOiBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIG51bUhlbHBlcihmdmFsdWUsIHZhbHVlLCBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gKHZhbHVlID4gZnZhbHVlKTtcblx0XHR9KTtcblx0fSxcblx0bW9yZV9lcXVhbDogZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdHJldHVybiBudW1IZWxwZXIoZnZhbHVlLCB2YWx1ZSwgZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuICh2YWx1ZSA+PSBmdmFsdWUpO1xuXHRcdH0pO1xuXHR9LFxuXHRtdWx0aTogZnVuY3Rpb24oZnZhbHVlcywgdmFsdWUpe1xuXHRcdHZhciByZXN1bHQgPSBmYWxzZTtcblx0XHRmdmFsdWVzID0gZnZhbHVlcy5zcGxpdChcIixcIik7XG5cdFx0Zm9yKHZhciBpPTA7IGkgPCBmdmFsdWVzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHJlc3VsdCA9IHJlc3VsdHx8ICh2YWx1ZS5pbmRleE9mKGZ2YWx1ZXNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSA+PSAwKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0cmFuZ2U6IGZ1bmN0aW9uKGZ2YWx1ZSwgdmFsdWUpe1xuXHRcdHJldHVybiBudW1IZWxwZXIoZnZhbHVlLCB2YWx1ZSwgZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuICh2YWx1ZSA8IGZ2YWx1ZVsxXSAmJiB2YWx1ZSA+PSBmdmFsdWVbMF0pO1xuXHRcdH0pO1xuXHR9LFxuXHRyYW5nZV9pbmM6IGZ1bmN0aW9uKGZ2YWx1ZSwgdmFsdWUpe1xuXHRcdHJldHVybiBudW1IZWxwZXIoZnZhbHVlLCB2YWx1ZSwgZnVuY3Rpb24oZnZhbHVlLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuICh2YWx1ZSA8PSBmdmFsdWVbMV0gJiYgdmFsdWUgPj0gZnZhbHVlWzBdKTtcblx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclZhbHVlcyhmaWx0ZXJzKXtcblxuXHRmaWx0ZXJzID0gZmlsdGVycyB8fCBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IGYgPSBmaWx0ZXJzW2ldLFxuXHRcdFx0ZnZhbHVlID0gZi5mdmFsdWU7XG5cdFx0aWYodHlwZW9mIGZ2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0Zi5mdW5jID0gZnZhbHVlO1xuXHRcdH1cblx0XHRlbHNlIGlmIChmdmFsdWUuc3Vic3RyKDAsMSkgPT0gXCI9XCIpIHtcblx0XHRcdGYuZnVuYyA9IHJ1bGVzLmVxdWFsO1xuXHRcdFx0ZnZhbHVlID0gZnZhbHVlLnN1YnN0cigxKTtcblx0XHR9IGVsc2UgaWYgKGZ2YWx1ZS5zdWJzdHIoMCwyKSA9PSBcIjw+XCIpIHtcblx0XHRcdGYuZnVuYyA9IHJ1bGVzLm5vdF9lcXVhbDtcblx0XHRcdGZ2YWx1ZSA9IGZ2YWx1ZS5zdWJzdHIoMik7XG5cdFx0fSBlbHNlIGlmIChmdmFsdWUuc3Vic3RyKDAsMikgPT0gXCI+PVwiKSB7XG5cdFx0XHRmLmZ1bmMgPSBydWxlcy5tb3JlX2VxdWFsO1xuXHRcdFx0ZnZhbHVlID0gZnZhbHVlLnN1YnN0cigyKTtcblx0XHR9IGVsc2UgaWYgKGZ2YWx1ZS5zdWJzdHIoMCwxKSA9PSBcIj5cIikge1xuXHRcdFx0Zi5mdW5jID0gcnVsZXMubW9yZTtcblx0XHRcdGZ2YWx1ZSA9IGZ2YWx1ZS5zdWJzdHIoMSk7XG5cdFx0fSBlbHNlIGlmIChmdmFsdWUuc3Vic3RyKDAsMikgPT0gXCI8PVwiKSB7XG5cdFx0XHRmLmZ1bmMgPSBydWxlcy5sZXNzX2VxdWFsO1xuXHRcdFx0ZnZhbHVlID0gZnZhbHVlLnN1YnN0cigyKTtcblx0XHR9IGVsc2UgaWYgKGZ2YWx1ZS5zdWJzdHIoMCwxKSA9PSBcIjxcIikge1xuXHRcdFx0Zi5mdW5jID0gcnVsZXMubGVzcztcblx0XHRcdGZ2YWx1ZSA9IGZ2YWx1ZS5zdWJzdHIoMSk7XG5cdFx0fWVsc2UgaWYgKGZ2YWx1ZS5pbmRleE9mKFwiLi4uXCIpID4gMCkge1xuXHRcdFx0Zi5mdW5jID0gcnVsZXMucmFuZ2U7XG5cdFx0XHRmdmFsdWUgPSBmdmFsdWUuc3BsaXQoXCIuLi5cIik7XG5cdFx0fWVsc2UgaWYgKGZ2YWx1ZS5pbmRleE9mKFwiLi5cIikgPiAwKSB7XG5cdFx0XHRmLmZ1bmMgPSBydWxlcy5yYW5nZV9pbmM7XG5cdFx0XHRmdmFsdWUgPSBmdmFsdWUuc3BsaXQoXCIuLlwiKTtcblx0XHR9IGVsc2UgaWYoZi50eXBlLmluZGV4T2YoXCJtdWx0aVwiKSA+LTEpe1xuXHRcdFx0Zi5mdW5jID0gcnVsZXMubXVsdGk7XG5cdFx0fSBlbHNlIGlmKGYudHlwZSA9PSBcImRhdGVwaWNrZXJcIil7XG5cdFx0XHRmLmZ1bmMgPSBmdW5jdGlvbihmdmFsdWUsIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBmdmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1lbHNlXG5cdFx0XHRmLmZ1bmMgPSBydWxlcy5jb250YWlucztcblxuXHRcdGYuZnZhbHVlID0gZnZhbHVlO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWx0ZXJWYWx1ZXMoZmlsdGVycykge1xuXHR2YXIgaSwgZnZhbHVlO1xuXHRmaWx0ZXJzID0gZmlsdGVycyB8fCBbXTtcblx0Zm9yIChpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRmdmFsdWUgPSAoZmlsdGVyc1tpXS5mdmFsdWUgfHwgZmlsdGVyc1tpXS52YWx1ZSB8fCBcIlwiKTtcblx0XHRpZiAodHlwZW9mIGZ2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAoZnZhbHVlLnRyaW0pXG5cdFx0XHRcdGZ2YWx1ZSA9IGZ2YWx1ZS50cmltKCk7XG5cdFx0fVxuXHRcdGZpbHRlcnNbaV0uZnZhbHVlID0gZnZhbHVlO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJJdGVtKGZpbHRlcnMsIGl0ZW0sIG1hcCl7XG5cdGlmKGZpbHRlcnMpe1xuXHRcdGxldCBpLCBmO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmID0gZmlsdGVyc1tpXTtcblx0XHRcdGlmIChmLmZ2YWx1ZSl7XG5cdFx0XHRcdGxldCBmaWVsZCA9IG1hcCAmJiBtYXBbZi5uYW1lXT9tYXBbZi5uYW1lXTpmLm5hbWU7XG5cdFx0XHRcdGlmIChobHAuaXNVbmRlZmluZWQoaXRlbVtmaWVsZF0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtW2ZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBmLmZ1bmMoZi5mdmFsdWUsIHZhbHVlKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdClcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9kYXRhL2ZpbHRlcnMuanNcbiAqKi8iLCJpbXBvcnQgKiBhcyBobHAgZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuXG5jb25zdCBvcGVyYXRpb25zID0gIHtcblx0c3VtOiBmdW5jdGlvbih2YWx1ZXMpIHtcblx0XHR2YXIgc3VtID0gMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuXHRcdFx0dmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG5cdFx0XHRpZiAoIWlzTmFOKHZhbHVlKSlcblx0XHRcdFx0c3VtICs9IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3VtO1xuXHR9LFxuXHRjb3VudDogZnVuY3Rpb24oZGF0YSwga2V5LCBpdGVtKSB7XG5cdFx0dmFyIGNvdW50ID0gMDtcblx0XHRpZighaXRlbS5kYXRhKVxuXHRcdFx0Y291bnQgPSBkYXRhLmxlbmd0aDtcblx0XHRlbHNle1xuXHRcdFx0Zm9yKHZhciBpPTA7IGkgPCBpdGVtLmRhdGEubGVuZ3RoOyBpKyspXG5cdFx0XHRcdGNvdW50ICs9IGl0ZW0uZGF0YVtpXVtrZXldfHwwO1xuXHRcdH1cblx0XHRyZXR1cm4gY291bnQ7XG5cdH0sXG5cdG1heDogZnVuY3Rpb24oYXJncykge1xuXHRcdGlmIChhcmdzLmxlbmd0aCA9PSAxKSByZXR1cm4gYXJnc1swXTtcblx0XHRyZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgYXJncyk7XG5cdH0sXG5cdG1pbjogZnVuY3Rpb24oYXJncykge1xuXHRcdGlmIChhcmdzLmxlbmd0aCA9PSAxKSByZXR1cm4gYXJnc1swXTtcblx0XHRyZXR1cm4gTWF0aC5taW4uYXBwbHkodGhpcywgYXJncyk7XG5cdH1cbn07XG5cbmNvbnN0IHRvdGFsT3BlcmF0aW9ucyA9IHtcblx0XCJzdW1cIjogZnVuY3Rpb24odmFsdWVzKXtcblx0XHR2YXIgaSwgc3VtID0gMDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKVxuXHRcdFx0c3VtICs9IHZhbHVlc1tpXTtcblx0XHRyZXR1cm4gc3VtO1xuXHR9LFxuXHRcIm1pblwiOiBmdW5jdGlvbih2YWx1ZXMpe1xuXHRcdGlmICh2YWx1ZXMubGVuZ3RoID09IDEpIHJldHVybiB2YWx1ZXNbMF07XG5cdFx0cmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsdmFsdWVzKTtcblx0fSxcblx0XCJtYXhcIjogZnVuY3Rpb24odmFsdWVzKXtcblx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PSAxKSByZXR1cm4gdmFsdWVzWzBdO1xuXHRcdHJldHVybiBNYXRoLm1heC5hcHBseShudWxsLHZhbHVlcyk7XG5cdH0sXG5cdFwiY291bnRcIjogZnVuY3Rpb24odmFsdWVzKXtcblx0XHR2YXIgdmFsdWUgPSB0b3RhbE9wZXJhdGlvbnMuc3VtLmNhbGwodGhpcywgdmFsdWVzKTtcblx0XHRyZXR1cm4gdmFsdWU/cGFyc2VJbnQodmFsdWUsMTApOlwiXCI7XG5cdH1cbn07XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25ze1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnB1bGwgPSBobHAuZXh0ZW5kKHt9LG9wZXJhdGlvbnMpO1xuXHRcdHRoaXMub3B0aW9ucyA9IHt9O1xuXHRcdHRoaXMucHVsbFRvdGFsID0gaGxwLmV4dGVuZCh7fSx0b3RhbE9wZXJhdGlvbnMpO1xuXHRcdHRoaXMudG90YWxPcHRpb25zID0ge307XG5cdH1cblxuXHRhZGQobmFtZSwgbWV0aG9kLCBvcHRpb25zKXtcblx0XHR0aGlzLnB1bGxbbmFtZV0gPSBtZXRob2Q7XG5cdFx0aWYob3B0aW9ucylcblx0XHRcdHRoaXMub3B0aW9uc1tuYW1lXSA9IG9wdGlvbnM7XG5cdH1cblxuXHRhZGRUb3RhbChuYW1lLCBtZXRob2QsIG9wdGlvbnMpe1xuXHRcdHRoaXMucHVsbFRvdGFsW25hbWVdID0gbWV0aG9kO1xuXHRcdGlmKG9wdGlvbnMpXG5cdFx0XHR0aGlzLnRvdGFsT3B0aW9uc1tuYW1lXSA9IG9wdGlvbnM7XG5cdH1cblxuXHRnZXQobmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMucHVsbFtuYW1lXXx8bnVsbDtcblx0fVxuXHRnZXRPcHRpb25zKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnNbbmFtZV18fG51bGw7XG5cdH1cblx0Z2V0T3B0aW9uKG5hbWUsb3B0aW9uKXtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdP3RoaXMub3B0aW9uc1tuYW1lXVtvcHRpb25dOm51bGw7XG5cdH1cblxuXHRnZXRUb3RhbChuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5wdWxsVG90YWxbbmFtZV0gfHwgdGhpcy5wdWxsW25hbWVdfHxudWxsO1xuXHR9XG5cdGdldFRvdGFsT3B0aW9ucyhuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5wdWxsVG90YWxbbmFtZV0/KHRoaXMudG90YWxPcHRpb25zW25hbWVdKXx8bnVsbDoodGhpcy5vcHRpb25zW25hbWVdfHxudWxsKTtcblx0fVxuXHRnZXRUb3RhbE9wdGlvbihuYW1lLG9wdGlvbil7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLmdldFRvdGFsT3B0aW9ucyhuYW1lKTtcblx0XHRyZXR1cm4gb3B0aW9ucz9vcHRpb25zW25hbWVdW29wdGlvbl06bnVsbDtcblx0fVxufVxuXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvZGF0YS9vcGVyYXRpb25zLmpzXG4gKiovIiwiZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0ge1xuXHRmaWVsZE1hcDoge30sXG5cdHlTY2FsZVdpZHRoOiAzMDAsXG5cdGNvbHVtbldpZHRoOiAxNTAsXG5cdGZpbHRlckxhYmVsQWxpZ246IFwicmlnaHRcIixcblx0ZmlsdGVyV2lkdGg6IDMwMCxcblx0ZmlsdGVyTWluV2lkdGg6IDE1MCxcblx0ZmlsdGVyTGFiZWxXaWR0aDogMTAwLFxuXHRoZWFkZXJUZW1wbGF0ZTogZnVuY3Rpb24oY29uZmlnKXtcblx0XHRyZXR1cm4gdGhpcy5fYXBwbHlNYXAoY29uZmlnLnRleHQpICsgXCIgKFwiICsgdGhpcy5fYXBwbHlMb2NhbGUoY29uZmlnLm9wZXJhdGlvbikgKyBcIilcIjtcblx0fSxcblx0Zm9ybWF0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmV0dXJuICh2YWx1ZSYmIHZhbHVlIT1cIjBcIj9wYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpOnZhbHVlKTtcblx0fVxufTtcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvY29uZmlnL3Bpdm90dGFibGUuanNcbiAqKi8iLCJleHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1ucyhtYXN0ZXIsIGNvbHVtbnMpe1xuXHR2YXIgZm9ybWF0ID0gbWFzdGVyLmNvbmZpZy5mb3JtYXQ7XG5cdGZvcih2YXIgaSA9MDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspe1xuXHRcdGlmKCFpKXtcblx0XHRcdHNldEZpcnN0Q29sdW1uKG1hc3RlciwgY29sdW1uc1tpXSk7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHR3ZWJpeC5leHRlbmQoY29sdW1uc1tpXSx7XG5cdFx0XHRcdGZvcm1hdDogZm9ybWF0LFxuXHRcdFx0XHRzb3J0OlwiaW50XCIsXG5cdFx0XHRcdHdpZHRoOiBtYXN0ZXIuY29uZmlnLmNvbHVtbldpZHRoXG5cdFx0XHR9KTtcblx0XHRcdHZhciBoZWFkZXIgPSBjb2x1bW5zW2ldLmhlYWRlcjtcblxuXHRcdFx0Zm9yKGxldCBqPTA7IGogPCBoZWFkZXIubGVuZ3RoOyBqKyspe1xuXHRcdFx0XHRsZXQgaCA9IGhlYWRlcltqXTtcblx0XHRcdFx0aWYoaCl7XG5cdFx0XHRcdFx0aWYoIWogJiYgaC5uYW1lID09IFwidG90YWxcIilcblx0XHRcdFx0XHRcdGgudGV4dCA9IG1hc3Rlci5fYXBwbHlMb2NhbGUoXCJ0b3RhbFwiKTtcblx0XHRcdFx0XHRlbHNlIGlmKGogPT0gaGVhZGVyLmxlbmd0aC0xKXtcblx0XHRcdFx0XHRcdGgudGV4dCA9IG1hc3Rlci5jb25maWcuaGVhZGVyVGVtcGxhdGUuY2FsbChtYXN0ZXIsaCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGgudGV4dCA9IGgubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZm9vdGVyID0gY29sdW1uc1tpXS5mb290ZXI7XG5cdFx0XHRpZihmb290ZXIpe1xuXHRcdFx0XHRsZXQgdGV4dCA9ICF3ZWJpeC5pc1VuZGVmaW5lZChmb290ZXIuJHBpdm90VmFsdWUpPyBmb290ZXIuJHBpdm90VmFsdWUgOiBmb290ZXIudGV4dCA7XG5cdFx0XHRcdGZvb3Rlci50ZXh0ID0gZm9ybWF0ICYmIGZvb3Rlci4kcGl2b3RPcGVyYXRpb24hPSBcImNvdW50XCI/Zm9ybWF0KHRleHQpOnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldEZpcnN0Q29sdW1uKG1hc3RlciwgY29sdW1uKXtcblx0dmFyIHRleHQgPSBcIlwiO1xuXHRpZihtYXN0ZXIuY29uZmlnLnJlYWRvbmx5KVxuXHRcdHRleHQgPSBtYXN0ZXIuY29uZmlnLnJlYWRvbmx5VGl0bGV8fFwiXCI7XG5cdGVsc2Vcblx0XHR0ZXh0ID0gXCI8ZGl2IGNsYXNzPSd3ZWJpeF9waXZvdF9jb25maWdfbXNnJz5cIit3ZWJpeC5pMThuLnBpdm90LnBpdm90TWVzc2FnZStcIjwvZGl2PlwiO1xuXHRjb2x1bW4uaGVhZGVyID0gdGV4dDtcblx0Y29sdW1uLndpZHRoID0gbWFzdGVyLmNvbmZpZy55U2NhbGVXaWR0aDtcblx0Y29sdW1uLmV4cG9ydEFzVHJlZSA9IHRydWU7XG5cdGlmKG1hc3Rlci5jb25maWcuZm9vdGVyKVxuXHRcdGNvbHVtbi5mb290ZXIgPSBtYXN0ZXIuX2FwcGx5TG9jYWxlKFwidG90YWxcIik7XG59XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL29wZXJhdGlvbnMvY29sdW1ucy5qc1xuICoqLyIsImltcG9ydCAqIGFzIGZsdCBmcm9tIFwib3BlcmF0aW9ucy9maWx0ZXJzLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KHZpZXcsIGNvbmZpZyl7XG5cdHdlYml4LmV4dGVuZCh2aWV3LCBleHRSZW5kZXIsIHRydWUpO1xuXHQvLyBmaWx0ZXJpbmdcblx0dmlldy5hdHRhY2hFdmVudChcIm9uRmlsdGVyQ2hhbmdlXCIsIGZ1bmN0aW9uKCl7XG5cdFx0Zmx0LmZvcm1hdEZpbHRlclZhbHVlcyh0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUuZmlsdGVycyk7XG5cdFx0dGhpcy5fbG9hZFJlc3VsdHModHJ1ZSk7XG5cdH0pO1xufVxuXG5jb25zdCBleHRSZW5kZXIgPSB7XG5cdHJlbmRlcjogZnVuY3Rpb24oZGF0YSl7XG5cdFx0dGhpcy5kYXRhLnNpbGVudChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHVybCA9IHRoaXMudXJsO1xuXHRcdFx0dGhpcy5jbGVhckFsbCgpO1xuXHRcdFx0dGhpcy51cmwgPSB1cmw7XG5cdFx0fSk7XG5cdFx0Zmx0LmZvcm1hdEZpbHRlclZhbHVlcyh0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUuZmlsdGVycyk7XG5cdFx0aWYoIWRhdGEpXG5cdFx0XHR0aGlzLl9sb2FkUmVzdWx0cygpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuX3NldERhdGEoZGF0YSk7XG5cdH0sXG5cdCRvbkxvYWQ6IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdGlmKGRhdGEuZmllbGRzKVxuXHRcdFx0dGhpcy5fcGl2b3RGaWVsZHMgPSBkYXRhLmZpZWxkcztcblx0XHRpZihkYXRhLm9wdGlvbnMpXG5cdFx0XHR0aGlzLl9waXZvdE9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG5cdFx0aWYoZGF0YS5zdHJ1Y3R1cmUpXG5cdFx0XHR0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUgPSBkYXRhLnN0cnVjdHVyZTtcblxuXHRcdGlmKGRhdGEub3BlcmF0aW9ucyl7XG5cdFx0XHR0aGlzLm9wZXJhdGlvbnMgPSB7fTtcblx0XHRcdGZvcihsZXQgaSA9MDsgaTwgZGF0YS5vcGVyYXRpb25zLmxlbmd0aDtpKyspXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uc1tkYXRhLm9wZXJhdGlvbnNbaV1dID0gMTtcblx0XHR9XG5cdFx0aWYoZGF0YS5kYXRhKVxuXHRcdFx0dGhpcy5yZW5kZXIoZGF0YS5kYXRhKTtcblx0fSxcblx0X2xvYWRSZXN1bHRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdHJ1Y3R1cmUgPSB0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUsXG5cdFx0XHR1cmwgPSB0aGlzLmRhdGEudXJsO1xuXG5cdFx0aWYodXJsKXtcblx0XHRcdGlmKHVybC5sb2FkKVxuXHRcdFx0XHR1cmwubG9hZCh0aGlzLCB7XG5cdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHRcdFx0XHR0aGlzLnBhcnNlKEpTT04ucGFyc2UoZGF0YSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgeyBzdHJ1Y3R1cmU6IHN0cnVjdHVyZX0pO1xuXHRcdFx0ZWxzZSBpZih0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMubG9hZChcInBvc3QtPlwiK3VybCwgXCJqc29uXCIsIHsgc3RydWN0dXJlOiBzdHJ1Y3R1cmV9KTtcblx0XHR9XG5cblx0fVxufTtcblxuXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvb3BlcmF0aW9ucy9leHRlcm5hbF9wcm9jZXNzaW5nLmpzXG4gKiovIiwiZXhwb3J0IGNsYXNzIEZpbHRlcnN7XG5cdGNvbnN0cnVjdG9yKHZpZXcpe1xuXHRcdHRoaXMuX2ZpbHRlcnMgPSBbXCJkYXRlcGlja2VyXCIsIFwibXVsdGljb21ib1wiLCBcInNlbGVjdFwiLCBcInRleHRcIl07XG5cdFx0dGhpcy5fc2VsZWN0cyA9IHtcIm11bHRpY29tYm9cIjogMSwgXCJtdWx0aXNlbGVjdFwiOiAxLCBcInNlbGVjdFwiOiAxLCBcInJpY2hzZWxlY3RcIjogMX07XG5cdH1cblxuXHRhZGQobmFtZSwgaXNTZWxlY3Qpe1xuXHRcdHRoaXMuX2ZpbHRlcnMucHVzaChuYW1lKTtcblx0XHRpZighd2ViaXguaXNVbmRlZmluZWQoaXNTZWxlY3QpKVxuXHRcdFx0dGhpcy5fc2VsZWN0c1tuYW1lXSA9IGlzU2VsZWN0O1xuXHR9XG5cblx0aXNTZWxlY3QobmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuX3NlbGVjdHNbbmFtZV07XG5cdH1cblxuXHRjbGVhcigpe1xuXHRcdHRoaXMuX2ZpbHRlcnMgPSBbXTtcblx0fVxuXG5cdHJlbW92ZShuYW1lKXtcblx0XHR2YXIgaSA9IHRoaXMuZ2V0SW5kZXgobmFtZSk7XG5cdFx0aWYoaT49MClcblx0XHRcdHRoaXMuX2ZpbHRlcnMuc3BsaWNlKGksMSk7XG5cdH1cblxuXHRnZXRJbmRleChuYW1lKXtcblx0XHRmb3IobGV0IGk9MDsgaSA8dGhpcy5fZmlsdGVycy5sZW5ndGg7aSsrIClcblx0XHRcdGlmKHRoaXMuX2ZpbHRlcnNbaV0gPT0gbmFtZSlcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cblx0Z2V0KCl7XG5cdFx0cmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG5cdH1cblxufVxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9zdHJ1Y3R1cmVzL2ZpbHRlcnMuanNcbiAqKi8iLCJpbXBvcnQgKiBhcyBmbHQgZnJvbSBcIm9wZXJhdGlvbnMvZmlsdGVycy5qc1wiO1xuaW1wb3J0IFwicG9wdXBzL2NoYXJ0cG9wdXAuanNcIjtcbmltcG9ydCB7ZGVmYXVsdHN9IGZyb20gXCJjb25maWcvcGl2b3RjaGFydC5qc1wiO1xuaW1wb3J0IHtmaWx0ZXJJdGVtLHNldEZpbHRlclZhbHVlc30gZnJvbSBcImRhdGEvZmlsdGVycy5qc1wiO1xuaW1wb3J0IHtGaWx0ZXJzfSBmcm9tIFwic3RydWN0dXJlcy9maWx0ZXJzLmpzXCI7XG5cbndlYml4LnByb3RvVUkoe1xuXHRuYW1lOlwicGl2b3QtY2hhcnRcIixcblx0dmVyc2lvbjpcInt7dmVyc2lvbn19XCIsXG5cdGRlZmF1bHRzOiBkZWZhdWx0cyxcblx0dGVtcGxhdGVzOntcblx0XHRncm91cE5hbWVUb1N0cjogZnVuY3Rpb24obmFtZSxvcGVyYXRpb24pe1xuXHRcdFx0cmV0dXJuIG5hbWUrXCJfXCIrb3BlcmF0aW9uO1xuXHRcdH0sXG5cdFx0Z3JvdXBOYW1lVG9PYmplY3Q6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdFx0dmFyIGFyciA9IG5hbWUuc3BsaXQoXCJfXCIpO1xuXHRcdFx0cmV0dXJuIHtuYW1lOmFyclswXSxvcGVyYXRpb246YXJyWzFdfTtcblx0XHR9LFxuXHRcdHNlcmllc1RpdGxlOiBmdW5jdGlvbihkYXRhLGkpe1xuXHRcdFx0dmFyIG5hbWUgPSB0aGlzLmNvbmZpZy5maWVsZE1hcFtkYXRhLm5hbWVdfHx0aGlzLl9jYXBpdGFsaXplKGRhdGEubmFtZSk7XG5cdFx0XHR2YXIgb3BlcmF0aW9uID0gKHdlYml4LmlzQXJyYXkoZGF0YS5vcGVyYXRpb24pP2RhdGEub3BlcmF0aW9uW2ldOmRhdGEub3BlcmF0aW9uKTtcblx0XHRcdHJldHVybiBuYW1lK1wiICggXCIrKHdlYml4LmkxOG4ucGl2b3Rbb3BlcmF0aW9uXXx8b3BlcmF0aW9uKStcIilcIjtcblx0XHR9XG5cdH0sXG5cdHRlbXBsYXRlc19zZXR0ZXI6IGZ1bmN0aW9uKG9iail7XG5cdFx0aWYodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiKVxuXHRcdFx0d2ViaXguZXh0ZW5kKHRoaXMudGVtcGxhdGVzLG9iaik7XG5cdH0sXG5cdGNoYXJ0TWFwOiB7XG5cdFx0YmFyOiBmdW5jdGlvbihjb2xvcil7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRib3JkZXI6MCxcblx0XHRcdFx0YWxwaGE6MSxcblx0XHRcdFx0cmFkaXVzOjAsXG5cdFx0XHRcdGNvbG9yOiBjb2xvclxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGxpbmU6IGZ1bmN0aW9uKGNvbG9yKXtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGFscGhhOjEsXG5cdFx0XHRcdGl0ZW06e1xuXHRcdFx0XHRcdGJvcmRlckNvbG9yOiBjb2xvcixcblx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0fSxcblx0XHRcdFx0bGluZTp7XG5cdFx0XHRcdFx0Y29sb3I6IGNvbG9yLFxuXHRcdFx0XHRcdHdpZHRoOjJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHJhZGFyOiBmdW5jdGlvbihjb2xvcil7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRhbHBoYToxLFxuXHRcdFx0XHRmaWxsOiBmYWxzZSxcblx0XHRcdFx0ZGlzYWJsZUl0ZW1zOiB0cnVlLFxuXHRcdFx0XHRpdGVtOntcblx0XHRcdFx0XHRib3JkZXJDb2xvcjogY29sb3IsXG5cdFx0XHRcdFx0Y29sb3I6IGNvbG9yXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxpbmU6e1xuXHRcdFx0XHRcdGNvbG9yOiBjb2xvcixcblx0XHRcdFx0XHR3aWR0aDoyXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXHRjaGFydE1hcF9zZXR0ZXI6IGZ1bmN0aW9uKG9iail7XG5cdFx0aWYodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiKVxuXHRcdFx0d2ViaXguZXh0ZW5kKHRoaXMuY2hhcnRNYXAsb2JqLHRydWUpO1xuXHR9LFxuXHQkaW5pdDogZnVuY3Rpb24oY29uZmlnKSB7XG5cdFx0dGhpcy5kYXRhLnByb3ZpZGVBcGkodGhpcywgdHJ1ZSk7XG5cdFx0aWYgKCFjb25maWcuc3RydWN0dXJlKVxuXHRcdFx0Y29uZmlnLnN0cnVjdHVyZSA9IHt9O1xuXHRcdHdlYml4LmV4dGVuZChjb25maWcuc3RydWN0dXJlLCB7IGdyb3VwQnk6XCJcIiwgdmFsdWVzOltdLCBmaWx0ZXJzOltdIH0pO1xuXG5cdFx0dGhpcy4kdmlldy5jbGFzc05hbWUgKz1cIiB3ZWJpeF9waXZvdF9jaGFydFwiO1xuXHRcdHdlYml4LmV4dGVuZChjb25maWcsIHtlZGl0QnV0dG9uV2lkdGg6IHRoaXMuZGVmYXVsdHMuZWRpdEJ1dHRvbldpZHRofSk7XG5cdFx0d2ViaXguZXh0ZW5kKGNvbmZpZywgdGhpcy5nZXRVSShjb25maWcpKTtcblxuXHRcdHRoaXMuJHJlYWR5LnB1c2god2ViaXguYmluZChmdW5jdGlvbigpe1xuXHRcdFx0d2ViaXguZGVsYXkodGhpcy5yZW5kZXIsdGhpcyk7IC8vIGRlbGF5IG5lZWRlZCBmb3IgY29ycmVjdCBsZWdlbmQgcmVuZGVyaW5nXG5cdFx0fSx0aGlzKSk7XG5cdFx0dGhpcy5kYXRhLmF0dGFjaEV2ZW50KFwib25TdG9yZVVwZGF0ZWRcIiwgd2ViaXguYmluZChmdW5jdGlvbigpIHtcblx0XHRcdC8vIGNhbGwgcmVuZGVyIGlmIHBpdm90IGlzIGluaXRpYWxpemVkXG5cdFx0XHRpZiAodGhpcy4kJChcImNoYXJ0XCIpKSB0aGlzLnJlbmRlcigpO1xuXHRcdH0sIHRoaXMpKTtcblxuXHRcdHRoaXMuYXR0YWNoRXZlbnQoXCJvbkZpbHRlckNoYW5nZVwiLCBmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5yZW5kZXIodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZpbHRlcnMgPSBuZXcgRmlsdGVycygpO1xuXHR9LFxuXHRnZXRVSTogZnVuY3Rpb24oY29uZmlnKSB7XG5cdFx0dmFyIGNvbHMgPSBbXTtcblx0XHRjb2xzLnB1c2goeyBpZDogXCJmaWx0ZXJzXCIsIGhpZGRlbjp0cnVlLCBjb2xzOltdIH0pO1xuXHRcdGlmKCFjb25maWcucmVhZG9ubHkpe1xuXHRcdFx0Y29scy5wdXNoKFxuXHRcdFx0XHR7fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlkOlwiZWRpdFwiLCB2aWV3OiBcImljb25cIiwgdHlwZTogXCJpY29uQnV0dG9uXCIsIGFsaWduOiBcInJpZ2h0XCIsIGljb246IFwicGVuY2lsLXNxdWFyZS1vXCIsIGlucHV0V2lkdGg6IGNvbmZpZy5lZGl0QnV0dG9uV2lkdGgsXG5cdFx0XHRcdFx0dG9vbHRpcDogdGhpcy5fYXBwbHlMb2NhbGUoXCJzZXR0aW5nc1wiKSwgY2xpY2s6IHdlYml4LmJpbmQodGhpcy5jb25maWd1cmUsdGhpcylcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGhlYWRlciA9IHtcblx0XHRcdHBhZGRpbmdZOiAxMCxcblx0XHRcdHBhZGRpbmdYOiA1LFxuXHRcdFx0bWFyZ2luOiAxMCxcblx0XHRcdG1heEhlaWdodDogNSxcblx0XHRcdGlkOiBcInRvb2xiYXJcIixcblx0XHRcdGNvbHM6IGNvbHNcblx0XHR9O1xuXG5cdFx0dmFyIGNoYXJ0ID0geyBpZDogXCJib2R5TGF5b3V0XCIsIHR5cGU6IFwibGluZVwiLCBtYXJnaW46IDEwLCBjb2xzOlt7aWQ6XCJjaGFydFwiLCB2aWV3OiBcImNoYXJ0XCJ9XSB9O1xuXHRcdHJldHVybiB7IHR5cGU6IFwiY2xlYW5cIiwgcm93czogWyBoZWFkZXIsIGNoYXJ0IF19O1xuXHR9LFxuXHRjb25maWd1cmU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICghdGhpcy5fcGl2b3RQb3B1cCkge1xuXHRcdFx0dmFyIGNvbmZpZyA9IHsgdmlldzpcIndlYml4X3Bpdm90X2NoYXJ0X2NvbmZpZ1wiLCBvcGVyYXRpb25zOltdLCBwaXZvdDogdGhpcy5jb25maWcuaWQgfTtcblx0XHRcdHdlYml4LmV4dGVuZChjb25maWcgLCB0aGlzLmNvbmZpZy5wb3B1cHx8e30pO1xuXG5cdFx0XHR0aGlzLl9waXZvdFBvcHVwID0gd2ViaXgudWkoY29uZmlnKTtcblx0XHRcdHRoaXMuY2FsbEV2ZW50KFwib25Qb3B1cFwiLFt0aGlzLl9waXZvdFBvcHVwXSk7XG5cdFx0XHR0aGlzLl9waXZvdFBvcHVwLmF0dGFjaEV2ZW50KFwib25BcHBseVwiLCB3ZWJpeC5iaW5kKGZ1bmN0aW9uKHN0cnVjdHVyZSkge1xuXHRcdFx0XHR0aGlzLmNvbmZpZy5jaGFydFR5cGUgPSB0aGlzLl9waXZvdFBvcHVwLiQkKFwiY2hhcnRUeXBlXCIpP3RoaXMuX3Bpdm90UG9wdXAuJCQoXCJjaGFydFR5cGVcIikuZ2V0VmFsdWUoKTpcImJhclwiO1xuXHRcdFx0XHR0aGlzLmNvbmZpZy5jaGFydC5zY2FsZSA9ICh0aGlzLl9waXZvdFBvcHVwLiQkKFwibG9nU2NhbGVcIikuZ2V0VmFsdWUoKT9cImxvZ2FyaXRobWljXCI6XCJsaW5lYXJcIik7XG5cdFx0XHRcdHdlYml4LmV4dGVuZCh0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgdHJ1ZSk7XG5cdFx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0XHR9LCB0aGlzKSk7XG5cdFx0fVxuXG5cdFx0dmFyIGZ1bmN0aW9ucyA9IFtdO1xuXHRcdGZvciAodmFyIGkgaW4gdGhpcy5vcGVyYXRpb25zKSBmdW5jdGlvbnMucHVzaCh7bmFtZTogaSwgdGl0bGU6IHRoaXMuX2FwcGx5TG9jYWxlKGkpfSk7XG5cdFx0dGhpcy5fcGl2b3RQb3B1cC5fdmFsdWVMZW5ndGggPSB0aGlzLl92YWx1ZUxlbmd0aDtcblx0XHR0aGlzLl9waXZvdFBvcHVwLmRlZmluZShcIm9wZXJhdGlvbnNcIiwgZnVuY3Rpb25zKTtcblx0XHR2YXIgcG9zID0gd2ViaXguaHRtbC5vZmZzZXQodGhpcy4kJChcImNoYXJ0XCIpLmdldE5vZGUoKSk7XG5cdFx0dGhpcy5fcGl2b3RQb3B1cC5zZXRQb3NpdGlvbihwb3MueCArIDEwLCBwb3MueSArIDEwKTtcblx0XHR0aGlzLl9waXZvdFBvcHVwLmRlZmluZShcImRhdGFcIiwgdGhpcy5nZXRGaWVsZHMoKSk7XG5cdFx0dGhpcy5fcGl2b3RQb3B1cC5zaG93KCk7XG5cdH0sXG5cdHJlbmRlcjogZnVuY3Rpb24od2l0aG91dEZpbHRlcnMpIHtcblx0XHRpZighd2l0aG91dEZpbHRlcnMpe1xuXHRcdFx0Ly8gcmVuZGVyIGZpbHRlcnNcblx0XHRcdHZhciBmaWx0ZXJzID0gZmx0LnByb2Nlc3NGaWx0ZXJzKHRoaXMpO1xuXHRcdFx0Zmx0LnNob3dGaWx0ZXJzKHRoaXMsIGZpbHRlcnMpO1xuXHRcdH1cblx0XHR0aGlzLl9zZXRDaGFydENvbmZpZygpO1xuXHRcdHRoaXMuX2xvYWRGaWx0ZXJlZERhdGEoKTtcblx0fSxcblx0X3NldENoYXJ0Q29uZmlnOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XG5cdFx0dmFyIHZhbHVlcyA9IGNvbmZpZy5zdHJ1Y3R1cmUudmFsdWVzO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbHVlc1tpXS5vcGVyYXRpb24gPSB2YWx1ZXNbaV0ub3BlcmF0aW9uIHx8IFtcInN1bVwiXTtcblx0XHRcdGlmICghd2ViaXguaXNBcnJheSh2YWx1ZXNbaV0ub3BlcmF0aW9uKSlcblx0XHRcdFx0dmFsdWVzW2ldLm9wZXJhdGlvbiA9IFt2YWx1ZXNbaV0ub3BlcmF0aW9uXTtcblx0XHR9XG5cblx0XHR2YXIgY2hhcnRUeXBlID0gdGhpcy5jb25maWcuY2hhcnRUeXBlfHxcImJhclwiO1xuXHRcdHZhciBtYXBDb25maWcgPSB0aGlzLmNoYXJ0TWFwW2NoYXJ0VHlwZV07XG5cblx0XHR2YXIgY2hhcnQgPSB7XG5cdFx0XHRcInR5cGVcIjogIChtYXBDb25maWcmJm1hcENvbmZpZyhcIlwiKS50eXBlP21hcENvbmZpZyhcIlwiKS50eXBlOmNoYXJ0VHlwZSksXG5cdFx0XHRcInhBeGlzXCI6IHdlYml4LmV4dGVuZCh7dGVtcGxhdGU6IFwiI2lkI1wifSxjb25maWcuY2hhcnQueEF4aXN8fHt9LHRydWUpLFxuXHRcdFx0XCJ5QXhpc1wiOiB3ZWJpeC5leHRlbmQoe30sY29uZmlnLmNoYXJ0LnlBeGlzfHx7fSlcblx0XHR9O1xuXG5cdFx0d2ViaXguZXh0ZW5kKGNoYXJ0LGNvbmZpZy5jaGFydCk7XG5cdFx0aWYoIWNoYXJ0LnBhZGRpbmcpe1xuXHRcdFx0Y2hhcnQucGFkZGluZyA9IHsgdG9wOiAxN307XG5cdFx0fVxuXG5cdFx0dmFyIHJlc3VsdCA9IHRoaXMuX2dldFNlcmllcygpO1xuXG5cdFx0Y2hhcnQuc2VyaWVzID0gcmVzdWx0LnNlcmllcztcblxuXHRcdGNoYXJ0LmxlZ2VuZCA9IGZhbHNlO1xuXHRcdGlmKGNvbmZpZy5zaW5nbGVMZWdlbmRJdGVtIHx8IHRoaXMuX3ZhbHVlTGVuZ3RoPjEpe1xuXHRcdFx0Y2hhcnQubGVnZW5kID0gcmVzdWx0LmxlZ2VuZDtcblx0XHR9XG5cblx0XHRjaGFydC5zY2hlbWUgPSB7XG5cdFx0XHQkZ3JvdXA6IHRoaXMuX3Bpdm90X2dyb3VwLFxuXHRcdFx0JHNvcnQ6e1xuXHRcdFx0XHRieTogXCJpZFwiXG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLiQkKFwiY2hhcnRcIikucmVtb3ZlQWxsU2VyaWVzKCk7XG5cdFx0Zm9yKHZhciBjIGluIGNoYXJ0KXtcblx0XHRcdHRoaXMuJCQoXCJjaGFydFwiKS5kZWZpbmUoYyxjaGFydFtjXSk7XG5cdFx0fVxuXG5cdH0sXG5cdF9hcHBseUxvY2FsZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJldHVybiB3ZWJpeC5pMThuLnBpdm90W3ZhbHVlXXx8dmFsdWU7XG5cdH0sXG5cdF9jYXBpdGFsaXplOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG5cdH0sXG5cdF9hcHBseU1hcDogZnVuY3Rpb24odmFsdWUsIGNhcGl0YWxpemUpe1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZy5maWVsZE1hcFt2YWx1ZV18fChjYXBpdGFsaXplP3RoaXMuX2NhcGl0YWxpemUodmFsdWUpOnZhbHVlKTtcblx0fSxcblx0X2xvYWRGaWx0ZXJlZERhdGE6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZpbHRlcnMgPSB0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUuZmlsdGVycztcblxuXHRcdGZsdC5mb3JtYXRGaWx0ZXJWYWx1ZXMoZmlsdGVycyk7XG5cdFx0c2V0RmlsdGVyVmFsdWVzKGZpbHRlcnMpO1xuXG5cdFx0dGhpcy5kYXRhLnNpbGVudChmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT4gZmlsdGVySXRlbShmaWx0ZXJzLGl0ZW0sIHRoaXMuY29uZmlnLmZpbHRlck1hcCkpO1xuXHRcdH0sdGhpcyk7XG5cdFx0dGhpcy4kJChcImNoYXJ0XCIpLmRhdGEuc2lsZW50KGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLiQkKFwiY2hhcnRcIikuY2xlYXJBbGwoKTtcblx0XHR9LHRoaXMpO1xuXHRcdHRoaXMuJCQoXCJjaGFydFwiKS5wYXJzZSh0aGlzLmRhdGEuZ2V0UmFuZ2UoKSk7XG5cdFx0Ly8gcmVzZXQgZmlsdGVyaW5nXG5cdFx0dGhpcy5kYXRhLnNpbGVudChmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5kYXRhLmZpbHRlcihcIlwiKTtcblx0XHR9LHRoaXMpO1xuXHR9LFxuXHRncm91cE5hbWVUb1N0cjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gb2JqLm5hbWUrXCJfXCIrb2JqLm9wZXJhdGlvbjtcblx0fSxcblx0Z3JvdXBOYW1lVG9PYmplY3Q6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBhcnIgPSBuYW1lLnNwbGl0KFwiX1wiKTtcblx0XHRyZXR1cm4ge25hbWU6YXJyWzBdLG9wZXJhdGlvbjphcnJbMV19O1xuXHR9LFxuXHRfZ2V0U2VyaWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBpLCBqLCBsZWdlbmQsIG1hcCA9IHt9LCBuYW1lLCBsZWdlbmRUaXRsZSwgc2VyaWVzID0gW10sXG5cdFx0XHR2YWx1ZXMgPSB0aGlzLmNvbmZpZy5zdHJ1Y3R1cmUudmFsdWVzO1xuXG5cdFx0Ly8gbGVnZW5kIGRlZmluaXRpb25cblx0XHRsZWdlbmQgPSB7XG5cdFx0XHR2YWxpZ246XCJtaWRkbGVcIixcblx0XHRcdGFsaWduOlwicmlnaHRcIixcblx0XHRcdHdpZHRoOjE0MCxcblx0XHRcdGxheW91dDpcInlcIlxuXHRcdH07XG5cdFx0d2ViaXguZXh0ZW5kKGxlZ2VuZCx0aGlzLmNvbmZpZy5jaGFydC5sZWdlbmR8fHt9LHRydWUpO1xuXHRcdGxlZ2VuZC52YWx1ZXMgPSBbXTtcblx0XHRpZighbGVnZW5kLm1hcmtlcilcblx0XHRcdGxlZ2VuZC5tYXJrZXIgPSB7fTtcblx0XHRsZWdlbmQubWFya2VyLnR5cGUgPSAodGhpcy5jb25maWcuY2hhcnRUeXBlPT1cImxpbmVcIj9cIml0ZW1cIjpcInNcIik7XG5cblx0XHR0aGlzLnNlcmllc19uYW1lcyA9IFtdO1xuXHRcdHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcblxuXHRcdGZvcihpID0wOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKXtcblx0XHRcdGlmKCF3ZWJpeC5pc0FycmF5KHZhbHVlc1tpXS5vcGVyYXRpb24pKXtcblx0XHRcdFx0dmFsdWVzW2ldLm9wZXJhdGlvbiA9IFt2YWx1ZXNbaV0ub3BlcmF0aW9uXTtcblx0XHRcdH1cblx0XHRcdGlmKCF3ZWJpeC5pc0FycmF5KHZhbHVlc1tpXS5jb2xvcikpe1xuXG5cdFx0XHRcdHZhbHVlc1tpXS5jb2xvciA9IFt2YWx1ZXNbaV0uY29sb3J8fHRoaXMuX2dldENvbG9yKHRoaXMuX3ZhbHVlTGVuZ3RoKV07XG5cdFx0XHR9XG5cdFx0XHRmb3Ioaj0wO2o8dmFsdWVzW2ldLm9wZXJhdGlvbi5sZW5ndGg7aisrKXtcblxuXHRcdFx0XHRuYW1lID0gdGhpcy50ZW1wbGF0ZXMuZ3JvdXBOYW1lVG9TdHIodmFsdWVzW2ldLm5hbWUsdmFsdWVzW2ldLm9wZXJhdGlvbltqXSk7XG5cdFx0XHRcdHRoaXMuc2VyaWVzX25hbWVzLnB1c2gobmFtZSk7XG5cdFx0XHRcdGlmKCF2YWx1ZXNbaV0uY29sb3Jbal0pXG5cdFx0XHRcdFx0dmFsdWVzW2ldLmNvbG9yW2pdID0gdGhpcy5fZ2V0Q29sb3IodGhpcy5fdmFsdWVMZW5ndGgpO1xuXHRcdFx0XHR2YXIgY29sb3IgPSB2YWx1ZXNbaV0uY29sb3Jbal07XG5cdFx0XHRcdHZhciBzQ29uZmlnID0gdGhpcy5jaGFydE1hcFt0aGlzLmNvbmZpZy5jaGFydFR5cGVdKGNvbG9yKXx8e307XG5cdFx0XHRcdHNDb25maWcudmFsdWUgPSBcIiNcIituYW1lK1wiI1wiO1xuXHRcdFx0XHRzQ29uZmlnLnRvb2x0aXAgPSB7XG5cdFx0XHRcdFx0dGVtcGxhdGU6IHdlYml4LmJpbmQoZnVuY3Rpb24ob2JqKXtcblx0XHRcdFx0XHRcdHJldHVybiBvYmpbdGhpc10udG9GaXhlZCgzKTtcblx0XHRcdFx0XHR9LG5hbWUpXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0c2VyaWVzLnB1c2goc0NvbmZpZyk7XG5cdFx0XHRcdGxlZ2VuZFRpdGxlID0gdGhpcy50ZW1wbGF0ZXMuc2VyaWVzVGl0bGUuY2FsbCh0aGlzLHZhbHVlc1tpXSxqKTtcblx0XHRcdFx0bGVnZW5kLnZhbHVlcy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiBsZWdlbmRUaXRsZSxcblx0XHRcdFx0XHRjb2xvcjogY29sb3Jcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1hcFtuYW1lXT0gW3ZhbHVlc1tpXS5uYW1lLHZhbHVlc1tpXS5vcGVyYXRpb25bal1dO1xuXHRcdFx0XHR0aGlzLl92YWx1ZUxlbmd0aCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9waXZvdF9ncm91cCA9IHt9O1xuXHRcdGlmKHZhbHVlcy5sZW5ndGgpXG5cdFx0XHR0aGlzLl9waXZvdF9ncm91cCA9IHdlYml4LmNvcHkoe1xuXHRcdFx0XHRieTogIHRoaXMuY29uZmlnLnN0cnVjdHVyZS5ncm91cEJ5LFxuXHRcdFx0XHRtYXA6IG1hcFxuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4ge3Nlcmllczogc2VyaWVzLGxlZ2VuZDogbGVnZW5kfTtcblx0fSxcblx0X2dldENvbG9yOmZ1bmN0aW9uKGkpe1xuXHRcdHZhciBwYWxldHRlID0gdGhpcy5jb25maWcucGFsZXR0ZTtcblx0XHR2YXIgcm93SW5kZXggPSBpL3BhbGV0dGVbMF0ubGVuZ3RoO1xuXHRcdHJvd0luZGV4ID0gKHJvd0luZGV4PiBwYWxldHRlLmxlbmd0aD8wOnBhcnNlSW50KHJvd0luZGV4LDEwKSk7XG5cdFx0dmFyIGNvbHVtbkluZGV4ID0gaSVwYWxldHRlWzBdLmxlbmd0aDtcblx0XHRyZXR1cm4gcGFsZXR0ZVtyb3dJbmRleF1bY29sdW1uSW5kZXhdO1xuXHR9LFxuXHRvcGVyYXRpb25zOiB7IHN1bTogMSwgY291bnQ6MSwgbWF4OiAxLCBtaW46IDF9LFxuXHRhZGRHcm91cE1ldGhvZDogZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHR0aGlzLm9wZXJhdGlvbnNbbmFtZV0gPSAxO1xuXHRcdGlmKG1ldGhvZClcblx0XHRcdHdlYml4Lkdyb3VwTWV0aG9kc1tuYW1lXSA9IG1ldGhvZDtcblx0fSxcblx0cmVtb3ZlR3JvdXBNZXRob2Q6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdGRlbGV0ZSB0aGlzLm9wZXJhdGlvbnNbbmFtZV07XG5cdH0sXG5cdGdyb3VwTWV0aG9kc19zZXR0ZXI6IGZ1bmN0aW9uKG9iail7XG5cdFx0Zm9yKHZhciBhIGluIG9iail7XG5cdFx0XHRpZihvYmouaGFzT3duUHJvcGVydHkoYSkpXG5cdFx0XHRcdHRoaXMuYWRkR3JvdXBNZXRob2QoYSwgb2JqW2FdKTtcblx0XHR9XG5cdH0sXG5cdC8vIGZpZWxkcyBmb3IgZWRpdCBwb3B1cFxuXHRnZXRGaWVsZHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZmllbGRzID0gW10sXG5cdFx0XHRmaWVsZHNfaGFzaCA9IHt9O1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IE1hdGgubWluKHRoaXMuZGF0YS5jb3VudCgpIHx8IDUpOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gdGhpcy5kYXRhLmdldEl0ZW0odGhpcy5kYXRhLmdldElkQnlJbmRleChpKSk7XG5cdFx0XHRmb3IgKHZhciBmIGluIGl0ZW0pIHtcblx0XHRcdFx0aWYgKCFmaWVsZHNfaGFzaFtmXSkge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGYpO1xuXHRcdFx0XHRcdGZpZWxkc19oYXNoW2ZdID0gd2ViaXgudWlkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgc3RyID0gdGhpcy5jb25maWcuc3RydWN0dXJlO1xuXHRcdHZhciByZXN1bHQgPSB7IGZpZWxkczpbXSwgZ3JvdXBCeTpbXSwgdmFsdWVzOltdLCBmaWx0ZXJzOltdIH07XG5cblx0XHR2YXIgZmllbGQgPSAodHlwZW9mIHN0ci5ncm91cEJ5ID09IFwib2JqZWN0XCI/c3RyLmdyb3VwQnlbMF06c3RyLmdyb3VwQnkpO1xuXHRcdGlmICghd2ViaXguaXNVbmRlZmluZWQoZmllbGRzX2hhc2hbZmllbGRdKSkge1xuXHRcdFx0cmVzdWx0Lmdyb3VwQnkucHVzaCh7bmFtZTogZmllbGQsIHRleHQ6IHRoaXMuX2FwcGx5TWFwKGZpZWxkKSwgaWQ6IGZpZWxkc19oYXNoW2ZpZWxkXX0pO1xuXHRcdH1cblxuXHRcdHZhciB2YWx1ZU5hbWVIYXNoID0ge307XG5cdFx0dmFyIHRleHQ7XG5cdFx0Zm9yIChpID0gMDsgaSA8IHN0ci52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGZpZWxkID0gc3RyLnZhbHVlc1tpXTtcblx0XHRcdGlmICghd2ViaXguaXNVbmRlZmluZWQoZmllbGRzX2hhc2hbZmllbGQubmFtZV0pKSB7XG5cdFx0XHRcdHRleHQgPSB0aGlzLl9hcHBseU1hcChmaWVsZC5uYW1lKTtcblx0XHRcdFx0aWYod2ViaXguaXNVbmRlZmluZWQodmFsdWVOYW1lSGFzaFtmaWVsZC5uYW1lXSkpe1xuXHRcdFx0XHRcdHZhbHVlTmFtZUhhc2hbZmllbGQubmFtZV0gPSByZXN1bHQudmFsdWVzLmxlbmd0aDtcblx0XHRcdFx0XHRyZXN1bHQudmFsdWVzLnB1c2goe25hbWU6IGZpZWxkLm5hbWUsIHRleHQ6IHRleHQsIG9wZXJhdGlvbjogZmllbGQub3BlcmF0aW9uLCBjb2xvcjogZmllbGQuY29sb3J8fFt0aGlzLl9nZXRDb2xvcihpKV0sIGlkOiBmaWVsZHNfaGFzaFtmaWVsZC5uYW1lXX0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0dmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlc1t2YWx1ZU5hbWVIYXNoW2ZpZWxkLm5hbWVdXTtcblx0XHRcdFx0XHR2YWx1ZS5vcGVyYXRpb24gPXZhbHVlLm9wZXJhdGlvbi5jb25jYXQoZmllbGQub3BlcmF0aW9uKTtcblx0XHRcdFx0XHR2YWx1ZS5jb2xvciA9dmFsdWUuY29sb3IuY29uY2F0KGZpZWxkLmNvbG9yfHxbdGhpcy5fZ2V0Q29sb3IoaSldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCAoc3RyLmZpbHRlcnMgfHwgW10pLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmaWVsZCA9IHN0ci5maWx0ZXJzW2ldO1xuXHRcdFx0aWYgKCF3ZWJpeC5pc1VuZGVmaW5lZChmaWVsZHNfaGFzaFtmaWVsZC5uYW1lXSkpIHtcblx0XHRcdFx0dGV4dCA9IHRoaXMuX2FwcGx5TWFwKGZpZWxkLm5hbWUpO1xuXHRcdFx0XHRyZXN1bHQuZmlsdGVycy5wdXNoKHtuYW1lOiBmaWVsZC5uYW1lLCB0ZXh0OiB0ZXh0LCB0eXBlOmZpZWxkLnR5cGUsIHZhbHVlOmZpZWxkLnZhbHVlLCBpZDogZmllbGRzX2hhc2hbZmllbGRdfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZmllbGRzLnNvcnQoKTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGZpZWxkID0gZmllbGRzW2ldO1xuXHRcdFx0aWYgKCF3ZWJpeC5pc1VuZGVmaW5lZChmaWVsZHNfaGFzaFtmaWVsZF0pKVxuXHRcdFx0XHRyZXN1bHQuZmllbGRzLnB1c2goe25hbWU6ZmllbGQsIHRleHQ6IHRoaXMuX2FwcGx5TWFwKGZpZWxkKSwgaWQ6IGZpZWxkc19oYXNoW2ZpZWxkXX0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cdGdldFN0cnVjdHVyZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlnLnN0cnVjdHVyZTtcblx0fSxcblx0Z2V0Q29uZmlnV2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLl9waXZvdFBvcHVwO1xuXHR9LFxuXHRnZXRGaWx0ZXJWaWV3OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLiQkKFwiZmlsdGVyc1wiKTtcblx0fVxufSwgd2ViaXguSWRTcGFjZSwgd2ViaXgudWkubGF5b3V0LCB3ZWJpeC5EYXRhTG9hZGVyLCB3ZWJpeC5FdmVudFN5c3RlbSwgd2ViaXguU2V0dGluZ3MpO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9waXZvdGNoYXJ0LmpzXG4gKiovIiwiaW1wb3J0IFwiLi9jb21tb25wb3B1cC5qc1wiO1xuaW1wb3J0IHtnZXRTdHJ1Y3R1cmVNYXB9IGZyb20gXCJzdHJ1Y3R1cmVzL2NoYXJ0cG9wdXAuanNcIjtcblxud2ViaXgucHJvdG9VSSh7XG4gICAgbmFtZTogXCJ3ZWJpeF9waXZvdF9jaGFydF9jb25maWdcIixcbiAgICAkaW5pdDogZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIHRoaXMuJHZpZXcuY2xhc3NOYW1lICs9IFwiIHdlYml4X3Bpdm90X2NoYXJ0X3BvcHVwXCI7XG4gICAgfSxcbiAgICBkZWZhdWx0czp7XG4gICAgICAgIGNoYXJ0VHlwZUxhYmVsV2lkdGg6IDgwLFxuICAgICAgICBjaGFydFR5cGVXaWR0aDogMjUwLFxuICAgICAgICBsb2dTY2FsZUxhYmVsV2lkdGg6IDEyNSxcbiAgICAgICAgZmllbGRzQ29sdW1uV2lkdGg6IDI4MFxuICAgIH0sXG4gICAgX2dldFVJOiBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgdmFyIHN0cnVjdHVyZSA9IHdlYml4LmNvcHkoZ2V0U3RydWN0dXJlTWFwKHRoaXMsIGNvbmZpZykpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0U3RydWN0dXJlKHN0cnVjdHVyZSwgY29uZmlnKTtcbiAgICB9LFxuICAgIF9saXN0czpbXCJmaWx0ZXJzXCIsXCJ2YWx1ZXNcIixcImdyb3VwQnlcIl0sXG4gICAgX2RuZENvcnJlY3Rpb246IHtcbiAgICAgICAgXCJ2YWx1ZXNcIjogW1wiZ3JvdXBCeVwiXSxcbiAgICAgICAgXCJncm91cEJ5XCI6IFtcInZhbHVlc1wiXVxuICAgIH0sXG4gICAgX2hpZGVQb3B1cHM6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHdlYml4LmNhbGxFdmVudChcIm9uQ2xpY2tcIixbXSk7XG4gICAgfSxcbiAgICBfYWZ0ZXJJbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hFdmVudChcIm9uSXRlbUNsaWNrXCIsIGZ1bmN0aW9uKGlkKXtcbiAgICAgICAgICAgIGlmICh0aGlzLiRldmVudFNvdXJjZS5uYW1lID09IFwiYnV0dG9uXCIpe1xuICAgICAgICAgICAgICAgIC8vdHJhbnNmb3JtIGJ1dHRvbiBjbGlja3MgdG8gZXZlbnRzXG4gICAgICAgICAgICAgICAgdmFyIGlubmVySWQgPSB0aGlzLmlubmVySWQoaWQpLFxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSB0aGlzLmdldFN0cnVjdHVyZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYoaW5uZXJJZCA9PSBcImFwcGx5XCIgJiYgKCFzdHJ1Y3R1cmUudmFsdWVzLmxlbmd0aCB8fCAhc3RydWN0dXJlLmdyb3VwQnkpKXtcbiAgICAgICAgICAgICAgICAgICAgd2ViaXguYWxlcnQod2ViaXguaTE4bi5waXZvdC52YWx1ZXNOb3REZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgaWYod2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpLmNhbGxFdmVudChcIm9uQmVmb3JlXCIraW5uZXJJZCwgW3N0cnVjdHVyZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxFdmVudChcIm9uXCIgKyBpbm5lcklkLCBbc3RydWN0dXJlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRTdHJ1Y3R1cmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RydWN0dXJlID0geyBncm91cEJ5OlwiXCIsdmFsdWVzOltdLGZpbHRlcnM6W10gfTtcblxuICAgICAgICB2YXIgZ3JvdXBCeSA9IHRoaXMuJCQoXCJncm91cEJ5XCIpO1xuICAgICAgICBpZihncm91cEJ5LmNvdW50KCkpXG4gICAgICAgICAgICBzdHJ1Y3R1cmUuZ3JvdXBCeSA9IGdyb3VwQnkuZ2V0SXRlbShncm91cEJ5LmdldEZpcnN0SWQoKSkubmFtZTtcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLiQkKFwidmFsdWVzXCIpO1xuICAgICAgICB2YXIgdGVtcDtcbiAgICAgICAgdmFsdWVzLmRhdGEuZWFjaCh3ZWJpeC5iaW5kKGZ1bmN0aW9uKG9iail7XG4gICAgICAgICAgICBmb3IodmFyIGo9MDsgajwgb2JqLm9wZXJhdGlvbi5sZW5ndGg7IGorKyl7XG4gICAgICAgICAgICAgICAgdGVtcCA9IHdlYml4LmNvcHkob2JqKTtcblxuICAgICAgICAgICAgICAgIHdlYml4LmV4dGVuZCh0ZW1wLHtvcGVyYXRpb246IG9iai5vcGVyYXRpb25bal0sY29sb3I6ICBvYmouY29sb3Jbal18fHdlYml4LiQkKHRoaXMuY29uZmlnLnBpdm90KS5jb25maWcuY29sb3J9LHRydWUpO1xuXG4gICAgICAgICAgICAgICAgc3RydWN0dXJlLnZhbHVlcy5wdXNoKHRlbXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LHRoaXMpKTtcblxuICAgICAgICB2YXIgZmlsdGVycyA9IHRoaXMuJCQoXCJmaWx0ZXJzXCIpO1xuICAgICAgICBmaWx0ZXJzLmRhdGEuZWFjaChmdW5jdGlvbihvYmope1xuICAgICAgICAgICAgc3RydWN0dXJlLmZpbHRlcnMucHVzaChvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3RydWN0dXJlO1xuICAgIH1cbn0sIHdlYml4LnVpLndlYml4X3Bpdm90X2NvbmZpZ19jb21tb24pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc291cmNlcy9wb3B1cHMvY2hhcnRwb3B1cC5qc1xuICoqLyIsImltcG9ydCAqIGFzIGNsYyBmcm9tIFwib3BlcmF0aW9ucy9wb3B1cF9jbGlja3MuanNcIjtcbmltcG9ydCB7cG9wdXBUZW1wbGF0ZXN9IGZyb20gXCIuL3RlbXBsYXRlcy5qc1wiO1xuXG5jb25zdCBjbGlja0hhbmRsZXJzID0gd2ViaXguZXh0ZW5kKHtcblx0XCJjb2xvclwiOiBmdW5jdGlvbihlLGlkKSB7XG5cdFx0dmFyIGNvbG9yYm9hcmQgPSB7XG5cdFx0XHR2aWV3OiBcImNvbG9yYm9hcmRcIixcblx0XHRcdGJvcmRlcmxlc3M6IHRydWVcblxuXHRcdH07XG5cdFx0aWYod2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpLmNvbmZpZy5jb2xvcmJvYXJkKXtcblx0XHRcdHdlYml4LmV4dGVuZChjb2xvcmJvYXJkLHdlYml4LiQkKHRoaXMuY29uZmlnLnBpdm90KS5jb25maWcuY29sb3Jib2FyZCk7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHR3ZWJpeC5leHRlbmQoY29sb3Jib2FyZCx7XG5cdFx0XHRcdHdpZHRoOiAgMTUwLFxuXHRcdFx0XHRoZWlnaHQ6IDE1MCxcblx0XHRcdFx0cGFsZXR0ZTogd2ViaXguJCQodGhpcy5jb25maWcucGl2b3QpLmNvbmZpZy5wYWxldHRlXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR2YXIgcCA9IHdlYml4LnVpKHtcblx0XHRcdHZpZXc6XCJwb3B1cFwiLFxuXHRcdFx0aWQ6IFwiY29sb3JzUG9wdXBcIixcblx0XHRcdGJvZHk6Y29sb3Jib2FyZFxuXHRcdH0pO1xuXHRcdHAuc2hvdyhlKTtcblx0XHRwLmdldEJvZHkoKS5hdHRhY2hFdmVudChcIm9uU2VsZWN0XCIsZnVuY3Rpb24oKXtcblx0XHRcdHAuaGlkZSgpO1xuXHRcdH0pO1xuXHRcdHAuYXR0YWNoRXZlbnQoXCJvbkhpZGVcIiwgd2ViaXguYmluZChmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCA9IHdlYml4Lmh0bWwubG9jYXRlKGUsIFwid2ViaXhfb3BlcmF0aW9uXCIpO1xuXHRcdFx0dmFyIHZhbHVlID0gcC5nZXRCb2R5KCkuZ2V0VmFsdWUoKTtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLiQkKFwidmFsdWVzXCIpLmdldEl0ZW0oaWQpLmNvbG9yW2luZGV4XSA9IHZhbHVlO1xuXHRcdFx0XHR0aGlzLiQkKFwidmFsdWVzXCIpLnVwZGF0ZUl0ZW0oaWQpO1xuXHRcdFx0fVxuXHRcdFx0cC5jbG9zZSgpO1xuXHRcdH0sIHRoaXMpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0sY2xjLmNsaWNrSGFuZGxlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RydWN0dXJlTWFwKHZpZXcsIGNvbmZpZykge1xuXHR2YXIgY2hhcnRUeXBlcyA9IFtdO1xuXHR2YXIgcGl2b3QgPSB3ZWJpeC4kJChjb25maWcucGl2b3QpO1xuXHR2YXIgdHlwZXMgPSBwaXZvdC5jaGFydE1hcDtcblx0Zm9yKHZhciB0eXBlIGluIHR5cGVzKXtcblx0XHRjaGFydFR5cGVzLnB1c2goe2lkOiB0eXBlLCB2YWx1ZTogcGl2b3QuX2FwcGx5TG9jYWxlKHR5cGUpfSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdFwicG9wdXBcIjoge1xuXHRcdFx0aGVhZDogXCJ0b29sYmFyXCIsXG5cdFx0XHRib2R5OiBcImJvZHlcIlxuXHRcdH0sXG5cdFx0XCJ0b29sYmFyXCI6IHtcblx0XHRcdHZpZXc6IFwidG9vbGJhclwiLFxuXHRcdFx0Y29sczogW1xuXHRcdFx0XHRcImNvbmZpZ1RpdGxlXCIsXG5cdFx0XHRcdFwiY2FuY2VsXCIsXG5cdFx0XHRcdFwiYXBwbHlcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XCJjb25maWdUaXRsZVwiOiB7IGlkOiBcImNvbmZpZ1RpdGxlXCIsICB2aWV3OiBcImxhYmVsXCIsIGxhYmVsOiB3ZWJpeC5pMThuLnBpdm90LndpbmRvd1RpdGxlIH0sXG5cdFx0XCJjYW5jZWxcIjp7IHZpZXc6IFwiYnV0dG9uXCIsIGlkOiBcImNhbmNlbFwiLCAgbGFiZWw6IHBpdm90Ll9hcHBseUxvY2FsZShcImNhbmNlbFwiKSwgd2lkdGg6IGNvbmZpZy5jYW5jZWxCdXR0b25XaWR0aCB9LFxuXHRcdFwiYXBwbHlcIjp7IHZpZXc6IFwiYnV0dG9uXCIsIGlkOiBcImFwcGx5XCIsIHR5cGU6IFwiZm9ybVwiLCBjc3M6XCJ3ZWJpeF9waXZvdF9hcHBseVwiLCBsYWJlbDpwaXZvdC5fYXBwbHlMb2NhbGUoXCJhcHBseVwiKSwgd2lkdGg6Y29uZmlnLmFwcGx5QnV0dG9uV2lkdGggfSxcblx0XHRcImJvZHlcIjp7XG5cdFx0XHR0eXBlOiBcInNwYWNlXCIsXG5cdFx0XHRyb3dzOltcblx0XHRcdFx0e1xuXG5cdFx0XHRcdFx0dHlwZTogXCJ3aWRlXCIsXG5cdFx0XHRcdFx0Y29sczogW1xuXHRcdFx0XHRcdFx0XCJmaWVsZHNMYXlvdXRcIixcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJ3aWRlXCIsXG5cdFx0XHRcdFx0XHRcdHJvd3M6W1xuXHRcdFx0XHRcdFx0XHRcdFwiZmlsdGVyc0xheW91dFwiLFxuXHRcdFx0XHRcdFx0XHRcdFwidmFsdWVzTGF5b3V0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XCJncm91cExheW91dFwiXG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiZm9vdGVyXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdFwiZmllbGRzTGF5b3V0XCI6e1xuXHRcdFx0d2lkdGg6IGNvbmZpZy5maWVsZHNDb2x1bW5XaWR0aCxcblx0XHRcdHJvd3M6IFtcblx0XHRcdFx0XCJmaWVsZHNIZWFkZXJcIixcblx0XHRcdFx0XCJmaWVsZHNcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XCJmaWVsZHNIZWFkZXJcIjogeyAgY3NzOiBcIndlYml4X3Bpdm90X2hlYWRlcl9maWVsZHNcIiwgdGVtcGxhdGU6IFwiPGRpdiBjbGFzcz0nd2ViaXhfcGl2b3RfZmllbGRzX21zZyc+XCIrd2ViaXguaTE4bi5waXZvdC53aW5kb3dNZXNzYWdlfHxcIlwiK1wiPC9kaXY+XCIsIGhlaWdodDogNDAgfSxcblx0XHRcImZpZWxkc1wiOiB7XG5cdFx0XHR2aWV3OiBcImxpc3RcIiwgdHlwZToge2hlaWdodDogXCJhdXRvXCJ9LCBkcmFnOiB0cnVlLCB0ZW1wbGF0ZTogXCI8c3BhbiBjbGFzcz0nd2ViaXhfcGl2b3RfbGlzdF9tYXJrZXInPjwvc3Bhbj4jdGV4dCNcIixcblx0XHRcdG9uOiB2aWV3Ll9nZXRMaXN0RXZlbnRzKClcblx0XHR9LFxuXHRcdFwiZmlsdGVyc0xheW91dFwiOiB7XG5cdFx0XHRyb3dzOiBbXG5cdFx0XHRcdFwiZmlsdGVyc0hlYWRlclwiLFxuXHRcdFx0XHRcImZpbHRlcnNcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XCJmaWx0ZXJzSGVhZGVyXCI6IHsgZGF0YTp7dmFsdWU6IFwiZmlsdGVyc1wiLCBpY29uOlwiZmlsdGVyXCIgfSwgdGVtcGxhdGU6IHBvcHVwVGVtcGxhdGVzLmljb25IZWFkZXIsIGNzczogXCJ3ZWJpeF9waXZvdF9wb3B1cF90aXRsZVwiLCBoZWlnaHQ6IDQwIH0sXG5cdFx0XCJmaWx0ZXJzXCI6IHtcblx0XHRcdHZpZXc6IFwibGlzdFwiLCBzY3JvbGw6IHRydWUsIHR5cGU6IHtoZWlnaHQ6IFwiYXV0b1wifSwgZ3Jhdml0eToyLCBkcmFnOiB0cnVlLCBjc3M6IFwid2ViaXhfcGl2b3RfdmFsdWVzXCIsXG5cdFx0XHR0ZW1wbGF0ZTogd2ViaXguYmluZChwb3B1cFRlbXBsYXRlcy5maWx0ZXJzLCB2aWV3KSxcblx0XHRcdG9uQ2xpY2s6IHtcblx0XHRcdFx0XCJ3ZWJpeF9saW5rX3NlbGVjdGlvblwiOiB3ZWJpeC5iaW5kKGNsaWNrSGFuZGxlcnNbXCJmaWx0ZXItc2VsZWN0b3JcIl0sIHZpZXcpLFxuXHRcdFx0XHRcIndlYml4X3Bpdm90X21pbnVzXCI6IHdlYml4LmJpbmQoY2xjLmNsaWNrSGFuZGxlcnMucmVtb3ZlLCB2aWV3KVxuXHRcdFx0fSxcblx0XHRcdG9uOiB2aWV3Ll9nZXRMaXN0RXZlbnRzKClcblx0XHR9LFxuXHRcdFwidmFsdWVzTGF5b3V0XCI6e1xuXHRcdFx0cm93czpbXG5cdFx0XHRcdFwidmFsdWVzSGVhZGVyXCIsXG5cdFx0XHRcdFwidmFsdWVzXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdFwidmFsdWVzSGVhZGVyXCI6IHsgZGF0YTp7dmFsdWU6IFwidmFsdWVzXCIsIGljb246XCJiYXItY2hhcnRcIn0sICB0ZW1wbGF0ZTogcG9wdXBUZW1wbGF0ZXMuaWNvbkhlYWRlciwgY3NzOiBcIndlYml4X3Bpdm90X3BvcHVwX3RpdGxlXCIsIGhlaWdodDogNDB9LFxuXHRcdFwidmFsdWVzXCI6e1xuXHRcdFx0dmlldzogXCJsaXN0XCIsIHNjcm9sbDogdHJ1ZSwgZ3Jhdml0eTozLCBkcmFnOiB0cnVlLCBjc3M6IFwid2ViaXhfcGl2b3RfdmFsdWVzXCIsIHR5cGU6IHsgaGVpZ2h0OiBcImF1dG9cIiB9LFxuXHRcdFx0dGVtcGxhdGU6IHdlYml4LmJpbmQocG9wdXBUZW1wbGF0ZXMuY2hhcnRWYWx1ZXMsIHZpZXcpLFxuXHRcdFx0b25DbGljazoge1xuXHRcdFx0XHRcIndlYml4X2xpbmtfdGl0bGVcIjogd2ViaXguYmluZChjbGlja0hhbmRsZXJzLnNlbGVjdG9yLCB2aWV3KSxcblx0XHRcdFx0XCJ3ZWJpeF9saW5rX3NlbGVjdGlvblwiOiB3ZWJpeC5iaW5kKGNsaWNrSGFuZGxlcnMuc2VsZWN0b3IsIHZpZXcpLFxuXHRcdFx0XHRcIndlYml4X2NvbG9yX3NlbGVjdGlvblwiOiB3ZWJpeC5iaW5kKGNsaWNrSGFuZGxlcnMuY29sb3IsIHZpZXcpLFxuXHRcdFx0XHRcIndlYml4X3Bpdm90X21pbnVzXCI6IHdlYml4LmJpbmQoY2xpY2tIYW5kbGVycy5yZW1vdmUsIHZpZXcpXG5cdFx0XHR9LFxuXHRcdFx0b246dmlldy5fZ2V0TGlzdEV2ZW50cygpXG5cdFx0fSxcblx0XHRcImdyb3VwTGF5b3V0XCI6IHtcblx0XHRcdHJvd3M6W1xuXHRcdFx0XHRcImdyb3VwSGVhZGVyXCIsXG5cdFx0XHRcdFwiZ3JvdXBCeVwiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRcImdyb3VwSGVhZGVyXCI6IHsgZGF0YTp7dmFsdWU6IFwiZ3JvdXBCeVwiLCBpY29uOlwic2l0ZW1hcFwifSwgIHRlbXBsYXRlOiBwb3B1cFRlbXBsYXRlcy5pY29uSGVhZGVyLCBjc3M6IFwid2ViaXhfcGl2b3RfcG9wdXBfdGl0bGVcIiwgaGVpZ2h0OiA0MH0sXG5cdFx0XCJncm91cEJ5XCI6IHtcblx0XHRcdHZpZXc6IFwibGlzdFwiLCB5Q291bnQ6MSwgc2Nyb2xsOiBmYWxzZSwgZHJhZzogdHJ1ZSwgdHlwZToge2hlaWdodDogMzV9LFxuXHRcdFx0dGVtcGxhdGU6IHdlYml4LmJpbmQocG9wdXBUZW1wbGF0ZXMuZ3JvdXBCeSwgdmlldyksXG5cdFx0XHRvbjp2aWV3Ll9nZXRMaXN0RXZlbnRzKCksXG5cdFx0XHRvbkNsaWNrOntcblx0XHRcdFx0XCJ3ZWJpeF9waXZvdF9taW51c1wiOiB3ZWJpeC5iaW5kKGNsYy5jbGlja0hhbmRsZXJzLnJlbW92ZSwgdmlldylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFwiZm9vdGVyXCI6e1xuXHRcdFx0Ym9yZGVybGVzczogdHJ1ZSxcblx0XHRcdGNzczogXCJ3ZWJpeF9waXZvdF9mb290ZXJcIixcblx0XHRcdGNvbHM6W1xuXHRcdFx0XHRcImxvZ1NjYWxlXCIsXG5cdFx0XHRcdHt9LFxuXHRcdFx0XHRcImNoYXJ0VHlwZVwiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRcImxvZ1NjYWxlXCI6e1xuXHRcdFx0dmlldzogXCJjaGVja2JveFwiLCB2YWx1ZTogKHBpdm90LmNvbmZpZy5jaGFydC5zY2FsZSYmcGl2b3QuY29uZmlnLmNoYXJ0LnNjYWxlID09IFwibG9nYXJpdGhtaWNcIiksIGxhYmVsOiB3ZWJpeC5pMThuLnBpdm90LmxvZ1NjYWxlLFxuXHRcdFx0bGFiZWxXaWR0aDogY29uZmlnLmxvZ1NjYWxlTGFiZWxXaWR0aCwgd2lkdGg6IChjb25maWcubG9nU2NhbGVMYWJlbFdpZHRoICsgMjApXG5cdFx0fSxcblx0XHRcImNoYXJ0VHlwZVwiOntcblx0XHRcdHZpZXc6IFwic2VsZWN0XCIsIHZhbHVlOiBwaXZvdC5jb25maWcuY2hhcnRUeXBlLCAgbGFiZWw6IHdlYml4LmkxOG4ucGl2b3QuY2hhcnRUeXBlLCAgb3B0aW9uczogY2hhcnRUeXBlcyxcblx0XHRcdGxhYmVsV2lkdGg6IGNvbmZpZy5jaGFydFR5cGVMYWJlbFdpZHRoLCAgd2lkdGg6IGNvbmZpZy5jaGFydFR5cGVXaWR0aFxuXHRcdH1cblx0fTtcbn1cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NvdXJjZXMvc3RydWN0dXJlcy9jaGFydHBvcHVwLmpzXG4gKiovIiwiZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0ge1xuXHRmaWVsZE1hcDoge30sXG5cdHJvd3M6W10sXG5cdGZpbHRlckxhYmVsQWxpZ246IFwicmlnaHRcIixcblx0ZmlsdGVyV2lkdGg6IDMwMCxcblx0ZmlsdGVyTWluV2lkdGg6IDE4MCxcblx0ZWRpdEJ1dHRvbldpZHRoOiAxMTAsXG5cdGZpbHRlckxhYmVsV2lkdGg6IDEwMCxcblx0Y2hhcnRUeXBlOiBcImJhclwiLFxuXHRjb2xvcjogXCIjMzZhYmVlXCIsXG5cdGNoYXJ0Ont9LFxuXHRzaW5nbGVMZWdlbmRJdGVtOiAxLFxuXHRwYWxldHRlOiBbXG5cdFx0W1wiI2UzM2ZjN1wiLFwiI2EyNDRlYVwiLFwiIzQ3NmNlZVwiLFwiIzM2YWJlZVwiLFwiIzU4ZGNjZFwiLFwiI2E3ZWU3MFwiXSxcblx0XHRbXCIjZDNlZTM2XCIsXCIjZWVkMjM2XCIsXCIjZWU5MzM2XCIsXCIjZWU0MzM5XCIsXCIjNTk1OTU5XCIsXCIjYjg1OTgxXCIgXSxcblx0XHRbIFwiI2M2NzBiOFwiLFwiIzk5ODRjZVwiLFwiI2I5YjllMlwiLFwiI2IwY2RmYVwiLFwiI2EwZTRlYlwiLFwiIzdmYWYxYlwiIF0sXG5cdFx0WyBcIiNiNGQ5YTRcIiwgXCIjZjJmNzlhXCIsXCIjZmZhYTdkXCIsIFwiI2Q2ODA2ZlwiLCBcIiM5MzkzOTNcIiwgXCIjZDliMGQxXCJdLFxuXHRcdFtcIiM3ODBlM2JcIixcIiM2ODRkYTlcIixcIiMyNDI0NjRcIixcIiMyMDU3OTNcIixcIiM1MTk5YTRcIiwgXCIjMDY1YzI3XCJdLFxuXHRcdFtcIiM1NGIxNWFcIixcIiNlY2YxMjVcIixcIiNjNjUwMDBcIixcIiM5OTAwMDFcIixcIiMzNjM2MzZcIiwgXCIjODAwZjNlXCJdXG5cdF1cbn07XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zb3VyY2VzL2NvbmZpZy9waXZvdGNoYXJ0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="],"sourceRoot":"/source/"}