@syncfusion/ej2-querybuilder 30.2.6 → 31.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ej2-querybuilder.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +226 -157
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +230 -160
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/dist/ts/index.d.ts +4 -0
- package/dist/ts/index.ts +4 -0
- package/dist/ts/query-builder/index.d.ts +6 -0
- package/dist/ts/query-builder/index.ts +6 -0
- package/dist/ts/query-builder/query-builder-model.d.ts +569 -0
- package/dist/ts/query-builder/query-builder.d.ts +1172 -0
- package/dist/ts/query-builder/query-builder.ts +7612 -0
- package/dist/ts/query-builder/query-library.d.ts +24 -0
- package/dist/ts/query-builder/query-library.ts +625 -0
- package/package.json +46 -14
- package/src/query-builder/query-builder.d.ts +7 -0
- package/src/query-builder/query-builder.js +230 -159
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.isPropChange = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\n _this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = _this.l10n.getConstant('OtherFields');\n }\n _this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; i++) {\n if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {\n col[i].field = field ? field + _this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n _this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = _this.customOperators[col[i].type + 'Operator'];\n }\n }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target && target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n }\n });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = grpElem && this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules && rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = rule && this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({\n elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n window.removeEventListener('resize', this.windowResizeHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';\n if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {\n valueStr = \"\\\"\" + rule.value[0] + \"\\\"\" + ruleCondition + \"\\\"\" + rule.value[1] + \"\\\"\";\n }\n else {\n valueStr = \"\" + rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\n }\n else {\n valueStr = \"(\" + rule.value + \")\";\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr = rule.value ? \"(\\\"\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr = \"\" + rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr = '\"\"';\n }\n else {\n valueStr = \"\\\"\" + rule.value + \"\\\"\";\n }\n }\n }\n var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\n }, '');\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","prevRule","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","innerHTML","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","addEventListener","windowResizeHandler","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"iFAAA,IAAIA,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAAsC,WAStC,OARAA,EAAWX,OAAOY,QAAU,SAASC,GACjC,IAAK,GAAIC,GAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAAK,CACjDD,EAAIG,UAAUF,EACd,KAAK,GAAIX,KAAKU,GAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KACzDS,EAAET,GAAKU,EAAEV,IAEjB,MAAOS,KAEKO,MAAMb,KAAMU,YAE5BI,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2H3B,GAAvH4B,EAAIT,UAAUC,OAAQS,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOzB,OAAO4B,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIV,GAAIO,EAAWJ,OAAS,EAAGH,GAAK,EAAGA,KAASjB,EAAIwB,EAAWP,MAAIY,GAAKD,EAAI,EAAI5B,EAAE6B,GAAKD,EAAI,EAAI5B,EAAEyB,EAAQC,EAAKG,GAAK7B,EAAEyB,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK3B,OAAO+B,eAAeR,EAAQC,EAAKG,GAAIA,GAuB5DK,EAAyB,SAAUC,GAEnC,QAASD,KACL,MAAkB,QAAXC,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAyC/D,MA3CAX,GAAUoC,EAASC,GAInBZ,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,gBAAa,IACnCY,GACIa,cACDF,EAAQvB,UAAW,mBAAgB,IACtCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,YAAWC,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,aAClDP,EAAQvB,UAAW,iBAAc,IACpCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,cAAW,IAC1BuB,GACTQ,iBAKEC,EAAsB,SAAUR,GAEhC,QAASQ,KACL,MAAkB,QAAXR,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KA6B/D,MA/BAX,GAAU6C,EAAMR,GAIhBZ,GACIa,WAAS,OACVO,EAAKhC,UAAW,gBAAa,IAChCY,GACIqB,gBAAeD,IAChBA,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,WAAQ,IAC3BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IAC/BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,YAAS,IACVO,EAAKhC,UAAW,UAAO,IAC1BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IACxBgC,GACTD,iBAKEG,EAAuB,SAAUV,GAEjC,QAASU,KACL,MAAkB,QAAXV,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAiB/D,MAnBAX,GAAU+C,EAAOV,GAIjBZ,GACIa,WAAS,OACVS,EAAMlC,UAAW,0BAAuB,IAC3CY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACxCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,sBAAmB,IACvCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,mBAAgB,IACpCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACjCkC,GACTH,iBAKEI,EAA6B,SAAUX,GAEvC,QAASW,KACL,MAAkB,QAAXX,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAuB/D,MAzBAX,GAAUgD,EAAaX,GAIvBZ,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,eAAY,IACtCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IACzCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IAClCmC,GACTJ,iBAEEK,EAA8B,SAAUZ,GAExC,QAASY,GAAaC,EAASC,GAC3B,GAAIC,GAAQf,EAAOd,KAAKZ,KAAMuC,EAASC,IAAYxC,IAyBnD,OAxBAyC,GAAMC,YAAa,EACnBD,EAAME,QAAWC,KAAM,QAASC,MAAO,SACvCJ,EAAMK,aAAgBC,KAAK,EAAOC,UAAW,MAAOC,UAAU,GAC9DR,EAAMS,UAAW,EACjBT,EAAMU,aAAc,EACpBV,EAAMW,YAAa,EACnBX,EAAMY,cAAe,EACrBZ,EAAMa,kBAAmB,EACzBb,EAAMc,eAAgB,EACtBd,EAAMe,cAAe,EACrBf,EAAMgB,WAAY,EAClBhB,EAAMiB,iBAAkB,EACxBjB,EAAMkB,mBACNlB,EAAMmB,aAAe,EACrBnB,EAAMoB,aACNpB,EAAMqB,YAAc,EACpBrB,EAAMsB,WAAa,EACnBtB,EAAMuB,aAAc,EACpBvB,EAAMwB,kBAAmB,EACzBxB,EAAMyB,eAAgB,EACtBzB,EAAM0B,mBAAoB,EAC1B1B,EAAM2B,cAAe,EACrB3B,EAAM4B,cAAe,EACrBC,cAAYC,OAAOC,qBACZ/B,EA6oOX,MAxqOApD,GAAUiD,EAAcZ,GA6BxBY,EAAapC,UAAUuE,eAAiB,WACpC,MAAOzE,MAAK0E,cAAc,UAO9BpC,EAAapC,UAAUyE,MAAQ,WAC3B3E,KAAK4E,eAAgB,CACrB,IAAIC,GAAW7E,KAAKwC,QAAQsC,cAAc,iBACtCC,EAAgB/E,KAAKwC,QAAQwC,iBAAiB,mBAE9CC,EAAe,EACfC,EAAe,WAEf,IAAK,GADDC,GAAWC,KAAKvD,IAAIoD,EAHZ,GAGsCF,EAAcpE,QACvDH,EAAIyE,EAAczE,EAAI2E,EAAU3E,IAAK,CAC1C,GAAIgC,GAAUuC,EAAcvE,EAC5B,KACI,GAAIgC,EAAQ6C,UAAUC,QAAQ,cAAgB,GACtCC,EAAUC,eAAahD,EAAS,aAEhC+C,EAAQE,cAGX,IAAIjD,EAAQkD,eAAiBlD,EAAQkD,cAAcL,UAAUC,QAAQ,cAAgB,EAAG,CACzF,GAAIC,GAAUC,eAAahD,EAAQkD,cAAe,UAC9CH,IACAA,EAAQE,WAIpB,MAAOE,GACHC,QAAQC,KAAK,4BAA6BF,KAGlDV,EAAeE,GACIJ,EAAcpE,QAC7BmF,sBAAsBZ,GAM9B,IAHIH,EAAcpE,OAAS,GACvBuE,IAEAL,EACAA,EAASkB,YAAc,OAEtB,CACD,GAAIC,GAAWC,SAASC,yBACpBC,EAAenG,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBAC3DC,EAAYvG,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBACxDE,EAAUxG,KAAKoG,cAAc,OAASC,OAASC,MAAO,iBAC1DH,GAAaM,YAAYF,GACzBJ,EAAaM,YAAYD,GACzBR,EAASS,YAAYN,GACrBnG,KAAKwC,QAAQiE,YAAYT,GACzBnB,EAAW7E,KAAKwC,QAAQsC,cAAc,iBAM1C,GAJI9E,KAAK0G,gBAAkB1G,KAAK2G,SAC5B3G,KAAKwC,QAAQuD,YAAc,GAC3B/F,KAAK2G,QAAS,GAEd3G,KAAK4G,mBAEL,IAAK,GADDC,GAAiB7G,KAAKwC,QAAQwC,iBAAiB,gBAC1CxE,EAAI,EAAGA,EAAIqG,EAAelG,OAAQH,IACvCsG,eAAaD,EAAerG,IAAK,kBAGrCqE,IACAA,EAAS4B,YAAYzG,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBAErEtG,KAAK+G,UAAU/G,KAAKwC,QAAQwE,GAAK,YAAc,GAC/ChH,KAAKiH,eAAgBC,MAAQlE,UAAW,MAAOD,KAAK,EAAOoE,YAAe,GACtEtC,GAAYA,EAASa,eACrB1F,KAAKoH,qBAAqBvC,EAASa,gBAG3CpD,EAAapC,UAAUmH,WAAa,WAChC,MAAOrH,MAAKwC,SAEhBF,EAAapC,UAAUoH,cAAgB,WACnC,MAAO,iBAEXhF,EAAapC,UAAUqH,gBAAkB,WACrC,GAAIC,KAKJ,OAJAA,GAAQC,MACJC,OAAQ,gBACRC,MAAO3H,QAEJwH,GAEXlF,EAAapC,UAAU0H,kBAAoB,SAAUC,GACjD,MAAKC,qBAAkBD,GAGhB,GAFI7H,KAAK+H,UAAYF,EAAMG,MAAMhI,KAAK+H,WAAW,GAAKF,GAIjEvF,EAAapC,UAAU+H,WAAa,WAChC,GAAIxF,GAAQzC,IACZ,IAAIA,KAAKkI,SAASvH,OAAQ,CACtB,GAGIwH,GAGAC,EANAC,EAAe5I,OAAO6I,KAAKtI,KAAKkI,SAAS,IACzCK,KACAC,KAEAC,GAAY,EACZC,GAAW,EAEXC,GAAkB/G,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,UAC5D,IAAIhC,KAAK4I,QAAQjI,OACbX,KAAK6I,aACS7I,KAAK4I,QACXE,QAAQ,SAAUC,GACtBtG,EAAMuG,qBAAqBD,EAAQ,WAC9BA,EAAOE,OACJZ,EAAa/C,QAAQyD,EAAOlB,QAAU,IACtCO,EAAU3F,EAAMyF,SAAS,GAAGa,EAAOlB,OAEpB,YADfM,QAAgBC,IAEZM,GAAYQ,MAAMC,KAAKC,MAAMhB,IAEb,WAAXD,IACLO,EAAWN,YAAmBe,QAASD,MAAMd,EAAQiB,WACrDlB,EAAS,UAEbY,EAAOE,KAAOd,EACdO,GAAW,GAEfP,EAAS,UAERY,EAAOO,aACRP,EAAOO,WAAaX,GAEpBI,EAAOQ,SACPd,GAAY,EAGZM,EAAOQ,SAAW9G,EAAM+G,KAAKC,YAAY,eAEzCjB,EAAalD,QAAQyD,EAAOQ,UAAY,GACxCf,EAAaf,KAAKsB,EAAOQ,YAExBR,EAAOW,WACPjH,EAAMS,WAA6D,IAAjDT,EAAMkB,gBAAgB2B,QAAQyD,EAAOlB,UACxDkB,EAAOW,UAAYjH,EAAMkH,gBAAgBZ,EAAOE,KAAO,eAG3DR,IAAcD,EAAa7H,OAAS,GAAK6H,EAAa,KAAOxI,KAAKwJ,KAAKC,YAAY,kBACnFzJ,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAAS+G,QAAS,aAE5D5J,KAAK6J,2BAA2B7J,KAAK4I,aAEpC,CACD,IAAK,GAAIpI,GAAI,EAAGsJ,EAAMzB,EAAa1H,OAAQH,EAAIsJ,EAAKtJ,IAChD4H,EAAUpI,KAAKkI,SAAS,GAAGG,EAAa7H,IAEzB,YADf2H,QAAgBC,IAEZM,GAAYQ,MAAMC,KAAKC,MAAMhB,IAEb,WAAXD,GAAwB1I,OAAO6I,KAAKF,GAASzH,SAClD+H,EAAWN,YAAmBe,QAASD,MAAMd,EAAQiB,WACrDlB,EAAS,UAEbI,EAAK/H,IACDqH,MAASQ,EAAa7H,GAAIuJ,MAAS1B,EAAa7H,GAAIyI,KAAQP,EAAW,OAASP,EAChFmB,WAAcX,GAElBD,GAAW,EACXH,EAAK/H,GAAGkJ,UAAY1J,KAAK2J,gBAAgBpB,EAAK/H,GAAGyI,KAAO,YACzC,WAAXd,GACAnI,KAAKgK,gBAAgB5B,EAASG,EAAK/H,GAG3CR,MAAK4I,QAAUL,OAGdvI,MAAK4I,SAAW5I,KAAK4I,QAAQjI,SACP,YAAvBX,KAAKiK,eACLjK,KAAK6I,aAET7I,KAAKkK,0BACDlK,KAAK4I,QAAQjI,OAAS,GACtBwJ,WAAW,WACP1H,EAAMoH,2BAA2BpH,EAAMmG,UACxC,GAGH5I,KAAK6J,2BAA2B7J,KAAK4I,SAG7C5I,MAAKoK,QAAQ,aAAenB,KAAM,eAEtC3G,EAAapC,UAAUgK,wBAA0B,WAC7C,GAAIzH,GAAQzC,KACR4I,EAAU5I,KAAK4I,QAEfyB,EAAiB,EACjBnF,EAAe,WAEf,IAAK,GADDoF,GAASlF,KAAKvD,IAAIwI,EAHV,GAGsCzB,EAAQjI,QACjDH,EAAI6J,EAAgB7J,EAAI8J,EAAQ9J,IACjCoI,EAAQpI,GAAG+I,UAAYX,EAAQpI,GAAG+I,WAAa9G,EAAM+G,KAAKC,YAAY,eACtEhH,EAAME,QAAWC,KAAM,QAASC,MAAO,QAAS+G,QAAS,YAGzDhB,EAAQpI,GAAG+I,SAAW9G,EAAM+G,KAAKC,YAAY,eAEjDhH,EAAMuG,qBAAqBJ,EAAQpI,GAAI,aAClCoI,EAAQpI,GAAGkJ,WACXjH,EAAMS,WAAiE,IAArDT,EAAMkB,gBAAgB2B,QAAQsD,EAAQpI,GAAGqH,UAC5De,EAAQpI,GAAGkJ,UAAYjH,EAAMkH,gBAAgBf,EAAQpI,GAAGyI,KAAO,cAGvEoB,EAAiBC,GACI1B,EAAQjI,QACzBmF,sBAAsBZ,GAG9BA,MAEJ5C,EAAapC,UAAU2J,2BAA6B,SAAUU,EAAK1C,GAC/D,GAAI0C,EAAI5J,OAAS,GAEb,WADAX,MAAKwK,qBAAqBD,EAAK1C,EAGnC,KAAK,GAAIrH,GAAI,EAAGA,EAAI+J,EAAI5J,OAAQH,IACL,KAAnBR,KAAK+H,WAAoBwC,EAAI/J,GAAGqH,MAAMvC,QAAQtF,KAAK+H,WAAa,IAChEwC,EAAI/J,GAAGqH,MAAQA,EAAQA,EAAQ7H,KAAK+H,UAAYwC,EAAI/J,GAAGqH,MAAQ0C,EAAI/J,GAAGqH,OAEtE0C,EAAI/J,GAAGkJ,UACP1J,KAAKgJ,qBAAqBuB,EAAI/J,IAEzB+J,EAAI/J,GAAGyI,MAAwB,WAAhBsB,EAAI/J,GAAGyI,OAC3BsB,EAAI/J,GAAGkJ,UAAY1J,KAAK2J,gBAAgBY,EAAI/J,GAAGyI,KAAO,aAEtDsB,EAAI/J,GAAGoI,UACP2B,EAAI/J,GAAGyI,KAAO,SACdjJ,KAAK6J,2BAA2BU,EAAI/J,GAAGoI,QAAS2B,EAAI/J,GAAGqH,SAInEvF,EAAapC,UAAUsK,qBAAuB,SAAUD,EAAK1C,GACzD,GAAIpF,GAAQzC,KACRQ,EAAI,EACJiK,EAAYF,EAAI5J,OAChB+J,EAAmB,WAEnB,IADA,GAAIJ,GAASlF,KAAKvD,IAAIrB,EAAI,GAAIiK,GACvBjK,EAAI8J,EAAQ9J,IACS,KAApBiC,EAAMsF,WAAoBwC,EAAI/J,GAAGqH,MAAMvC,QAAQ7C,EAAMsF,WAAa,IAClEwC,EAAI/J,GAAGqH,MAAQA,EAAQA,EAAQpF,EAAMsF,UAAYwC,EAAI/J,GAAGqH,MAAQ0C,EAAI/J,GAAGqH,OAEvE0C,EAAI/J,GAAGkJ,UACPjH,EAAMuG,qBAAqBuB,EAAI/J,IAE1B+J,EAAI/J,GAAGyI,MAAwB,WAAhBsB,EAAI/J,GAAGyI,OAC3BsB,EAAI/J,GAAGkJ,UAAYjH,EAAMkH,gBAAgBY,EAAI/J,GAAGyI,KAAO,YAG3DzI,GAAIiK,EACJ3E,sBAAsB4E,GAGtBP,WAAW,WACP,IAAK,GAAIQ,GAAI,EAAGA,EAAIF,EAAWE,IACvBJ,EAAII,GAAG/B,UACP2B,EAAII,GAAG1B,KAAO,SACdxG,EAAMoH,2BAA2BU,EAAII,GAAG/B,QAAS2B,EAAII,GAAG9C,SAGjE,GAGX6C,MAEJpI,EAAapC,UAAU8J,gBAAkB,SAAUnH,EAAO0H,EAAKK,GAC3D,GAAIC,EACJN,GAAI3B,UACJ,IAGIK,GACA6B,EAJAC,EAAatL,OAAO6I,KAAKzF,EAK7B+H,GAAOA,GAAc5K,KAAKkI,SAAS,EACnC,KAAK,GAAI1H,GAAI,EAAGsJ,EAAMiB,EAAWpK,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACnD,GAAIwK,GAAYT,EAAI1C,MAAMG,MAAM,IAE5B8C,GADAF,EACSA,EAAKI,EAAUA,EAAUrK,OAAS,IAAIoK,EAAWvK,IAGjDR,KAAKkI,SAAS,GAAGqC,EAAI1C,OAAOkD,EAAWvK,GAEpD,IAAIyK,GAAUL,EAAKL,EAAI1C,MAAMG,MAAMhI,KAAK+H,WAAWwC,EAAI1C,MAAMG,MAAMhI,KAAK+H,WAAWpH,OAAS,GAC5FsI,SAAc6B,GAIdD,GAAYhD,MAHJ0C,EAAI1C,MAAQ7H,KAAK+H,UAAYgD,EAAWvK,GAGtBuJ,MAFlBgB,EAAWvK,GAEqByI,KADxCA,EAAiB,WAATA,GAAsBC,MAAMC,KAAKC,MAAM0B,IAAqB7B,EAAT,QAE9C,WAATA,IACA4B,EAAQnB,UAAY1J,KAAK2J,gBAAgBV,EAAO,aAEpDsB,EAAI3B,QAAQnB,KAAKoD,GACJ,WAAT5B,GACAjJ,KAAKgK,gBAAgBc,EAAQD,EAASI,KAIlD3I,EAAapC,UAAU8I,qBAAuB,SAAUD,EAAQmC,GAC5D,GAAInC,EAAOW,UAAW,CACb1J,KAAKkD,UAAqB,YAATgI,GAAuBpD,oBAAkB9H,KAAK2D,kBAChE3D,KAAK2D,gBAAgB8D,KAAKsB,EAAOlB,MAarC,KAAK,GADDsD,GAASnL,KACJ2K,EAAI,EAAGA,EAAI5B,EAAOW,UAAU/I,OAAQgK,KAX/B,SAAUA,GACpB,GAAIS,GAAS3L,OAAO6I,KAAKS,EAAOW,UAAUiB,IAAIrF,QAAQ,cACtD,IAAI8F,GAAU,EAAG,CACb,GAAIC,GAAatC,EAAOW,UAAUiB,GAC9BW,EAAW7L,OAAO6I,KAAK+C,GACvBE,EAASD,EAASE,IAAI,SAAUvK,GAAO,MAAOoK,GAAW,GAAKpK,KAASwK,KAAK,KAAKzD,MAAM,KACvF0D,EAAWJ,EAAShG,QAAQ,QAChC6F,GAAOzB,UAAU6B,EAAOG,IAAaH,EAAOH,KAKxCT,KAIpBrI,EAAapC,UAAUyL,kBAAoB,SAAUC,GACjD5L,KAAKgB,OAAS4K,EAAM5K,QAExBsB,EAAapC,UAAU2L,kBAAoB,SAAUD,GACjD,GAEIjE,GAFAlF,EAAQzC,KACRgB,EAAS4K,EAAM5K,MAEnBhB,MAAK4E,eAAgB,CACrB,IAAIkH,EAIJ,IAHuB,SAAnB9K,EAAO+K,UACP/K,EAASA,EAAO0E,eAEY,gBAArB1E,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,oBAAsB,EAAG,CACtF0G,EAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACnDnM,MAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,GAC7DX,KAAKoM,eAET,IAAIC,GAAcpG,SAASqG,eAAetM,KAAKwC,QAAQwE,GAAK,oBACxDuF,EAAcF,EAAYvH,cAAc,kBAC5CkH,GAAUQ,QAAQ,oBAAsBC,KAAM,iBAC1CC,EAAY1M,KAAKwC,QAAQsC,cAAc,uBACjC6H,MAAMC,QAAU,OAC1BL,EAAYxG,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MACpDmF,EAAYM,MAAMC,QAAU,QAC5BL,EAAYI,MAAMG,OAASP,EAAYQ,aAAe,KAE1D,GAAuB,WAAnB/L,EAAO+K,SAAoD,gBAArB/K,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,eAAiB,EAAG,CACpH,GAAI0G,GAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACvD,SAAQ,GACJ,IAAKnL,GAAOqE,UAAUC,QAAQ,iBAAmB,EAC7CtF,KAAKgN,aAAehM,EACpBhB,KAAKiN,WAAWjM,EAChB,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,qBAAuB,EACjDtF,KAAKgN,aAAehM,EACpBhB,KAAKmE,mBAAoB,EACzBnE,KAAKkN,UAAUlM,EACf,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,oBAAsB,EAChDtF,KAAKgN,aAAehM,EACpBhB,KAAKmN,SAASnM,EACd,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,mBAAqB,EAC/CtF,KAAKgN,aAAehM,EACpBhB,KAAKoN,UAAUpM,EACf,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,oBAAsB,EAChDtF,KAAKgN,aAAehM,EACpBhB,KAAKiE,kBAAmB,EACxBjE,KAAKqN,WAAWC,UAAQtM,EAAQ,sBAChC,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,kBAAoB,EAC9CtF,KAAKgN,aAAehM,EACpBhB,KAAKuN,YAAYD,UAAQtM,EAAQ,sBACjC,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,gBAAkB,EAG5C,GAFA0G,EAAUQ,QAAQ,oBAAsBC,KAAM,gBAC9CxG,SAASqG,eAAetM,KAAKwC,QAAQwE,GAAK,oBAAoB2F,MAAMC,QAAU,OAC1E5M,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,EAAG,CAChEX,KAAKwN,iBAAgB,EAAOxN,KAAKwC,QAASxC,KAAKkH,KAAKlE,WAAW,EAAOhD,KAAKkH,KAAKnE,IAChF,IAAI0K,GAASC,YAAW1N,KAAKkH,SAAU,EACvClH,MAAK2N,cAAcF,GACnBzN,KAAK4N,4BAEJ,CACD,GAAIlB,GAAY1M,KAAKwC,QAAQsC,cAAc,qBACvC4H,GAAU1H,iBAAiB,oBAAoBrE,OAAS,GACxDX,KAAK4N,wBAETlB,EAAUC,MAAMC,QAAU,cAKrC,IAAwB,UAAnB5L,EAAO+K,SAAuB/K,EAAO0E,cAAcL,UAAUC,QAAQ,gBAAkB,GAChE,gBAArBtE,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,gBAAkB,EAAI,CACxF,GAAI9C,GAAU8K,UAAQtM,EAAQ,qBAC9B,KAAKhB,KAAK0G,eAAgB,CACtB,GAAImH,GAAa7M,EAAO8M,aAAa,OACjCC,MAAc,EACdF,GACAE,EAAc9H,SAASqG,eAAeuB,GAAYC,aAAa,SAE1D9N,KAAKgO,0BAEND,EADA/M,EAAOiN,UAAUC,SAAS,qBACZ,KAETlN,EAAOiN,UAAUC,SAAS,sBACjB,MAGAlN,EAAO+E,aAG7B+F,EAAUtJ,EAAQwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACpD,IAAIoH,GAAQpO,KAAKqO,SAASvC,GACtBwC,MAAc,EAClB,IAAItO,KAAK4G,mBACL,GAAI5F,EAAOqE,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAIiJ,GAAa/L,EAAQgM,uBAAuB,eAAe,EAC3DD,GAAWlJ,UAAUC,QAAQ,oBAAsB,GACnDwB,eAAayH,GAAa,mBAC1BD,GAAc,IAGdG,YAAUF,GAAa,mBACvBD,GAAc,GAElBP,EAAcK,EAAMpL,cAGpBsL,GAAcF,EAAMrL,GAG5B4E,IAASmE,QAASA,EAAS4C,QAAQ,EAAOzF,KAAM,YAAapG,MAAOkL,EAAYY,eAC5E3O,KAAK4G,qBACLe,GACImE,QAASA,EAAS4C,QAAQ,EAAOzF,KAAM,YAAapG,MAAOkL,EAAYY,cACvE5L,IAAOuL,IAIdtO,KAAK4E,cAMN5E,KAAK4O,sBAAsBjH,EAAM3G,GALjChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMmM,sBAAsBC,EAAoB7N,KAMxDhB,KAAKgB,OAASA,IAGtBsB,EAAapC,UAAU0O,sBAAwB,SAAUjH,EAAM3G,GAC3D,GAAI2G,IAASA,EAAK+G,OAAQ,CACtB,GAAIlM,GAAU8K,UAAQtM,EAAQ,sBAC1B8K,EAAUtJ,EAAQwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpD8H,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtCA,EAAOlH,KAAKgP,eAAexM,EAC/B,IAAIxC,KAAKgO,wBAAyB,CAS9B,GAAIhH,IANAxE,EAFAsF,oBAAkBwF,UAAQtM,EAAQ,uBAClCwB,EAAQyL,UAAUC,SAAS,qBAC+B,OAAhDlN,EAAO0E,cAAcuJ,uBAC3BjO,EAAO0E,cAAcuJ,uBAAyBzM,EAGxC8K,UAAQtM,EAAQ,sBAEbgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC/CxE,GAAQyL,UAAUC,SAAS,qBAC3BhH,EAAOlH,KAAKkP,QAAQ1M,IACfQ,UAAY2E,EAAK9E,MAEjBL,EAAQyL,UAAUC,SAAS,wBAChChH,EAAOlH,KAAKqO,SAAS7L,IAChBQ,UAAY2E,EAAK9E,OAEtB7C,KAAK4G,qBACLM,EAAKnE,IAAM4E,EAAK5E,KAEf/C,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAASqD,OAAQnI,EAAIiC,KAAM,YAAapG,MAAOqE,EAAKlE,gBAI1FkE,GAAKlE,UAAY2E,EAAK9E,MAClB7C,KAAK4G,qBACLM,EAAKnE,IAAM4E,EAAK5E,KAEf/C,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAAS7C,KAAM,YAAapG,MAAOqE,EAAKlE,WAIlF,IADAhD,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,aACzDlH,KAAKgO,wBAAyB,CAC9B,GAAIqB,GAAUrO,EAAO0E,cAAcZ,cAAc,mBAC7CwK,EAAStO,EAAO0E,cAAcZ,cAAc,iBAC5CuK,IAAWC,IACQ,QAAf3H,EAAK9E,OACLwM,EAAQE,SAAU,EAClBD,EAAOC,SAAU,GAEG,OAAf5H,EAAK9E,QACVyM,EAAOC,SAAU,EACjBF,EAAQE,SAAU,OAMtCjN,EAAapC,UAAUsP,UAAY,SAAUxO,EAAQ4K,GAC9B,eAAfA,EAAMa,KACFzM,KAAKyP,YAAYC,aAAe5H,oBAAkB9H,KAAKyP,YAAYC,cAC/D1P,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAgB,EACnFlB,YAAU7C,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAG5EoB,eAAa8E,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAE/E1F,KAAK4P,WACLnB,YAAU7C,EAAMpJ,QAAQsC,cAAc,MAAMY,eAAgB,UAIhE+I,YAAU7C,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAG3EkG,EAAMpJ,QAAQqN,SAAS,GAAGxK,UAAUC,QAAQ,cAAgB,EACjEtF,KAAK8P,eAAexC,UAAQtM,EAAQ,0BAE/B4K,EAAMpJ,QAAQqN,SAAS,GAAGxK,UAAUC,QAAQ,eAAiB,GAClEtF,KAAKwN,iBAAgB,EAAMF,UAAQtM,EAAQ,sBAAuB,IAAI,IAG9EsB,EAAapC,UAAU6P,eAAiB,SAAU/O,EAAQ+H,EAAQE,EAAM+G,EAAUC,EAAQ/I,GACtF,GAAIgJ,GACAC,EAEAxI,EADAyI,EAAepP,GAAUA,EAAO8D,cAAc,eAElD,IAAa,WAATmE,EACAiH,EAAWG,SAAO,IAAML,EAAUhP,OAEjC,CAGD,IAFAkP,EAAWlQ,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBAC9CgK,aAAa,KAAMtP,EAAOgG,GAAK,QAAUhH,KAAKuQ,eACnDvQ,KAAKyP,YAAYe,WAAaxQ,KAAKmE,kBAAmB,CACtD,GAAInE,KAAK+D,UAAY,EACjBqM,EAAa3J,YAAYyJ,OAGzB,IAAIlQ,KAAKgO,wBAAyB,CAG9B,IAAK,GAFDyC,IAAS,EACTC,EAAgB1Q,KAAK+D,UAAY,EAC5BvD,EAAI,EAAGA,EAAIkQ,GACZlQ,IAAM4P,EAAaP,SAASlP,OADDH,IAI3B4P,EAAaP,SAASrP,GAAGyN,UAAUC,SAAS,sBAC5CwC,IACAD,IAGRL,GAAaO,aAAaT,EAAUE,EAAaP,SAAS7P,KAAK+D,UAAY0M,EAAQ,QAGnFL,GAAaO,aAAaT,EAAUE,EAAaP,SAAS7P,KAAK+D,UAAY,GAGnF/D,MAAKmE,mBAAoB,MAGzBiM,GAAa3J,YAAYyJ,EAE7BlQ,MAAKuQ,gBAET,GAAIxH,GAAUA,EAAO6H,cAAgB1J,EAAM,CACvCS,GAASkJ,YAAa,sBAAuB1B,OAAQe,EAASlJ,GAAIiJ,OAAQA,EAAQtN,OAAQ3C,KAAK2C,OAAQuE,KAAMA,GAC7GlH,KAAKoK,QAAQ,cAAezC,GAC5B3H,KAAK8Q,eAAiB9Q,KAAK+Q,eAAehI,EAAO6H,aACjD,IAAII,GAAahR,KAAKwC,QAAQwE,GAAK+B,EAAOlB,KAU1C,IARAF,EAAKhF,OAAS3C,KAAK2C,OACnBgF,EAAKiB,QAAU5I,KAAK4I,QACD,KAAf1B,EAAKW,QACLX,EAAKW,MAAQkB,EAAOlB,OAExBF,EAAK+B,UAAY1J,KAAKiR,aAAa/J,EAAKW,OACxCF,EAAKuJ,gBAAmBtO,KAAM,MAAOC,MAAO,SAExC7C,KAAKmR,SAELhB,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAMkQ,EAASlJ,GAAIgK,GAAY,IAE/D3L,WAAa,gBAClB6K,EAASzJ,YAAY0J,OAGpB,IAAInQ,KAAKoR,UAAW,CACrB,GAAIC,GAAerR,KAAK8Q,eAAenJ,EAAM3H,KAAMkQ,EAASlJ,GAAIgK,IAEhEb,EADyC,IAA7BkB,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,IAExEhM,WAAa,gBAClB6K,EAASzJ,YAAY0J,OAGhBnQ,MAAKuR,QAEVpB,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAM,WAAYgR,GAGvDQ,SAAOrB,EAAMD,GACTA,EAASL,SAASlP,SAClBuP,EAASL,SAASK,EAASL,SAASlP,OAAS,GAAG0E,WAAa,oBAKjE8K,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAM,WAAYgR,GAAY,IAE9D3L,WAAa,gBAClB6K,EAASzJ,YAAY0J,QAIzBA,GAAOnQ,KAAKkQ,SAASpL,cAAc,iBAAiB2M,WAAU,GAC9DvB,EAASzJ,YAAY0J,EAuBzB,OArBInQ,MAAKyP,YAAYiC,WACjB5K,cAAYoJ,EAASlL,iBAAiB,mBAAoB,iBAE1DhF,KAAKyP,YAAYkC,UACjB7K,cAAYoJ,EAASlL,iBAAiB,oBAAqB,iBAE3DhF,KAAKyP,YAAYmC,YACjB9K,cAAYoJ,EAASlL,iBAAiB,oBAAqB,iBAE3DhF,KAAKyP,YAAYe,WACjB1J,cAAYoJ,EAASlL,iBAAiB,qBAAsB,iBAE5DhF,KAAKyP,YAAYoC,YACjB/K,cAAYoJ,EAASlL,iBAAiB,mBAAoB,iBAE1DhF,KAAK8R,kBACLhL,cAAYoJ,EAASlL,iBAAiB,mBAAoB,YAE1D+D,GAAUA,EAAO6H,cAAgB1J,GACjClH,KAAK+R,uBAEF7B,GAEX5N,EAAapC,UAAU4P,eAAiB,SAAU9O,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,GACtF,GAAIvP,GAAQzC,IACZ,IAAKgB,EAAL,CAGA,GAAI2G,IAASmE,QAAS9K,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAK0H,QAAQ,EAAOzF,KAAM,aACpFjJ,MAAK4E,eAAkB5E,KAAKiS,eAAkBjS,KAAKkS,eAMpDlS,KAAKiS,eAAgB,EACrBjS,KAAKmS,uBAAuBxK,EAAM3G,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,IAN1EhS,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAM0P,uBAAuBtD,EAAoB7N,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,OAQrG1P,EAAapC,UAAUiS,uBAAyB,SAAUxK,EAAMyK,EAAMlL,EAAMqD,EAAK8H,EAAKC,EAAKC,GACvF,GACIpD,GAEAzF,EACA8I,EACAtC,EALApD,EAAU9M,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EAAK,QAAU,QAEvEyD,EAAU7B,GAAQA,EAAKW,MAAS7H,KAAKyS,UAAUvL,EAAKW,OAAS0C,GAAYvK,KAAK4I,QAAQ,GAItF8J,GAAY3I,MAAS,GAAIlC,MAAS,GAAIoB,KAAQ,GAAI0J,SAAY,GAClE,KAAKhL,EAAK+G,OAAQ,CACd,GAAI3F,GAAUA,EAAO6H,cAAgB1J,EAAKW,MAAO,CAC7C7H,KAAK4S,eAAiB7J,EACtBW,EAAY1J,KAAK4S,eAAelJ,UAChCgJ,GAAY3I,MAAShB,EAAOgB,MAAOlC,MAASkB,EAAOlB,MAAOoB,KAAQF,EAAOE,KAAM0J,SAAYjJ,EAAU,GAAG7G,MACxG,IAAIgQ,GAAapT,OAAO6I,KAAKpB,GAAMvG,OAASuG,EAAOwL,EAE/CI,GAAWjC,YAAa,kBAAmBZ,OAAQ,cAAed,QADtEe,EAAWlQ,KAAK+P,eAAeqC,EAAMrJ,EAAQsJ,EAAKC,EAAK,QAASO,IACuB7L,GACnFrE,OAAQ3C,KAAK2C,OAAQuE,KAAM2L,EAC/B7S,MAAKoK,QAAQ,cAAe0I,OAE3B,EACD5C,EAAWlQ,KAAK+P,eAAeqC,EAAMrJ,EAAQsJ,EAAKC,EAAK,UAC9CxN,cAAc,mBAAmBwL,aAAa,KAAMJ,EAASlJ,GAAK,aAC3E,IAAIxE,GAAU0N,EAASpL,cAAc,iBACrC,IAAI9E,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAK+S,YACxDvQ,EAAQuD,YAAc/F,KAAKwJ,KAAKC,YAAY,UAC5CgF,YAAUjM,GAAU,UACpBiM,YAAUjM,GAAU,iBAEnB,CACDiM,YAAUjM,GAAU,WACpBiM,YAAUjM,GAAU,cACpBA,EAAQ8N,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cACpD,IAAIuJ,GAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,qCAC/D4J,GAASpL,cAAc,kBAAkB2B,YAAYuM,GAEpDhT,KAAKyP,YAAYoC,YAClBrP,EAAQyL,UAAUgF,IAAI,iBAGL,aAArBjT,KAAK+S,aAA8B/S,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EACjF4K,EAAS7K,UAAY,mCAGrB6K,EAAS7K,UAAY,oCAEzB,IAAI6N,GAAmBhD,EAASjB,sBAChC,IAAIjP,KAAKgO,wBAAyB,CAC9B,GAAImF,OAAW,GACXC,MAAgB,EAQpB,IAPIF,GAAoBA,EAAiBjF,UAAUC,SAAS,uBAExDgF,GADAE,EAAgBF,EAAiBlO,iBAAiB,sBACjBoO,EAAczS,OAAS,IAExDuS,GAAoBA,EAAiBjF,UAAUC,SAAS,sBACxDiF,EAAWnT,KAAKkP,QAAQgE,IAExBlT,KAAK0G,gBAAkBwM,GAAoBC,EAC3CnT,KAAKqT,iBAAiBH,GAAkB,EAAOC,EAASnQ,UAAWmQ,EAAUD,EAAiBlM,QAE7F,IAAIc,oBAAkBoL,IAAqBhD,EAASlJ,KAAOhH,KAAKwC,QAAQwE,GAAK,gBAE9E,IADIoH,EAAQ8B,EAAS5C,QAAQ,wBAChBc,EAAMa,uBAAwB,CACvC,GACIqE,IADAC,EAAWnF,EAAMa,wBACYjK,iBAAiB,oBAIlD,IAHIuO,EAAStF,UAAUC,SAAS,uBAC5BqF,EAAWD,EAAkBA,EAAkB3S,OAAS,IAExD4S,EAAStF,UAAUC,SAAS,oBAAqB,CACjD,GAAIsF,GAAaxT,KAAKkP,QAAQqE,EAC9BvT,MAAKqT,iBAAiBE,GAAU,EAAOC,EAAWxQ,UAAWwQ,EAAYD,EAASvM,IAAI,QAI1FhH,MAAKqT,iBAAiBnD,GAAU,EAAOhJ,EAAKlE,UAAWkE,EAAMgJ,EAASlJ,IAAI,OAK9EkM,IAAoBA,EAAiB7N,UAAUC,QAAQ,qBAAuB,IAC1E4K,EAAS7K,UAAUC,QAAQ,iBAAmB,IAC9C4K,EAAS7K,WAAa,kBAEtB6N,EAAiB7N,UAAUC,QAAQ,sBAAwB,IAC3D4N,EAAiB7N,WAAa,uBAW1C,IAPI6N,GAAoBA,EAAiB7N,UAAUC,QAAQ,sBAAwB,GAC/E4K,EAAS7K,UAAUC,QAAQ,mBAAqB,IAChD4K,EAAS7K,WAAa,oBAErBrF,KAAK4E,eACN5E,KAAKyT,gBAAgBrB,EAAMlL,EAAMwL,EAASH,EAASD,IAAKtS,KAAKgO,yBAAiC,OAE7FjF,GAAWA,IAAWA,EAAO6H,eAAkB1J,EAAKW,MACrD,GAAuB,YAAnB7H,KAAK0T,UAAyB,CAC9B,GAAIC,OAAW,GACXC,MAAW,EAEXA,GADA5T,KAAK+H,WAAab,EAAKW,MACZ7H,KAAK4H,kBAAkBV,EAAKW,OAElC7H,KAAK6T,gBACC7T,KAAK4H,kBAAkBV,EAAKW,OAG5B7H,KAAK4E,cAAgB5E,KAAK4H,kBAAkBV,EAAKW,OAASX,EAAKW,MAE9E8L,GACIG,WAAY9T,KAAK4I,QACjBjG,OAAQ3C,KAAK2C,OAAQoR,YAAa/T,KAAKwJ,KAAKC,YAAY,eACxDuK,YAAehU,KAAK4I,QAAQjI,OAAS,EAAKmM,EAAS,OAASmH,MAAOjU,KAAKkU,WAAWC,KAAKnU,KAAMkQ,EAASlJ,GAAK,cAC5GoN,OAAQpU,KAAKqU,YAAYF,KAAKnU,MAAO6C,MAAOqE,EAAO0M,EAAW,KAAMU,KAAMtU,KAAKuU,UAAUJ,KAAKnU,MAAM,GAAOwU,SAAU,mBAErHxU,KAAKyU,aACLd,EAAWvT,KAAauT,EAAU3T,KAAKyU,cAE3CjC,EAAe,GAAIkC,gBAAaf,IACnBgB,SAAS,IAAMzE,EAASlJ,GAAK,aACtC4N,OAAS,EAETA,GADA5U,KAAK+H,WAAab,EAAKW,MACd7H,KAAK4H,kBAAkBV,EAAKW,OAG5B7H,KAAK4E,cAAgB5E,KAAK4H,kBAAkBV,EAAKW,OACtD2K,EAAa3P,MAErB7C,KAAK4S,eAAiBJ,EAAaqC,eAAeD,GAC9CnV,OAAO6I,KAAKpB,GAAMvG,QAClBX,KAAK8U,WAAW5N,GACZ1E,QAASgQ,EAAahQ,QAASuS,SAAU/U,KAAK4S,qBAIrD,CACD,GAAIe,OAAW,GACXC,GAAW5T,KAAK4E,cAAgBsC,EAAKW,MACzC7H,MAAKgV,oBAAsBtH,YAAW1N,KAAK4I,YAAa,GACxD5I,KAAKiV,qBAAqBjV,KAAKgV,qBAC/BrB,GACIhR,QAAUmR,WAAY9T,KAAKgV,oBACvBnS,MAAO,QAASD,KAAM,QAASsS,MAAO,UAAWC,SAAU,WAAYC,WAAY,cACvFrB,YAAa/T,KAAKwJ,KAAKC,YAAY,eAAgB4L,iBAAiB,EACpErB,YAAehU,KAAK4I,QAAQjI,OAAS,EAAKmM,EAAS,OAASwI,cAAc,EAC1ElB,OAAQpU,KAAKqU,YAAYF,KAAKnU,MAAO6C,MAAQiF,oBAAkB8L,GAAyB,MAAZA,GAC5EU,KAAMtU,KAAKuU,UAAUJ,KAAKnU,MAAM,GAAQuV,cAAgBC,SAAU,SAClEhB,SAAU,WAAYiB,UAAWzV,KAAK0V,sBAAsBvB,KAAKnU,MAAOiU,MAAOjU,KAAK2V,kBAAkBxB,KAAKnU,OAE3GA,KAAKyU,aACLd,EAAWvT,KAAauT,EAAU3T,KAAKyU,YAE3C,IAAImB,GAAe,GAAIC,gBAAalC,EAEpC,IADAiC,EAAajB,SAAS,IAAMzE,EAASlJ,GAAK,eACrCc,oBAAkB8N,EAAa/S,OAAQ,CACxC,GAAIA,GAAQ7C,KAAK8V,mBAAmBF,EAAa/S,MAAM,GACvD+S,GAAapT,QAAQK,MAAQA,EAGjC,GAAI+R,GAAU9M,oBAAkBZ,EAAKW,OACI+N,EAAa/S,MAAlD7C,KAAK4H,kBAAkBV,EAAKW,MAChC7H,MAAK4S,eAAiB5S,KAAKyS,UAAUmC,GACjCnV,OAAO6I,KAAKpB,GAAMvG,QAClBX,KAAK8U,WAAW5N,GACZ1E,QAASoT,EAAapT,QAASuS,SAAU/U,KAAK4S,iBAM9D,GADAzD,EAASe,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAChDE,GAAQA,EAAKjE,SAAU,CACvB,GAAI8S,GAAiB7F,EAASpL,cAAc,mBAC5C9E,MAAKmN,SAAS4I,GAEb/V,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,UAAY0B,QAASsG,EAAKpL,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAKmI,OAAQA,EAAQlG,KAAM,eAM5G,GAHIjJ,KAAKgO,yBAA2BlG,oBAAkBZ,EAAKlE,YAAcmM,IACrEjI,EAAOlH,KAAKkP,QAAQC,IAEpBnP,KAAKgO,wBAAyB,CAG9B,IAFA,GAAIuF,GAAWrD,EAASjB,uBACpBmE,MAAgB,GACbG,IAAaA,EAAStF,UAAUC,SAAS,qBAAqB,CACjE,GAAIqF,EAAStF,UAAUC,SAAS,qBAAsB,CAElDqF,GADAH,EAAgBG,EAASvO,iBAAiB,sBACjBoO,EAAczS,OAAS,EAChD,OAEJ4S,EAAWA,EAAStE,uBAExB,GAAIjP,KAAK0G,gBAAkB6M,EAAU,CACjC,GAAIJ,GAAWnT,KAAKkP,QAAQqE,GACxByC,GAAWnF,YAAa,uBAAwB1B,OAAQoE,EAASvM,GAAIhE,UAAWmQ,EAASnQ,UACzFiT,eAAcjW,KAAK4G,wBAA4BsP,GACnDlW,MAAKoK,QAAQ,cAAe4L,OAE3B,IAAIlO,oBAAkByL,IAAarD,EAASlJ,KAAOhH,KAAKwC,QAAQwE,GAAK,gBAAiB,CACvF,GAAIoH,GAAQ8B,EAAS5C,QAAQ,qBAC7B,IAAIc,GAASA,EAAMa,wBAA0Bb,EAAMa,uBAAuBA,uBAAwB,CAC9F,GAAIkH,GAAa/H,EAAMa,uBAAuBA,sBAC9C,IAAIkH,EAAWlI,UAAUC,SAAS,qBAAsB,CACpD,GAAIkI,GAAkBD,EAAWnR,iBAAiB,oBAClDmR,GAAaC,EAAgBA,EAAgBzV,OAAS,GAE1D,GAAIwV,EAAWlI,UAAUC,SAAS,oBAAqB,CACnD,GAAIiF,GAAWnT,KAAKkP,QAAQiH,GACxBE,GAAWxF,YAAa,uBAAwB1B,OAAQgH,EAAWnP,GACnEhE,UAAWmQ,EAASnQ,UAAWiT,eAAcjW,KAAK4G,wBAA4BsP,GAClFlW,MAAKoK,QAAQ,cAAeiM,KAIxCrW,KAAKsW,kBAAkBpG,KAG/B5N,EAAapC,UAAUwV,sBAAwB,SAAU/N,GACrD,GAAIlF,GAAQzC,KAERuW,EAAQvW,KACRwW,EAAa,GACbC,EAAa9O,EAAKiE,MAAM6K,UAG5BD,IAFkBC,EAAWxI,UAAUC,SAAS,gBAClBuI,EAAW/Q,cAAcZ,cAAc,cAAgB2R,GAC9DzP,GAAGgB,MAAM,cAAc,EAC9C,IAAIkI,GAAWjK,SAASqG,eAAekK,EACvCxW,MAAK0W,OAASlR,eAAa0K,EAASpL,cAAc,wBAAyB,eAC3E,IAAI6R,GAAmBjJ,YAAW1N,KAAK4I,YAAa,EAEpD,IADAjB,EAAK+G,QAAS,EACI,KAAd/G,EAAK/E,KACL5C,KAAK4W,iBAAiBD,OAErB,CACD,GAAIE,GAAoBF,EACnBnL,IAAI,SAAUZ,GAAQ,MAAOnI,GAAMqU,kBAAkBnP,EAAK/E,KAAMgI,KAChEmM,OAAO,SAAUC,GAAiB,MAAyB,QAAlBA,GAC9ChX,MAAK4W,iBAAiBC,GACtB1M,WAAW,WACFrC,oBAAkByO,EAAMG,SAAY5O,oBAAkByO,EAAMG,OAAOO,UACpEV,EAAMG,OAAOO,QAAQC,aAE1B,OAGX5U,EAAapC,UAAU0W,iBAAmB,SAAUhM,GAChD5K,KAAKiV,qBAAqBrK,GAC1B5K,KAAK0W,OAAOO,QAAQtU,QAChBmR,WAAYlJ,EACZ/H,MAAO,QACPD,KAAM,QACNsS,MAAO,UACPC,SAAU,YAEdnV,KAAK0W,OAAOO,QAAQE,WAExB7U,EAAapC,UAAU4W,kBAAoB,SAAUjU,EAAOuU,GACxD,GAAI3U,GAAQzC,KACR6P,EAAWuH,EAAKpX,KAAK0W,OAAO/T,OAAOuS,MACvC,KAAKrF,EACD,MAAO7P,MAAKqX,cAAcxU,EAAOuU,GAAQA,EAAO,IAEpD,IAAIE,GAAkBzH,EACjBrE,IAAI,SAAU0J,GAAS,MAAOzS,GAAMqU,kBAAkBjU,EAAOqS,KAC7D6B,OAAO,SAAUC,GAAiB,MAAyB,QAAlBA,GAC9C,OAAIM,GAAgB3W,QAChByW,EAAKpX,KAAK0W,OAAO/T,OAAOuS,OAASoC,EAC1BF,IAGPA,EAAKpX,KAAK0W,OAAO/T,OAAOuS,OAASrF,EAC1B7P,KAAKqX,cAAcxU,EAAOuU,GAAQA,EAAO,OAGxD9U,EAAapC,UAAUmX,cAAgB,SAAUxU,EAAOuU,GACpD,GAAIG,GAAaH,EAAKpX,KAAK0W,OAAO/T,OAAOC,MAAM+L,aAE/C,OADA9L,GAAQA,EAAQA,EAAM8L,cAAgB,IACA,IAA/B4I,EAAWjS,QAAQzC,IAE9BP,EAAapC,UAAUyV,kBAAoB,WACnC3V,KAAK0W,QACL1W,KAAK4W,iBAAiBlJ,YAAW1N,KAAK4I,YAAa,IAEvD5I,KAAK0W,OAAS,MAElBpU,EAAapC,UAAU+U,qBAAuB,SAAUrM,GACpD,IAAK,GAAIpI,GAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IACiB,WAA7CoI,EAAQ4O,SAAShX,EAAEiX,WAAY,KAAKxO,MAEhCjJ,KAAKoR,WAAaxI,EAAQ4O,SAAShX,EAAEiX,WAAY,KAAKC,gBAC/C9O,GAAQ4O,SAAShX,EAAEiX,WAAY,KAAKC,SAE/C9O,EAAQ4O,SAAShX,EAAEiX,WAAY,KAAKrC,YAAa,EACjDpV,KAAKiV,qBAAqBrM,EAAQ4O,SAAShX,EAAEiX,WAAY,KAAK7O,UAGzD5I,KAAKoR,WAAaxI,EAAQ4O,SAAShX,EAAEiX,WAAY,KAAKC,gBACpD9O,GAAQ4O,SAAShX,EAAEiX,WAAY,KAAKC,UAIvDpV,EAAapC,UAAUuT,gBAAkB,SAAUzS,EAAQkG,EAAMwL,EAASV,EAAgBM,EAAKqF,GAC3F,GAAIzH,GAEAxD,EACAvF,EAFAsJ,EAAQ,CAGZ,IAAIuB,EAAgB,CAIhB,IAHA9B,EAAWG,SAAO,IAAMiC,EAAKtR,GAC7B0L,EAAYY,UAAQtM,EAAQ,sBAC5BmG,EAAQnH,KAAKgP,eAAetC,GACrBwD,GAAgD,OAApCA,EAASjB,wBAAiC,CACzDiB,EAAWA,EAASjB,sBACpB,IAAI2I,GAA0B5X,KAAKgO,2BAA8BhO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBAChHlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBACjDgC,EAASjC,UAAUC,SAAS,sBAC/BlO,MAAKgO,0BAA2B4J,GACjCnH,IAGRtJ,EAAMA,MAAMsJ,GAASvJ,MAEpB,CACDwF,EAAYY,UAAQtM,EAAQ,sBAC5BmG,EAAQnH,KAAKgP,eAAetC,EAE5B,IAAImL,GAAS3Q,EAAK2Q,MACdpY,QAAO6I,KAAKpB,GAAMvG,OACdX,KAAK+D,UAAY,GACjBoD,EAAMA,MAAMM,MACRI,MAASX,EAAKW,MAAOoB,KAAQ/B,EAAK+B,KAAMc,MAAS7C,EAAK6C,MAAO4I,SAAYzL,EAAKyL,SAAU9P,MAAOqE,EAAKrE,QAEpGgV,IAEA1Q,EAAMA,MAAMA,EAAMA,MAAMxG,OAAS,GAAGkX,OAASA,GAE7C7X,KAAKgO,0BACL7G,EAAMA,MAAMA,EAAMA,MAAMxG,OAAS,GAAGqC,UAAYkE,EAAKlE,UAAYkE,EAAKlE,UAAY0P,EAAQ1P,aAI9FmE,EAAMA,MAAM2Q,OAAO9X,KAAK+D,UAAY,EAAG,GACnC8D,MAASX,EAAKW,MAAOoB,KAAQ/B,EAAK+B,KAAMc,MAAS7C,EAAK6C,MAAO4I,SAAYzL,EAAKyL,SAAU9P,MAAOqE,EAAKrE,QAEpGgV,IAEA1Q,EAAMA,MAAMnH,KAAK+D,UAAY,GAAG8T,OAASA,GAEzC7X,KAAKgO,0BACL7G,EAAMA,MAAMnH,KAAK+D,UAAY,GAAGf,UAAYkE,EAAKlE,UAAYkE,EAAKlE,UAAY0P,EAAQ1P,aAK1F6U,IAEAnF,EAAQmF,OAASA,GAEjB7X,KAAK6T,kBACL3M,EAAKW,MAAQ6K,EAAQ7K,MAAQ7H,KAAKkH,KAAKC,MAAM,GAAGU,OAEpDV,EAAMA,MAAMM,KAAKiL,IAGzB1S,KAAKoH,qBAAqBpG,EAAQmG,EAAOwQ,IAE7CrV,EAAapC,UAAU6X,mBAAqB,SAAUhP,EAAQvG,GAC1D,IAAIuG,IAAUA,EAAO6H,aAArB,CAII,GAAIoH,GAAc1K,UAAQ9K,EAAS,sBAC/BwN,EAAW1C,UAAQ9K,EAAS,qBAAqBwE,EAKrD,IAJIhH,KAAKiY,gBAAkBjY,KAAKiY,eAAerH,eAC3CsH,SAAO1V,EAAQ8K,QAAQ,QAAU0C,EAAW,MAAMlL,cAAc,kBAChE9E,KAAKmY,iBAAiBnI,KAEtBjH,EAAQ,CACR,GAAIqP,GAAUpY,KAAK4S,eAAelJ,UAC9BxC,GAASW,MAAOkB,EAAOlB,MAAOkC,MAAOhB,EAAOgB,MAAO4I,SAAUyF,EAAQ,GAAGvV,MAAOA,MAAO,GAC1F7C,MAAK8P,eAAekI,EAAa9Q,EAAM6B,EAAQ,SAAUiH,GAAU,OAElE,CACG9I,GAASW,MAAO,GAAIkC,MAAO,GAAI4I,SAAU,GAAI9P,MAAO,GACxD7C,MAAK8P,eAAekI,EAAa9Q,EAAM6B,EAAQ,SAAUiH,GAAU,MAI/E1N,EAAapC,UAAUmY,cAAgB,SAAU7V,GAC7C,GAAI+C,GAAU,GAAI+S,YACdC,QAASvY,KAAKwJ,KAAKC,YAAY,qBAAsB+O,UAAU,EAC/DC,SAAU,eAAgBjE,SAAU,uBAAwBkE,WAAY,WACpEnT,EAAQE,WACTkT,WAAY,SAAUhR,GACrB,GAAIiR,GAAsBjR,EAAKnF,QAAQsC,cAAc,mBACjD8T,KACAA,EAAoBjM,MAAMC,QAAU,UAIhDrH,GAAQoP,SAASnS,GACjB+C,EAAQ+O,KAAK9R,IAOjBF,EAAapC,UAAU2Y,eAAiB,WACpC,GACIC,GADAC,GAAU,CAEd,IAAI/Y,KAAKgZ,gBAAiB,CACtB,GAAIC,IAAe,SAAU,YAAa,UAAW,cACjDzY,MAAI,GACJsJ,MAAM,GACNoP,MAAY,GACZC,MAAY,GACZC,KACA1M,MAAY,GACZ+D,MAAQ,GACR4I,MAAc,GACdC,MAAW,GACXpS,MAAO,GACPqS,EAAcvZ,KAAKwC,QAAQwC,iBAAiB,oBAChD,KAAKxE,EAAI,EAAGsJ,EAAMyP,EAAY5Y,OAAQH,EAAIsJ,EAAKtJ,IAAK,CAChD,GAAIgZ,OAAe,EAoBnB,IAnBA9M,EAAYY,UAAQiM,EAAY/Y,GAAI,sBACpC0G,EAAOlH,KAAKgP,eAAetC,GAC3B+D,EAAQ,EACR0I,EAAYG,EAAWC,EAAY/Y,GACZ,iBAAnBR,KAAK0T,WACLoF,EAAkBtT,eAAa+T,EAAY/Y,GAAGsE,cAAc,uCAAwC,kBAC7EgU,EAAgBjW,OAASiW,EAAgBjW,MAAMlC,SAClEX,KAAK4S,eAAiB5S,KAAKyS,UAAUqG,EAAgBjW,MAAM,IAC3D2W,EAAexZ,KAAK4S,eAAetJ,aAIvC+P,EAAc7T,eAAa+T,EAAY/Y,GAAGsE,cAAc,uCAAwC,kBAC7EuU,EAAYxW,QAC3B7C,KAAK4S,eAAiByG,EAAYxE,eAAewE,EAAYxW,OAC7D2W,GAAgB1R,oBAAkBuR,EAAYxW,QAAU7C,KAAK4S,eAAetJ,YAGpF4P,EAAYI,EAASxU,cAAc,iCAC/B0U,GAAgBA,EAAa5X,WAAY,CACzC,KAAOuX,GAAkD,OAArCA,EAAUlK,wBAAiC,CAC3DkK,EAAYA,EAAUlK,sBACtB,IAAIwK,GAAoBzZ,KAAKgO,2BAA8BhO,KAAK0G,iBAAmByS,EAAUlL,UAAUC,SAAS,gBAC3GlO,KAAK0G,iBAAmByS,EAAUlL,UAAUC,SAAS,qBAAuBiL,EAAUlL,UAAUC,SAAS,sBACzGlO,MAAKgO,0BAA2ByL,GACjChJ,IAaR,GAVAyI,EAAYI,EAASxU,cAAc,+BAC9BoC,EAAKC,MAAMsJ,GAAOkC,WACfuG,EAAUxT,cAAcL,UAAUC,QAAQ,aAAe,GAAK4T,EAAU7T,UAAUC,QAAQ,aAAe,GACzGtF,KAAKqY,cAAca,EAAUxT,eAEjCqT,GAAU,GAEV7R,EAAKC,MAAMsJ,GAAO5N,gBAAiBjD,SACnCwZ,EAAWlS,EAAKC,MAAMsJ,GAAO5N,OAE7BoW,EAAY3T,QAAQ4B,EAAKC,MAAMsJ,GAAOkC,WAAa,GAClD7K,oBAAkBZ,EAAKC,MAAMsJ,GAAO5N,QACN,SAA3BqE,EAAKC,MAAMsJ,GAAOxH,MAAgD,KAA5B/B,EAAKC,MAAMsJ,GAAO5N,OAA4C,OAA5BqE,EAAKC,MAAMsJ,GAAO5N,OAC7FqE,EAAKC,MAAMsJ,GAAO5N,gBAAiBjD,QAASwZ,EAASzY,OAAS,EAAI,CAC/D+Y,EAAUJ,EAAStU,iBAAiB,2BACpCiU,GAAY3T,QAAQ4B,EAAKC,MAAMsJ,GAAOkC,UAAY,IAClDoG,GAAU,EAEd,KAAK,GAAIpO,GAAI,EAAGgP,EAAOD,EAAQ/Y,OAAQgK,EAAIgP,EAAMhP,IAAK,CAClD,GAAInI,GAAUkX,EAAQ/O,GAClBwF,MAAO,EACP3N,GAAQkD,cAAcL,UAAUC,QAAQ,eAAiB,GACzD6K,EAAO7C,UAAQ9K,EAAS,4BACf6C,UAAUC,QAAQ,aAAe,GACtCtF,KAAKqY,cAAclI,GAGlBuJ,EAAQ/O,GAAGjF,cAAcL,UAAUC,QAAQ,aAAe,GAAKoU,EAAQ/O,GAAGtF,UAAUC,QAAQ,aAAe,GAChHtF,KAAKqY,cAAcqB,EAAQ/O,GAAGjF,eAElCiF,SAIH,IAA+B,SAA3BzD,EAAKC,MAAMsJ,GAAOxH,OAAgD,OAA5B/B,EAAKC,MAAMsJ,GAAO5N,OAAkBqE,EAAKC,MAAMsJ,GAAO5N,MAAMyC,QAAQ,OAAS,GAAI,CAC5H,GAAIoU,GAAUJ,EAAStU,iBAAiB,2BACpCiU,GAAY3T,QAAQ4B,EAAKC,MAAMsJ,GAAOkC,UAAY,IAClDoG,GAAU,EAEd,KAAK,GAAIpO,GAAI,EAAGgP,EAAOD,EAAQ/Y,OAAQgK,EAAIgP,EAAMhP,IACzC+O,EAAQ/O,GAAGjF,cAAcL,UAAUC,QAAQ,aAAe,GAAKoU,EAAQ/O,GAAGtF,UAAUC,QAAQ,aAAe,IAAMwC,oBAAkBZ,EAAKC,MAAMsJ,GAAO5N,QAAwC,MAA9BqE,EAAKC,MAAMsJ,GAAO5N,MAAM8H,KACvL3K,KAAKqY,cAAcqB,EAAQ/O,GAAGjF,qBAKpC2T,GAAeA,EAAY7W,SAAWsF,oBAAkBuR,EAAYxW,QACzEiW,GAAmBA,EAAgBtW,UAAYsF,oBAAkBgR,EAAgBjW,QAC9EiW,EAAgBjW,MAAMlC,OAAS,MAC/BuY,EAAUxT,cAAcL,UAAUC,QAAQ,aAAe,GACzDtF,KAAKqY,cAAca,EAAUxT,eAEjCqT,GAAU,IAItB,MAAOA,IAEXzW,EAAapC,UAAU0Z,iBAAmB,WACtC5Z,KAAK+G,YACL,IAAI2F,GAAY1M,KAAKwC,QAAQsC,cAAc,qBAC3C,IAAI4H,EAAW,CACX1M,KAAK+G,UAAU2F,EAAU1F,KAAO,EAChC,IAAI6S,IAAQC,aAAcpN,EAAWqN,OAAQ,GAC7C/Z,MAAKga,aAAaH,KAG1BvX,EAAapC,UAAU8Z,aAAe,SAAUH,GAC5C,GACII,GAEAzZ,EAHA0Z,EAAWL,EAAIC,aAAahV,cAAc,gBAAgB+K,SAE1DnD,EAAYmN,EAAIC,aAEhBK,EAAOD,EAASvZ,OAChByZ,EAAa,CACjB,KAAK5Z,EAAI,EAAGA,EAAI2Z,EAAM3Z,KAClByZ,EAAYC,EAAS1Z,IACP6E,UAAUC,QAAQ,sBAAwB,IACpDuU,EAAIE,MAAMtS,KAAK2S,GACfpa,KAAK+G,UAAUkT,EAAUjT,IAAM6S,EAAIE,MAAMM,QACzCD,IACAP,EAAIC,aAAeG,EACnBJ,EAAM7Z,KAAKga,aAAaH,GAGhC,IAAIzJ,GAAe9C,UAAQZ,EAAW,eAGtC,OAFAmN,GAAIC,aAAe1J,EAAe9C,UAAQ8C,EAAc,sBAAwB1D,EAChFmN,EAAIE,MAAQ/Z,KAAK+G,UAAU8S,EAAIC,aAAa9S,IAAIqT,QACzCR,GAEXvX,EAAapC,UAAUoa,cAAgB,SAAUC,GAC7C,GAAIC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAnO,EAAY1M,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBACxDwU,EAAe9a,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBAC3DyU,EAAc/a,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBAC1D0U,EAAYhb,KAAKoG,cAAc,OAASC,OAASC,MAAO,gBAI5D,IAHAoG,EAAUjG,YAAYqU,GACtBC,EAAYtU,YAAYuU,GACxBtO,EAAUjG,YAAYsU,IACjB/a,KAAK0G,eAAgB,CAElBgU,EADA1a,KAAK8R,iBACS,yBAGA,iCAElB,IAAImJ,GAAkBjb,KAAKoG,cAAc,QACrCC,OACIC,MAAOoU,EAAaQ,aAAc,cAClCC,MAAO,gBAGfL,GAAarU,YAAYwU,EACzB,IAAI5V,GAAYrF,KAAKgO,0BAA4BuM,EAAc,oCAAsC,mBACrGC,GAAWxa,KAAKoG,cAAc,OAASC,OAASC,MAAOjB,EAAW+V,KAAM,WACpEpb,KAAKgO,yBACLwM,EAASvM,UAAUgF,IAAI,qBAEvBjT,KAAK4G,qBAED6T,EADAza,KAAKgO,wBACOhO,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,WAAY3C,MAAO,iBAGhEtG,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,iBAE/EkU,EAAS/T,YAAYgU,IAEzBA,EAAYza,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,QAAS3C,MAAO,iBAAkBzD,MAAO,SAClG2X,EAAS/T,YAAYgU,GACrBE,EAAY3a,KAAKoG,cAAc,SAC3BC,OAASC,MAAO,0CAChB+U,UAAWrb,KAAKwJ,KAAKC,YAAY,SAErC+Q,EAAS/T,YAAYkU,GACrBF,EAAYza,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,QAAS3C,MAAO,gBAAiBzD,MAAO,QACjG2X,EAAS/T,YAAYgU,GACrBE,EAAY3a,KAAKoG,cAAc,SAC3BC,OAASC,MAAO,yCAChB+U,UAAWrb,KAAKwJ,KAAKC,YAAY,QAErC+Q,EAAS/T,YAAYkU,GACrBG,EAAarU,YAAY+T,GACzBI,EAAa5a,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBACrDtG,KAAKgO,yBACL6M,EAAW7a,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,yBAC1EsU,EAAWnU,YAAYoU,GACvBA,EAAW7a,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,qBAC1EsU,EAAWnU,YAAYoU,KAGvBA,EAAW7a,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,eAC1EsU,EAAWnU,YAAYoU,IAE3BC,EAAarU,YAAYmU,GAE7B,MAAOlO,IAEXpK,EAAapC,UAAU0Q,aAAe,WAClC,GAAI0I,GACAgC,EACAC,EACAC,EACAd,EACAxK,EAAWlQ,KAAKoG,cAAc,OAC9B8S,EAAYlZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,iBAC5DgT,GAAWtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,mBAEnDoU,EADA1a,KAAK8R,iBACS,yBAGA,iCAElB,IAAImJ,GAAkBjb,KAAKoG,cAAc,QACrCC,OACIC,MAAOoU,EAAaQ,aAAc,cAClCC,MAAO,gBAGfjC,GAAUzS,YAAYwU,EACtB,IAAIQ,GAAazb,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQ3C,MAAO,mBAC7EgT,GAAS7S,YAAYgV,GACrBvC,EAAUzS,YAAY6S,GACtBA,EAAWtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,qBACvD4S,EAAUzS,YAAY6S,GACtBA,EAAWtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBACvD4S,EAAUzS,YAAY6S,GACtBA,EAAWtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,yBAEnDiV,EADAvb,KAAKyP,YAAYe,UACF,uEAGA,qFAGfgL,EADAxb,KAAKyP,YAAYkC,SACH,6EAGA,0FAElB,IAAI+J,GAAmB1b,KAAKoG,cAAc,UAAYC,OAAS8U,MAAOnb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOiV,KAC7HvI,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,8BAC/DoV,GAAiBjV,YAAYuM,EAC7B,IAAI2I,GAAmB3b,KAAKoG,cAAc,UAAYC,OAAS8U,MAAOnb,KAAKwJ,KAAKC,YAAY,YAAaR,KAAM,SAAU3C,MAAOkV,IAChIxI,GAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,iCAC3DqV,EAAiBlV,YAAYuM,GAEzBsI,EADAtb,KAAKyP,YAAYoC,YAAc/J,oBAAkB9H,KAAKyP,YAAYoC,YACxD,iDAGA,8DAEd,IAAI+J,GAAa5b,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAOgV,IAMhF,OALAhC,GAAS7S,YAAYiV,GACrBpC,EAAS7S,YAAYkV,GACrBrC,EAAS7S,YAAYmV,GACrB1C,EAAUzS,YAAY6S,GACtBpJ,EAASzJ,YAAYyS,GACdhJ,GAEX5N,EAAapC,UAAUsN,gBAAkB,SAAUqO,EAAS7a,EAAQgC,EAAW8Y,EAAY/Y,EAAK4D,EAAQO,GACpG,GAAIzE,GAAQzC,KACR2H,GAASmE,QAAS9K,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAK0H,QAAQ,EAAOzF,KAAM,cACpFjJ,MAAK4E,eAAkB5E,KAAKiS,eAAkBjS,KAAKkS,eAMpDlS,KAAKiS,eAAgB,EACrBjS,KAAK+b,gBAAgBpU,EAAMkU,EAAS7a,EAAQgC,EAAW8Y,EAAY/Y,EAAK4D,EAAQO,IANhFlH,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMsZ,gBAAgBlN,EAAoBgN,EAAS7a,EAAQgC,EAAW8Y,EAAY/Y,EAAK4D,EAAQO,MAQ3G5E,EAAapC,UAAU6b,gBAAkB,SAAUpU,EAAMkU,EAASG,EAAahZ,EAAW8Y,EAAY/Y,EAAK4D,EAAQO,GAC/G,GAAIzE,GAAQzC,IACZ,KAAK2H,EAAK+G,QAAW1O,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAgB,CACpG,GAAI3O,GAASgb,EACTC,MAAc,GACdnQ,EAAU,EAEVA,GADA9K,EAAOqE,UAAUC,QAAQ,qBAAuB,EACtCtE,EAAO8D,cAAc,uBAAyB9D,EAAO8D,cAAc,sBAAsBkC,GAGzFhG,EAAOgG,GAEjBhH,KAAKgO,0BACLhO,KAAK0M,UAAY1M,KAAKsa,gBAE1B,IAAI5N,GAAY1M,KAAK0M,UAAU+E,WAAU,EAoBzC,IAnBA/E,EAAU4D,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,SAAWhH,KAAKkc,gBACnC,IAAxBlc,KAAKkc,gBAAwBlc,KAAK8R,kBAAoBpF,EAAU5H,cAAc,qBAC1E4H,GAAaA,EAAUmD,SAAS,IAChCnD,EAAUmD,SAAS,GAAG5B,UAAUgF,IAAI,mBAExCxE,YAAU/B,EAAU5H,cAAc,oBAAqB,aAEvD9E,KAAK0G,iBACDC,GACAkV,GAAU,EACVnP,EAAU4D,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,WAC/ChH,KAAKqT,iBAAiB3G,EAAW3J,EAAKC,EAAWkE,EAAM4E,GACvD9L,KAAKkc,eAAiB,GAGtBlc,KAAKqT,iBAAiB3G,EAAW3J,EAAKC,EAAWkE,EAAM4E,IAG/D9L,KAAKkc,kBACAlc,KAAK0G,eAAgB,CACtB,GAAIyV,GAAazP,EAAU5H,cAAc,mBACrCsX,EAAY1P,EAAU5H,cAAc,kBACpCuX,EAAa3P,EAAU5H,cAAc,uBACrCwX,EAAY5P,EAAU5H,cAAc,qBACxCqX,GAAW7L,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAKuc,YAC9DH,EAAU9L,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,MAAQhH,KAAKuc,YAC5DJ,EAAW7L,aAAa,OAAQtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAKuc,YAChEH,EAAU9L,aAAa,OAAQtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAKuc,YAC/DF,EAAW/L,aAAa,MAAOtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAKuc,YAC/DD,EAAUhM,aAAa,MAAOtQ,KAAKwC,QAAQwE,GAAK,MAAQhH,KAAKuc,YAC7Dvc,KAAKuc,aAET,GAAIV,EAAS,CACT,GAAIP,OAAU,EAEVA,GADAtb,KAAKyP,YAAY+M,aAAe1U,oBAAkB9H,KAAKyP,YAAY+M,aACzD,gBAGA,8BAEdP,EAAcjc,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAOgV,KAChE,GAAImB,WAASC,QAAS,wBAAyBlI,SAAU,oBAC/DG,SAASsH,GAChBA,EAAY3L,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,gBACxDkT,eAAaV,GAAeW,SAAU,gBAItC,KAAK,GAHD1C,GAAWlZ,EAAO8D,cAAc,gBAChC+X,EAAa3C,EAASrK,SACtBiN,EAAS,EACJnS,EAAI,EAAGgP,EAAOkD,EAAWlc,OAAQgK,EAAIgP,EAAMhP,IAC5CkS,EAAWlS,GAAGtF,UAAUC,QAAQ,sBAAwB,IACxDwX,GAAU,EAGlB,IAAI9c,KAAKyP,YAAYmC,YAAc5R,KAAKiE,iBACpC,GAAIjE,KAAK8D,aAAgB+Y,EAAWlc,OAAS,EACzCuZ,EAASzT,YAAYiG,GACrB1M,KAAKgE,aAAc,MAElB,CACD,GAAIhE,KAAKgO,wBAAyB,CAG9B,IAAK,GAFDyC,GAAQ,EACRsM,EAAiB/c,KAAK8D,WAAa,EAC9BtD,EAAI,EAAGA,EAAIuc,EAAgBvc,IAC5Bqc,EAAWrc,GAAGyN,UAAUC,SAAS,sBACjC6O,IACAtM,IAGJA,GAAQ,GACRA,IAGJoM,EADIG,EAAMhd,KAAK8D,WAAa2M,EAAQ,GACpBwM,WAAWtM,aAAajE,EAAWmQ,EAAWG,QAE7D,CACD,GAAIA,GAAMhd,KAAK8D,WAAa,CAC5B+Y,GAAWG,GAAKC,WAAWtM,aAAajE,EAAWmQ,EAAWG,IAElEhd,KAAKkE,eAAgB,MAIzBgW,GAASzT,YAAYiG,EAEzB,IAAIqN,GAAQ/Z,KAAK+G,UAAU/F,EAAOgG,IAAIqT,MAAM,EAc5C,IAbAN,EAAMtS,KAAKqV,GACX9c,KAAK+G,UAAU2F,EAAU1F,IAAM+S,EAC3B/Z,KAAK8D,YAAc,GACnB9D,KAAK4Z,mBAEJ5Z,KAAK4E,gBACN5E,KAAKqD,cAAe,EACpBrD,KAAKkd,aAAclc,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAC5DhH,KAAKqD,cAAe,EAChByY,GAAc9b,KAAKmd,oBACnBnd,KAAK8P,eAAepD,QAGvB1M,KAAK0G,eAAgB,CAClB8U,EAAc,EAEdA,GADAxb,KAAKyP,YAAYmC,WACH,iEAGA,8EAElB,IAAIwL,GAAepd,KAAKoG,cAAc,UAAYC,OAAS8U,MAAOnb,KAAKwJ,KAAKC,YAAY,cAAeR,KAAM,SAAU3C,MAAOkV,KAC1HxI,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,8BAC/D8W,GAAa3W,YAAYuM,GACzBtG,EAAU5H,cAAc,mBAAmB2B,YAAY2W,GAEnD5B,EADAxb,KAAKyP,YAAYiC,UACH,gEAGA,6EAElB,IAAI2L,GAAcrd,KAAKoG,cAAc,UAAYC,OAAS8U,MAAOnb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOkV,KACxH8B,EAAkBtd,KAAKoG,cAAc,QAAUC,OAASC,MAAO,gCACnE+W,GAAY5W,YAAY6W,GACxB5Q,EAAU5H,cAAc,mBAAmB2B,YAAY4W,GACvD3Q,EAAU5H,cAAc,mBAAmB2B,YAAYwV,QAG1D,CACD,IAAKjc,KAAK0G,eAAgB,CACtB,GAAI8U,GAAc,EAEdA,GADAxb,KAAKyP,YAAYiC,UACH,gEAGA,6EAElB,IAAI2L,GAAcrd,KAAKoG,cAAc,UAAYC,OAAS8U,MAAOnb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOkV,KACxHxI,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,gCAC/D+W,GAAY5W,YAAYuM,GACxBtG,EAAU5H,cAAc,mBAAmB2B,YAAY4W,GAE3Drc,EAAOyF,YAAYiG,GACnB1M,KAAK+G,UAAU2F,EAAU1F,KAAO,GAEpC,GAAIhH,KAAK4G,qBACA5G,KAAK0G,eAAgB,CACtB,GAAI6W,GAAU7Q,EAAU5H,cAAc,iBAGlC9E,KAAKgO,wBACI,GAAIwP,aAAWzT,MAAO/J,KAAKwJ,KAAKC,YAAY,OAAQ+K,SAAU,gBAG9D,GAAIiI,WAASlE,QAASvY,KAAKwJ,KAAKC,YAAY,OAAQ+K,SAAU,mBAEpEG,SAAS4I,GAChB7Q,EAAU5H,cAAc,uBAAuBmJ,UAAUgF,IAAI,SACzDjT,KAAK8C,aAAe9C,KAAK8C,YAAYC,KACrC0L,YAAU8O,GAAU,mBAIhC,GAAIvd,KAAKgO,0BAA4BhO,KAAK0G,eAAgB,CAItD,IAAK,GAHD2I,GAAU3C,EAAU5H,cAAc,mBAClCwK,EAAS5C,EAAU5H,cAAc,kBACjC2Y,EAAW/Q,EAAU5H,cAAc,gBAC9BtE,EAAI,EAAGA,EAAIid,EAASC,WAAW/c,OAAQH,IAC4C,QAApFkM,EAAU5H,cAAc,gBAAgB4Y,WAAWld,GAAGuF,YAAY4I,eAC7D3O,KAAK4G,mBAIN6W,EAASC,WAAWld,GAAGyN,UAAUgF,IAAI,oBAIzCwK,EAASC,WAAWld,GAAGmM,MAAMC,QAAU,MAI/C,IADkBF,EAAUuC,yBAEpBnH,oBAAkB9H,KAAK0G,kBACvBgG,EAAUhH,cAAciL,aAAa3Q,KAAKsa,eAAc,GAAMxV,cAAc,gBAAiB4H,IACzF6Q,EAAU7Q,EAAUuC,uBAAuByO,WAAW,IAC9CzP,UAAUC,SAAS,iBAC3BqP,EAAQ5Q,MAAMC,QAAU,UAG3B5M,KAAK4E,eAAe,CACrB,GAAIkV,GAAepN,EAAUuC,uBACzB0O,EAAa7D,EAAahV,cAAc,mBACxC8Y,EAAY9D,EAAahV,cAAc,iBAC3C,IAAKuK,EAAQE,SAAYD,EAAOC,QASvBvP,KAAKgO,0BACNqB,EAAQE,UACRoO,EAAWpO,SAAU,GAErBD,EAAOC,UACPqO,EAAUrO,SAAU,QAda,CACrC,GAAIsO,GAAcnR,EAAUoR,kBACxBD,IAAeA,EAAY5P,UAAUC,SAAS,iBAC9CmB,EAAUwO,EAAY/Y,cAAc,mBACpCwK,EAASuO,EAAY/Y,cAAc,kBACnC6Y,EAAWpO,QAAUF,EAAQE,QAC7BqO,EAAUrO,QAAUD,EAAOC,WAe/C,GADAvP,KAAK8C,YAAc,KACf9C,KAAK0G,eAAgB,CACrB,GAAIqX,IACAlN,YAAa,yBAA0B1B,OAAQzC,EAAU1F,GAAIhE,UAAWA,EACxEiT,aAAcjW,KAAK4G,mBAAqB7D,MAAMmT,GAElDlW,MAAKoK,QAAQ,cAAe2T,OAG5B,IAAI/d,KAAKgO,wBAAyB,CAC9B,GAAIgQ,GAAiBtR,EAAU5H,cAAc,yBACzCmZ,EAAS,GAAIxB,WAASjI,SAAUxU,KAAKwC,QAAQwE,GAAK,mBAAoBuR,QAASvY,KAAKwJ,KAAKC,YAAY,mBAClGkL,SAASqJ,GAChBC,EAAOzb,QAAQ0b,QAAU,WACrBzb,EAAMqN,eAAexC,UAAQ0Q,EAAgB,0BAEjD,IAAIG,GAAazR,EAAU5H,cAAc,qBACzCmZ,EAAS,GAAIxB,WAASjI,SAAUxU,KAAKwC,QAAQwE,GAAK,eAAgBuR,QAASvY,KAAKwJ,KAAKC,YAAY,eAC1FkL,SAASwJ,GAChBF,EAAOzb,QAAQ0b,QAAU,WACrBzb,EAAM+K,iBAAgB,EAAMF,UAAQ6Q,EAAY,sBAAuB,IAAI,QAG9E,CACD,GAAItD,GAAWnO,EAAU5H,cAAc,cACnCmZ,EAAS,GAAIG,mBACbC,MAAOre,KAAKqe,MACZ7J,SAAU,8CACVkI,QAAS,qBACT/D,WAAY3Y,KAAKwP,UAAU2E,KAAKnU,KAAM6a,GACtCxK,OAAQrQ,KAAKwP,UAAU2E,KAAKnU,KAAM6a,IAEtCoD,GAAOtJ,SAASkG,GAChBA,EAASvK,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cAG7D,IAAKzJ,KAAK4E,gBAAkB5E,KAAKkS,cAAe,CAC5C,GAAIoM,GAAQtd,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjDuX,EAAU7R,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC1DhH,MAAKoK,QAAQ,UAAY0B,QAASwS,EAAOrV,KAAM,cAAeuV,aAAcD,OAIxFjc,EAAapC,UAAUoW,kBAAoB,SAAUlE,GACjD,GAAIpS,KAAKgO,0BAA4BhO,KAAK0G,gBAAkB0L,EAAKnD,uBAAwB,CACrF,GAAIwP,GAAeze,KAAKsa,eAAc,GAAMxV,cAAc,eAC1D,IAAI2Z,EAAc,CACdrM,EAAK1M,cAAciL,aAAa8N,EAAcrM,EAC9C,IAAImL,GAAUnL,EAAKnD,uBAAuByO,WAAW,EACjDH,GAAQtP,UAAUC,SAAS,iBAC3BqP,EAAQ5Q,MAAMC,QAAU,QAE5B5M,KAAK0e,aAAatM,MAI9B9P,EAAapC,UAAUwe,aAAe,SAAUvO,GAC5C,GAAIgD,GACAI,EAAWpD,EAAKlB,uBAAuBA,sBAC3C,IAAIsE,EAAU,CAENJ,EADAI,EAASvM,GAAG1B,QAAQ,SAAW,EACpBtF,KAAKkP,QAAQqE,GAGbvT,KAAKqO,SAASkF,IAExBzL,oBAAkBqL,IAAarL,oBAAkBqL,EAASnQ,aAC3DmQ,EAASnQ,UAAY,MAEzB,IAAIsM,GAASa,EAAKlB,uBAAuBnK,cAAc,kBACnDuK,EAAUc,EAAKlB,uBAAuBnK,cAAc,kBACxDwK,GAAOqP,UAAW,EAClBtP,EAAQsP,UAAW,EACd7W,oBAAkBqL,IAAoC,OAAvBA,EAASnQ,UAIzCqM,EAAQE,SAAU,EAHlBD,EAAOC,SAAU,IAO7BjN,EAAapC,UAAUmT,iBAAmB,SAAU3G,EAAW3J,EAAKC,EAAWkE,EAAM4E,EAAS8S,GAC1F,GAAIlH,GAEA/P,EADAqJ,EAAahR,KAAKwC,QAAQwE,GAAK,UAE/B6X,EAAWnS,EAAU5H,cAAc,kBAIvC,IAHI9E,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,UACrDuZ,EAAWnS,GAEX1M,KAAK0G,eAAgB,CAYrB,GAXAiB,GACIkJ,YAAa,6BAA8B1B,OAAQzC,EAAU1F,GAC7DiP,aAAcjW,KAAK4G,mBAAqB7D,MAAMmT,GAC9ClT,UAAWA,EAAWkE,KAAMlH,KAAK8e,kBAAkB5X,GAAM,GAAQ4E,QAASA,GAE9E9L,KAAKoK,QAAQ,cAAezC,GACxB3H,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,UACrDqC,EAAKkJ,YAAc,wBAEvB7Q,KAAK+e,SAAW/e,KAAK+Q,eAAe/Q,KAAK0G,gBAErC1G,KAAKmR,QACLuG,EAAW1X,KAAK+e,SAASpX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,GAAY,GAC3DhR,KAAKgO,yBAA2B4Q,EAChC5e,KAAKgf,mCAAmCtS,EAAWgL,GAE9C1X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1DuZ,EAASnZ,cAAciL,aAAa+G,EAAUmH,EAASf,oBAGvDe,EAASpY,YAAYiR,OAIxB,IAAI1X,KAAKoR,UAAW,CACrB,GAAIC,GAAerR,KAAK+e,SAASpX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,EAC3D0G,GAAyC,IAA7BrG,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,GACzErR,KAAKgO,yBAA2B4Q,EAChC5e,KAAKgf,mCAAmCtS,EAAWgL,GAE9C1X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1DuZ,EAASnZ,cAAciL,aAAa+G,EAAUmH,EAASf,oBAGvDe,EAASpY,YAAYiR,OAIxB,IAAI1X,KAAKuR,OAAQ,CAElB,GADAmG,EAAW1X,KAAK+e,SAASpX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,GAC/ChR,KAAKgO,0BAA4B4Q,IAAmD,IAAlClS,EAAU1F,GAAG1B,QAAQ,SAEvE,IAAK,GAAI9E,GAAI,EAAGA,EAAIkX,EAAS/W,OAAQH,IAEjC,GAA6B,QAAzBkX,EAASlX,GAAGye,SAAoB,CAEhCvH,EAAWA,EAASlX,EACpB,OAIRR,KAAKgO,yBAA2B4Q,EAChC5e,KAAKgf,mCAAmCtS,EAAWgL,GAE9C1X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1DuZ,EAASnZ,cAAciL,aAAa+G,EAAUmH,EAASf,oBAIvDtM,SAAOkG,EAAUmH,OAIrBnH,GAAW1X,KAAK+e,SAASpX,EAAM3H,KAAM,WAAYgR,GAAY,GACzDhR,KAAKgO,yBAA2B4Q,EAChC5e,KAAKgf,mCAAmCtS,EAAWgL,GAE9C1X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1DuZ,EAASnZ,cAAciL,aAAa+G,EAAUmH,EAASf,oBAGvDe,EAASpY,YAAYiR,EAG7B1X,MAAK+R,uBAET,MAAOrF,IAEXpK,EAAapC,UAAU8e,mCAAqC,SAAUtS,EAAWgL,GAC7E,GACItJ,IADO1B,EAAUoR,mBAAqBpR,EAAUoR,mBAAqBpR,GACxDY,QAAQ,uBACpBZ,EAAUoR,oBAAsB1P,IACjCA,EAAQA,EAAM0P,mBAAqB1P,EAAM0P,mBAAqB1P,GAE9DA,GACAA,EAAM1I,cAAciL,aAAa+G,EAAUtJ,IAWnD9L,EAAapC,UAAUgf,aAAe,SAAUrc,EAAOL,EAASyG,GAC5D,GAAIkW,GAAa7R,UAAQ9K,EAAS,sBAC9B2E,EAAQnH,KAAKgP,eAAemQ,GAC5BC,EAAc9R,UAAQ9K,EAAS,qBAC/BiO,EAAQ,CACZ,IAAa,QAATxH,EAEA,YADA9B,EAAMpE,IAAMF,EAGhB,IAAa,cAAToG,EAcA,YAbIjJ,KAAKgO,0BACLoR,EAAc5c,EAAQkD,cAAcuJ,yBACjBmQ,EAAYnR,UAAUC,SAAS,uBAC9CkR,EAAcA,EAAYpa,iBAAiB,qBAAqBoa,EAAYpa,iBAAiB,qBAAqBrE,OAAS,IAE3Hye,GAAeA,EAAYnR,UAAUC,SAAS,sBAC9C/G,EAAQnH,KAAKkP,QAAQkQ,IAEzBjY,EAAMnE,UAAYH,GAGlBsE,EAAMnE,UAAYH,EAI1B,MAAOuc,GAAsD,OAAvCA,EAAYnQ,wBAC9BmQ,EAAcA,EAAYnQ,yBACrBjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmB0Y,EAAYnR,UAAUC,SAAS,gBACtDlO,KAAK0G,iBAAmB0Y,EAAYnR,UAAUC,SAAS,qBACnDkR,EAAYnR,UAAUC,SAAS,yBACvCuC,GAGR,IAAIvJ,GAAOC,EAAMA,MAAMsJ,GACnB1H,EAAS/I,KAAKyS,UAAUvL,EAAKW,OAC7BwX,EAASrf,KAAKsf,UAAUvW,EAAOsW,OACnC,IAAoB,SAAhBtW,EAAOE,KACP,GAAIpG,YAAiBsG,MACjBtG,EAAQ7C,KAAKuf,KAAKC,WAAW3c,EAAOwc,OAEnC,IAAIxc,YAAiBjD,OACtB,IAAK,GAAIY,GAAI,EAAGA,EAAIqC,EAAMlC,OAAQH,IAC1BqC,EAAMrC,IAAMqC,EAAMrC,YAAc2I,QAChCtG,EAAMrC,GAAKR,KAAKuf,KAAKC,WAAW3c,EAAMrC,GAAI6e,GAKtDtW,GAAO6H,aACP5Q,KAAKyf,eAAejd,EAASK,EAAOoG,IAGpCjJ,KAAKoD,YAAa,EAClBpD,KAAK0f,YAAYld,EAASK,GAC1B7C,KAAKoD,YAAa,IAG1Bd,EAAapC,UAAUuf,eAAiB,SAAUjd,EAASK,EAAOoG,GAC9D,GACI0W,GADAC,EAAUtS,UAAQ9K,EAAS,sBAE3B2E,EAAQyY,GAAW5f,KAAKgP,eAAe4Q,GACvC1P,EAAW5C,UAAQ9K,EAAS,qBAC5BiO,EAAQ,CAIZ,KAHIzQ,KAAKgZ,iBACLhZ,KAAK6f,cAAc1Y,EAAO+I,GAEvBA,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAIvJ,GAAOC,GAASA,EAAMA,MAAMsJ,EACnB,WAATxH,EACAjJ,KAAK4S,eAAiB5S,KAAKyS,UAAU5P,GAEhCqE,IACLlH,KAAK4S,eAAiB5S,KAAKyS,UAAUvL,EAAKW,OAE9C,IAAIuQ,EACJpY,MAAKiY,eAAiB/Q,GAAQlH,KAAKyS,UAAUvL,EAAKW,MAClD,IAAIiH,GAAc9O,KAAK+O,cAAc/O,KAAKkH,KACtClH,MAAK4S,iBAEDwF,EADApY,KAAK4S,eAAelJ,UACV1J,KAAK4S,eAAelJ,UAGpB1J,KAAK2J,gBAAgB3J,KAAK4S,eAAe3J,KAAO,YAGlE,IACI6W,GADAC,GAAW,KAAM,QAAS,UAAW,aAEzC,QAAQ9W,GACJ,IAAK,QACD,GAAInB,oBAAkBjF,GAAQ,CAC1B,GAAKiF,oBAAkBZ,GAQnB,MAPAA,GAAKW,MAAQ,GACbX,EAAK6C,MAAQ,GACb7C,EAAK+B,KAAO,GACZ/B,EAAKrE,MAAQ,GACbqE,EAAKyL,SAAW,OAOpBzL,GAAKW,MAAQhF,EACbqE,EAAK6C,MAAQ/J,KAAK4S,eAAe7I,MACjC7C,EAAK+B,KAAOjJ,KAAK4S,eAAe3J,KAChC/B,EAAKrE,MAAQ,GACbqE,EAAKyL,SAAWyF,EAAQ,GAAGvV,KAE/B,MACJ,KAAK,WACDid,EAAW5Y,EAAKyL,SAChBzL,EAAKyL,SAAW9P,EACZkd,EAAQza,QAAQ4B,EAAKyL,WAAa,EAClCzL,EAAKrE,SAEAkd,EAAQza,QAAQwa,IAAa,IAClC5Y,EAAKrE,MAAQ,GAEjB,MACJ,KAAK,QACDqE,EAAKrE,MAAQA,EAIrB,GAFA7C,KAAK+X,mBAAmB/X,KAAK4S,eAAgBpQ,GAC7CxC,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO+B,GACzDjJ,KAAK4S,gBAAkB5S,KAAK4S,eAAehC,eAC9B,UAAT3H,GAA6B,aAATA,GAAqB,CACzC,GAAI+W,GAAS1S,UAAQ9K,EAAS,oBAC9BxC,MAAKigB,gBAAgBD,GAAQ,GAC7B9H,SAAO8H,EAAOlb,cAAc,iBAC5B,IAAIsa,GAAcpf,KAAK+P,eAAezC,UAAQ0S,EAAQ,sBAAuBhgB,KAAK4S,eAAgB,SAAUoN,EAAOhZ,GAAIiC,EAAM/B,EACpG,cAArBlH,KAAK+S,aAA8B/S,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EACjF8Z,EAAY/Z,UAAY,mCAGxB+Z,EAAY/Z,UAAY,qCAEvBrF,KAAKgO,yBACFoR,EAAYnQ,wBAA0BmQ,EAAYnQ,uBAAuB5J,UAAUC,QAAQ,qBAAuB,IAC9G8Z,EAAY/Z,UAAUC,QAAQ,iBAAmB,IACjD8Z,EAAY/Z,WAAa,kBAEzB+Z,EAAYnQ,uBAAuB5J,UAAUC,QAAQ,sBAAwB,IAC7E8Z,EAAYnQ,uBAAuB5J,WAAa,wBAIxD+Z,EAAYnQ,wBAA0BmQ,EAAYnQ,uBAAuB5J,UAAUC,QAAQ,sBAAwB,GACnH8Z,EAAY/Z,UAAUC,QAAQ,mBAAqB,IACnD8Z,EAAY/Z,WAAa,mBAE7B,IAAIsC,IACAkJ,YAAa,kBAAmBZ,OAAQhH,EAAMkG,OAAQ6Q,EAAOhZ,GAC7DrE,OAAQ3C,KAAK2C,OAAQuE,KAAMA,EAE/ByY,IACI7T,QAAS8T,EAAQ5Y,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAKmI,OAAQ6Q,EAAOhZ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACzGnE,MAAOqE,EAAKW,MAAOoB,KAAM,SAE7BjJ,KAAKoK,QAAQ,cAAezC,GAC5B3H,KAAKoK,QAAQ,SAAUuV,KAInCrd,EAAapC,UAAUggB,YAAc,SAAU1f,EAAGmH,GAC9C,GACInF,GADAC,EAAQzC,IAGZ,IAAKA,KAAKmgB,YAAoC,gBAAfxY,GAAK9E,OAAsC,UAAd8E,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,qBAC3HlO,KAAK4S,eAAetJ,aAAetJ,KAAK4S,eAAetJ,WAAWxH,MAAQC,OAAOC,WAAahC,KAAK4S,eAAetJ,WAAWzH,IAAM,GAEvI,YADA7B,KAAKmgB,YAAa,EAoBtB,IAdI3d,EAFAmF,EAAKnF,SAAWmF,EAAKnF,QAAQyL,UAAUC,SAAS,iBAC1BvG,EACInF,QAErBmF,EAAKiE,MACAjE,EAAKiE,MAAM5K,OAGF,UAAd2G,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,oBAElEvG,EAAKyY,cAILzY,EAAKnF,QAEnB,EAGIA,EAAQ6C,UAAUC,QAAQ,UAAY,GAAK9C,EAAQ6C,UAAUC,QAAQ,YAAc,GAAK9C,EAAQ6C,UAAUC,QAAQ,WAAa,KAE/H9C,EADmBmF,EACInF,QAE3B,IAKI6W,GALA3M,EAAYY,UAAQ9K,EAAS,sBAC7B0N,EAAW5C,UAAQ9K,EAAS,qBAC5BsJ,EAAUY,GAAaA,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACnEmI,EAASe,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpDqZ,EAAc1Y,CAEd0Y,GAAY7d,SAAW6d,EAAY7d,QAAQ6C,UAAUC,QAAQ,iBAAmB,IAChF9C,EAAU6d,EAAY7d,SACtB6W,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,mBAE/F9E,KAAK4S,eAAiByG,EAAYxE,eAAewE,EAAYxW,SAEjEwW,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,mBAE/F9E,KAAK4S,eAAiB5S,KAAKyS,UAAU4G,EAAYxW,MAAM,KAG/D,IAAIA,GACAyd,CACJ,IAAI9d,EAAQ6C,UAAUC,QAAQ,YAAc,EACxCgb,EAAU9I,SAAShV,EAAQwE,GAAGgB,MAAM,YAAY,GAAI,IAC7B,YAAnBhI,KAAK0T,WACL2F,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,gBACnG9E,KAAK4S,eAAiByG,EAAYxE,eAAewE,EAAYxW,OACzD7C,KAAK4S,eAAehK,UACpByQ,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,sCAAuC,gBACtH9E,KAAK4S,eAAiB5S,KAAKyS,UAAU4G,EAAYxW,UAIrDwW,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,gBACnG9E,KAAK4S,eAAiB5S,KAAKyS,UAAU4G,EAAYxW,MAAM,KAGvDA,EADA7C,KAAK4S,eAAerH,OACZvL,KAAK4S,eAAerH,OAAO+U,KAGpB,GAAM,GACLA,OAGnB,IAAI9d,EAAQ6C,UAAUC,QAAQ,kBAAoB,EACnDzC,EAAQ2C,eAAahD,EAAS,eAAeK,UAK7C,IAFAA,EAAQ8E,EAAK9E,MAEK,UAAd8E,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,oBAAqB,CAE5FrL,EAAQd,OAAO4F,EAAKyY,cAAcvd,MAElC,IAAIsN,GAAOxI,EAAKyY,cACZG,EAAoBC,cAAYrQ,EAAMsQ,kBACtCC,EAAmBC,WAAS,UAAWC,mBAAiB5gB,KAAK6gB,QAC7D3X,OAAMrG,KAAoD,IAA1CsN,EAAKtN,MAAMyC,QAAQob,KACnC7d,EAAQ7C,KAAKuf,KAAKuB,iBAAkBzB,OAAQ,MAAOlP,EAAKtN,QAEvDqG,MAAMrG,KACP0d,EAAkB1d,MAAQA,GAE9B7C,KAAKmgB,YAAa,EAGR,UAAdxY,EAAK8E,MAAoBzM,KAAK+gB,oBAC9BC,OAAOC,cAAcjhB,KAAKkhB,OAC1BlhB,KAAKkhB,MAAQF,OAAOG,YAAY,WAAc1e,EAAM2e,YAAYtV,EAASqD,EAAQtM,EAAOrC,EAAGgC,IAAaxC,KAAK+gB,qBAG7G/gB,KAAKohB,YAAYtV,EAASqD,EAAQtM,EAAOrC,EAAGgC,KAGpDF,EAAapC,UAAUkhB,YAAc,SAAUC,EAAMC,EAAMze,EAAOrC,EAAG+gB,GACjE,GAAI9e,GAAQzC,KACR2f,GAAe7T,QAASuV,EAAMlS,OAAQmS,EAAMze,MAAOA,EAAO6L,QAAQ,EAAOzF,KAAM,QACnF+X,QAAOC,cAAcjhB,KAAKkhB,OACrBlhB,KAAK4E,cAMN5E,KAAKwhB,2BAA2B7B,EAAY4B,EAAK/gB,EAAG6gB,EAAMC,GAL1DthB,KAAKoK,QAAQ,eAAgBuV,EAAY,SAAU9Q,GAC/CpM,EAAM+e,2BAA2B3S,EAAoB0S,EAAK/gB,EAAG6gB,EAAMC,MAO/Ehf,EAAapC,UAAUshB,2BAA6B,SAAU7Z,EAAMnF,EAAShC,EAAGsL,EAASqD,GAChFxH,EAAK+G,SACN1O,KAAK0f,YAAYld,EAASmF,EAAK9E,MAAOrC,GACjCR,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAASqD,OAAQA,EAAQtM,MAAO8E,EAAK9E,MAAO6L,QAAQ,EAAOzF,KAAM,YAI/G3G,EAAapC,UAAUgU,WAAa,SAAUlN,GAC1C,IAAIhH,KAAKuD,gBAAiBvD,KAAKyD,UAA/B,CAGAzD,KAAKwD,cAAe,CAEpB,IAAIie,GAAMjc,eAAawB,EAAI,gBACvB0a,EAAOD,EAAIE,UAAYF,EAAIE,SAASnf,QAAQsC,cAAc,aAC1DiQ,EAAW0M,EAAIG,aACnBH,GAAI5e,MAAQkS,EAASlS,KACrB,IAAIgf,IACArf,QAASif,EAAIjf,QAASK,MAAOkS,EAASlS,MAAOif,cAAc,EAC3DC,iBAAkB/hB,KAAKgiB,aAAcC,aAAc,KAAMP,KAAMA,EAAM3M,SAAUA,EAAUnJ,MAAO,KAAMjG,EAAG,KAEzG8b,GAAIS,gBAAkBT,EAAI5e,OAC1B7C,KAAKqU,YAAYwN,GAErB7hB,KAAKuD,eAAgB,IAEzBjB,EAAapC,UAAUmU,YAAc,SAAU1M,GAC3C,GAAIA,EAAKma,aAAc,CACnB,GAAIha,oBAAkBH,EAAK9E,OACvB,MAEJ7C,MAAKuD,eAAgB,EACrBvD,KAAKgiB,aAAera,EAAKoN,QACzB,IAAImE,GAAY5L,UAAQ3F,EAAKnF,QAAS,mBAAqB8K,UAAQ3F,EAAKnF,QAAS,sBAC7EuG,EAA4B,iBAAnB/I,KAAK0T,UAA+B1T,KAAKyS,UAAU9K,EAAK9E,MAAM,IAAM7C,KAAKyS,UAAU9K,EAAK9E,MACrG,IAAuB,iBAAnB7C,KAAK0T,WAA8C,OAAdwF,EAAoB,CACzD,GAAIiJ,GAAUjJ,EAAUpU,cAAc,6BAClCsd,EAAM5c,eAAa2c,EAAS,eAChC,KAAIpZ,EA2BA,MA1BA,IAAoB,WAAhBA,EAAOE,KAAmB,CAK1B,GAHAmZ,EAAIvf,MAAQ8E,EAAK0a,SACjBD,EAAIE,WAEAxa,oBAAkBH,EAAK0a,UACvBF,EAAQtf,MAAQ,OAEf,CAEGiI,EAAS9K,KAAK8V,mBAAmBnO,EAAK0a,SAAS,GACnDF,GAAQtf,MAAQiI,EAEpB,OAGA,IAAKhD,oBAAkBH,EAAK9E,MAAM,IAAK,CAEnCuf,EAAIvf,MAAQ8E,EAAK9E,MAAM,GACvBuf,EAAIE,UACJ,IAAIxX,GAAS9K,KAAK8V,mBAAmBnO,EAAK9E,MAAM,GAChDsf,GAAQtf,MAAQiI,GAWhC,GAHA9K,KAAKuiB,iBAAiBrJ,GACtBlZ,KAAKwiB,aAAe,KACpBxiB,KAAKsD,kBAAmB,EACpByF,GAAUA,EAAO6H,aACjB5Q,KAAKyf,eAAe9X,EAAKnF,QAASuG,EAAOlB,MAAO,aAE/C,IAAIkB,GAAUA,EAAOH,SAAWG,EAAOH,QAAQ,GAAGgI,aACnD5Q,KAAKyf,eAAe9X,EAAKnF,QAASuG,EAAOH,QAAQ,GAAGf,MAAO,aAE1D,CAKD,IAJA,GAAI6E,GAAYY,UAAQ3F,EAAKnF,QAAS,sBAClC2E,EAAQnH,KAAKgP,eAAetC,GAC5BwD,EAAW5C,UAAQ3F,EAAKnF,QAAS,qBACjCiO,EAAQ,EACLP,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGRtJ,GAAMA,MAAMsJ,GAAO5N,MAAQ,GAC3B7C,KAAK8U,WAAW3N,EAAMA,MAAMsJ,GAAQ9I,MAIhDrF,EAAapC,UAAU4U,WAAa,SAAU5N,EAAMub,GAChD,IAAKA,EAAQ1N,SAAU,CACnB,GAAuB,iBAAnB/U,KAAK0T,UAOL,MALA,IAAiB,MADPlO,eAAaid,EAAQjgB,QAAS,gBAChCK,MACJ,OAOZ,GAAI6f,MACAjH,EAAanO,UAAQmV,EAAQjgB,QAAS,iBAC1CiZ,GAAaA,GAA0BnO,UAAQmV,EAAQjgB,QAAS,qBAChE,IAAImgB,GAASnd,eAAaid,EAAQjgB,QAAS,eACpB,kBAAnBxC,KAAK0T,WAA+C,OAAf+H,IACrCkH,EAASnd,eAAaid,EAAQjgB,QAAS,gBAE3C,IACIsJ,GADUwB,UAAQmV,EAAQjgB,QAAS,sBACjBwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACxDhH,MAAK4iB,aAAanH,EAAYkH,EAAQ7W,EAAS5E,EAAMwb,EAAUD,IAEnEngB,EAAapC,UAAU0iB,aAAe,SAAUC,EAAKC,EAAIzB,EAAM0B,EAAIC,EAAOC,GACtE,GAAIxgB,GAAQzC,IACZ,IAAI6iB,EAAK,CAEL,GAAIjP,OAAW,EAEXA,GADmB,iBAAnB5T,KAAK0T,UACOoP,EAAGjgB,MAAM,GAGV7C,KAAK4E,cAAgB5E,KAAK4H,kBAAkBkb,EAAGjgB,OAASigB,EAAGjgB,MAE1E7C,KAAK4S,eAAiB5S,KAAKyS,UAAUmB,EACrC,IAEI+L,IACA7T,QAASuV,EAAMlS,OAHJ7B,UAAQuV,EAAK,qBACN7b,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAErBkc,cAAkC,iBAAnBljB,KAAK0T,UAC/CoP,EAAGjgB,MAAM,GAAKigB,EAAGjgB,MAAO6L,QAAQ,EAAOzF,KAAM,QAEhDjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAKmjB,mBAAmBxD,EAAYqD,EAAOH,EAAKE,EAAIE,GALpDjjB,KAAKoK,QAAQ,eAAgBuV,EAAY,SAAU9Q,GAC/CpM,EAAM0gB,mBAAmBtU,EAAoBmU,EAAOH,EAAKE,EAAIE,SAOpE,CACD,GAAIG,GAAe9V,UAAQ2V,EAAKzgB,QAAS,mBACzCxC,MAAKqjB,eAAeR,EAAKO,EAAcN,EAAIzB,EAAM0B,EAAIC,EAAOC,KAGpE3gB,EAAapC,UAAUmjB,eAAiB,SAExCR,EAAKS,EAAKR,EAAIzB,EAAM0B,EAAIC,EAAOC,GAC3B,GAGItD,GAHAld,EAAQzC,IAIRsjB,IAGA3D,GAAe7T,QAASuV,EAAMlS,OAFnB7B,UAAQgW,EAAK,qBACNtc,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACNuc,cAAeT,EAAGrS,MAAO/B,QAAQ,EAAOzF,KAAM,YACvFjJ,KAAK4E,cAMN5E,KAAKwjB,sBAAsB7D,EAAYkD,EAAKG,EAAOD,EAAIE,GALvDjjB,KAAKoK,QAAQ,eAAgBuV,EAAY,SAAU9Q,GAC/CpM,EAAM+gB,sBAAsB3U,EAAoBgU,EAAKG,EAAOD,EAAIE,MAQxEjjB,KAAKyjB,iBAAiBZ,EAAKE,EAAIC,EAAOC,IAG9C3gB,EAAapC,UAAUijB,mBAAqB,SAAUxb,EAAM+a,EAAUjH,EAAYvU,EAAMub,GAOpF,IAAK,GANDvS,GAAW5C,UAAQmO,EAAY,qBAC/B2H,EAAe9V,UAAQmV,EAAQjgB,QAAS,oBAExCsJ,EADUwB,UAAQmV,EAAQjgB,QAAS,sBACjBwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpD2b,EAASnd,eAAaid,EAAQjgB,QAAS,gBACvCkhB,EAAcxT,EAASlL,iBAAiB,4BACnCxE,EAAI,EAAGA,EAAIkjB,EAAY/iB,OAAQH,IACpCgF,eAAake,EAAYljB,GAAI,WAAWiF,SAE5C,IAAKkC,EAAK+G,OAoBN1O,KAAKqjB,eAAe5H,EAAY2H,EAAcT,EAAQ7W,EAAS5E,EAAMwb,EAAUD,OApBjE,CACd,GAAI3a,oBAAkB9H,KAAK4S,gBACvB,MAMJ,IAJA8P,EAASzZ,KAAOjJ,KAAK4S,eAAe3J,KAChCiH,EAASpL,cAAc,iBACvBoC,EAAKrE,MAAQ,IAEgB,WAA7B7C,KAAK4S,eAAe3J,MAAwC,YAAnBjJ,KAAK0T,UAE9C,IADAgP,EAASzZ,KAAOjJ,KAAK4S,eAAehK,QAAQ,GAAGK,KACxCjJ,KAAK4S,eAAehK,SACvB5I,KAAK2jB,gBAAgBlI,EAAYvU,EAAMwb,EAAUD,OAIrDziB,MAAKuiB,iBAAiB9G,GACtBzb,KAAKqjB,eAAe5H,EAAY2H,EAAcT,EAAQ7W,EAAS5E,EAAMwb,EAAUD,KAO3FngB,EAAapC,UAAUqiB,iBAAmB,SAAU9G,GAChD,KAAOA,GAAcA,EAAWqC,mBAAmB7P,UAAUC,SAAS,sBAClElO,KAAKigB,gBAAgBxE,GACrBA,EAAWqC,mBAAmB8F,UAGtCthB,EAAapC,UAAUyjB,gBAAkB,SAAUlI,EAAYvU,EAAMwb,EAAUD,GAC3E,GAAIoB,IAAgB,EAChB3K,EAAY5L,UAAQmO,EAAY,iBAChCnC,EAAWtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBAAqBU,GAAI,YAAchH,KAAK8jB,mBACvG5K,GAAUvI,aAAa2I,EAAUJ,EAAUpU,cAAc,oBACzD,IAAIif,GAASzW,UAAQgM,EAAU,qBAAqBtS,GAChDwb,EAAexiB,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAI+c,EAAS,gBAAkB/jB,KAAK8jB,mBAC5GxK,GAAS7S,YAAY+b,EACrB,IACI7O,GADA7G,EAAU9M,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EAAK,QAAU,OAE3EqO,IACIG,WAAY9T,KAAK4S,eAAehK,QAChCjG,OAAQ3C,KAAK2C,OACboR,YAAa/T,KAAKwJ,KAAKC,YAAY,eACnCuK,YAAehU,KAAK4S,eAAehK,QAAQjI,OAAS,EAAKmM,EAAS,OAClEsH,OAAQpU,KAAKqU,YAAYF,KAAKnU,MAC9ByQ,MAAO,EACP6D,KAAMtU,KAAKuU,UAAUJ,KAAKnU,MAAM,IAEhCA,KAAKyU,aACLd,EAAWvT,KAAauT,EAAU3T,KAAKyU,YAE3C,IAAIjC,GAAe,GAAIkC,gBAAaf,EAEpC,IADAnB,EAAamC,SAAS,IAAMoP,EAAS,gBAAkB/jB,KAAK8jB,kBACxD9jB,KAAK4E,eAAkB5E,KAAKiY,gBAAkBjY,KAAKiY,eAAerH,cAClE5Q,KAAK4H,kBAAkBV,EAAKW,SAAW7H,KAAK4H,kBAAkB5H,KAAKiY,eAAepQ,OAElF,IAAK,GADDmc,GAAWhkB,KAAK4S,eAAehK,QAC1BpI,EAAI,EAAGA,EAAIwjB,EAASrjB,OAAQH,IACjC,GAAI0G,EAAKW,QAAUmc,EAASxjB,GAAGqH,OAASX,EAAKW,MAAMvC,QAAQ0e,EAASxjB,GAAGqH,MAAQ7H,KAAK+H,YAAc,EAAG,CACjGyK,EAAa3P,MAAQmhB,EAASxjB,GAAGqH,MACjC7H,KAAK4S,eAAiBoR,EAASxjB,GAC/BqjB,GAAgB,CAChB,OAIZ7jB,KAAK8jB,mBACL9jB,KAAKwiB,aAAeA,EAEpBC,EAAQ1N,SAAW0N,EAAQ1N,UACtB8O,GAAiB7jB,KAAK4S,eAAehK,WACjCib,GAAiB7jB,KAAK4E,gBACvB4N,EAAa3P,MAAQ,MAEzB7C,KAAK4S,eAAiB5S,KAAK4S,eAAehK,QAAQ,IAEtD5I,KAAKiY,eAAiBjY,KAAK4S,eACtB5S,KAAK4S,eAAehK,SACrB5I,KAAKyjB,iBAAiBnK,EAAUpS,EAAMwb,EAAUD,IAGxDngB,EAAapC,UAAUsjB,sBAAwB,SAAU7D,EAAYlE,EAAYiH,EAAUxb,EAAMub,GAC7F,IAAK9C,EAAWjR,OAAQ,CACpB,GAAI0U,GAAe9V,UAAQmV,EAAQjgB,QAAS,oBACxCkX,EAAU0J,EAAatF,mBACvBzE,EAAc7T,eAAaid,EAAQjgB,QAAS,gBAC5Csd,EAAW5Y,EAAKyL,SAAWzL,EAAKyL,SAAS8E,WAAW9I,cAAgB,EACxE+T,GAAS/P,SAAW0G,EAAYxW,MAAM4U,UACtC,IAAIwM,GAAWvB,EAAS/P,SAAShE,aAYjC,IAXI+T,EAAS/P,SAAShE,cAAcrJ,QAAQ,YAAc,GAAMod,EAAS/P,SAAShE,cAAcrJ,QAAQ,OAAS,GAC1God,EAAS/P,SAAShE,cAAcrJ,QAAQ,YAAc,GACzDmW,EAAa2H,EAAanU,uBAC1ByT,EAASzZ,KAAO/B,EAAK+B,MACjByZ,EAAS/P,SAAShE,cAAcrJ,QAAQ,MAAQ,GAAKwa,EAASxa,QAAQ,MAAQ,KAC9E4B,EAAKrE,WAGkB,gBAAfqE,GAAKrE,OAAqC,OAAfqE,EAAKrE,QAC5CqE,EAAKrE,MAAQqE,EAAKrE,MAAMlC,OAAS,EAAIuG,EAAKrE,MAAM,GAAmB,WAAdqE,EAAK+B,KAAoB,EAAI,IAElFwZ,EAAQV,iBAAkB,CAC1B,GAAImC,GAAYzB,EAAQV,iBAAiBlf,MAAM4U,WAAW9I,eACrDuV,EAAU5e,QAAQ,YAAc,IAAM4e,EAAU5e,QAAQ,OAAS,GAAM4e,EAAU5e,QAAQ,SAAW,GACjG4e,EAAU5e,QAAQ,UAAY,IAAO4e,EAAU5e,QAAQ,YAAc,KACzEmW,EAAa2H,EAAanU,uBAC1ByT,EAASzZ,KAAO/B,EAAK+B,MAO7B,GAJK6W,EAASxa,QAAQ,OAAS,GAAKwa,EAASxa,QAAQ,MAAQ,GAAO2e,EAAS3e,QAAQ,OAAS,GACvF2e,EAAS3e,QAAQ,MAAQ,IAC5BmW,EAAa,MAEbiH,EAAS/P,SAASrN,QAAQ,SAAW,GAAMod,EAAS/P,SAASrN,QAAQ,UAAY,EAAI,CACrF,GAAI6e,GAAaf,EAAa1d,cAAcZ,cAAc,iBACtD4e,EAAcS,EAAWrf,cAAc,2BACvC4e,GACAle,eAAake,EAAa,WAAWje,UAEhCqa,EAASxa,QAAQ,OAAS,IAC/Boe,EAAcS,EAAWrf,cAAc,gBAEnCU,eAAake,EAAa,WAAWje,UAG7CqB,eAAaqd,GAAa,UAC1B1V,YAAU0V,GAAa,UAEvBzK,GAAW1Z,KAAKyS,UAAUvL,EAAKW,OAAO6P,WACtC+D,EAAa2H,EAAanU,wBAEE,IAA5ByK,EAAQ7J,SAASlP,SACjB8a,EAAa2H,EAAanU,wBAE9BjP,KAAKyjB,iBAAiBhI,EAAYvU,EAAMwb,EAAUD,KAG1DngB,EAAapC,UAAUujB,iBAAmB,SAAUhI,EAAYvU,EAAMwb,EAAUD,GAC5E,GAEIE,GACAyB,EACAC,EAJAjB,EAAe9V,UAAQmV,EAAQjgB,QAAS,mBAK5C,IAAIiZ,EAQA,GAPA2H,EAAe3H,EAAWqC,mBACtBrC,EAAWxN,UAAUC,SAAS,uBAC9BwU,EAASzZ,KAAOjJ,KAAK4S,eAAe3J,KAEpCma,EADQA,EAAanV,UAAUC,SAAS,qBACjBkV,EAAatF,mBAAqBsF,GAE7D3U,YAAU2U,GAAe,cACrBA,EAAakB,kBAAmB,CAChC3B,EAASnd,eAAa4d,EAAate,cAAc,mBAAoB,gBACrE4d,EAAS/P,SAAWgQ,EAAO9f,KAC3B,IAAI0hB,OAAW,EAEXA,GADmB,iBAAnBvkB,KAAK0T,UACMlO,eAAaiW,EAAW3W,cAAc,mBAAoB,gBAG1DU,eAAaiW,EAAW3W,cAAc,mBAAoB,gBAEzE4d,EAASzZ,KAA0B,iBAAnBjJ,KAAK0T,UAA+B1T,KAAKyS,UAAU8R,EAAS1hB,MAAM,IAAIoG,KAClFjJ,KAAKyS,UAAU8R,EAAS1hB,OAAOoG,IACnC,IAAI8L,GAAW0N,EAAQ1N,QACF,MAAjB4N,EAAO9f,OACP7C,KAAKwkB,aAAapB,EAAcrO,EAAU0N,EAAQV,kBAAkB,EAAM7a,EAAMwb,EAAUD,EAAQjgB,aAGrG,CACD,GAAIuhB,GAASzW,UAAQ8V,EAAc,qBAAqBpc,EACxDqd,GAAUrkB,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAI+c,EAAS,kBAC5EX,EAAa3c,YAAY4d,GACrBrkB,KAAK4S,eAAelJ,UACpB0a,EAAepkB,KAAK4S,eAAelJ,UAE9B+Y,EAAQ1N,WACbqP,EAAepkB,KAAK2J,gBAAgB3J,KAAK4S,eAAe3J,KAAO,YAEnE,IACIwb,GADA3X,EAAU9M,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EAAK,QAAU,OAEvE4B,GAAKyL,UACLyR,EAAatb,QAAQ,SAAU+Q,GACvB,SAAWA,IAA4B,gBAAdA,GAAIhX,OAAsBgX,EAAIhX,MAAM8L,gBAAkBzH,EAAKyL,SAAShE,gBAC7F8V,EAAa5K,EAAIhX,QAI7B,IAAIA,GAAQ4hB,GAA0BL,EAAa,GAAGvhB,MAClD6hB,EAAS,CACR1kB,MAAK2kB,qBACN9hB,EAAQ,GACR6hB,GAAU,IAEV1kB,KAAK4E,eAAkB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKkS,iBAC3ErP,EAAQqE,GAAQA,EAAKyL,SAAWzL,EAAKyL,SAAoB9P,EAE7D,IAAI+hB,OAAc,EAClBA,IACI9Q,WAAYsQ,EACZzhB,QAAUC,KAAM,MAAOC,MAAO,SAC9BkR,YAAa/T,KAAKwJ,KAAKC,YAAY,kBACnCuK,YAAeoQ,EAAazjB,OAAS,EAAKmM,EAAS,OACnDsH,OAAQpU,KAAKqU,YAAYF,KAAKnU,MAC9ByQ,MAAOiU,EACP7hB,MAAOA,EACPyR,KAAMtU,KAAKuU,UAAUJ,KAAKnU,MAAM,IAEhCA,KAAK6kB,gBACLD,EAAcxkB,KAAawkB,EAAa5kB,KAAK6kB,gBAE9B,GAAInQ,gBAAakQ,GACvBjQ,SAAS,IAAMoP,EAAS,gBACrCrB,EAAS/P,SAAYzL,GAA0B,KAAlBA,EAAKyL,WAAoB7K,oBAAkBZ,EAAKyL,UAAazL,EAAKyL,SAAWyR,EAAa,GAAGvhB,MACtH7C,KAAK4E,gBACL8d,EAASzZ,KAAOjJ,KAAK4S,eAAe3J,KACpCyZ,EAAS/P,SAAWzL,EAAKyL,UAExB7K,oBAAkBjF,IAAoB,KAAVA,EAGxB7C,KAAK6T,iBAAmB7T,KAAK2kB,oBAClC3kB,KAAKwkB,aAAapB,EAAcpjB,KAAK4S,eAAgB6P,EAAQV,kBAAkB,EAAO7a,EAAMwb,EAAUD,EAAQjgB,SAH9GxC,KAAKwkB,aAAapB,EAAcpjB,KAAK4S,eAAgB6P,EAAQV,kBAAkB,EAAO7a,EAAMwb,EAAUD,EAAQjgB,SAOrHxC,KAAK4E,eACN5E,KAAK0f,YAAY+C,EAAQjgB,QAASigB,EAAQf,OAGlDpf,EAAapC,UAAUqU,UAAY,SAAUuQ,EAASnd,GAC9C3H,KAAK4P,WACLnB,YAAU9G,EAAKod,MAAMviB,SAAU,SAE/BsiB,IACA9kB,KAAKwD,cAAe,IAG5BlB,EAAapC,UAAU+f,gBAAkB,SAAUjf,EAAQgR,GAKvD,IAAK,GAJDxP,GAAUwP,EAAiBhR,EAASA,EAAO8c,mBAC3CkH,EAAexiB,EAAQwC,iBAAiB,mBACxCigB,EAAaziB,EAAQwC,iBAAiB,gCACtC4D,EAAU5I,KAAK4I,QACVpI,EAAI,EAAGsJ,EAAMkb,EAAarkB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACrD,GAAIwkB,EAAaxkB,GAAGyN,UAAUC,SAAS,aACnC1I,eAAawf,EAAaxkB,GAAI,WAAWiF,UACzCyS,SAAO7H,SAAO,SAAW2U,EAAaxkB,GAAGwG,GAAIxE,QAE5C,IAAIwiB,EAAaxkB,GAAGyN,UAAUC,SAAS,kBACpClO,KAAKgZ,iBAAmBgM,EAAaxkB,GAAGkF,cAAcL,UAAUC,QAAQ,cAAgB,GACxFE,eAAawf,EAAaxkB,GAAGkF,cAAe,WAAWD,UAE3DD,eAAawf,EAAaxkB,GAAI,gBAAgBiF,cAE7C,IAAIuf,EAAaxkB,GAAGyN,UAAUC,SAAS,WACxC1I,eAAawf,EAAaxkB,GAAI,SAASiF,cAEtC,IAAIuf,EAAaxkB,GAAGyN,UAAUC,SAAS,oBACxC1I,eAAawf,EAAaxkB,GAAI,kBAAkBiF,UAChDyS,SAAO7H,SAAO,SAAW2U,EAAaxkB,GAAGwG,GAAIxE,QAE5C,IAAIwiB,EAAaxkB,GAAGyN,UAAUC,SAAS,gBACxC1I,eAAawf,EAAaxkB,GAAI,cAAciF,cAE3C,IAAIuf,EAAaxkB,GAAGyN,UAAUC,SAAS,iBACxC1I,eAAawf,EAAaxkB,GAAI,eAAeiF,cAE5C,IAAIuf,EAAaxkB,GAAG6E,UAAUC,QAAQ,eAAiB,EAExD,IAAK,GADDgW,GAAU0J,EAAaxkB,GAAG6E,UACrBsF,EAAI,EAAGgP,EAAO/Q,EAAQjI,OAAQgK,EAAIgP,EAAMhP,IAC7C,GAAI/B,EAAQ+B,GAAG+M,UAAY4D,EAAQhW,QAAQsD,EAAQ+B,GAAG9C,QAAU,EAAG,CAC/D7H,KAAKklB,gBAAgBtc,EAAQ+B,GAAIqa,EAAaxkB,GAAGwG,GACjD,OAIRf,SAASqG,eAAe0Y,EAAaxkB,GAAGwG,KACxCkR,SAAO8M,EAAaxkB,IAG5B,IAAK,GAAIA,GAAI,EAAGsJ,EAAMmb,EAAWtkB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACnD,GAAIykB,EAAWzkB,GAAG6E,UAAUC,QAAQ,eAAiB,EAEjD,IAAK,GADDgW,GAAU2J,EAAWzkB,GAAG6E,UACnBsF,EAAI,EAAGgP,EAAO/Q,EAAQjI,OAAQgK,EAAIgP,EAAMhP,IAC7C,GAAI/B,EAAQ+B,GAAG+M,UAAY4D,EAAQhW,QAAQsD,EAAQ+B,GAAG9C,QAAU,EAAG,CAC/D7H,KAAKklB,gBAAgBtc,EAAQ+B,GAAIsa,EAAWzkB,GAAGwG,GAC/C,OAIZkR,SAAO+M,EAAWzkB,IAGtB,IAAK,GADD2kB,GAAkB3iB,EAAQwC,iBAAiB,+BACtCxE,EAAI,EAAGsJ,EAAMqb,EAAgBxkB,OAAQH,EAAIsJ,EAAKtJ,IACnD0X,SAAOiN,EAAgB3kB,KAG/B8B,EAAapC,UAAUglB,gBAAkB,SAAUnc,EAAQqc,GACvD,GAAI1N,EACJ,IAA+B,gBAApB3O,GAAO2O,cAAqDxB,KAA5BnN,EAAO2O,SAASjS,QAA3D,CAMA,GAAI4f,IALA3N,EAAW3O,EAAO2O,UAKFjS,OACpB,IAAIiS,EAASjS,QAAS,CAClB,GAAI6f,OAAmB,EACnBrf,UAASqG,eAAe8Y,KACxBE,EAAmBhY,UAAQrH,SAASqG,eAAe8Y,GAAS,iBAAiBpgB,iBAAiB,gBAE9E,gBAATqgB,IACPA,EAAO1E,WAAS0E,EAAMrE,UACfnZ,MAAOkB,EAAOlB,MAAO0d,UAAWH,EAAQI,SAAUF,IAGzD5N,EAASjS,SAAUoC,MAAOkB,EAAOlB,MAAO0d,UAAWH,EAAQI,SAAUF,OAUjFhjB,EAAapC,UAAUulB,UAAY,SAAU5d,GACzC,GAEIhF,GAFA6iB,KACA5a,KAEA6a,IACA3lB,MAAK+H,UAAUpH,OAAS,IACxBglB,EAAY9d,EAAMG,MAAMhI,KAAK+H,WAEjC,IAAI+L,GAAa9T,KAAKkI,QACtB,IAAIlI,KAAKkI,SAAS,GACd,IAAK,GAAI1H,GAAI,EAAG2Z,EAAOrG,EAAWnT,OAAQH,EAAI2Z,EAAM3Z,IAAK,CACrD,GAAIoK,KACJ,IAAI+a,EAAUhlB,OAAS,EAGnB,IAAK,GAFDilB,GAAU9R,EAAWtT,GACrBqlB,MAAW,GACNlb,EAAI,EAAGgP,EAAOgM,EAAUhlB,OAAQgK,EAAIgP,EAAMhP,IAC/Ckb,EAAWF,EAAUhb,GACjBgb,EAAUhlB,SAAYgK,EAAI,GAC1B9H,EAAQ+iB,EAAQ,GAAKC,GACjB9jB,OAAO6jB,EAAQ,GAAKC,MAAeD,EAAQ,GAAKC,IAAaD,EAAQ,GAAKC,GAAY,GAAM,IAC5FhjB,EAAQ+iB,EAAQ,GAAKC,GAAUpO,aAInCmO,EAAUA,EAAQ,GAAKC,OAK/BhjB,GAAQiR,EAAWtT,GAAG,GAAKqH,GACvB9F,OAAO+R,EAAWtT,GAAG,GAAKqH,MAAYiM,EAAWtT,GAAG,GAAKqH,IAAUiM,EAAWtT,GAAG,GAAKqH,GAAS,GAAM,IACrGhF,EAAQiR,EAAWtT,GAAG,GAAKqH,GAAO4P,WAGpC5U,KAAS6iB,KACXA,EAAS,GAAK7iB,GAAS,EACnB8iB,EAAUhlB,OAAS,EACnBX,KAAK8lB,mBAAmBlb,EAAM+a,EAAW9iB,GAGzC+H,EAAK,GAAK/C,GAAShF,EAEvBiI,EAAOrD,KAAKmD,IAIxB,MAAOE,IAEXxI,EAAapC,UAAU4lB,mBAAqB,SAAUjM,EAAK8L,EAAW9iB,GAGlE,IAAK,GAFD5B,GACA8kB,EAAYJ,EAAUhlB,OAAS,EAC1BqlB,EAAI,EAAGA,EAAID,IAAaC,GAC7B/kB,EAAM0kB,EAAUK,KACHnM,KACTA,EAAI,GAAK5Y,OAEb4Y,EAAMA,EAAI,GAAK5Y,EAEnB4Y,GAAI8L,EAAUI,IAAcljB,GAEhCP,EAAapC,UAAU+lB,kBAAoB,SAAUnS,EAAYjM,GAuC7D,IAAK,GAtCD6d,MACA5a,KACAob,KACArjB,EAAQ,GACRsjB,EAAWte,EAAMvC,QAAQtF,KAAK+H,WAiC9Bqe,EAASpmB,KACJQ,EAAI,EAAG2Z,EAAOrG,EAAWnT,OAAQH,EAAI2Z,EAAM3Z,KAjCtC,SAAUA,EAAG2Z,GACvBtX,EAAQ,GACS,IAAbsjB,EACAtjB,EAAQiR,EAAWtT,GAAG,GAAKqH,IAG3Bqe,EAAOre,EAAMG,MAAMoe,EAAOre,YAErBe,QAAQ,SAAUtG,GAEfK,EADAA,EACQA,EAAM,GAAKL,GAGXsR,EAAWtT,GAAG,GAAKgC,KAInCT,OAAO+R,EAAWtT,GAAG,GAAKqH,MAAYiM,EAAWtT,GAAG,GAAKqH,IAAUiM,EAAWtT,GAAG,GAAKqH,GAAS,GAAM,IACrGhF,EAAQiR,EAAWtT,GAAG,GAAKqH,GAAO4P,WAEtC,IAAI7M,KACE/H,KAAS6iB,KACXA,EAAS,GAAK7iB,GAAS,EACN,IAAbsjB,EACAvb,EAAK,GAAK/C,GAAShF,EAGnB+H,EAAKsb,EAAKA,EAAKvlB,OAAS,IAAMkC,EAElCiI,EAAOrD,KAAKmD,KAKRpK,EAEZ,OAAOsK,IAEXxI,EAAapC,UAAUmmB,kBAAoB,SAAUnf,EAAM8I,EAAUxP,EAAG8lB,EAAe/a,GACnF,GACIgb,GADAC,GAAY,EAEZC,GAAW,CACfzmB,MAAK0D,iBAAkB,EACnB1D,KAAKkI,SAAS,IACVzI,OAAO6I,KAAKtI,KAAKkI,SAAS,IAAI5C,QAAQ4B,EAAKW,QAAU,IACrD2e,GAAY,EACZD,EAAKvmB,KAAKimB,kBAAkBjmB,KAAKkI,SAAUhB,EAAKW,QAGxD2e,GAAYtf,EAAK0B,SAAkB4d,GAC9BxmB,KAAKkI,SAASvH,QAAU4K,EAAO5K,SAChC8lB,GAAW,EAEf,IAAIC,EACJA,IACI5S,WAAY2S,EAAWlb,EAAUib,EAAYD,EAAKvmB,KAAK2mB,YACvDC,MAAO,GAAIC,UAAO3f,EAAKW,QACvBlF,QAAUC,KAAM5C,KAAK8mB,aAAajf,MAAOhF,MAAO7C,KAAK8mB,aAAajf,OAClEkM,YAAa/T,KAAKwJ,KAAKC,YAAY,eACnC5G,MAAOyjB,EACPS,KAAM,WACNC,MAAO,OACP5S,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMQ,GACpCyT,MAAOjU,KAAKinB,WAAW9S,KAAKnU,KAAMQ,GAClC0mB,YAAalnB,KAAKmnB,gBAAgBhT,KAAKnU,KAAMgQ,EAAW,YAAcxP,GACtE8T,KAAMtU,KAAKuU,UAAUJ,KAAKnU,MAAM,IAEhCA,KAAKonB,YAAcpnB,KAAKonB,WAAWC,mBACnCX,EAAmBtmB,KAAasmB,EAAkB1mB,KAAKonB,WAAWC,kBAEtE,IAAIC,GAAiB,GAAIhjB,eAAYoiB,EACrCY,GAAe3S,SAAS,IAAM3E,EAAW,YAAcxP,GACvDR,KAAK0f,YAAY4H,EAAe9kB,QAAS8jB,EAAe,IAE5DhkB,EAAapC,UAAUinB,gBAAkB,SAAUnX,EAAUrI,GACzD,GAAI3H,KAAK8T,qBAAsByT,eAAa,CACxC,GAAI/kB,GAAUyD,SAASqG,eAAe0D,GAClCqJ,EAAc7T,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAuC,iBAAnB9E,KAAK0T,UAA+B,eAAiB,eACrI,kBAAnB1T,KAAK0T,UACL1T,KAAK4S,eAAiB5S,KAAKyS,UAAU4G,EAAYxW,MAAM,IAGvD7C,KAAK4S,eAAiByG,EAAYxE,eAAewE,EAAYxW,MAEjE,IAAIA,GAAQ7C,KAAK4S,eAAe/K,MAC5B2e,GAAY,CACZxmB,MAAKkI,SAAS,KACVzI,OAAO6I,KAAKtI,KAAKkI,SAAS,IAAI5C,QAAQzC,IAAU,IAChD2jB,GAAY,GAGD,IADF3jB,EAAMyC,QAAQtF,KAAK+H,YACZ/H,KAAK0D,kBACrB8iB,GAAY,IAGfA,IACD7e,EAAK+G,QAAS,EACd1O,KAAKwnB,oBAAoBhlB,EAASK,MAI9CP,EAAapC,UAAUsnB,oBAAsB,SAAUhlB,EAASK,GAC5D7C,KAAKynB,mBAAmBjlB,EAASK,IAErCP,EAAapC,UAAUunB,mBAAqB,SAAUjlB,EAASK,GAC3D,GACI6kB,GADAjlB,EAAQzC,KAER2nB,EAAW,GAAIC,YACfhd,EAAO5K,KAAK2mB,YAAYkB,cAAa,GAAIhB,UAAQxW,OAAOxN,IACxDilB,EAAiBtiB,eAAahD,EAAS,cAC3CslB,GAAeC,cACf/nB,KAAKgoB,cAAc1a,UAAQ9K,EAAS,2BAA2BkD,eAC/DuiB,cAAY3a,UAAQ9K,EAAS,2BAA2BkD,eACxDkF,EAAKsd,KAAK,SAAUviB,GAEZ+hB,EADA/hB,EAAEwiB,QAAUxiB,EAAEwiB,OAAOrd,OACTnF,EAAEwiB,OAAOrd,OAGTnF,EAAEmF,OAElBrI,EAAMyF,SAAWwF,SAAOjL,EAAMyF,SAAUwf,MAAe,GACvDI,EAAehU,WAAarR,EAAMwjB,kBAAkBxjB,EAAMyF,SAAUrF,GACpEJ,EAAMiB,iBAAkB,EACxBqkB,cAAYza,UAAQ9K,EAAS,2BAA2BkD,iBACzD0iB,MAAM,SAAUziB,GACfgiB,EAASU,OAAO1iB,MAGxBrD,EAAapC,UAAU8nB,cAAgB,SAAUxlB,GAC7C,GAAI8lB,GAActoB,KAAKoG,cAAc,QAAUC,OAASC,MAAO,iBAC/D9D,GAAQiE,YAAY6hB,GACpBN,iBAAgBhnB,OAAQsnB,EAAatB,MAAOuB,UAAQC,SAAW,OAAS,UAE5ElmB,EAAapC,UAAU+mB,WAAa,SAAUzmB,EAAGmH,GAC7C,GAAInF,GAAUyD,SAASqG,eAAe3E,EAAKod,MAAMviB,QAAQwE,GAAGmH,QAAQ,SAAU,IAC9E,IAAI3L,EAAS,CACT,GAAIimB,GAAKjjB,eAAahD,EAAS,cAC/B,IAAIimB,EAAI,CACJ,GAAI5lB,GAAQ4lB,EAAG5lB,KACf7C,MAAK0f,YAAYld,EAASK,EAAOrC,MAI7C8B,EAAapC,UAAUwoB,gBAAkB,SAAU1nB,EAAQ+T,EAAU7N,EAAMwb,GACvE,GAAIiG,GAAYrb,UAAQtM,EAAQ,qBAC5B4nB,EAAeD,EAAU3jB,iBAAiB,eAC1CyW,EAAakN,EAAU7jB,cAAc,kCACrC6d,EAA4B,iBAAnB3iB,KAAK0T,UAA+BlO,eAAaiW,EAAY,gBACpEjW,eAAamjB,EAAU7jB,cAAc,kCAAmC,gBAC1EiE,EAA4B,iBAAnB/I,KAAK0T,UAA+B1T,KAAKyS,UAAUkQ,EAAO9f,MAAM,IAAM7C,KAAKyS,UAAUkQ,EAAO9f,MACzG,IAAiC,gBAAtBkS,GAAS2C,cAAqDxB,KAA5BnB,EAAS2C,SAASmR,MAAqB,CAChF,GAAIlhB,IACAT,KAAMA,EAAMiI,OAAQwZ,EAAU3hB,GAAI2L,SAAU+P,EAAS/P,SAAU9K,MAAOkB,EAAOlB,MAC7EgJ,YAAa,wBAEjB7Q,MAAKoK,QAAQ,cAAezC,OAE3B,CACD,GAAI+P,GAAW3C,EAAS2C,QACM,iBAAnBA,GAASmR,MAChBlI,WAASjJ,EAASmR,MAAO7H,SACrBwE,SAAUoD,EAAajoB,OAAS,EAAIioB,EAAeA,EAAa,GAAIrd,OAAQrE,EAAKrE,MACjF8P,SAAU+P,EAAS/P,SAAU9K,MAAOkB,EAAOlB,MAAOiM,WAAY/K,EAAOwC,SAGvC,kBAAtBwJ,GAAS2C,UACrB3C,EAAS2C,SAASmR,OACdrD,SAAUoD,EAAajoB,OAAS,EAAIioB,EAAeA,EAAa,GAChErd,OAAQrE,EAAKrE,MAAO8P,SAAU+P,EAAS/P,SAAU9K,MAAOkB,EAAOlB,MAAOiM,WAAY/K,EAAOwC,WAKzGjJ,EAAapC,UAAU0hB,YAAc,SAAU5R,GAC3C,GAAIuU,GAAW/e,eAAaS,SAASqG,eAAe0D,EAAW,cAAe,gBAC1E8Y,EAAiB9oB,KAAKwC,QAAQsC,cAAc,IAAMkL,EACtD,IAAuB,iBAAnBhQ,KAAK0T,UACL6Q,EAAW/e,eAAaS,SAASqG,eAAe0D,EAAW,cAAe,oBAEzE,IAAI8Y,EAAgB,CACrB,GAAIC,GAAkBD,EAAe9jB,iBAAiB,qBACtD,IAAI+jB,EAAgBpoB,OAAS,EAAG,CAC5B,GAAIqoB,GAAkBD,EAAgBA,EAAgBpoB,OAAS,GAAGmE,cAAc,kBAChFyf,GAAW/e,eAAawjB,EAAiB,iBAGjD,MAA0B,iBAAnBhpB,KAAK0T,UAA+B1T,KAAKyS,UAAU8R,EAAS1hB,MAAM,IAAM7C,KAAKyS,UAAU8R,EAAS1hB,QAE3GP,EAAapC,UAAU+oB,gBAAkB,SAAUjZ,EAAUkZ,EAAaC,GACtE,GAAIpU,GAAW/U,KAAK4hB,YAAY5R,EAChC,IAAIlI,oBAAkBiN,EAASlS,OAC3B,MAAOsmB,GAAWD,GAAe,EAAG,GAAK,EAAIA,KAAmB,EAEpE,IAAIA,GACA,KAAMnU,EAASlS,gBAAiBjD,QAC5B,OAAQmV,EAASlS,WAIrB,IAAIkS,EAASlS,gBAAiBjD,OAC1B,MAAOmV,GAASlS,MAAM,EAG9B,OAAOkS,GAASlS,OAEpBP,EAAapC,UAAUkpB,kBAAoB,SAAUpZ,EAAU9I,EAAMyL,EAAUqK,EAAKqM,GAChF,GAAIC,GAEAhD,EADAiD,EAAavpB,KAAK4hB,YAAY5R,GAE9BwZ,EAA6C,gBAAxBD,GAAW7R,QAOpC,IALI4O,EADAtmB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKypB,UAAYD,GAA6B,KAAftiB,EAAKrE,MACzFqE,EAAKrE,MAGL7C,KAAKipB,gBAAgBjZ,GAAU,GAAO,GAExC,OAAb2C,GAAkC,UAAbA,IAA0B3S,KAAKkI,SAASvH,SAAU4oB,EAAWhe,OAYlF,CACgB,OAAboH,GAAkC,UAAbA,IAGrB2T,GAFAgD,EAAetpB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKoD,EAAKrE,MACrF7C,KAAKipB,gBAAgBjZ,GAAU,GAAM,IACbvE,KAAK,MAEpB,YAAbkH,GAAuC,eAAbA,GACtB2T,EAAc3lB,OAAS,IACvB2lB,EAAgBA,EAActJ,GAGtC,IAAI0M,OAAS,EACbA,IACI3V,YAAa/T,KAAKwJ,KAAKC,YAAY,eACnCkgB,MAAO3pB,KAAKkgB,YAAY/L,KAAKnU,KAAMgd,IAEnChd,KAAKonB,YAAcpnB,KAAKonB,WAAWwC,eACnCF,EAAStpB,KAAaspB,EAAQ1pB,KAAKonB,WAAWwC,cAElD,IAAIC,GAAW,GAAIC,WAAQJ,EAC3BG,GAASlV,SAAS,IAAM3E,EAAW,YAAcgN,GACjD6M,EAAShnB,MAAQyjB,EACjBuD,EAASvH,eAjCTgH,GAAetpB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKypB,SAAYviB,EAAKrE,MACtG7C,KAAKipB,gBAAgBjZ,GAAU,GAAM,GACzChQ,KAAKqmB,kBAAkBkD,EAAYvZ,EAAUgN,EAAKsM,EAAaC,EAAWhe,QACjD,aAArBvL,KAAK+S,aAA8B/S,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EACjF+jB,EAAY1c,MAAMqa,MAAQ,QAG1BqC,EAAY1c,MAAMqa,MAAQ,KAC1BqC,EAAY1c,MAAMod,SAAW,UA4BzCznB,EAAapC,UAAU8pB,kBAAoB,SAAUha,EAAU9I,EAAMyL,EAAUqK,EAAKqM,EAAatU,EAAUpU,GACvG,GAAI4oB,GAAavpB,KAAK4hB,YAAY5R,GAC9BwZ,EAA6C,gBAAxBD,GAAW7R,SAChC4R,EAAetpB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKypB,UAAYD,GAC/E,gBAAftiB,GAAKrE,MAAsBqE,EAAKrE,MAAQ7C,KAAKipB,gBAAgBjZ,GAAU,GAAO,EACzF,IAAkB,OAAb2C,GAAkC,UAAbA,IAA0B3S,KAAKkI,SAASvH,SAAU4oB,EAAWhe,OAYlF,GAAiB,OAAboH,GAAkC,UAAbA,EAAsB,CAGhD,GAAIsX,IAFJX,EAAetpB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKoD,EAAKrE,MACrF7C,KAAKipB,gBAAgBjZ,GAAU,GAAM,IAChBvE,KAAK,KAC1Bye,MAAS,EACbA,IACInW,YAAa/T,KAAKwJ,KAAKC,YAAY,eACnCkgB,MAAO3pB,KAAKkgB,YAAY/L,KAAKnU,KAAMgd,IAEnChd,KAAKonB,YAAcpnB,KAAKonB,WAAWwC,eACnCM,EAAS9pB,KAAa8pB,EAAQlqB,KAAKonB,WAAWwC,cAElD,IAAID,GAAQ,GAAIG,WAAQI,EACxBP,GAAMhV,SAAS,IAAM3E,EAAW,YAAcgN,GAC9C2M,EAAM9mB,MAAQonB,EACdN,EAAMrH,eAEL,CAED,GAAIzgB,IADJkT,EAAWwU,GACSjgB,YAAcyL,EAASzL,WAAWzH,IAAOkT,EAASzL,WAAWzH,IAAM,EACnFC,EAAOiT,EAASzL,YAAcyL,EAASzL,WAAWxH,IAAOiT,EAASzL,WAAWxH,IAAMC,OAAOC,UAC1Fqd,EAAStK,EAASsK,OAAStK,EAASsK,OAAS,GAC7C1e,GAAS,GAAKuG,IACdoiB,EAAcpiB,EAAKrE,MAAMma,GAAO9V,EAAKrE,MAAMma,GAAOhd,KAAKipB,gBAAgBjZ,GAAU,GAAM,GAE3F,IAAIma,OAAa,EACjBA,IACItnB,MAAQymB,YAAuB1pB,OAAS0pB,EAAYtM,GAAOsM,EAC3DjK,OAAQA,EAAQxd,IAAKA,EAAKC,IAAKA,EAAKklB,MAAO,OAC3CoD,KAAMrV,EAASqV,KAAOrV,EAASqV,KAAO,EACtChW,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMgd,IAEpChd,KAAKonB,YAAcpnB,KAAKonB,WAAWiD,sBACnCF,EAAa/pB,KAAa+pB,EAAYnqB,KAAKonB,WAAWiD,qBAE1D,IAAIC,GAAU,GAAI7J,kBAAe0J,EACjCG,GAAQ3V,SAAS,IAAM3E,EAAW,YAAcgN,GAChDsN,EAAQ9nB,QAAQ8N,aAAa,aAAcyE,EAAShL,MAAQ,UAC5DugB,EAAQ9nB,QAAQ+nB,QAAUvqB,KAAKkgB,YAAY/L,KAAKnU,KAAMgd,OAjDtDsM,GAAetpB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKypB,SAAYviB,EAAKrE,MACtG7C,KAAKipB,gBAAgBjZ,GAAU,GAAM,GACzChQ,KAAKqmB,kBAAkBkD,EAAYvZ,EAAUgN,EAAKsM,EAAaC,EAAWhe,QACtEvL,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAK+S,YACxDsW,EAAY1c,MAAMqa,MAAQ,QAG1BqC,EAAY1c,MAAMod,SAAW,QAC7BV,EAAY1c,MAAMqa,MAAQ,OA4CtC1kB,EAAapC,UAAUsqB,mBAAqB,SAAU3nB,EAAOoG,GACzD,GAAIwhB,MACAC,EAAS7nB,EAAMmF,MAAM,IACzB,IAAa,WAATiB,EACA,MAAOyhB,EAGP,KAAK,GAAI1E,GAAI,EAAG2E,EAAOD,EAAO/pB,OAAQqlB,EAAI2E,EAAM3E,IAC5CyE,EAAOhjB,KAAK1F,OAAO2oB,EAAO1E,IAE9B,OAAOyE,IAGfnoB,EAAapC,UAAU0qB,UAAY,SAAU/nB,EAAOwc,GAChD,GAAIwL,GACAvE,CACJ,IAAIjH,EAAQ,CACR,GAAIyL,GAAU9qB,KAAKuf,KAAKwL,eAAgBC,SAAU,OAAQ/hB,KAAM,YAChE4hB,GAAY7qB,KAAKsf,UAAUD,GAC3BiH,EAAgBwE,EAAQjoB,GACpBiF,oBAAkBwe,KAClBA,EAAgBtmB,KAAKuf,KAAKqL,UAAU/nB,EAAOgoB,QAI/CvE,GAAgB,GAAInd,MAAKtG,EAE7B,OAAOyjB,IAEXhkB,EAAapC,UAAU+qB,eAAiB,SAAUjqB,EAAQ+T,EAAU7N,EAAMwb,EAAUwI,GAIhF,GAHAzc,YAAUzN,EAAO0E,cAAcZ,cAAc,kBAAmB,WAChEgC,eAAa9F,EAAO0E,cAAcZ,cAAc,kBAAmB,UACnE2J,YAAUzN,EAAO0E,cAAcZ,cAAc,kBAAmB,UAC5DiQ,EAAS2C,WAAa3C,EAAS2C,SAASvX,QAAU+qB,GAClDlrB,KAAK0oB,gBAAgB1nB,EAAQ+T,EAAU7N,EAAMwb,OAE5C,CACD,GAAIyI,EAEAA,GADkB,YAAlBzI,EAASzZ,KACEjJ,KAAK4S,eAAerH,OAASvL,KAAK4S,eAAerH,OAAO5K,OAAS,EAGjE+hB,EAAS/P,UAAY+P,EAAS/P,SAAS8E,WAAW9I,cAAcrJ,QAAQ,YAAc,EAAI,EAAI,CAE7G,IAAI0K,GAAW1C,UAAQtM,EAAQ,qBAAqBgG,GAChDqiB,MAAc,GACd1W,EAAW+P,EAAS/P,SAAS8E,UACjC,IAAIzW,EAAOqE,UAAUC,QAAQ,oBAAsB,GAAKtE,EAAOqE,UAAUC,QAAQ,kBAAoB,EAAG,CACpG+jB,EAAcroB,EAAO0E,cAAcZ,cAAc,iBAC7C9E,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAK+S,YACxDsW,EAAY1c,MAAMqa,MAAQ,OAGT,OAAbrU,GAAkC,UAAbA,EACrBlE,YAAU4a,GAAc,kBAGxBviB,eAAauiB,GAAc,iBAGnC,KAAK,GAAI7oB,GAAI,EAAGA,EAAI2qB,EAAU3qB,IAC1B,OAAQkiB,EAASzZ,MACb,IAAK,SAEGjJ,KAAKopB,kBAAkBpZ,EAAU9I,EAAMyL,EAAUnS,EAAG6oB,EAExD,MACJ,KAAK,SAEGrpB,KAAKgqB,kBAAkBha,EAAU9I,EAAMyL,EAAUnS,EAAG6oB,EAAatU,EAAUoW,EAE/E,MACJ,KAAK,UACDnrB,KAAKorB,kBAAkBrW,EAAU7N,EAAM8I,EAAUxP,EACjD,MACJ,KAAK,OAEG,GAAI8lB,GAAgB,GAAInd,MACpB8gB,MAAS,GACTlhB,MAAS,GACTsW,EAAStK,EAASsK,OAClBgM,MAAW,GACXC,MAAa,GACbC,EAAQvrB,KAAKwJ,KAAKC,YAAY,eAC9B+f,EAA2C,gBAAtBzU,GAAS2C,QA6BlC,IA5BIxQ,EAAKrE,QAAUiF,oBAAkBuX,KACjC4K,EAAUkB,EAAW,EAAKjkB,EAAKrE,MAAMrC,GAAK0G,EAAKrE,MAC/CyjB,EAAgBtmB,KAAK4qB,UAAUX,EAAQ5K,IAAW,GAAIlW,OAGrD4L,EAASlN,OAAUkN,EAAS9T,MAAO8T,EAASlS,QAEzCyjB,EADAvR,EAASlS,gBAAiBsG,MACV4L,EAASlS,MAGT7C,KAAK4qB,UAAU7V,EAASlS,MAAOkS,EAASsK,UAG3DtK,EAASsK,QAAUnY,GAAuB,KAAfA,EAAKW,QAEjCwX,GADAtW,EAAS/I,KAAKyS,UAAUvL,EAAKW,QACbwX,SAEfrf,KAAK4E,eAAiB5E,KAAKypB,UAAYD,IAAetiB,IAEvDmY,GADAtW,EAAS/I,KAAKyS,UAAUvL,EAAKW,QACbwX,OACZnY,EAAKrE,OACLonB,EAAUkB,EAAW,EAAKjkB,EAAKrE,MAAMrC,GAAK0G,EAAKrE,MAC/CyjB,EAAgBtmB,KAAK4qB,UAAUX,EAAQlhB,EAAOsW,SAG9CiH,EAAgBpf,EAAKrE,OAGzBwc,EAAQ,CACR,GAAImM,GAAYxrB,KAAKsf,UAAUD,EAC3BmM,GAAUR,UACVM,GACIzK,OAAQ7gB,KAAKyrB,YAAa5oB,MAAOyjB,EACjCvS,YAAawX,EAAOlM,OAAQmM,EAAWpX,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMQ,IAE3ER,KAAKonB,YAAcpnB,KAAKonB,WAAWsE,kBACnCJ,EAAalrB,KAAakrB,EAAYtrB,KAAKonB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,KAG1BA,GACIzoB,MAAOyjB,EAAezF,OAAQ7gB,KAAKyrB,YAAa1X,YAAawX,EAC7DlM,OAAQmM,EAAUnM,OAAQjL,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMQ,IAE9DR,KAAKonB,YAAcpnB,KAAKonB,WAAWsE,kBACnCJ,EAAalrB,KAAakrB,EAAYtrB,KAAKonB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,QAI9BA,IACIzK,OAAQ7gB,KAAKyrB,YAAa5oB,MAAOyjB,EACjCvS,YAAawX,EAAOnX,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMQ,IAExDR,KAAKonB,YAAcpnB,KAAKonB,WAAWsE,kBACnCJ,EAAalrB,KAAakrB,EAAYtrB,KAAKonB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,EAG9B,IADAD,EAAS1W,SAAS,IAAM3E,EAAW,YAAcxP,IAC5C0G,EAAKrE,MAAO,CACb,GAAIsN,GAAOlK,SAASqG,eAAe0D,EAAW,YAAcxP,EAC5DR,MAAK0f,YAAYvP,EAAMmW,EAAe,KAAMtmB,KAAKsD,kBACjDtD,KAAKsD,kBAAmB,OASxDhB,EAAapC,UAAUkrB,kBAAoB,SAAUrW,EAAU7N,EAAM8I,EAAUxP,GAC3E,GACIqC,GACA+oB,EAFAC,GAAU,CAGV/jB,qBAAkBZ,EAAK+B,OAAS8L,IAChC7N,EAAK+B,KAAO8L,EAAS9L,KAEzB,IAAIc,EACJ,IAAIgL,EAASxJ,OAAQ,CACbA,EAASwJ,EAASxJ,MACJ,aAAdrE,EAAK+B,MAAuBnB,oBAAkBZ,EAAKrE,OAG9CkS,EAASlS,MACdgpB,EAAUtgB,EAAO/K,GAAGmO,gBAAkBoG,EAASlS,MAAM4U,WAAW9I,cAErD,IAANnO,IACLqrB,GAAU,GANVA,EAAUtgB,EAAO/K,GAAGmO,gBAAkBzH,EAAKrE,MAAM4U,WAAW9I,cAQhEid,EAAW/oB,EAAQkH,EAAQwB,EAAO/K,OAEjC,CACD,GAAI+K,KAAU,GAAM,EACF,aAAdrE,EAAK+B,MAAuBnB,oBAAkBZ,EAAKrE,OAG9CkS,EAASlS,MACdgpB,EAAUtgB,EAAO/K,GAAGiX,WAAW9I,gBAAkBoG,EAASlS,MAAM4U,WAAW9I,cAEhE,IAANnO,IAEDqrB,EADsB,iBAAf3kB,GAAKrE,SACFqE,EAAKrE,OAPnBgpB,EAAUtgB,EAAO/K,GAAGiX,WAAW9I,gBAAkBzH,EAAKrE,MAAM4U,WAAW9I,cAajD,iBAAfzH,GAAKrE,OAA6B,IAANrC,IACnCqrB,GAAW3kB,EAAKrE,OAEpBA,EAAQ0I,EAAO/K,GAAGiX,WAClBmU,EAAWrgB,EAAO/K,GAClBuJ,EAAQ/J,KAAKwJ,KAAKC,aAAa,OAAQ,SAASjJ,IAEpD,GAAIsrB,EACJA,IACI/hB,MAAOA,EAAO0C,KAAMuD,EAAW,UAAWT,QAASsc,EAAShpB,MAAOA,EACnEuR,OAAQpU,KAAKkgB,YAAY/L,KAAKnU,KAAMQ,IAEpCR,KAAKonB,YAAcpnB,KAAKonB,WAAW2E,mBACnCD,EAAW1rB,KAAa0rB,EAAU9rB,KAAKonB,WAAW2E,kBAEtD,IAAIC,GAAc,GAAIC,eAAYH,EAClCE,GAAYrX,SAAS,IAAM3E,EAAW,YAAcxP,GAChDqrB,GACA7rB,KAAK0f,YAAYsM,EAAYxpB,QAASopB,EAAU,GAAG,IAG3DtpB,EAAapC,UAAUgsB,iBAAmB,SAAUvJ,EAAQzb,GACxD,GAAI1G,GAEAsJ,EADa6Y,EAAO7O,WACHnT,MACrB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjB,GAAI0G,EAAKyL,WAAagQ,EAAO7O,WAAWtT,GAAGqC,MACvC,MAAOrC,EAGf,OAAO,IAEX8B,EAAapC,UAAUisB,oBAAsB,SAAUnK,EAAcjZ,GAQjE,MAPI/I,MAAKwD,cAAgBwe,IAErBA,EAAehiB,KAAKyS,UAAUuP,EAAanf,MAAQmf,EAAanf,MAAQmf,EAAana,QAErFkB,GAAUA,EAAO2O,UAAYsK,GAAgBviB,OAAO6I,KAAK0Z,GAAcrhB,OAAS,IAChFqhB,EAAatK,SAAW3O,EAAO2O,UAE5BsK,GAEX1f,EAAapC,UAAUskB,aAAe,SAAUxjB,EAAQ+T,EAAUiN,EAAcoK,EAAUllB,EAAMwb,EAAUlgB,GACtG,GACI6pB,GADarrB,EAAOiO,uBACEqd,qBAAqB,SAAS,GACpDC,EAA6B,iBAAnBvsB,KAAK0T,UAA+BlO,eAAa6mB,EAAU,gBACnE7mB,eAAa6mB,EAAU,gBACzBtjB,EAA4B,iBAAnB/I,KAAK0T,UAA+B1T,KAAKyS,UAAU8Z,EAAQ1pB,MAAM,IAExE7C,KAAKyS,UAAU8Z,EAAQ1pB,MAC7B7C,MAAK8mB,aAAe/d,CACpB,IAAI4Z,GAASnd,eAAaxE,EAAO8D,cAAc,SAAU,eACrDsnB,KACArX,EAAWvS,EAAQwE,GAAG1B,QAAQ,aAAe,EAAIyP,EAAW/U,KAAK8mB,cACpDpd,YACTiZ,EAAO9f,MAAQ,KACf8f,EAAOL,WACPK,EAAO7O,WAAaiB,EAASrL,UAC7BiZ,EAAOlS,MAAQzQ,KAAKksB,iBAAiBvJ,EAAQzb,GAC7Cyb,EAAO9f,MAAQ6f,EAAS/P,SAAWgQ,EAAO7O,WAAW6O,EAAOlS,OAAO5N,MAC9D7C,KAAK2kB,mBAKNhC,EAAOL,YAJPK,EAAOlS,OAAS,EAChBiS,EAAS/P,SAAWgQ,EAAO9f,MAAQ,IAO/C,IAAI8P,GAAW+P,EAAS/P,SAAS8E,WAC7B+U,GAAiB,CACrB,IAAM7Z,EAASrN,QAAQ,SAAW,GAAKqN,EAASrN,QAAQ,YAAc,GAAKqN,EAASrN,QAAQ,eAAiB,GAyErG6e,EAAanjB,EAAO0E,cAAcZ,cAAc,oBAEhDgC,eAAaqd,GAAa,UAC1B1V,YAAU0V,GAAa,eA5EkF,CAC7G,GAAInU,GAAW1C,UAAQtM,EAAQ,qBAAqBgG,EAUpD,IATAgb,EAAehiB,KAAKmsB,oBAAoBnK,EAAcjZ,GAClDiZ,OAA0C9L,KAA1B8L,EAAatK,SACzBsK,EAAapZ,UACboZ,EAAehiB,KAAKyS,UAAUvL,EAAKW,QAGf,iBAAnB7H,KAAK0T,eAAiDwC,KAAjB8L,IAC1CA,EAAehiB,KAAKyS,UAAUvL,EAAKW,QAEnCma,GAAgBA,EAAatK,SAAU,CACvC1X,KAAKklB,gBAAgBlD,EAAchS,EAAW,aAC9C,IAAIG,GAAOE,SAAO,IAAML,EAAW,aAAchP,EAAO8c,mBACpD3N,KAASA,EAAKlC,UAAUC,SAAS,cACjCgK,SAAO7H,SAAO,IAAML,EAAW,aAAchP,EAAO8c,qBAEnB,gBAA1BkE,GAAatK,cAA0DxB,KAAjC8L,EAAatK,SAASvX,SAC/Da,EAAO8c,mBAAmB7P,UAAUC,SAAS,qBAC7ClO,KAAKmY,iBAAiBnI,IAE1BhP,EAAO8c,mBAAmBzC,UAAY,IAGtCrb,KAAKoR,YAActJ,oBAAkBka,EAAa/gB,MAA2B,iBAAnBjB,KAAK0T,iBACxDsO,GAAatK,SAO5B,GAJI0U,IACApsB,KAAK6f,cAAc3Y,EAAMoG,UAAQtM,EAAQ,sBACzChB,KAAKigB,gBAAgBjf,IAErBhB,KAAK4E,eAAkB+d,GAA2B,KAAjBA,EAAO9f,MAAe,CAUvD,GATIkG,IACAgM,EAAS2C,SAAW3O,EAAO2O,UAE3B3C,EAAS2C,WACTjJ,YAAUzN,EAAO8c,oBAAqB,oBACtC/I,EAAS2C,SAAW3O,EAAO2O,SAC3B8U,EAAiBxsB,KAAKysB,kBAAkB1X,EAAU/E,EAAUjH,EAAOlB,MAAOkN,EAASlS,OAC/E8P,EAAU3R,EAAQkG,IAEtBslB,EAAgB,CAChB,GAAIrI,GAAanjB,EAAO0E,cAAcZ,cAAc,gBAChD9E,MAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAK+S,YACxDoR,EAAWxX,MAAMqa,MAAQ,OAGzB7C,EAAWxX,MAAMqa,MAAQ,YAG5B,CACDlgB,eAAa9F,EAAO8c,oBAAqB,mBACzC,IAAI4O,GAAW,CAEXA,GADkB,YAAlBhK,EAASzZ,KACEjJ,KAAK4S,eAAerH,OAASvL,KAAK4S,eAAerH,OAAO5K,OAAS,EAGhEgS,GAAYA,EAAShE,cAAcrJ,QAAQ,YAAc,EAAK,EAAI,CAElF,KAAK,GAAI9E,GAAI,EAAGA,EAAIksB,EAAUlsB,IAAK,CAC/B,GAAIkZ,GAAU1Z,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAIgJ,EAAW,YAAcxP,IAChGQ,GAAO8c,mBAAmBrX,YAAYiT,IAG9C1Z,KAAKirB,eAAejqB,EAAQ+T,EAAU7N,EAAMwb,EAAU8J,GAElDxsB,KAAKoR,YAActJ,oBAAkBiN,EAAS9T,MAAQ8T,EAAS2C,UAA+B,iBAAnB1X,KAAK0T,iBACzEqB,GAAS2C,YAYhCpV,EAAapC,UAAUusB,kBAAoB,SAAU1X,EAAU5F,EAAQtH,EAAO8K,EAAU3R,EAAQkG,GAC5F,GACIS,GADAlF,EAAQzC,KAERkrB,GAAa,CACjB,IAAKnW,EAAS2C,SAGT,CACD,GAAiC,gBAAtB3C,GAAS2C,cAAsDxB,KAA7BnB,EAAS2C,SAASvX,OAQ3D,MAPAwH,IACIkJ,YAAa,4BAA6B1B,OAAQA,EAAQtH,MAAOA,EAAO8K,SAAUA,EAAUzL,KAAMA,EAClGylB,gBAAgB,GAEpB3sB,KAAKoK,QAAQ,cAAezC,EAAM,SAAUilB,GACxC1B,EAAazoB,EAAMoqB,2BAA2BD,EAAoB7X,EAAU5F,EAAQtH,EAAO7G,KAExFkqB,CAGP,IAAIxR,OAAU,GACVhC,EAAW3C,EAAS2C,QAOxB,KALIgC,EAD2B,gBAApBhC,GAASvX,OACNwgB,WAASjJ,EAASvX,OAAQ6gB,SAAUnZ,MAAOA,EAAO8K,SAAUA,IAG5D+E,EAASvX,QAAS0H,MAAOA,EAAO8K,SAAUA,cAEjCma,SACnBpT,EAAQ1S,GAAKmI,EAAS,aACtBV,YAAUiL,GAAU,cACpB1Y,EAAO8c,mBAAmBrX,YAAYiT,GAClC7R,EAAMvC,QAAQ,KAAO,GACrBmJ,YAAUiL,GAAU,KAAO7R,OAG9B,IAAI6R,YAAmB9Z,OAAO,CAC/B6O,WAASiL,EAAS,aAClB,KAAK,GAAIlZ,GAAI,EAAG2Z,EAAOT,EAAQ/Y,OAAQH,EAAI2Z,EAAM3Z,IAC7CkZ,EAAQlZ,GAAGwG,GAAKmI,EAAS,YAAc3O,EACvCQ,EAAO8c,mBAAmBrX,YAAYiT,EAAQlZ,IAItD,MADAiO,aAAUzN,EAAO8c,oBAAqB,qBAC/B,EAtCX,OAAO,GA0Cfxb,EAAapC,UAAU2sB,2BAA6B,SAAUllB,EAAMoN,EAAU5F,EAAQtH,EAAO7G,GACzF,GAAI2G,EAAKglB,eAAgB,CACrB,GAAIjT,OAAU,EACd1Z,MAAK+sB,iBAAmB/sB,KAAK+Q,gBAAsBgE,EAAS2C,SAA0B3C,EAAS2C,UAC/F,IAAI1G,GAAahR,KAAKwC,QAAQwE,GAAKa,CAEnC,IAAI7H,KAAKmR,QACLuI,EAAU1Z,KAAK+sB,iBAAiBplB,EAAM3H,KAAMmP,EAAQ6B,GAAY,GAChEhQ,EAAO8c,mBAAmBrX,YAAYiT,OAErC,IAAI1Z,KAAKoR,UAAW,CACrB,GAAI4b,GAAchtB,KAAK+sB,iBAAiBplB,EAAM3H,KAAMmP,EAAQ6B,EAC5D0I,GAAuC,IAA5BsT,EAAY,GAAG1b,SAAkB0b,EAAY,GAAKA,EAAY,GACzEhsB,EAAO8c,mBAAmBrX,YAAYiT,OAEjC1Z,MAAKuR,QACVmI,EAAU1Z,KAAK+sB,iBAAiBplB,EAAM3H,KAAM,WAAYgR,GAExDQ,SAAOkI,EAAS1Y,EAAO8c,sBAGvBpE,EAAU1Z,KAAK+sB,iBAAiBplB,EAAM3H,KAAM,WAAYgR,GAAY,GACpEhQ,EAAO8c,mBAAmBrX,YAAYiT,GAI1C,OAFAjL,aAAUzN,EAAO8c,oBAAqB,oBACtC9d,KAAK+R,wBACE,EAGP,OAAO,GAGfzP,EAAapC,UAAU+sB,aAAe,SAAUzqB,EAAS0E,GACrD,GAAI8V,GAAM,CACNxa,GAAQ6C,UAAUC,QAAQ,eAAiB,IAC3C0X,EAAM,EAEV,IAEIjU,GACAsW,EACA6N,EACArqB,EACAsqB,EAEAC,EARAC,EAAc7qB,EAAQ6C,UAAU2C,MAAM,OAAOgV,GAC7Cxc,EAAIgX,SAAShV,EAAQwE,GAAGqT,OAAO,GAAI,EAQvC,QAAQgT,GACJ,IAAK,WACDxqB,EAAQ2C,eAAahD,EAAS6qB,GAAaxqB,MAC3CqE,EAAKrE,MAAmB,KAAVA,EAAgBA,MAAQqT,EACtC,MACJ,KAAK,UACDkX,EAAe5nB,eAAahD,EAAS6qB,GAAaxqB,MAC9CqE,EAAKyL,SAASrN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAK4sB,IAEV,KAAM,SAASE,KAAK,SAAUC,GAAM,OAAsC,IAA/BrmB,EAAKyL,SAASrN,QAAQioB,OAC7B,IAAvCrmB,EAAKyL,SAASrN,QAAQ,YACzB4B,EAAKrE,MAAQuqB,EACM,WAAdlmB,EAAK+B,KAAoBmkB,EAAaplB,MAAM,KAAKwD,IAAI,SAAUgiB,GAAO,MAAOA,GAAIC,SAC9EL,EAAaplB,MAAM,KAAKwD,IAAIzJ,WAGpCmF,EAAKrE,MAAQuqB,CAEjB,MACJ,KAAK,eACDlmB,EAAKrE,MAAQ2C,eAAahD,EAAS6qB,GAAaxqB,KAChD,MACJ,KAAK,SACDsqB,EAAc3nB,eAAahD,EAAS6qB,IACpB9d,UACc,iBAAfrI,GAAKrE,MACZqE,EAAKrE,MAA8B,SAAtBsqB,EAAYtqB,MAGrB7C,KAAKyS,UAAUvL,EAAKW,OAAO0D,OAC3BrE,EAAKrE,MAAQsqB,EAAYtqB,MAGzBqE,EAAKrE,MAA8B,SAAtBsqB,EAAYtqB,OAIrCsqB,EAAYhW,SACZ,MACJ,KAAK,iBACGjQ,EAAKyL,SAASrN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAKgF,eAAahD,EAAS6qB,GAAaxqB,OAGnDqE,EAAKrE,MAAQ2C,eAAahD,EAAS6qB,GAAaxqB,KAEpD,MACJ,KAAK,aACDkG,EAAS/I,KAAKyS,UAAUvL,EAAKW,OAC7BwX,EAASrf,KAAKsf,UAAUvW,EAAOsW,QAC/B6N,EAAe1nB,eAAahD,EAAS6qB,GAAaxqB,MAC9CqE,EAAKyL,SAASrN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAKR,KAAKuf,KAAKC,WAAW0N,EAAc7N,IAE9CvX,oBAAkBuX,EAAOA,SAAW6N,EACzChmB,EAAKrE,MAAQ7C,KAAKuf,KAAKC,WAAW0N,GAGlChmB,EAAKrE,MADAqqB,EACQltB,KAAKuf,KAAKC,WAAW0N,EAAc7N,GAGnC6N,CAEjB,MACJ,KAAK,cACDhmB,EAAKrE,MAAQ2C,eAAahD,EAAS6qB,GAAaxqB,QAI5DP,EAAapC,UAAUwf,YAAc,SAAU1e,EAAQslB,EAAe9lB,EAAGktB,GASrE,IARA,GAIIrU,GACAsG,EALAjT,EAAYY,UAAQtM,EAAQ,sBAC5BkG,EAAOlH,KAAKgP,eAAetC,GAC3BwD,EAAW5C,UAAQtM,EAAQ,qBAC3ByP,EAAQ,EAGR3E,EAAUY,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtD8H,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACnCgJ,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAIkC,GAAWzL,EAAKC,MAAMsJ,GAAOkC,SAAWzL,EAAKC,MAAMsJ,GAAOkC,SAAS8E,WAAa,GAEhFtI,GADJe,EAAW5C,UAAQtM,EAAQ,sBACLgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACxD,IAAIsG,UAAQtM,EAAQ,mBAAqBsM,UAAQtM,EAAQ,sBAAuB,CACxEhB,KAAKwiB,eACLxhB,EAAShB,KAAKwiB,cAElBnJ,EAAiC,iBAAnBrZ,KAAK0T,UAA+BlO,eAAaxE,EAAQ,gBACnEwE,eAAaxE,EAAQ,eAEzB,IAAI+H,GAA4B,iBAAnB/I,KAAK0T,UAA+B1T,KAAKyS,UAAU4G,EAAYxW,MAAM,IAE5E7C,KAAKyS,UAAU4G,EAAYxW,QAC5B7C,KAAK4E,eAAiBsC,EAAKC,MAAMsJ,GAAO5I,OACzCX,EAAKC,MAAMsJ,GAAO5I,MAAM8G,gBAAkB5F,EAAOlB,MAAM8G,iBACjDuB,EAASlL,iBAAiB,kBAAqB2N,EAASrN,QAAQ,SAAW,IACzEqN,EAASrN,QAAQ,UAAY,KACjC4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,IAGlC7C,KAAK4S,eAAiB5S,KAAKyS,UAAUzS,KAAK4S,eAAe/K,OACzDX,EAAKC,MAAMsJ,GAAO5I,MAAQ7H,KAAK4S,eAAe/K,MAC9CX,EAAKC,MAAMsJ,GAAOxH,KAAOjJ,KAAK4S,eAAe3J,KAC7C/B,EAAKC,MAAMsJ,GAAO1G,MAAQ/J,KAAK4S,eAAe7I,KAC9C,IAAIqV,GAAc9R,UAAQtM,EAAQ,kBAE9BwB,GADJ4c,EAAcA,GAA4B9R,UAAQtM,EAAQ,uBAChC8c,mBAAmBhZ,cAAc,kBAC3DtC,GAAUA,GAAoB4c,EAAYtB,mBAAmBA,mBAAmBhZ,cAAc,mBAC9F6N,EAAWnN,eAAahD,EAAS,gBAAgBK,MAAM4U,WACvDvQ,EAAKC,MAAMsJ,GAAOkC,SAAWA,CAC7B,IAAIgb,GAAiBvO,EAAYtB,mBAAmBA,mBAChD8P,EAAaD,EAAe3oB,iBAAiB,kBAC7C4oB,GAAWjtB,OAAS,IACpBitB,EAAaD,EAAe3oB,iBAAiB,kBAE7C4oB,EAAWjtB,OAAS,IACpBitB,EAAaD,EAAe3oB,iBAAiB,gBAEjD2a,GAAe7T,QAASA,EAASqD,OAAQA,EAAQtM,MAAOqE,EAAKC,MAAMsJ,GAAO5I,MAAOoB,KAAM,QACvF,KAAK,GAAI4kB,GAAM,EAAGA,EAAMD,EAAWjtB,OAAQktB,IACnClb,EAASrN,QAAQ,SAAW,GAAKqN,EAASrN,QAAQ,UAAY,EAC9D4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,KAG9B7C,KAAKitB,aAAaW,EAAWC,GAAM3mB,EAAKC,MAAMsJ,GAE7CzQ,MAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAUuV,GAEvB3f,KAAKgZ,iBAAmB9R,EAAKC,MAAMsJ,GAAO5I,OAAS7G,EAAO0E,cAAcL,UAAUC,QAAQ,cAAgB,GAC1GE,eAAaxE,EAAO0E,cAAe,WAAWD,UAElDzF,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,aAE5D,IAAIoG,UAAQtM,EAAQ,oBAAqB,CAC1CqY,EAAc7T,eAAaxE,EAAQ,gBACnCkG,EAAKC,MAAMsJ,GAAOkC,SAAW0G,EAAYxW,MAAM4U,UAC/C,IAAIgD,GAAYvK,EAASlL,iBAAiB,gCAC1C2a,IAAe7T,QAASA,EAASqD,OAAQA,EAAQtM,MAAOwW,EAAYxW,MAAOoG,KAAM,YAC7EjJ,KAAKgZ,iBAAmB9R,EAAKC,MAAMsJ,GAAOkC,UAAY3R,EAAO0E,cAAcL,UAAUC,QAAQ,cAAgB,GAC7GE,eAAaxE,EAAO0E,cAAe,WAAWD,UAE9CgV,EAAU9Z,OAAS,KAAO8Z,EAAU,GAAGpV,UAAUC,QAAQ,eAAiB,KAC1E4B,EAAKC,MAAMsJ,GAAO5N,SAEtB,KAAK,GAAIirB,GAAM,EAAGA,EAAMrT,EAAU9Z,OAAQmtB,IAClC5mB,EAAKC,MAAMsJ,GAAOkC,SAASrN,QAAQ,SAAW,GAAK4B,EAAKC,MAAMsJ,GAAOkC,SAASrN,QAAQ,UAAY,EAClG4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,KAGrB4X,EAAUqT,GAAK7f,UAAUC,SAAS,eAG3ClO,KAAKitB,aAAaxS,EAAUqT,GAAM5mB,EAAKC,MAAMsJ,GAE5CzQ,MAAK4E,eACN5E,KAAKoK,QAAQ,SAAUuV,GAE3B3f,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,gBAExDoG,WAAQtM,EAAQ,mBACrBhB,KAAK+tB,gBAAgB/sB,EAAQslB,EAAepf,EAAMuJ,EAAO/D,EAAWwD,EAAU1P,GACzEktB,GACD1tB,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,WAIzE5E,EAAapC,UAAUkP,YAAc,SAAU4e,EAAYC,EAAWhlB,GAC9CilB,KAAKC,WAAYnrB,UAAWgrB,EAAWhrB,UAAWD,IAAKirB,EAAWjrB,IAAKmE,KAAM8mB,EAAW7mB,UACzF+mB,KAAKC,WAAYnrB,UAAWirB,EAAUjrB,UAAWD,IAAKkrB,EAAUlrB,IAAKmE,KAAM+mB,EAAU9mB,UAE/FnH,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,cAAgBgkB,aAAcJ,EAAY9mB,KAAM+mB,EAAWhlB,KAAMA,MAI1F3G,EAAapC,UAAU6tB,gBAAkB,SAAU/sB,EAAQslB,EAAepf,EAAMuJ,EAAO/D,EAAWwD,EAAU1P,GACxG,GAAImf,GACA0O,EACAC,GAAe,KAAM,UAAW,QAAS,aAI7C,IAHIpnB,EAAKC,MAAMsJ,GAAOkC,WAClB0b,EAAOnnB,EAAKC,MAAMsJ,GAAOkC,SAAS8E,WAAW9I,eAE3B,OAAlB2X,EAAwB,CACxB,GAAItlB,EAAOqE,UAAUC,QAAQ,kBAAoB,GAAgC,WAA3B4B,EAAKC,MAAMsJ,GAAOxH,OACnEjJ,KAAKoD,WAAY,CAGlB,IAAK,GAFD6mB,MACAsE,EAAmBjI,EACdN,EAAI,EAAG2E,EAAO4D,EAAiB5tB,OAAQqlB,EAAI2E,EAAM3E,IACnB,gBAAxBuI,GAAiBvI,IACxBiE,EAAOxiB,KAAK+mB,WAAWD,EAAiBvI,IAG5CiE,GAAOtpB,SACP2lB,EAAgB2D,GAGxB,GAAIjqB,KAAKoD,WACL8D,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,EAC1B3G,GAAe7T,QAASY,EAAU1F,GAAImI,OAAQe,EAASlJ,GAAInE,MAAOqE,EAAKC,MAAMsJ,GAAO5N,MAAOoG,KAAM,SAC5FjJ,KAAK4E,eACN5E,KAAKoK,QAAQ,SAAUuV,OAG1B,IAAI3e,EAAOqE,UAAUC,QAAQ,WAAa,GAAKtE,EAAOqE,UAAUC,QAAQ,cAAgB,EACrFgpB,EAAYhpB,QAAQ+oB,IAAS,EAC7BnnB,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAK8lB,EAG7Bpf,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,MAG7B,IAAItlB,EAAOqE,UAAUC,QAAQ,YAAc,EAC5C4B,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,MAEzB,IAAItlB,EAAOqE,UAAUC,QAAQ,kBAAoB,EAClD4B,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,MAEzB,IAAItlB,EAAOqE,UAAUC,QAAQ,cAAgB,EACjC,OAAT+oB,GAA0B,UAATA,GACbnnB,EAAKC,MAAMsJ,GAAOxH,KAClB/B,EAAKC,MAAMsJ,GAAO5N,MAAQ7C,KAAKwqB,mBAAmBlE,EAAepf,EAAKC,MAAMsJ,GAAOxH,OAMzE,YAATolB,GAA+B,eAATA,GACY,gBAA5BnnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAK8lB,GAG7Bpf,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,MAG7B,IAAItlB,EAAOqE,UAAUC,QAAQ,iBAAmB,EAAG,CACpD,GAAI+Z,GAASrf,KAAKsf,UAAUtf,KAAKyS,UAAUzS,KAAK4S,eAAe/K,OAAOwX,OAClEA,GAAOpW,OACHqlB,EAAYhpB,QAAQ+oB,IAAS,GACU,gBAA5BnnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAKR,KAAKuf,KAAKC,WAAW8G,EAAejH,IAGjEnY,EAAKC,MAAMsJ,GAAO5N,MAAQ7C,KAAKuf,KAAKC,WAAW8G,EAAejH,IAI1Erf,KAAK6f,cAAc3Y,EAAMgJ,EAAUO,OAG/BzP,GAAOqE,UAAUC,QAAQ,iBAAmB,GACxCgpB,EAAYhpB,QAAQ+oB,IAAS,GACU,gBAA5BnnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAK8lB,GAOjCpf,EAAKC,MAAMsJ,GAAO5N,MAAQyjB,GAItChkB,EAAapC,UAAU2f,cAAgB,SAAU3Y,EAAMgJ,EAAUO,GAC7D,IAAI3I,oBAAkBZ,KAASY,oBAAkBoI,GAAjD,CAGKpI,oBAAkB2I,KACnBvJ,EAAOA,EAAKC,MAAMsJ,GAEtB,IAAIge,GAAmC,gBAAhBvnB,QACvB,IAAIlH,KAAKgZ,kBAAoBlR,oBAAkB2I,KAAWge,EAAWvnB,EAAKrE,MAAMlC,OAAS,EAAIuG,EAAKrE,QAAS,CACvG,GAAI6W,GAAUxJ,EAASlL,iBAAiB,2BACpC0U,GAAQ/Y,OAAS,IACb+Y,EAAQ,GAAGrU,UAAUC,QAAQ,cAAgB,EAC7CE,eAAakU,EAAQ,GAAI,WAAWjU,UAE/BiU,EAAQ,GAAGhU,cAAcL,UAAUC,QAAQ,cAAgB,GAChEE,eAAakU,EAAQ,GAAGhU,cAAe,WAAWD,UAElDiU,EAAQ,IAAMA,EAAQ,GAAGhU,cAAcL,UAAUC,QAAQ,cAAgB,GACzEE,eAAakU,EAAQ,GAAGhU,cAAe,WAAWD,UAElDiU,EAAQ,IAAMA,EAAQ,GAAGhU,cAAcL,UAAUC,QAAQ,cAAgB,GACzEE,eAAakU,EAAQ,GAAGhU,cAAe,WAAWD,cAKlEnD,EAAapC,UAAUof,UAAY,SAAUD,GACzC,GAAIqP,EAmBJ,OAlBIrP,GACwB,oBACpBqP,GAAkBzlB,KAAM,YACT,UAAXoW,GAAiC,QAAXA,GACtBqP,EAAczlB,KAAO,OACrBylB,EAAc1D,SAAW3L,GAGzBqP,EAAcrP,OAASA,GAI3BqP,GAAkBzlB,KAAM,WAAY+hB,SAAU3L,EAAO2L,UAIzD0D,GAAkBzlB,KAAM,OAAQ+hB,SAAU,OAEvC0D,GAEXpsB,EAAapC,UAAUyuB,eAAiB,SAAUC,EAAU1nB,EAAMP,GAC9D,GAAIkoB,GAAW3nB,EAAKC,MAChB2nB,IACJ,KAAKnoB,EAAQ,CACT,IAAK,GAAIgE,GAAI,EAAGgP,EAAOkV,EAASluB,OAAQgK,EAAIgP,EAAMhP,KAC9CzD,EAAO2nB,EAASlkB,IACPxD,OACL2nB,EAAYrnB,KAAKP,EAGzB,OAAO4nB,GAAYF,GAEvB,MAAO1nB,IASX5E,EAAapC,UAAUuF,QAAU,WAG7B,GAFAzF,KAAKyD,WAAY,EACEzD,KAAKwC,QACxB,CAGA,GAAIA,GACAhC,EACAsJ,EACAvE,CAIJ,KAHA7D,EAAOxB,UAAUuF,QAAQ7E,KAAKZ,MAE9B8J,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,oBAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UACzCyS,SAAO1V,EAAQhC,GAGnB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,uCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAIxC,KADAqE,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,8CAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACbgF,eAAahD,EAAQhC,GAAI,gBACzBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UAGzCD,eAAahD,EAAQhC,GAAI,gBAAgBiF,UAE7CyS,SAAO1V,EAAQhC,GAGnB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,yCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAIxC,KADAqE,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,gDAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACbgF,eAAahD,EAAQhC,GAAI,kBACzBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UACzCyS,SAAO1V,EAAQhC,IAIvB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,sCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAExCzF,MAAK4E,eAAgB,EACrB5E,KAAK+uB,eACL/uB,KAAK+G,UAAU/G,KAAKwC,QAAQwE,GAAK,YAAc,GAC/ChH,KAAKwC,QAAQ6Y,UAAY,GAErBrb,KAAKgvB,SAAWhvB,KAAKgvB,QAAQruB,QAC7BX,KAAKmY,iBAET,IAAI8W,GAAehpB,SAASjB,iBAAiB,2BAC7C,IAAIiqB,EACA,IAAKzuB,EAAI,EAAGA,EAAIyuB,EAAatuB,OAAQH,IACjCyuB,EAAazuB,GAAGojB,QAGxB3V,aAAUjO,KAAKwC,YAAc,QAAS,eAAgB,aACtDxC,KAAKyD,WAAY,IASrBnB,EAAapC,UAAUgvB,SAAW,SAAUhoB,EAAM4E,GAC9CA,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,EAClC9L,KAAKypB,UAAW,CAChB,KAAK,GAAIjpB,GAAI,EAAGsJ,EAAM5C,EAAKvG,OAAQH,EAAIsJ,EAAKtJ,IACxCR,KAAK8P,eAAe7J,SAASqG,eAAeR,GAAU5E,EAAK1G,GAE/DR,MAAKypB,UAAW,GASpBnnB,EAAapC,UAAUgd,UAAY,SAAUiS,EAAQrjB,GACjD,GAAI9L,KAAKqD,cAAgBrD,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAe,CACvG7D,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,CAClC,IAAIY,GAAYzG,SAASqG,eAAeR,GACpC5E,EAAOlH,KAAKgP,eAAetC,EAE/B,IADeyiB,EAAOxuB,OACR,CACVX,KAAKypB,UAAW,CAChB,KAAK,GAAIjpB,GAAI,EAAGsJ,EAAMqlB,EAAOxuB,OAAQH,EAAIsJ,EAAKtJ,IAC1CR,KAAK8C,aACDG,SAAUksB,EAAO3uB,GAAGyC,SAAUD,UAAWmsB,EAAO3uB,GAAGwC,UACnDD,IAAKosB,EAAO3uB,GAAGuC,KAEnB/C,KAAKovB,YAAYD,EAAO3uB,GAAIkM,GAAW,EAAOyiB,EAAO3uB,GAAGuC,IAE5D/C,MAAKypB,UAAW,MAEf,CACD,GAAIzmB,GAAY,MACZD,GAAM,EACNE,GAAW,CACXjD,MAAK8C,cACLE,EAAYhD,KAAK8C,YAAYE,UAC7BD,EAAM/C,KAAK8C,YAAYC,IACvBE,EAAWjD,KAAK8C,YAAYG,UAE5BjD,KAAK8D,WAAa,EACd9D,KAAK4G,mBACLM,EAAKC,MAAMM,MAAOzE,UAAaA,EAAWD,IAAOA,EAAKoE,WAGtDD,EAAKC,MAAMM,MAAOzE,UAAaA,EAAWmE,WAI1CnH,KAAK4G,mBACLM,EAAKC,MAAM2Q,OAAO9X,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWD,IAAKA,EAAKoE,SAAWlE,SAAUA,IAGjGiE,EAAKC,MAAM2Q,OAAO9X,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWmE,SAAWlE,SAAUA,IAI9FjD,KAAK0G,gBACN1G,KAAKoH,qBAAqBsF,EAAWxF,EAAM,OAAMlH,KAAKgO,yBAAiC,QAInG1L,EAAapC,UAAUmvB,YAAc,WAmCjC,GAlCArvB,KAAKiS,eAAgB,EACjBjS,KAAKwU,UACL/F,YAAUzO,KAAKwC,SAAUxC,KAAKwU,SAASrG,QAAQ,OAAQ,KAAKsf,OAAOzlB,MAAM,MAEzEhI,KAAKgO,yBACLS,YAAUzO,KAAKwC,SAAU,qBAEzBxC,KAAK4P,WACLnB,YAAUzO,KAAKwC,SAAU,SAEzBxC,KAAKgnB,QACLhnB,KAAKwC,QAAQmK,MAAMqa,MAAQhnB,KAAKgnB,OAEhChnB,KAAK8M,SACL9M,KAAKwC,QAAQmK,MAAMG,OAAS9M,KAAK8M,QAEjC9M,KAAKkH,KAAKC,MAAMxG,OAChBX,KAAK4E,eAAgB,EAGrB5E,KAAKwN,iBAAgB,EAAOxN,KAAKwC,SAEjC+lB,UAAQC,UAAaxH,OAAOsO,WAAa,MAAQtvB,KAAKqE,cAAsC,aAArBrE,KAAK+S,cACxEwV,UAAQC,UAAYxH,OAAOsO,WAAa,OACxCtvB,KAAKwC,QAAQmK,MAAMqa,MAAQ,OAC3BhnB,KAAKwC,QAAQyL,UAAUgF,IAAI,aAE/BnM,cAAY9G,KAAKwC,QAAQwC,iBAAiB,qBAAsB,qBAChEyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,qBAAsB,mBAC7DhF,KAAK+S,YAAc,YAGnB/S,KAAK+S,YAAc,aAEnB/S,KAAKuvB,YACDvvB,KAAK4E,cACL5E,KAAKoM,gBAGLpM,KAAK4N,4BAGR,CACD,GAAI5N,KAAK4I,SAAW5I,KAAK4I,QAAQjI,QAAUX,KAAK4E,cAAe,CAC3D5E,KAAKwN,iBAAgB,EAAOxN,KAAKwC,QAASxC,KAAKkH,KAAKlE,WAAW,EAAOhD,KAAKkH,KAAKnE,KAAK,EAAO/C,KAAKkH,KACjG,IAAIuG,GAASC,YAAW1N,KAAKkH,SAAU,EACvClH,MAAKmD,aAAc,EACnBnD,KAAK2N,cAAcF,GACnBzN,KAAKmD,aAAc,MAEdnD,MAAK4I,SAAW5I,KAAK4I,QAAQjI,QAClCX,KAAK8P,eAAe9P,KAAKwC,QAAQsC,cAAc,yBAEnD9E,MAAKwvB,cACDxvB,KAAKyvB,UACLzvB,KAAK0vB,gBAIT,KAAK,GAFDC,GAAU3vB,KAAKwC,QAAQwC,iBAAiB,eACxC4qB,MAAS,GACJpvB,EAAI,EAAGA,EAAImvB,EAAQhvB,OAAQH,IAChCovB,EAASD,EAAQjO,KAAKlhB,GACtBmc,eAAaiT,GAAUhT,SAAU,aAI7Cta,EAAapC,UAAUkM,cAAgB,WACnC,GAAIyjB,GAAc7vB,KAAKoG,cAAc,OACjCC,OACIC,MAAO,oBACPU,GAAIhH,KAAKwC,QAAQwE,GAAK,sBAG1B8oB,EAAW9vB,KAAKoG,cAAc,YAAcC,OAASC,MAAO,iBAAkBmpB,SAAU,QAAUM,OAAQ,qBAC1GC,EAAWhwB,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,sDAC1E2pB,EAAUjwB,KAAKoG,cAAc,OAASC,OAASC,MAAO,qBAC1DupB,GAAYppB,YAAYqpB,GACxBA,EAAS/pB,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MACjD8oB,EAASjqB,YAAc/F,KAAKwJ,KAAKC,YAAY,QAC7CwmB,EAAQxpB,YAAYupB,GACpBH,EAAYppB,YAAYwpB,GACxBjwB,KAAKwC,QAAQiE,YAAYopB,IAE7BvtB,EAAapC,UAAU0N,sBAAwB,WAC3C,GAAIsiB,GAAelwB,KAAKoG,cAAc,OAClCC,OACIC,MAAO,0BACP6U,MAAOnb,KAAKwJ,KAAKC,YAAY,sBAGrCzJ,MAAKwC,QAAQsC,cAAc,mBAAmB2B,YAAYypB,IAE9D5tB,EAAapC,UAAU2I,WAAa,WAC5B7I,KAAKiK,eAAsD,eAArCjK,KAAKiK,cAAc0E,cACzC3O,KAAK4I,QAAU,GAAI2e,eAAYvnB,KAAK4I,SAASunB,cAAa,GAAItJ,UAAQuJ,WAAW,UAE5EpwB,KAAKiK,eAAsD,cAArCjK,KAAKiK,cAAc0E,gBAC9C3O,KAAK4I,QAAU,GAAI2e,eAAYvnB,KAAK4I,SAASunB,cAAa,GAAItJ,UAAQwJ,OAAO,YAGrF/tB,EAAapC,UAAUowB,iBAAmB,WAGtC,GAFAtwB,KAAKwC,QAAQ6Y,UAAY,GACzBrb,KAAKkc,eAAiB,GACjBlc,KAAK0G,eACN,GAAI1G,KAAK4G,mBAAoB,CACzB,GAAI6T,GAAYza,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,gBAC3EtG,MAAK0M,UAAU5H,cAAc,iBAC7B9E,KAAK0M,UAAU5H,cAAc,gBAAgB6L,aAAa8J,EAAWza,KAAK0M,UAAU5H,cAAc,wBAItG9E,MAAK0M,UAAU5H,cAAc,gBAAgB8e,QAGrD5jB,MAAKiH,eAAgBC,KAAMlH,KAAKuwB,cAAcvwB,KAAKkH,QAAS,GAC5DlH,KAAKqvB,eAET/sB,EAAapC,UAAUsvB,YAAc,WAC7BxvB,KAAK4P,UACLnB,WAASzO,KAAKwC,QAAQwC,iBAAiB,gBAAiB,SAGxD8B,cAAY9G,KAAKwC,QAAQwC,iBAAiB,gBAAiB,UAGnE1C,EAAapC,UAAUqwB,cAAgB,SAAUrpB,GAC7C,GAAIspB,EACJ,IAAItpB,EAAKC,MACL,IAAK,GAAI3G,GAAI,EAAGA,EAAI0G,EAAKC,MAAMxG,OAAQH,IACnCgwB,EAAUtpB,EAAKC,MAAM3G,GACrBgwB,EAAUxwB,KAAKuwB,cAAcC,GAC7BtpB,EAAKC,MAAM3G,GAAKgwB,CAYxB,OATK1oB,qBAAkBZ,EAAKnE,KAMnB/C,KAAK4G,qBAAuBkB,oBAAkBZ,EAAKlE,aACxDkE,EAAKnE,KAAM,IANP/C,KAAK4G,qBACLM,EAAKnE,KAAM,SAERmE,GAAKnE,KAKTmE,GAEX5E,EAAapC,UAAUuwB,kBAAoB,SAAUC,EAASC,GAC1D,GAAIC,GAAanxB,OAAO6I,KAAKooB,EAC7B1wB,MAAKqE,cAAe,CAGpB,KAAK,GAFDqI,GAAY1M,KAAKwC,QAAQsC,cAAc,sBACvCuH,EAAcrM,KAAKwC,QAAQsC,cAAc,sBACpC+rB,EAAK,EAAGC,EAAeF,EAAYC,EAAKC,EAAanwB,OAAQkwB,IAElE,OADWC,EAAaD,IAEpB,IAAK,cACGH,EAAQnB,aACR7iB,EAAUC,MAAMC,QAAU,OACtB5M,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,GAC7DX,KAAKoM,gBACLC,EAAcrM,KAAKwC,QAAQsC,cAAc,uBAGzC9E,KAAKwC,QAAQsC,cAAc,mBAAmBiB,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MAE1FmF,EAAYM,MAAMC,QAAU,UAGxBF,EAAU1H,iBAAiB,oBAAoBrE,QAAU,GACzDX,KAAK4N,wBAETlB,EAAUC,MAAMC,QAAU,QAC1BP,EAAYM,MAAMC,QAAU,OAEhC,MACJ,KAAK,cACD5M,KAAKmX,SACL,MACJ,KAAK,cACIrP,oBAAkB4oB,EAAQjhB,YAAYiC,aACnCgf,EAAQjhB,YAAYiC,UACpB5K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,mBAAoB,iBAG9DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,mBAAoB,kBAG9D8C,oBAAkB4oB,EAAQjhB,YAAYkC,YACnC+e,EAAQjhB,YAAYkC,SACpB7K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,oBAAqB,iBAG/DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,oBAAqB,kBAG/D8C,oBAAkB4oB,EAAQjhB,YAAYmC,cACnC8e,EAAQjhB,YAAYmC,WACpB9K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,oBAAqB,iBAG/DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,oBAAqB,kBAG/D8C,oBAAkB4oB,EAAQjhB,YAAYe,aACnCkgB,EAAQjhB,YAAYe,UACpB1J,cAAY9G,KAAKwC,QAAQwC,iBAAiB,qBAAsB,iBAGhEyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,qBAAsB,kBAGhE8C,oBAAkB4oB,EAAQjhB,YAAYoC,cACnC6e,EAAQjhB,YAAYoC,WACpB/K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAG7DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,kBAAmB,kBAG7D8C,oBAAkB4oB,EAAQjhB,YAAY+M,eACnCkU,EAAQjhB,YAAY+M,YACpB1V,cAAY9G,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAG7DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAGlE,MACJ,KAAK,WACG2rB,EAAQnc,UACR1N,eAAa9G,KAAKwC,SAAUmuB,EAAQnc,SAASxM,MAAM,MAEnD0oB,EAAQlc,UACR/F,YAAUzO,KAAKwC,SAAUkuB,EAAQlc,SAASrG,QAAQ,OAAQ,KAAKsf,OAAOzlB,MAAM,KAEhF,MACJ,KAAK,YACG0oB,EAAQ9gB,WACRnB,YAAUzO,KAAKwC,SAAU,SACzBxC,KAAKwvB,gBAGL1oB,eAAa9G,KAAKwC,SAAU,SAC5BxC,KAAKwvB,cAET,MACJ,KAAK,oBACDxvB,KAAK+wB,kBAAoBL,EAAQK,iBACjC,MACJ,KAAK,aACD/wB,KAAK8T,WAAa4c,EAAQ5c,WAC1B9T,KAAKmX,SACL,MACJ,KAAK,UACDnX,KAAK4I,QAAU8nB,EAAQ9nB,QACvB5I,KAAK6I,aACL7I,KAAK6J,2BAA2B7J,KAAK4I,QACrC,MACJ,KAAK,gBACD5I,KAAKiK,cAAgBymB,EAAQzmB,cAC7BjK,KAAK6I,YACL,MACJ,KAAK,gBACD7I,KAAK2P,cAAgB+gB,EAAQ/gB,aAC7B,MACJ,KAAK,SACD3P,KAAK8M,OAAS4jB,EAAQ5jB,OACtB9M,KAAKwC,QAAQmK,MAAMG,OAAS9M,KAAK8M,MACjC,MACJ,KAAK,OAC8B,IAA3B9M,KAAKkH,KAAKC,MAAMxG,QAAiBmH,oBAAkB9H,KAAKkH,OACxDlH,KAAK2E,QAET3E,KAAKiH,eAAgBC,KAAMwpB,EAAQxpB,OAAQ,GAC3CwpB,EAAQxpB,KAAOlH,KAAK8e,kBAAkB9e,KAAKkH,MAAM,GACjDlH,KAAKgxB,SAAShxB,KAAKkH,KACnB,MACJ,KAAK,QACDlH,KAAKgnB,MAAQ0J,EAAQ1J,MACrBhnB,KAAKwC,QAAQmK,MAAMqa,MAAQhnB,KAAKgnB,KAChC,MACJ,KAAK,SACDhnB,KAAK6gB,OAAS6P,EAAQ7P,OACtB7gB,KAAKuf,KAAO,GAAI0R,wBAAqBjxB,KAAK6gB,QAC1C7gB,KAAKkD,UAAW,EAChBlD,KAAKmX,UACLnX,KAAKkD,UAAW,CAChB,MACJ,KAAK,qBACDlD,KAAKswB,kBACL,MACJ,KAAK,WACDtwB,KAAK0C,WAAaguB,EAAQjB,SAC1BzvB,KAAK0vB,gBACL,MACJ,KAAK,mBACD1vB,KAAK8R,iBAAmB4e,EAAQ5e,iBAChC9R,KAAKmX,SACL,MACJ,KAAK,0BACDnX,KAAKgO,wBAA0B0iB,EAAQ1iB,wBACvChO,KAAKmX,UAIjBnX,KAAKqE,cAAe,GAExB/B,EAAapC,UAAUgxB,UAAY,WAC/BlxB,KAAKwC,QAAQwE,GAAKhH,KAAKwC,QAAQwE,IAAMmqB,cAAY,oBACjDnxB,KAAKoxB,eACDC,WAAY,cACZC,iBAAkB,sBAClBC,SAAU,YACVC,eAAgB,oBAChBC,SAAU,WACVC,eAAgB,mBAChBC,QAAS,WACTC,KAAM,OACNC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,QAAS,UACTC,WAAY,cACZC,GAAI,KACJC,MAAO,SACPC,OAAQ,SACRC,YAAa,iBACbC,eAAgB,kBAChBC,WAAY,wBACZC,YAAa,eACbC,SAAU,YACVC,aAAc,gBACdC,KAAM,OACNC,kBAAmB,yBACnBC,iBAAkB,eAClBC,YAAa,eACbC,IAAK,MACLC,GAAI,KACJC,IAAK,MACLC,YAAa,cACbC,QAAS,WACTC,WAAY,eACZC,OAAQ,UACRC,UAAW,cACXC,KAAM,OACNC,MAAO,QACPC,UAAW,sBACXC,WAAY,cACZC,UAAW,aACXC,UAAW,aACXC,SAAU,YACVC,WAAY,cACZC,YAAa,gBAEjBl0B,KAAKwJ,KAAO,GAAI2qB,QAAK,eAAgBn0B,KAAKoxB,cAAepxB,KAAK6gB,QAC9D7gB,KAAKuf,KAAO,GAAI0R,wBAAqBjxB,KAAK6gB,QAC1C7gB,KAAKkc,eAAiB,EACtBlc,KAAK8jB,iBAAmB,EACxB9jB,KAAKuQ,cAAgB,EACrBvQ,KAAKuc,WAAa,EAClBvc,KAAK4E,eAAgB,EACrB5E,KAAKo0B,UACLp0B,KAAK2J,iBACD0qB,iBACMxxB,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAChD5G,MAAO,gBAAiB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,sBACnD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,oBACjD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,oBACjD5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,KAAM5B,IAAKjB,KAAKwJ,KAAKC,YAAY,QACxC5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAEtD6qB,eACMzxB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,iBACjD5G,MAAO,qBAAsB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,wBACxD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,kBAAmB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,qBACrD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAEtD8qB,kBACM1xB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAEpD+qB,iBACM3xB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,qBAAsB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,wBACxD5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,iBACjD5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAChD5G,MAAO,kBAAmB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,qBACrD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,KAAM5B,IAAKjB,KAAKwJ,KAAKC,YAAY,QACxC5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAGrDzJ,KAAK0J,WACD+qB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAI,KAAMC,MAAO,SACxGC,gBAAiB,KAAMC,WAAY,OAAQC,SAAU,OAAQC,QAAS,UAAWC,WAAY,cAAelnB,SAAU,OACtHmnB,OAAQ,UAAWC,UAAW,cAAeC,QAAS,WAAYC,WAAY,eAAgBC,cAAe,WAC7GC,YAAa,WAAYC,YAAa,YAE1C31B,KAAK41B,cACDnB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAI90B,KAAKwJ,KAAKC,YAAY,MAAMosB,cACvHd,MAAO/0B,KAAKwJ,KAAKC,YAAY,SAASosB,cAAeb,gBAAiB,KAAMC,WAAYj1B,KAAKwJ,KAAKC,YAAY,QAAQosB,cACtHX,SAAUl1B,KAAKwJ,KAAKC,YAAY,QAAQosB,cAAeV,QAASn1B,KAAKwJ,KAAKC,YAAY,WAAWosB,cACjGT,WAAYp1B,KAAKwJ,KAAKC,YAAY,cAAcosB,cAAe3nB,SAAUlO,KAAKwJ,KAAKC,YAAY,QAAQosB,cACvGR,OAAQr1B,KAAKwJ,KAAKC,YAAY,UAAUosB,cAAeP,UAAWt1B,KAAKwJ,KAAKC,YAAY,aAAaosB,cACrGN,QAASv1B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAAeL,WAAYx1B,KAAKwJ,KAAKC,YAAY,cAAcosB,cACzGJ,cAAez1B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAAeH,YAAa11B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAC7GF,YAAa31B,KAAKwJ,KAAKC,YAAY,WAAWosB,eAE7C71B,KAAK2C,SACN3C,KAAK2C,QAAWC,KAAM,QAASC,MAAO,WAG9CP,EAAapC,UAAU41B,OAAS,WAC5B91B,KAAK+G,aACL/G,KAAKqe,QAEGzb,KAAM5C,KAAKwJ,KAAKC,YAAY,YAC5BiT,QAAS,kCAGT9Z,KAAM5C,KAAKwJ,KAAKC,YAAY,gBAC5BiT,QAAS,iCAGjB1c,KAAKkQ,SAAWlQ,KAAK4Q,eACrB5Q,KAAK0M,UAAY1M,KAAKsa,eACtB,IAAIyb,KACElzB,MAAO,SAAU5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAC5C5G,MAAO,YAAa5B,IAAKjB,KAAKwJ,KAAKC,YAAY,eAEjDusB,IACEnzB,MAAO,SAAU5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAC5C5G,MAAO,YAAa5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAErDzJ,MAAK2J,gBAAgC,eAAI3J,KAAK2J,gBAAgC,eAAEssB,OAAOF,GACvF/1B,KAAK2J,gBAAgC,eAAI3J,KAAK2J,gBAAgC,eAAEssB,OAAOD,GACnFh2B,KAAK8T,qBAAsByT,gBAC3BvnB,KAAK2mB,YAAc3mB,KAAK8T,WACxB9T,KAAKk2B,oBAAmB,GAAIrP,UAAQsP,KAAK,MAGzCn2B,KAAK2mB,YAAc,GAAIY,eAAYvnB,KAAK8T,YACxC9T,KAAKkI,SAAWlI,KAAK2mB,YAAYwJ,aAAa,GAAItJ,UAClD7mB,KAAKo2B,eAETp2B,KAAKq2B,iBACDr2B,KAAK8R,kBACL9R,KAAKs2B,kBAGbh0B,EAAapC,UAAUo2B,eAAiB,WACpCt2B,KAAKu2B,UAAY,GAAIC,aAAUx2B,KAAKwC,SAChCi0B,WAAY,kBACZC,SAAU,EACVC,OAAQ32B,KAAK22B,OAAOxiB,KAAKnU,MACzB42B,UAAW52B,KAAK62B,iBAAiB1iB,KAAKnU,MACtC82B,KAAM92B,KAAK+2B,YAAY5iB,KAAKnU,MAC5Bg3B,SAAUh3B,KAAKi3B,gBAAgB9iB,KAAKnU,MACpCk3B,kBAAkB,EAClBC,iBAAiB,EACjBC,MAAO,mBACPC,cAAc,KAItB/0B,EAAapC,UAAUy2B,OAAS,SAAUhxB,GACtC,GAAI3E,GAAShB,KAAKu2B,UAAUe,kBAC5B,KAAKt2B,EAAOiN,UAAUC,SAAS,mBAAsBlN,EAAOiN,UAAUC,SAAS,mBAAqBZ,UAAQtM,EAAQ,cAChH,OAAO,CAEX,IAIIu2B,GAJAC,EAAgBx3B,KAAKoG,cAAc,OACnCf,UAAW,8CACX0qB,OAAQ,mCAAqC/vB,KAAKwC,QAAQi1B,aAG9D,IAAIz3B,KAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,kBACnEqpB,EAAejqB,UAAQtM,EAAQ,sBAAsByQ,WAAU,GAC/DnE,UAAQtM,EAAQ,sBAAsBiN,UAAUgF,IAAI,0BAEnD,CACDukB,EAAcvpB,UAAUgF,IAAI,gBAC5BskB,EAAev3B,KAAKoG,cAAc,OAASf,UAAW,oBACtD,IAAI+Z,GAAc9R,UAAQtM,EAAQ,iBAAiByQ,WAAU,EAC7D8lB,GAAa9wB,YAAY2Y,GACzB9R,UAAQtM,EAAQ,iBAAiBiN,UAAUgF,IAAI,sBAQnD,MANAukB,GAAc/wB,YAAY8wB,GACNC,EAAcxyB,iBAAiB,KACrC8D,QAAQ,SAAUoM,GAC5BA,EAAMwiB,gBAAgB,QAE1B13B,KAAKwC,QAAQiE,YAAY+wB,GAClBA,GAEXl1B,EAAapC,UAAU22B,iBAAmB,SAAUlxB,GAChD3F,KAAK23B,YAAchyB,EAAE3E,OACrBhB,KAAK43B,oBAAqB,EAC1B3xB,SAAS4xB,KAAK5pB,UAAUgF,IAAI,oBAE5BjT,KAAK83B,YAAcnyB,EAAEmyB,WACrB,IAAI5wB,GAAOoG,UAAQ3H,EAAE3E,OAAQ,qBACzBoN,EAAQd,UAAQ3H,EAAE3E,OAAQ,sBAC1B+2B,GAAkBC,WAAqB,OAAT9wB,EAAgBA,EAAKF,GAAKoH,EAAMpH,GAAIixB,YAAa7pB,EAAMpH,GAAI0H,QAAQ,EACrG1O,MAAKoK,QAAQ,YAAa2tB,GAC1B/3B,KAAK43B,mBAAqBG,EAAcrpB,QAE5CpM,EAAapC,UAAU62B,YAAc,SAAUpxB,GAC3C,IAAI3F,KAAK43B,mBAAT,CAGA,GAAIM,GAAiBl4B,KAAKwC,QAAQwC,iBAAiB,2BAQnD,IAPAkzB,EAAepvB,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,8BAEzBsU,EAAiBl4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,2BAErB9b,oBAAkBnC,EAAE3E,QAAxB,CAGA,GAA0B,SAAtB2E,EAAE3E,OAAOie,UAAuB3R,UAAQ3H,EAAE3E,OAAQ,wBAA0BsM,UAAQ3H,EAAE3E,OAAQ,qBAC7FsM,UAAQ3H,EAAE3E,OAAQ,IAAMhB,KAAKwC,QAAQwE,KAAOsG,UAAQ3H,EAAE3E,OAAQ,eAAkB2E,EAAE3E,OAAO0E,eAAiBC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,gBAAkBlO,KAAKgO,wBAE5K,WADAhO,MAAK83B,YAAY7pB,UAAUgF,IAAI,kBAI/BjT,MAAK83B,YAAY7pB,UAAU2V,OAAO,kBAEtC,IAAIuU,GAAa7qB,UAAQ3H,EAAE3E,OAAQ,qBAC/B4e,EAAUtS,UAAQ3H,EAAE3E,OAAQ,qBAChC,IAAIm3B,EAAY,CACZ,GAAIC,GAAOD,EAAWE,wBAElBC,GADAC,EAAS5yB,EAAEiG,MAAM4sB,SAAW7yB,EAAEiG,MAAM6sB,eAAe,GAAGD,SAC7BJ,EAAKM,IAC9BC,EAAmBP,EAAKQ,OAASL,CAEjCD,IADAO,EAAY,IAEZV,EAAWlqB,UAAUgF,IAAI,wBAEpB0lB,EAAmBE,GACxBV,EAAWlqB,UAAUgF,IAAI,+BAG5B,IAAItN,EAAE3E,OAAOiN,UAAUC,SAAS,gBAA+C,IAA7BvI,EAAE3E,OAAO6O,SAASlP,OACrEgF,EAAE3E,OAAOiN,UAAUgF,IAAI,+BAEtB,IAAItN,EAAE3E,OAAOiN,UAAUC,SAAS,gBAAkBvI,EAAE3E,OAAO6O,SAAS,GAAG5B,UAAUC,SAAS,qBAAsB,CAC7GkqB,EAAOzyB,EAAE3E,OAAO6O,SAAS,GAAGwoB,yBAE5BC,GADAC,EAAS5yB,EAAEiG,MAAM4sB,SAAW7yB,EAAEiG,MAAM6sB,eAAe,GAAGD,SAC7BJ,EAAKM,MAC9BG,EAAY,KAEZlzB,EAAE3E,OAAOiN,UAAUgF,IAAI,4BAG1B,KAAI3F,UAAQ3H,EAAE3E,OAAQ,uBAAyB2E,EAAE3E,OAAOiN,UAAUC,SAAS,wBACvE0R,IACDA,EAAUja,EAAE3E,QAEZ4e,EAAQ5Y,GAAG1B,QAAQ,WAAa,GAAG,CACnC,GAAI8yB,GAAOzyB,EAAE3E,OAAOq3B,wBAChBE,EAAS5yB,EAAEiG,MAAM4sB,SAAW7yB,EAAEiG,MAAM6sB,eAAe,GAAGD,QAEtDK,EAAY,IADZF,EAAmBP,EAAKQ,OAASL,GAEdM,GACnBlzB,EAAE3E,OAAOiN,UAAUgF,IAAI,2BAInC,GAAI8kB,IACAC,WAA2B,OAAfG,EAAsBA,EAAWnxB,GAAiB,OAAZ4Y,EAAmBA,EAAQ5Y,GAAK,KAClFixB,YAAyB,OAAZrY,EAAmBA,EAAQ5Y,GAAK,KAAM0H,QAAQ,EAE/D1O,MAAKoK,QAAQ,OAAQ2tB,GACrB/3B,KAAK43B,mBAAqBG,EAAcrpB,UAE5CpM,EAAapC,UAAU+2B,gBAAkB,SAAUtxB,GAC/C,GAAIlD,GAAQzC,IACZ,KAAIA,KAAK43B,mBAAT,CAGA,GAAIkB,GAAcxrB,UAAQ3H,EAAE3E,OAAQ,oBAChC8G,qBAAkBgxB,IAAgBnzB,EAAE3E,OAAO0E,eAC3CC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,gBAAkBlO,KAAKgO,0BACjE8qB,EAAcxrB,UAAQ3H,EAAE3E,OAAO0E,cAAcuJ,uBAAwB,qBAEzE,IAAI8pB,EACCjxB,qBAAkBnC,EAAEgxB,UACrBoC,EAAgBzrB,UAAQ3H,EAAEgxB,OAAQ,oBAEtC,IAAIxjB,EACJ,KAAK4lB,EAAe,CAChB,GAAIC,GAAY1rB,UAAQ3H,EAAE3E,OAAQ,sBAC9Bi4B,GACAvqB,QAAQ,EAAOwqB,WAA4B,OAAhBJ,EAAuBA,EAAY9xB,GAC1C,OAAdgyB,EAAqBA,EAAUhyB,GAAK,KAAMmyB,YAA2B,OAAdH,EAAqBA,EAAUhyB,GAAK,KAErGhH,MAAKoK,QAAQ,OAAQ6uB,GACjBA,EAAcvqB,SACdqqB,GAAgB,GAEpB5lB,EAAWnT,KAAK+O,gBAEpB/O,KAAKkS,eAAgB,CACrB,IAAIknB,GAAOp5B,KAAKgO,yBAA2BrI,EAAE3E,OAAO0E,eAChDC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,eAAiBvI,EAAE3E,OAAO0E,cAAcuJ,uBAAyBtJ,EAAE3E,MACjH,IAAI83B,IAAgBC,EAAe,CAC/B,GAAIM,GAAYP,EAAY9xB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,EAC1E,IAAIhI,KAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,iBACnElO,KAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,kBAAmB,CAClFhH,MAAO,EACPlH,MAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK23B,aAC1B33B,KAAKuN,YAAYD,UAAQtN,KAAK23B,YAAa,yBAG3CzwB,EAAOlH,KAAKkP,QAAQlP,KAAK23B,aACzB33B,KAAKiN,WAAWjN,KAAK23B,eAErB2B,EAAY5rB,YAAW1N,KAAKqO,SAASyqB,OAAkB,IAE7ClI,aACV0I,EAAYA,EAAU1I,aAEtBlkB,EAAYY,UAAQwrB,EAAa,uBACT9zB,iBAAiB,sBACjC8D,QAAQ,SAAUyY,GACtB9e,EAAMD,QAAQsC,cAAc,IAAMyc,EAAIva,KACtCvE,EAAM8K,YAAYgU,IAM1B,KAAK,GAHDgY,GAAY7sB,EAAU1H,iBAAiB,qBACvCw0B,KACAC,MAAU,GACLj5B,EAAI,EAAGA,EAAI+4B,EAAU54B,OAAQH,KAC9B+4B,EAAU/4B,GAAGyN,UAAUC,SAAS,yBAChCqrB,EAAU/4B,GAAGyN,UAAUC,SAAS,8BAChCurB,EAAUj5B,GAEdg5B,EAAQ/xB,KAAK8xB,EAAU/4B,GAAGwG,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAE9DhH,MAAK05B,YAAYF,GACbV,EAAY7qB,UAAUC,SAAS,wBAC/BorB,EAAUnyB,MAAM2Q,OAAO2hB,EAAS,EAAGvyB,GAGnCoyB,EAAUnyB,MAAM2Q,OAAO2hB,EAAU,EAAG,EAAGvyB,GAE3CoyB,EAAUnyB,MAAM2B,QAAQ,SAAU5B,GAC1BzE,EAAMuL,wBACD9G,EAAKC,MAIN1E,EAAMya,WAAWhW,GAAOmyB,GAHxB52B,EAAMysB,UAAUhoB,GAAOmyB,GAOvBnyB,EAAKlE,UACLP,EAAMya,WAAWhW,GAAOmyB,GAGxB52B,EAAMysB,UAAUhoB,GAAOmyB,UAMtC,IAAID,EAAKnrB,UAAUC,SAAS,gBAA2C,IAAzBkrB,EAAKvpB,SAASlP,SAAiBo4B,EAAe,CAC7F,GACIY,IADAjtB,EAAYY,UAAQ8rB,EAAM,uBACNpyB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,GAClEd,MAAO,EACPlH,MAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK23B,aAC1B33B,KAAKuN,YAAYD,UAAQtN,KAAK23B,YAAa,yBAG3CzwB,EAAOlH,KAAKkP,QAAQlP,KAAK23B,aACzB33B,KAAKiN,WAAWjN,KAAK23B,cAErB33B,KAAKgO,wBACA9G,EAAKC,MAINnH,KAAKkd,WAAWhW,GAAOyyB,GAHvB35B,KAAKkvB,UAAUhoB,GAAOyyB,GAOtBzyB,EAAKlE,UACLhD,KAAKkd,WAAWhW,GAAOyyB,GAGvB35B,KAAKkvB,UAAUhoB,GAAOyyB,OAI7B,IAAIP,EAAKnrB,UAAUC,SAAS,gBAAkBkrB,EAAKvpB,SAAS,GAAG5B,UAAUC,SAAS,uBAAyB6qB,EAAe,CAC3H,GAAIrsB,GAAYY,UAAQ8rB,EAAM,sBAC1BQ,EAAYltB,EAAU1F,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,GACpEd,MAAO,EACPlH,MAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK23B,aAC1B33B,KAAKuN,YAAYD,UAAQtN,KAAK23B,YAAa,yBAG3CzwB,EAAOlH,KAAKkP,QAAQlP,KAAK23B,aACzB33B,KAAKiN,WAAWjN,KAAK23B,aAEzB,IAAI2B,GAAY5rB,YAAW1N,KAAKqO,SAAS+qB,OAAW,EAEhDE,GAAU1I,aACV0I,EAAYA,EAAU1I,YAETwI,EAAKp0B,iBAAiB,sBAC5B8D,QAAQ,SAAUyY,GACrB9e,EAAMD,QAAQsC,cAAc,IAAMyc,EAAIva,KACtCvE,EAAM8K,YAAYgU,MAGtBgY,EAAY7sB,EAAU1H,iBAAiB,sBACjC8D,QAAQ,SAAUyY,GACpB9e,EAAMD,QAAQsC,cAAc,IAAMyc,EAAIva,KACtCvE,EAAMwK,WAAWsU,KAGrBvhB,KAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,kBACnElO,KAAKkd,WAAWhW,GAAO0yB,GAGvB55B,KAAKkvB,UAAUhoB,GAAO0yB,GAE1BN,EAAUnyB,MAAM2B,QAAQ,SAAU5B,GAC1BzE,EAAMuL,wBACD9G,EAAKC,MAIN1E,EAAMya,WAAWhW,GAAO0yB,GAHxBn3B,EAAMysB,UAAUhoB,GAAO0yB,GAOvB1yB,EAAKlE,UACLP,EAAMya,WAAWhW,GAAO0yB,GAGxBn3B,EAAMysB,UAAUhoB,GAAO0yB,SAKlC,KAAKtsB,UAAQ3H,EAAE3E,OAAQ,uBAAyB2E,EAAE3E,OAAOiN,UAAUC,SAAS,wBAA0B6qB,EAAe,CAClH7xB,MAAO,KACX4xB,EAAcxrB,UAAQ3H,EAAE3E,OAAQ,wBACZ2E,EAAE3E,OAAOiN,UAAUC,SAAS,uBAC5C4qB,EAAcnzB,EAAE3E,QAGJ,YADZ24B,EAAUb,EAAY9xB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,MAEhEhI,KAAKu2B,UAAUe,mBAAmB5xB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK23B,aAC1B33B,KAAKuN,YAAYD,UAAQtN,KAAK23B,YAAa,yBAG3CzwB,EAAOlH,KAAKkP,QAAQlP,KAAK23B,aACzB33B,KAAKiN,WAAWjN,KAAK23B,cAErB33B,KAAKgO,wBACA9G,EAAKC,MAINnH,KAAKkd,WAAWhW,GAAOyyB,GAHvB35B,KAAKkvB,UAAUhoB,GAAOyyB,GAOtBzyB,EAAKlE,UACLhD,KAAKkd,WAAWhW,GAAOyyB,GAGvB35B,KAAKkvB,UAAUhoB,GAAOyyB,IAKjCZ,GACD/4B,KAAKoK,QAAQ,cAAgBgkB,aAAcjb,EAAUjM,KAAMlH,KAAK+O,gBAAiB9F,KAAM,kBAE3FjJ,KAAKkS,eAAgB,EACrBjM,SAAS4xB,KAAK5pB,UAAU2V,OAAO,mBAC/B,IAAIsU,GAAiBl4B,KAAKwC,QAAQwC,iBAAiB,2BACnDkzB,GAAepvB,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,8BAEzBsU,EAAiBl4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,2BAEzBsU,EAAiBl4B,KAAKwC,QAAQwC,iBAAiB,wBAChC8D,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,wBAErBje,EAAEgxB,QAAUhxB,EAAEgxB,OAAO1oB,UAAUC,SAAS,sBAAwBjI,SAASnB,cAAc,IAAMa,EAAEgxB,OAAO1oB,UAAU,KAChH2V,SAAOje,EAAEgxB,QAET32B,KAAKgO,yBACLhO,KAAKmX,YAGb7U,EAAapC,UAAU6Q,eAAiB,SAAU2G,GAC9C,GAAIA,EACA,IACI,MAAwB,kBAAbA,IAA2BzR,SAASjB,iBAAiB0S,GAAU/W,OAC/Dk5B,UAAiB5zB,SAASnB,cAAc4S,GAAU2D,UAAUoS,QAG5DqM,UAAQpiB,GAGvB,MAAOqiB,GACH,MAAOF,WAAiBniB,KAKpCpV,EAAapC,UAAUg2B,mBAAqB,SAAUtP,GAClD,GAAInkB,GAAQzC,KACR4K,EAAO5K,KAAK2mB,YAAYkB,aAAajB,GACrCe,EAAW,GAAIC,WACnBhd,GAAKsd,KAAK,SAAUviB,GACZA,EAAEwiB,QAAUxiB,EAAEwiB,OAAOrd,OACrBrI,EAAMyF,SAAWvC,EAAEwiB,OAAOrd,OAG1BrI,EAAMyF,SAAWvC,EAAEmF,OAEvBrI,EAAM2zB,gBACPhO,MAAM,SAAUziB,GACfgiB,EAASU,OAAO1iB,MAGxBrD,EAAapC,UAAUk2B,YAAc,WACjCp2B,KAAKiI,aACLjI,KAAKqvB,cACLrvB,KAAKg6B,cAET13B,EAAapC,UAAU85B,WAAa,WAChC,GAAIC,GAAUj6B,KAAKqH,YACnB6yB,gBAAajnB,IAAIgnB,EAAS,QAASj6B,KAAK6L,kBAAmB7L,MAC3Dk6B,eAAajnB,IAAIgnB,EAAS,WAAYj6B,KAAK2L,kBAAmB3L,MAC9Dk6B,eAAajnB,IAAIgnB,EAAS,UAAWj6B,KAAK2L,kBAAmB3L,MAC7Dk6B,eAAajnB,IAAIjT,KAAKwC,QAAS,UAAWxC,KAAKm6B,gBAAiBn6B,MAC5DA,KAAK8R,kBACLooB,eAAajnB,IAAIhN,SAAU,UAAWjG,KAAKm6B,gBAAiBn6B,MAEhEghB,OAAOoZ,iBAAiB,SAAUp6B,KAAKq6B,oBAAoBlmB,KAAKnU,QAEpEsC,EAAapC,UAAU6uB,aAAe,WAClC,GAAIkL,GAAUj6B,KAAKqH,YACnB6yB,gBAAatW,OAAOqW,EAAS,QAASj6B,KAAK6L,mBAC3CquB,eAAatW,OAAOqW,EAAS,WAAYj6B,KAAK2L,mBAC9CuuB,eAAatW,OAAOqW,EAAS,UAAWj6B,KAAK2L,mBAC7CuuB,eAAatW,OAAO5jB,KAAKwC,QAAS,UAAWxC,KAAKm6B,iBAClDD,eAAatW,OAAO3d,SAAU,UAAWjG,KAAKm6B,iBAC9CnZ,OAAOsZ,oBAAoB,SAAUt6B,KAAKq6B,sBAE9C/3B,EAAapC,UAAU8O,eAAiB,SAAUhO,EAAQu5B,GAItD,IAAK,GAHDC,GAAcx5B,YAAkB8rB,SAAW9sB,KAAK+G,UAAU/F,EAAOgG,IAAMhH,KAAK+G,UAAU,GAAK/F,GAC3F8I,EAAMywB,EAAWC,EAAW75B,OAAS,EAAI65B,EAAW75B,OACpDuG,EAAOlH,KAAKkH,KACP1G,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACrB0G,EAAOlH,KAAK2uB,eAAe6L,EAAWh6B,GAAI0G,EAAY,IAAN1G,EAEpD,OAAO0G,IAQX5E,EAAapC,UAAUqN,YAAc,SAAUvM,GAC3C,GAEI24B,GAFAl3B,EAAQzC,KACR0M,EAAY1L,CAUhB,IARsB,gBAAXA,IACP24B,EAAU35B,KAAKwC,QAAQwE,GAAK,IAAMhG,EAClCA,EAASiF,SAASqG,eAAeqtB,GACjCA,EAAUA,EAAQxrB,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAGjD2yB,EAAUjtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAE1C,WAAZ2yB,GAAyB34B,EAA7B,CAGA,GAAI2G,IAASmE,QAAS6tB,EAASjrB,QAAQ,EAAOzF,KAAM,cAC/CjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAKy6B,2BAA2B9yB,EAAM3G,GALtChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMg4B,2BAA2B5rB,EAAoB7N,OAOjEsB,EAAapC,UAAUu6B,2BAA6B,SAAU9yB,EAAM3G,GAChE,IAAK2G,EAAK+G,OAAQ,CACd,GAAIhC,GAAY1L,EACZkG,EAAOlH,KAAKgP,eAAetC,GAAW,GACtC+D,EAAQ,EACRjQ,MAAI,GACJsJ,MAAM,GACNgF,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtCwzB,EAAWhuB,EAAUoR,mBACrBvK,EAAW7G,EAAUuC,uBACrBzM,EAAUkK,EAAU1H,iBAAiB,sBACrC0U,EAAUhN,EAAU1H,iBAAiB,aAEzC,KADA8E,EAAM4P,EAAQ/Y,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAakU,EAAQlZ,GAAI,WAAWiF,SAExC,KAAKjF,EAAI,EAAGsJ,EAAMtH,EAAQ7B,OAAQH,EAAIsJ,EAAKtJ,UAChCR,MAAK+G,UAAUvE,EAAQhC,GAAGwG,GAErC,MAA4C,OAArC0F,EAAUuC,wBACbvC,EAAYA,EAAUuC,yBACjBjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBgG,EAAUuB,UAAUC,SAAS,gBACpDlO,KAAK0G,iBAAmBgG,EAAUuB,UAAUC,SAAS,qBACjDxB,EAAUuB,UAAUC,SAAS,yBACrCuC,GAGHzQ,MAAKgO,yBACF0sB,GAAYA,EAASr1B,UAAUC,QAAQ,oBAAsB,IAC7DwB,eAAa4zB,GAAW,mBACxBjsB,YAAUisB,GAAW,iBACjBnnB,GAAYA,EAASlO,UAAUC,QAAQ,qBAAuB,GAC9DmJ,YAAU8E,GAAW,sBAIjC,IAAIpD,GAAOzD,EAAUhH,cAAcA,cAAcA,cAC7Ci1B,IAEJ,IAAI36B,KAAKmR,SAAWnR,KAAKoR,UAAW,CAChC,GAAIwpB,GAAU1zB,EAAKC,MAAMsJ,GACrBoqB,EAAe75B,EAAOgE,iBAAiB,oBAC3C,IAAI41B,GAAWA,EAAQzzB,MACnB,IAAK,GAAI/F,GAAI,EAAGA,EAAIw5B,EAAQzzB,MAAMxG,OAAQS,IAAK,CAC3C,GAAI2H,GAAS/I,KAAKyS,UAAUmoB,EAAQzzB,MAAM/F,GAAGyG,MAC7C,IAAIgzB,EAAaz5B,GAAI,CACjB,GAAI05B,GAAqBD,EAAaz5B,GAAG0D,cAAc,oBACnDiE,KAAWA,EAAO6H,cAAiB5Q,KAAK+6B,mBAAmBhyB,IAAW+xB,IACtEH,EAAalzB,KAAKozB,EAAaz5B,GAAG4F,MAMtDkR,SAAOlX,GACHhB,KAAK0G,gBACL1G,KAAKmY,iBAAiBnX,EAAOgG,KAE7B2zB,EAAah6B,QACbX,KAAKmY,gBAAgBwiB,GAEzBzzB,EAAKC,MAAM2Q,OAAOrH,EAAO,SAClBzQ,MAAK+G,UAAUY,EAAKmE,SAC3B9L,KAAK4Z,mBACL5Z,KAAKoH,qBAAqB+I,EAAMjJ,GAC5BlH,KAAKgO,yBAA2BuF,KAAevT,KAAK0G,gBAAkB6M,EAAStF,UAAUC,SAAS,gBACjGlO,KAAK0G,gBAAkB6M,EAAStF,UAAUC,SAAS,wBACpDgK,SAAO3E,GAENvT,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAUzC,GAE3B3H,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,iBAGrE5E,EAAapC,UAAU66B,mBAAqB,SAAUhyB,GAGlD,MADSA,GAAO2O,WAAwC,gBAApB3O,GAAO2O,cAAoDxB,KAA3BnN,EAAO2O,SAASvX,SAGxFmC,EAAapC,UAAU+M,WAAa,SAAUjM,GAC1C,GAAIyB,GAAQzC,KAIR2H,GAASmE,QAHGwB,UAAQtM,EAAQ,sBACRgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAE3BmI,OADlB7B,UAAQtM,EAAQ,qBAAqBgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACrC0H,QAAQ,EAAOzF,KAAM,aAC/DjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAKg7B,0BAA0BrzB,EAAM3G,GALrChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMu4B,0BAA0BnsB,EAAoB7N,MAOhEsB,EAAapC,UAAU86B,0BAA4B,SAAUrzB,EAAM3G,GAC/D,IAAK2G,EAAK+G,OAAQ,CACd,GAAIhC,GAAYY,UAAQtM,EAAQ,sBAC5BkG,EAAOlH,KAAKgP,eAAetC,GAC3BwD,EAAW5C,UAAQtM,EAAQ,qBAC3B8N,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtCqM,EAAWrD,EAASjB,uBACpBwB,EAAQ,EACRwqB,EAAc/qB,EACdwqB,EAAWxqB,EAAS4N,mBACpBpE,EAAUxJ,EAASlL,iBAAiB,cACpCxE,MAAI,GACJsJ,EAAM4P,EAAQ/Y,MAClB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAakU,EAAQlZ,GAAI,WAAWiF,SAExC,MAA2C,OAApCyK,EAASjB,wBACZiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAI1H,GAAS/I,KAAKyS,UAAUvL,EAAKC,MAAMsJ,GAAO5I,MAC1CkB,IAAUA,EAAO2O,UAAYujB,EAAYn2B,cAAc,gBACvD9E,KAAKklB,gBAAgBnc,EAAQkyB,EAAYn2B,cAAc,eAAekC,MAErEuM,GAAYA,EAASlO,UAAUC,QAAQ,oBAAsB,IAC1Do1B,GACA5zB,eAAa4zB,GAAW,mBAG3BA,GAAYA,EAASr1B,UAAUC,QAAQ,oBAAsB,IAC1DiO,GACAzM,eAAayM,GAAW,qBAGhC,IAAIunB,GAAqBG,EAAYn2B,cAAc,oBAEnD,KACI,GAAI9E,KAAKgO,0BAA4BitB,EAAYhsB,wBAA0BgsB,EAAYnd,oBAAqB,CACxG,GAAIod,GAAeD,EAAYhsB,uBAC3BksB,EAAaF,EAAYnd,kBACzBhW,qBAAkBqzB,MAAkBn7B,KAAK0G,gBAAkBw0B,EAAajtB,UAAUC,SAAS,gBACvFlO,KAAK0G,gBAAkBw0B,EAAajtB,UAAUC,SAAS,wBACvDgtB,GAAgBA,EAAajsB,wBAA0BisB,EAAajsB,uBAAuBhB,UAAUC,SAAS,sBACjGlO,KAAKkP,QAAQgsB,EAAajsB,wBAChCjM,UAAY,MAEvBkV,SAAOgjB,MAEAl7B,KAAK0G,gBAAkBy0B,EAAWltB,UAAUC,SAAS,gBACxDlO,KAAK0G,gBAAkBy0B,EAAWltB,UAAUC,SAAS,wBACzDgK,SAAOijB,GAGfjjB,SAAO+iB,GAEX,MAAOG,GACH,OAEAryB,GAAUA,EAAO6H,cACjB5Q,KAAKmY,iBAAiB8iB,EAAYj0B,KAElC+B,GAAU/I,KAAK+6B,mBAAmBhyB,IAAW+xB,GAC7C96B,KAAKmY,iBAAiB8iB,EAAYj0B,KAEtCE,EAAKC,MAAM2Q,OAAOrH,EAAO,GACnBvJ,EAAKC,MAAM,IAAMD,EAAKC,MAAM,GAAGA,OACjCnH,KAAKoH,qBAAqBsF,EAAWxF,IAAMlH,KAAKgO,wBAGpD,KAAK,GADD0V,GAAc1jB,KAAKwC,QAAQwC,iBAAiB,cACvCq2B,EAAM,EAAGA,EAAM3X,EAAY/iB,OAAQ06B,IACxC71B,eAAake,EAAY2X,GAAM,WAAWlkB,QAAQuM,EAAY2X,GAE7Dr7B,MAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAUzC,GAE3B3H,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,gBAGrE5E,EAAapC,UAAUyN,cAAgB,SAAUzG,EAAMP,GAWnD,GAVI3G,KAAK0G,gBAAkBC,IACvB3G,KAAK2G,QAAS,GAElB3G,KAAK2E,QACL3E,KAAKkc,eAAiB,EACtBlc,KAAKuQ,cAAgB,EACrBvQ,KAAK4E,eAAgB,EACrB5E,KAAKiH,eAAgBC,KAAMA,IAAQ,GACnCA,EAAOlH,KAAK8e,kBAAkB9e,KAAKkH,MAAM,GACzClH,KAAKovB,YAAYpvB,KAAKkH,KAAMlH,KAAKwC,QAAQsC,cAAc,uBAAuB,EAAM9E,KAAKkH,KAAKnE,IAAK4D,GAC/FO,EAAKjE,SAAU,CACf,GAAIq4B,GAAgBt7B,KAAKwC,QAAQsC,cAAc,sBAAsBA,cAAc,kBACnF9E,MAAKoN,UAAUkuB,GAEnBt7B,KAAK4E,eAAgB,GAEzBtC,EAAapC,UAAUi6B,gBAAkB,SAAUx0B,GAC/C,GAAIA,EAAEya,gBAAkBpgB,KAAKwC,UAAWxC,KAAKyvB,UAA2B,KAAd9pB,EAAE41B,SAAgC,KAAd51B,EAAE41B,SAAgC,KAAd51B,EAAE41B,SAG/F,GAAe,WAAX51B,EAAE61B,MAAqBx7B,KAAK8R,iBAAkB,CACnD9R,KAAK43B,oBAAqB,EAC1B3xB,SAAS4xB,KAAK5pB,UAAU2V,OAAO,mBAC/B,IAAIsU,GAAiBl4B,KAAKwC,QAAQwC,iBAAiB,2BACnDkzB,GAAepvB,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,8BAEzBsU,EAAiBl4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,2BAEzBsU,EAAiBl4B,KAAKwC,QAAQwC,iBAAiB,wBAChC8D,QAAQ,SAAUyY,GAC7BA,EAAItT,UAAU2V,OAAO,uBAEzB,IAAI6X,GAAcz7B,KAAKwC,QAAQsC,cAAc,qBACzC22B,IACA7X,SAAO6X,GAEPz7B,KAAKgO,yBACLhO,KAAKmX,eAtBTxR,GAAE+1B,kBA0BVp5B,EAAapC,UAAUm6B,oBAAsB,WACrC9R,UAAQC,UAAYxH,OAAOsO,WAAa,IACxCtvB,KAAK+S,YAAc,WAGnB/S,KAAK+S,YAAc,cAG3BzQ,EAAapC,UAAUiY,gBAAkB,SAAU0iB,IAE3C76B,KAAKmR,SAAWnR,KAAKoR,YACrBpR,KAAK27B,cAAcd,IAG3Bv4B,EAAapC,UAAUkH,qBAAuB,SAAUsF,EAAWvF,EAAOwQ,EAAgBikB,GACtF,IAAK57B,KAAK0G,eAAgB,CACtB,GAAI1G,KAAKyvB,SACL,MAEJ,IAAIoM,GAAQnvB,EAAU5H,cAAc,gBAAgBwf,kBAChDjV,EAAU3C,EAAU5H,cAAc,mBAClCwK,EAAS5C,EAAU5H,cAAc,iBACrC,IAAI+2B,EAAQ,EAQR,GAPAxsB,EAAQsP,UAAW,EACnBrP,EAAOqP,UAAW,GACdrP,EAAOwO,mBAAmB7P,UAAUC,SAAS,kBAC7CmB,EAAQyO,mBAAmB7P,UAAUC,SAAS,oBAC9CoB,EAAOwO,mBAAmB7P,UAAU2V,OAAO,iBAC3CvU,EAAQyO,mBAAmB7P,UAAU2V,OAAO,kBAE5C5jB,KAAKgO,0BAA4B2J,EAAgB,CAIjD,IAHA,GAAIlH,GAAQ,EACRjO,MAAU,KAED,CACT,GAAIs5B,GAAWpvB,EAAUhH,cAAcV,iBAAiB,mBACpD+2B,EAAUrvB,EAAUhH,cAAcV,iBAAiB,iBAIvD,IAHAqK,EAAUysB,EAASA,EAASn7B,QAAU,EAAI8P,IAC1CnB,EAASysB,EAAQA,EAAQp7B,QAAU,EAAI8P,MACvCjO,EAAUs5B,EAASA,EAASn7B,QAAU,EAAI8P,OAC3BjO,EAAQkD,eAAyD,SAAxClD,EAAQkD,cAAciH,MAAMC,QAIhE,KAHA6D,KAOR,IADIN,EAAOzD,EAAUuC,uBACdkB,IAASA,EAAKlC,UAAUC,SAAS,qBAAqB,CACzD,GAAIiC,EAAKlC,UAAUC,SAAS,qBAAsB,CAC9CiC,EAAOA,EAAKnL,iBAAiB,qBAAqBmL,EAAKnL,iBAAiB,qBAAqBrE,OAAS,EACtG,OAEJwP,EAAOA,EAAKlB,uBAEhB,GAAI2sB,GAAclvB,EAAUuB,UAAUC,SAAS,qBAC3CiC,EAAOzD,EAEoB,QADvByG,EAAWnT,KAAKqO,SAAS8B,IAChBnN,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAGrB,IAAIY,GAAQA,EAAKlC,UAAUC,SAAS,oBAAqB,CACtDiB,EAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAEzB,SADvBmM,EAAWnT,KAAKkP,QAAQC,IACfnM,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAIpBoI,KACFxQ,GAA6B,OAApBA,EAAMnE,UACfsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAK1B,IAAIvP,KAAKgO,0BAA4B2J,EAAgB,CAIjD,IAHA,GAAIlH,GAAQ,EACRjO,MAAU,KAED,CACT,GAAIs5B,GAAWpvB,EAAUhH,cAAcV,iBAAiB,mBACpD+2B,EAAUrvB,EAAUhH,cAAcV,iBAAiB,iBAQvD,IAPAqK,EAAUysB,EAASA,EAASn7B,QAAU,EAAI8P,IAC1CnB,EAASysB,EAAQA,EAAQp7B,QAAU,EAAI8P,IACnCzQ,KAAK4E,gBACLyK,EAAU3C,EAAUhH,cAAcZ,cAAc,kDAChDwK,EAAS5C,EAAUhH,cAAcZ,cAAc,oDAEnDtC,EAAUs5B,EAASA,EAASn7B,QAAU,EAAI8P,OAC3BjO,EAAQkD,eAAyD,SAAxClD,EAAQkD,cAAciH,MAAMC,QAIhE,KAHA6D,KAQR,IAFA,GAAIN,OAAO,GACPmJ,EAAW5M,EAAUuC,uBAClBqK,GAAU,CAIb,GAHIA,EAASrL,UAAUC,SAAS,uBAC5BoL,EAAWA,EAAStU,iBAAiB,qBAAqBsU,EAAStU,iBAAiB,qBAAqBrE,OAAS,IAElH2Y,EAASrL,UAAUC,SAAS,oBAAqB,CACjDiC,EAAOmJ,CACP,OAEJA,EAAWA,EAASrK,uBAKxB,GAHInH,oBAAkBqI,IAASzD,EAAU1H,iBAAiB,qBAAqB0H,EAAU1H,iBAAiB,qBAAqBrE,OAAS,KACpIwP,EAAOzD,EAAU1H,iBAAiB,qBAAqB0H,EAAU1H,iBAAiB,qBAAqBrE,OAAS,IAEhHi7B,GAAclvB,EAAUuB,UAAUC,SAAS,qBAC3CiC,EAAOzD,EAEoB,QADvByG,EAAWnT,KAAKqO,SAAS8B,IAChBnN,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAGrB,IAAIY,EAAM,CACX,GAAIhB,GAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAChDmM,EAAWnT,KAAKkP,QAAQC,EACD,QAAvBgE,EAASnQ,WAAsBsM,EAC/BA,EAAOC,SAAU,EAEZF,IACLA,EAAQE,SAAU,QAIpBoI,IAAmB7P,oBAAkBuH,KAC3CA,EAAQE,SAAU,EAClBF,EAAQsP,UAAW,EACnBrP,EAAOC,SAAU,EACjBD,EAAOqP,UAAW,EACdxX,IACAmI,EAAOwO,mBAAmB7P,UAAUgF,IAAI,iBACxC5D,EAAQyO,mBAAmB7P,UAAUgF,IAAI,qBAY7D3Q,EAAapC,UAAU6O,cAAgB,SAAUitB,GAC7Ch8B,KAAKoE,cAAe,EACf43B,IACDA,EAAch8B,KAAKi8B,WAEvB,IAAIC,GAAeF,EAAYh5B,UAC3BiT,EAAe+lB,EAAYj5B,IAC3B8rB,EAAWnhB,YAAWsuB,EAAY70B,UAAW,GAC7CD,EAAQY,oBAAkBk0B,EAAY/4B,UAEtCjD,KAAK8e,mBAAoB9b,UAAWk5B,EAAc/0B,MAAO0nB,EAAU9rB,IAAKkT,IAAgB,GADxFjW,KAAK8e,mBAAoB9b,UAAWk5B,EAAc/0B,MAAO0nB,EAAU9rB,IAAKkT,EAAchT,SAAU+4B,EAAY/4B,WAAY,EAG5H,OADAjD,MAAKoE,cAAe,EACb8C,GAEX5E,EAAapC,UAAU4e,kBAAoB,SAAU5X,EAAMi1B,GACvD,GAAIr0B,oBAAkBZ,GAClB,MAAO,KAEX,IAAIspB,EACJ,IAAItpB,EAAKC,OAASD,EAAKC,MAAMxG,SAAWlB,OAAO6I,KAAKpB,EAAKC,MAAM,IAAIxG,OAAS,GAAKw7B,GAE7E,IAAK,GADDxiB,GAAOzS,EAAKC,MAAMxG,OACbgK,EAAI,EAAGA,EAAIgP,EAAMhP,IACtB6lB,EAAUtpB,EAAKC,MAAMwD,GACrB6lB,EAAUxwB,KAAK8e,kBAAkB0R,EAAS2L,GAC1Cj1B,EAAKC,MAAMwD,GAAK6lB,EACZ/wB,OAAO6I,KAAKkoB,GAAS7vB,OAAS,GAAKw7B,IACnCj1B,EAAKC,MAAM2Q,OAAOnN,EAAG,GACrBA,IACAgP,IAKZ,IAAIyiB,GAAYl1B,EAAK2Q,MACrB,IAAK3Q,EAAKW,OAAwB,KAAfX,EAAKW,QAAkBC,oBAAkBs0B,IAAeA,GAAiC,aAAnBA,EAAUnzB,MAC5E,WAAnBmzB,EAAUnzB,MAMV,GALI/B,EAAKyL,WACDzL,EAAKyL,SAAS8E,WAAWnS,QAAQ,SAAW,GAAK4B,EAAKyL,SAAS8E,WAAWnS,QAAQ,UAAY,KAC9F4B,EAAKrE,MAAQ,MAGhB7C,KAAKmD,aAAenD,KAAK+wB,mBAAsC,KAAf7pB,EAAKW,OAAkC,KAAlBX,EAAKyL,WAC1E3S,KAAKoE,aAA8B,KAAf8C,EAAKrE,WAA+BqT,KAAfhP,EAAKrE,UAAqCqT,KAAfhP,EAAKrE,QACzEu5B,GAAaA,EAAUC,WAAa,CACrC,GAAIr5B,GAAYkE,EAAKlE,UACjBs5B,EAAap1B,EAAKjE,QACtBiE,IAAS6C,MAAS7C,EAAK6C,MAAOlC,MAASX,EAAKW,MAAO8K,SAAYzL,EAAKyL,SAAU1J,KAAQ/B,EAAK+B,KAAMpG,MAASqE,EAAKrE,OAC1GiF,oBAAkBw0B,KACnBp1B,EAAKjE,SAAWq5B,GAEhBt5B,IACAkE,EAAKlE,UAAYA,GAEjBo5B,IAEAl1B,EAAK2Q,OAASukB,GAGK,OAAlBl1B,EAAKyL,UAAuC,UAAlBzL,EAAKyL,WAAyBzL,EAAKrE,OAA+B,IAAtBqE,EAAKrE,MAAMlC,SAClFuG,OAGmB,YAAlBA,EAAKyL,UAA4C,eAAlBzL,EAAKyL,WAA8B/S,MAAM28B,QAAQr1B,EAAKrE,SAAWqE,EAAKrE,MAAMlC,OAAS,GAAKuG,EAAKrE,MAAMyqB,KAAK,SAAUE,GAAO,MAAe,KAARA,GAAsB,OAARA,OAChLtmB,UAIJA,UAIJ,KAAIk1B,GAAiC,aAAnBA,EAAUnzB,MAA0C,WAAnBmzB,EAAUnzB,KAYxD,GAAKnB,oBAAkBZ,EAAKlE,YAAe8E,oBAAkBZ,EAAKC,OACnED,SAEC,CACD,GAAIjE,GAAWiE,EAAKjE,QAEhBiE,GADAlH,KAAK4G,oBACI5D,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,MAAOpE,IAAOmE,EAAKnE,MAG9DC,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,OAEnDW,oBAAkB7E,KACnBiE,EAAKjE,SAAWA,GAEhBm5B,IAEAl1B,EAAK2Q,OAASukB,GAEdl1B,EAAKC,OAA+B,IAAtBD,EAAKC,MAAMxG,SACzBuG,UA/ByE,CAC7E,GAAIs1B,GAAWt1B,EAAKnE,KACpBmE,GACI6C,MAAS7C,EAAK6C,MAAOlC,MAASX,EAAKW,MAAO8K,SAAYzL,EAAKyL,SAAU1J,KAAQ/B,EAAK+B,KAAMpG,MAASqE,EAAKrE,MACtGG,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,QAG1C0Q,OAASukB,EACVp8B,KAAK4G,qBACLM,EAAKnE,IAAMy5B,GA0BvB,MAAOt1B,IAQX5E,EAAapC,UAAU8wB,SAAW,SAAU9pB,GACxC,GAAIuG,GAASC,YAAWxG,MAAU,EAC9BlH,MAAK0G,eACL1G,KAAK2N,cAAcF,GAAQ,GAG3BzN,KAAK2N,cAAcF,IAQ3BnL,EAAapC,UAAU+7B,SAAW,WAC9B,GAAI/0B,EAeJ,OAbIA,GADAlH,KAAK4G,oBACI5D,UAAWhD,KAAKkH,KAAKlE,UAAWmE,MAAOnH,KAAKkH,KAAKC,MAAOpE,IAAK/C,KAAKkH,KAAKnE,MAGvEC,UAAWhD,KAAKkH,KAAKlE,UAAWmE,MAAOnH,KAAKkH,KAAKC,OAEzDW,oBAAkB9H,KAAKkH,KAAKjE,YAC7BiE,EAAKjE,SAAWjD,KAAKkH,KAAKjE,UAG1BjD,KAAKkH,KAAK2Q,SAEV3Q,EAAK2Q,OAAS7X,KAAKkH,KAAK2Q,QAErB3Q,GAQX5E,EAAapC,UAAUgP,QAAU,SAAUiB,GACvC,GAAID,GACA6T,EACAtT,EAAQ,CAQZ,IAPIN,YAAgBssB,aAChBvsB,EAAW5C,UAAQ6C,EAAM,sBAGzB4T,EAAS/jB,KAAKwC,QAAQwE,GAAK,IAAMmJ,EACjCD,EAAWjK,SAASqG,eAAeyX,IAEnCjc,oBAAkBoI,GAClB,MAAO,KAIX,KAFA,GAAIxD,GAAYY,UAAQ4C,EAAU,sBAC9BhJ,EAAOlH,KAAKgP,eAAetC,GACY,OAApCwD,EAASjB,wBACZiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,OAAOvJ,GAAKC,MAAMsJ,IAQtBnO,EAAapC,UAAUmO,SAAW,SAAUrN,GACpCA,YAAkB8rB,UAAW9rB,EAAOqE,UAAUC,QAAQ,qBAAuB,IAC7EtE,EAASsM,UAAQtM,EAAQ,sBAE7B,IAAI24B,GAAW34B,YAAkB8rB,SAAW9rB,EAAOgG,GAAKhH,KAAKwC,QAAQwE,GAAK,IAAMhG,CAEhF,OADWhB,MAAKgP,eAAe2qB,IASnCr3B,EAAapC,UAAUw8B,aAAe,SAAUC,GAC5C,GAAIn8B,GAEAsL,EADAhC,EAAM6yB,EAAYh8B,MAEtB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACM,WAAnBm8B,EAAYn8B,KAGhBsL,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM21B,EAAYn8B,GAC9CR,KAAKuN,YAAYtH,SAASqG,eAAeR,MASjDxJ,EAAapC,UAAU08B,mBAAqB,WACxC,GAAIC,GAAY78B,KAAK88B,aAAa98B,KAAK+O,cAAc/O,KAAKkH,OACtD61B,EAAmBj1B,oBAAkB+0B,GAAa,GAAIhW,UAAU,GAAIA,UAAQmW,MAAMH,EACtF,OAAO78B,MAAK2mB,YAAYkB,aAAakV,IAQzCz6B,EAAapC,UAAUw5B,YAAc,SAAUuD,GAC3C,GAAIz8B,GAEA2O,EADArF,EAAMmzB,EAAWt8B,MAErB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjB2O,EAASnP,KAAKwC,QAAQwE,GAAK,IAAMi2B,EAAWz8B,GAC5CR,KAAKiN,WAAWhH,SAASqG,eAAe6C,KAShD7M,EAAapC,UAAUg9B,oBAAsB,SAAUh2B,GAInD,IAAK,GAHD21B,GAAY78B,KAAK88B,aAAa51B,GAE9BvE,KACKnC,EAAI,EAAGsJ,EAAMrK,OAAO6I,KAAKtI,KAAK4I,SAAUpI,EAAIsJ,EAAInJ,OAAQH,IAC7DmC,EAAO8E,KAAKzH,KAAK4I,QAAQpI,GAAGqH,MAQhC,OANIX,GAAKC,MAAMxG,QACH,GAAIkmB,UAAQxW,OAAO1N,GAAQq6B,MAAMH,IAGjC,GAAIhW,UAAQxW,OAAO1N,IAUnCL,EAAapC,UAAU48B,aAAe,SAAU51B,GAC5C,GACIi2B,GACAC,EACAC,EAEAt0B,EALA8lB,EAAW3nB,EAAKC,MAIhBm2B,GAAa,CAEjB,KAAKzO,EACD,MAAOsO,EAEX,KAAK,GAAI38B,GAAI,EAAGsJ,EAAM+kB,EAASluB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACjD,GAAImS,GAAWkc,EAASruB,GAAGmS,QAY3B,IAXiB,kBAAbA,EACAA,EAAW,mBAEO,gBAAbA,EACLA,EAAW,iBAEO,gBAAbA,IACLA,EAAW,kBAGf2qB,GAAa,EADF79B,OAAO6I,KAAKumB,EAASruB,IAEvB8E,QAAQ,UAAY,GAAKupB,EAASruB,GAAG2G,OAC1Ci2B,EAAQp9B,KAAK88B,aAAajO,EAASruB,OAIvB28B,EAFJA,EACuB,QAAnBj2B,EAAKlE,UACEm6B,EAAKI,IAAIH,GAGTD,EAAKK,GAAGJ,GAIZA,OAId,KAAKt1B,oBAAkB6K,KAAc7K,oBAAkB6K,EAAShS,QAAS,CAC1E,GAAI0tB,GAAOQ,EAASruB,GAAGmS,SAAShE,cAC5B8uB,GAAe,EACfC,GAAgB,QAAS,WAAY,cAAe,qBAAsB,WAAY,kBAQ1F,IAPyB,WAArB7O,EAASruB,GAAGyI,OACZq0B,GAAat9B,KAAK29B,WAEG,SAArB9O,EAASruB,GAAGyI,MAAmBy0B,EAAap4B,QAAQ+oB,IAAS,IAC7DiP,GAAa,GAEjBv0B,EAAS/I,KAAKyS,UAAUoc,EAASruB,GAAGqH,OAChCwmB,EAAK/oB,QAAQ,SAAW,GAAK+oB,EAAK/oB,QAAQ,UAAY,EACtDupB,EAASruB,GAAGqC,MAAQ,SAEnB,IAAyB,SAArBgsB,EAASruB,GAAGyI,MAAqB4lB,EAASruB,GAAGqC,gBAAiBjD,OAanEy9B,EAAYxO,EAASruB,GAAGqC,UAbmD,CAC3E,GAAIwc,GAASrf,KAAKsf,UAAUvW,EAAOsW,OAC9BvX,qBAAkB+mB,EAASruB,GAAGqC,OAO/Bw6B,EAAY,MANZA,EAAYr9B,KAAK49B,QAAQ/O,EAASruB,GAAGqC,MAAOwc,GACxCqe,EAAap4B,QAAQ+oB,IAAS,IAAMruB,KAAK69B,OAAOhP,EAASruB,GAAGqC,SAC5D46B,GAAe,IAU3B,GAAU,IAANj9B,EACIi9B,IAAiBpP,EAAK/oB,QAAQ,OAAS,GAAK+oB,EAAK/oB,QAAQ,YAAc,GAAK+oB,EAAK/oB,QAAQ,SAAW,GACpG+oB,EAAK/oB,QAAQ,UAAY,IAAO+oB,EAAK/oB,QAAQ,WAAa,EAC1D63B,EAAOM,EAAez9B,KAAK89B,cAAcjP,EAASruB,GAAI68B,GAClDr9B,KAAK+9B,eAAelP,EAASruB,IAInB,MADVqC,EAAQw6B,KAERF,EAAO,GAAIa,aAAUnP,EAASruB,GAAGqH,MAAO8K,EAAU0qB,EAAWC,QAKrE,IAAIG,IAAiBpP,EAAK/oB,QAAQ,OAAS,GAAK+oB,EAAK/oB,QAAQ,YAAc,GACvE+oB,EAAK/oB,QAAQ,SAAW,GAAK+oB,EAAK/oB,QAAQ,UAAY,IAAM+oB,EAAK/oB,QAAQ,WAAa,EACtF63B,EAAOM,EAAez9B,KAAK89B,cAAcjP,EAASruB,GAAI68B,EAAWF,EAAMj2B,EAAKlE,WACxEhD,KAAK+9B,eAAelP,EAASruB,GAAI28B,EAAMj2B,EAAKlE,eAGhD,IAAuB,QAAnBkE,EAAKlE,UAAqB,CACtBH,EAAQw6B,CACRF,IAAkB,KAAVt6B,EACRs6B,EACMA,EAAKI,IAAI1O,EAASruB,GAAGqH,MAAO8K,EAAU0qB,EAAWC,GAExC,KAAVz6B,IACLs6B,EAAO,GAAIa,aAAUnP,EAASruB,GAAGqH,MAAO8K,EAAU0qB,EAAWC,QAGhE,CACD,GAAIz6B,GAAQw6B,CACRF,IAAkB,KAAVt6B,EACRs6B,EAAOA,EAAKK,GAAG3O,EAASruB,GAAGqH,MAAO8K,EAAU0qB,EAAWC,GAExC,KAAVz6B,IACLs6B,EAAO,GAAIa,aAAUnP,EAASruB,GAAGqH,MAAO8K,EAAU0qB,EAAWC,MAYrF,MALIt9B,MAAK8T,qBAAsByT,iBACtBzf,oBAAkBq1B,IAA4B,WAAlBA,EAAKxqB,UAA2C,cAAlBwqB,EAAKxqB,WAChEwqB,EAAKxqB,SAA6B,WAAlBwqB,EAAKxqB,SAAwB,QAAU,aAGxDwqB,GAEX76B,EAAapC,UAAUurB,UAAY,WAC/B,GACIwS,GAAej+B,KAAK6gB,MAMxB,OAJiBF,YADH,QAC2B3gB,KAAK6gB,OAHxB,+CAGkDqd,cAEpED,EAAe,MAEZA,GAEX37B,EAAapC,UAAUuS,UAAY,SAAU5K,EAAO0C,GAChD,GACIxB,GADAH,EAAU5I,KAAK4I,OAEnBA,GAAU2B,GAAY3B,CAGtB,KAAK,GAFDu1B,GAAgC,KAAnBn+B,KAAK+H,UAAoBF,EAAQA,EAAMG,MAAMhI,KAAK+H,eAAoBF,GACnFu2B,EAAYD,GAAcA,EAAWx9B,OAAS,EAAIw9B,EAAW,GAAK,KAC7D39B,EAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IAChC,GAAIoI,EAAQpI,GAAGqH,QAAUA,EAAO,CAC5BkB,EAASH,EAAQpI,EACjB,OAGR,IAAKuI,GAA6B,KAAnB/I,KAAK+H,UAChB,IAASvH,EAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IAChC,GAAIoI,EAAQpI,GAAGqH,QAAUu2B,EAAW,CAChC,GAAIx1B,EAAQpI,GAAGoI,QAAS,CACpB,GAAIob,GAAWnc,EAAMw2B,UAAUD,EAAUz9B,OAASX,KAAK+H,UAAUpH,OAE7DoI,GADAib,EACShkB,KAAKyS,UAAUuR,EAAUpb,EAAQpI,GAAGoI,SAGpCA,EAAQpI,OAIrBuI,GAASH,EAAQpI,EAErB,OAIZ,IAAKuI,EACD,IAASvI,EAAI,EAAGA,EAAIoI,EAAQjI,UACpBiI,EAAQpI,GAAGoI,WACXG,EAAS/I,KAAKyS,UAAU5K,EAAOe,EAAQpI,GAAGoI,WAFdpI,KASxC,MAAOuI,IASXzG,EAAapC,UAAU+Q,aAAe,SAAUpJ,GAE5C,MADa7H,MAAKyS,UAAU5K,GACd6B,WAElBpH,EAAapC,UAAUo+B,QAAU,SAAUC,EAAMC,GAO7C,MANIA,GACAD,EAAKE,SAAS,EAAG,EAAG,GAGpBF,EAAKE,SAAS,GAAI,GAAI,IAEnBF,GAEXj8B,EAAapC,UAAU49B,cAAgB,SAAUjP,EAAUhsB,EAAOg6B,EAAW75B,GACzE,GAAIm6B,GACAuB,EAAY1+B,KAAKs+B,QAAQ,GAAIn1B,MAAKtG,EAAMwG,YAAY,GACpDs1B,EAAU3+B,KAAKs+B,QAAQz7B,EAC3B,QAAQgsB,EAASlc,UACb,IAAK,QAEDwqB,GADAA,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,qBAAsB62B,IAC/CnB,IAAI1O,EAAShnB,MAAO,kBAAmB82B,EACnD,MACJ,KAAK,WAEDxB,GADAA,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,WAAY62B,IACrClB,GAAG3O,EAAShnB,MAAO,cAAe82B,EAC9C,MACJ,KAAK,cACDxB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,cAAe82B,EACpD,MACJ,KAAK,qBACDxB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,qBAAsB62B,EAC3D,MACJ,KAAK,WACDvB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,WAAY62B,EACjD,MACJ,KAAK,kBACDvB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,kBAAmB82B,GAgBhE,MAbIxB,KACIN,EACkB,QAAd75B,EACA65B,EAAYA,EAAUU,IAAIJ,GAEP,OAAdn6B,IACL65B,EAAYA,EAAUW,GAAGL,IAI7BN,EAAYM,GAGbN,GAEXv6B,EAAapC,UAAU69B,eAAiB,SAAUlP,EAAUgO,EAAW75B,GACnE,GAGIm6B,GAHAt6B,EAAQgsB,EAAShsB,MACjB8P,EAAWkc,EAASlc,SAAS8E,WAC7BmnB,EAAY/P,EAAShsB,MAErBkG,EAAS/I,KAAKyS,UAAUoc,EAAShnB,OACjCwX,EAASrf,KAAKsf,UAAUvW,EAAOsW,OACnC,IAAI1M,EAASrN,QAAQ,SAAW,GAAKqN,EAASrN,QAAQ,UAAY,EAC9D,OAAQqN,GACJ,IAAK,SACDwqB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,SAAU+2B,EAC/C,MACJ,KAAK,YACDzB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,YAAa+2B,EAClD,MACJ,KAAK,UACDzB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,QAAS,GAC9C,MACJ,KAAK,aACDs1B,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,WAAY,IAI7D,KAAM8K,EAASrN,QAAQ,SAAW,GAAKqN,EAASrN,QAAQ,UAAY,GAChE,IAAK,GAAIqF,GAAI,EAAGgP,EAAO9W,EAAMlC,OAAQgK,EAAIgP,EAAMhP,IAC3C,GAAiB,KAAb9H,EAAM8H,KAA4B,OAAbgI,GAAkC,UAAbA,IAAyC,WAAhB5J,EAAOE,KAC1E,GAAU,IAAN0B,EAAS,CACT,GAAIk0B,GAAM,oBACV,QAAQlsB,GACJ,IAAK,UAEGwqB,EADgB,SAAhBp0B,EAAOE,KACA,GAAI+0B,aAAUnP,EAAShnB,MAAOg3B,EAAKh8B,EAAM8H,IAGzC,GAAIqzB,aAAUnP,EAAShnB,MAAOg3B,EAAKh8B,EAAM8H,GAC3C3K,KAAK69B,OAAOh7B,EAAM8H,IAAM3K,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,GAC5Crf,KAAKs+B,QAAQt+B,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,IAAS,GAAS,KAElE,MACJ,KAAK,aAEG8d,EADgB,SAAhBp0B,EAAOE,KACA,GAAI+0B,aAAUnP,EAAShnB,MAAO,WAAYhF,EAAM8H,GAClD3K,KAAK69B,OAAOh7B,EAAM8H,IAAM3K,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,GAC5Crf,KAAKs+B,QAAQt+B,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,IAAS,GAAS,MAGvD,GAAI2e,aAAUnP,EAAShnB,MAAO,WAAYhF,EAAM8H,GAE3D,MACJ,KAAK,KACDwyB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,QAAShF,EAAM8H,GACpD,MACJ,KAAK,QACDwyB,EAAO,GAAIa,aAAUnP,EAAShnB,MAAO,WAAYhF,EAAM8H,SAI9D,CAED,OAAQkkB,EAASlc,UACb,IAAK,UAEGwqB,EADgB,SAAhBp0B,EAAOE,KACAk0B,EAAKI,IAAI1O,EAAShnB,MAAO,kBAAmBhF,EAAM8H,GACpD3K,KAAK69B,OAAOh7B,EAAM8H,IAAM3K,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,GAC5Crf,KAAKs+B,QAAQt+B,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,IAAYxc,EAAM8H,IAGvDwyB,EAAKI,IAAI1O,EAAShnB,MAAO,kBAAmBhF,EAAM8H,GAE7D,MACJ,KAAK,aAEGwyB,EADgB,SAAhBp0B,EAAOE,KACAk0B,EAAKK,GAAG3O,EAAShnB,MAd3B,cAcsChF,EAAM8H,GACpC3K,KAAK69B,OAAOh7B,EAAM8H,IAAM3K,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,GAC5Crf,KAAKs+B,QAAQt+B,KAAK49B,QAAQ/6B,EAAM8H,GAAI0U,IAAYxc,EAAM8H,IAGvDwyB,EAAKK,GAAG3O,EAAShnB,MAAO,cAAehF,EAAM8H,GAExD,MACJ,KAAK,KACDwyB,EAAOA,EAAKK,GAAG3O,EAAShnB,MAAO,QAAShF,EAAM8H,GAC9C,MACJ,KAAK,QACDwyB,EAAOA,EAAKI,IAAI1O,EAAShnB,MAAO,WAAYhF,EAAM8H,KAoB1E,MAbIwyB,KACIN,EACkB,QAAd75B,EACA65B,EAAYA,EAAUU,IAAIJ,GAEP,OAAdn6B,IACL65B,EAAYA,EAAUW,GAAGL,IAI7BN,EAAYM,GAGbN,GAEXv6B,EAAapC,UAAU09B,QAAU,SAAU/6B,EAAOwc,GAC9C,GAAIyf,GAAW9+B,KAAKuf,KAAKqL,UAAU/nB,EAAOwc,EAU1C,OATIxc,GAAMyC,QAAQ,MAAQ,GAAMzC,EAAMyC,QAAQ,KAAO,GAAKzC,EAAMyC,QAAQ,KAAO,GACxEzC,EAAMyC,QAAQ,KAAO,KACxBw5B,EAAW,GAAI31B,OACNs1B,SAASjnB,SAAS3U,EAAMmF,MAAM,KAAK,GAAI,KAChD82B,EAASC,WAAWvnB,SAAS3U,EAAMmF,MAAM,KAAK,GAAI,KAC9CnF,EAAMmF,MAAM,KAAK,IACjB82B,EAASE,WAAWxnB,SAAS3U,EAAMmF,MAAM,KAAK,GAAI,MAGnD82B,GAEXx8B,EAAapC,UAAU29B,OAAS,SAAUh7B,GACtC,SAAIA,GAASA,EAAMyC,QAAQ,MAAQ,IAKvChD,EAAapC,UAAUkvB,YAAc,SAAUloB,EAAMid,EAAY8a,EAASl8B,EAAK4D,GAC3E,GAAKs4B,EAGA,CACD,GAAI/3B,EAAKC,OAASD,EAAKC,MAAMxG,OAAS,IAAMX,KAAK0G,eAAgB,CAE7D,GAAI4I,GAAS6U,EAAWrf,cAAc,kBAClCuK,EAAU8U,EAAWrf,cAAc,kBAOvC,IANI9E,KAAKgO,yBAA2BmW,EAAWlV,yBAC3CK,EAAS6U,EAAWlV,uBAAuBnK,cAAc,kBACzDuK,EAAU8U,EAAWlV,uBAAuBnK,cAAc,oBAE9DwK,EAAOqP,UAAW,EAClBtP,EAAQsP,UAAW,EACf3e,KAAKgO,wBAAyB,CAE9B,IADA,GAAImC,GAAOgU,EAAWlV,uBACfkB,IAASA,EAAKlC,UAAUC,SAAS,qBAAqB,CACzD,GAAIiC,EAAKlC,UAAUC,SAAS,qBAAsB,CAC9CiC,EAAOA,EAAKnL,iBAAiB,qBAAqBmL,EAAKnL,iBAAiB,qBAAqBrE,OAAS,EACtG,OAEJwP,EAAOA,EAAKlB,uBAEhB,GAAIkB,GAAQA,EAAKlC,UAAUC,SAAS,oBAAqB,CACrD,GAAIiB,GAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAEzB,QADZhH,KAAKkP,QAAQC,GACfnM,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAKH,OAAnBrI,EAAKlE,UACLsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAM1BvP,MAAKoH,qBAAqB+c,EAK9B,IAHInkB,KAAK0G,gBAAkBC,IACvBwd,EAAankB,KAAKk/B,YAAYh4B,EAAMA,EAAKlE,UAAWhD,KAAKwC,QAAS0E,EAAKnE,IAAK4D,IAE5E3G,KAAK4G,qBAAuB5G,KAAK0G,eAAgB,CACjD,GAAIy4B,GAAahb,EAAWrf,cAAc,eACtCoC,GAAKnE,KACL0L,YAAU0wB,GAAa,mBACnBn/B,KAAKgO,0BACLxI,eAAa25B,EAAWr6B,cAAc,eAAgB,YAAYyK,QAAUrI,EAAKnE,MAIrF+D,eAAaq4B,GAAa,wBA1DlChb,GAAankB,KAAKk/B,YAAYh4B,EAAMA,EAAKlE,UAAWmhB,EAAYphB,EA8DhEmE,GAAKC,OAA+B,IAAtBD,EAAKC,MAAMxG,QAAgBX,KAAK0G,iBAC9CQ,EAAKC,MAAM,IAAO4C,MAAS,GAAIlC,MAAS,GAAI8K,SAAY,GAAI1J,KAAQ,GAAIpG,MAAS,IAErF,IAAIgsB,GAAW3nB,EAAKC,KACpB,KAAKW,oBAAkB+mB,GACnB,IAAK,GAAIruB,GAAI,EAAGsJ,EAAM+kB,EAASluB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACjD,GAAI8H,GAAO7I,OAAO6I,KAAKumB,EAASruB,GAChC,KAAKsH,oBAAkB+mB,EAASruB,GAAG2G,QAAUmB,EAAKhD,QAAQ,UAAY,GAAmC,IAA7BupB,EAASruB,GAAG2G,MAAMxG,OAAe,CACzG,GAAIX,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAASX,KAAK2P,cAClE,MAAO,KAEXwU,GAAankB,KAAKk/B,YAAYrQ,EAASruB,GAAIquB,EAASruB,GAAGwC,UAAWmhB,EAAY0K,EAASruB,GAAGuC,KAC1FohB,EAAankB,KAAKovB,YAAYP,EAASruB,GAAI2jB,GAAY,OAEtD,IAAKrc,oBAAkB+mB,EAASruB,GAAG2G,OAQpCnH,KAAKo/B,WAAWvQ,EAASruB,GAAI2jB,OARe,CAE5C,GAAI9U,IADJ8U,EAAankB,KAAKk/B,YAAYrQ,EAASruB,GAAIquB,EAASruB,GAAGwC,UAAWmhB,EAAY0K,EAASruB,GAAGuC,MACjE+B,cAAc,mBACnCwK,EAAS6U,EAAWrf,cAAc,iBACtCuK,GAAQsP,UAAW,EACnBrP,EAAOqP,UAAW,EAKtB,IAAK7W,oBAAkB+mB,EAASruB,GAAG2G,QAAU0nB,EAASruB,GAAGyC,SAAU,CAC/D,GAAIq4B,GAAgBnX,EAAWrf,cAAc,gBAAgB+K,SAASrP,GAAGsE,cAAc,kBACvF9E,MAAKoN,UAAUkuB,IAU3B,MANInX,KACAA,EAAa7W,UAAQ6W,EAAY,iBAEjCA,IACAA,EAAa7W,UAAQ6W,EAAY,uBAE9BA,GAEX7hB,EAAapC,UAAUg/B,YAAc,SAAUh4B,EAAMlE,EAAWmhB,EAAYphB,EAAK4D,GAC7E3G,KAAKwN,iBAAgB,EAAM2W,EAAYnhB,GAAW,EAAOD,EAAK4D,EAAQO,EACtE,IAAI1E,GAAU2hB,EAAWnf,iBAAiB,sBACtCq6B,EAAYlb,EAAWrf,cAAc,gBAAgB+K,QACzD,IAAI7P,KAAKyP,YAAYmC,YAAc5R,KAAKiE,kBAAoBjE,KAAKkE,cAAe,CAC5ElE,KAAKkE,eAAgB,EACrBlE,KAAKiE,kBAAmB,CACxB,IAAIwM,GAAQ,EACRsM,EAAiB/c,KAAK8D,WAAa,CACvC,IAAI9D,KAAKgO,wBACL,IAAK,GAAIxN,GAAI,EAAGA,EAAIuc,EAAgBvc,IAC5B6+B,EAAU7+B,GAAGyN,UAAUC,SAAS,sBAChC6O,IACAtM,IAIZ,OAAO4uB,GAAUr/B,KAAK8D,WAAa2M,EAAQ,GAE1C,MAAIzQ,MAAKyP,YAAYmC,YAAc5R,KAAKiE,kBAAoBjE,KAAKgE,aAClEhE,KAAKgE,aAAc,EACnBhE,KAAKiE,kBAAmB,EACjBo7B,EAAUA,EAAU1+B,OAAS,IAG7B6B,EAAQA,EAAQ7B,OAAS,IAGxC2B,EAAapC,UAAUk/B,WAAa,SAAUl4B,EAAMid,GAC5CA,EAAW9e,UAAUC,QAAQ,sBAAwB,EACrDtF,KAAK8P,eAAeqU,EAAYjd,GAGhClH,KAAK8P,eAAeqU,EAAWrf,cAAc,sBAAuBoC,IAG5E5E,EAAapC,UAAUwvB,eAAiB,WAGpC,IAAK,GADDvf,GADSnQ,KAAKwC,QACAwC,iBAAiB,mHAC1BxE,EAAI,EAAGA,EAAI2P,EAAKxP,OAAQH,IACzB2P,EAAK3P,GAAGyN,UAAUC,SAAS,kBACTsS,cAAYrQ,EAAK3P,GAAIkU,gBAC3B+a,SAAWzvB,KAAK0C,WAEvByN,EAAK3P,GAAGyN,UAAUC,SAAS,kBACV1I,eAAa2K,EAAK3P,GAAI,gBAC5BivB,SAAWzvB,KAAK0C,WAE3ByN,EAAK3P,GAAGyN,UAAUC,SAAS,oBACRsS,cAAYrQ,EAAK3P,GAAIigB,kBAC3BgP,SAAWzvB,KAAK0C,WAE7ByN,EAAK3P,GAAGyN,UAAUC,SAAS,aACfsS,cAAYrQ,EAAK3P,GAAIspB,WAC3B2F,SAAWzvB,KAAK0C,WAEtByN,EAAK3P,GAAGyN,UAAUC,SAAS,gBACZsS,cAAYrQ,EAAK3P,GAAImrB,cAC3B8D,SAAWzvB,KAAK0C,WAEzByN,EAAK3P,GAAGyN,UAAUC,SAAS,iBACXsS,cAAYrQ,EAAK3P,GAAI8D,eAC3BmrB,SAAWzvB,KAAK0C,WAE1ByN,EAAK3P,GAAGyN,UAAUC,SAAS,aACXsS,cAAYrQ,EAAK3P,GAAIyrB,eACtB1c,UACZvP,KAAK0C,WACLyN,EAAK3P,GAAGkF,cAAciH,MAAMC,QAAU,OAGtCuD,EAAK3P,GAAGkF,cAAciH,MAAMC,QAAU,WAKtD,IAAI0yB,GAAmBt/B,KAAKwC,QAAQwC,iBAAiB,kBACjDu6B,EAAoBv/B,KAAKwC,QAAQwC,iBAAiB,mBAClDw6B,EAAkBx/B,KAAKwC,QAAQwC,iBAAiB,kBAC/ChF,KAAK0C,YAAc1C,KAAKkQ,SAASjC,UAAUC,SAAS,eACrDlO,KAAKkQ,SAASjC,UAAU2V,OAAO,aAGnC,KAAK,GADD6b,IAASH,EAAkBC,EAAmBC,GACzCh/B,EAAI,EAAGA,EAAIi/B,EAAM9+B,OAAQH,IAC9Bi/B,EAAMj/B,GAAGsI,QAAQ,SAAUqH,GACnBA,EAAKlC,UAAUC,SAAS,cACxBiC,EAAKlC,UAAU2V,OAAO,cAGtBzT,EAAKlC,UAAUgF,IAAI,eAI/BjT,MAAK0/B,kBAETp9B,EAAapC,UAAUw/B,eAAiB,WACpC,GAAIj9B,GAAQzC,KAER+C,GAAM,CADE/C,MAAKwC,QAAQwC,iBAAiB,yDAEpC8D,QAAQ,SAAUqH,IAChBA,EAAKlC,UAAUC,SAAS,gBAAmBiC,EAAKlC,UAAUC,SAAS,oBAC/DiC,EAAKlC,UAAUC,SAAS,cAIvBiC,EAAKlC,UAAUC,SAAS,gBAAkBiC,EAAKlC,UAAUC,SAAS,kBACvEiC,EAAKlC,UAAU2V,OAAO,kBAEjBzT,EAAKlC,UAAUC,SAAS,gBAAkBiC,EAAKlC,UAAUC,SAAS,cACvEiC,EAAKlC,UAAU2V,OAAO,cAEjBzT,EAAKlC,UAAUC,SAAS,oBAC7BiC,EAAKlC,UAAUgF,IAAI,kBACnBlQ,GAAM,GAEDoN,EAAKlB,uBAAuBM,SAAWY,EAAKlC,UAAUC,SAAS,eACpEiC,EAAKlC,UAAU2V,OAAO,cAClB7gB,EACyB,QAArBoN,EAAKpK,YACLoK,EAAKlC,UAAUgF,IAAI,kBAGnB9C,EAAKlC,UAAUgF,IAAI,kBAIE,QAArB9C,EAAKpK,aAAyBtD,EAAMC,YACpCyN,EAAKlC,UAAU2V,OAAO,SACtBzT,EAAKlC,UAAUgF,IAAI,oBAGfxQ,EAAMmE,oBACNuJ,EAAKlC,UAAUgF,IAAI,SAEvB9C,EAAKlC,UAAU2V,OAAO,mBAED,OAArBzT,EAAKpK,aAAwBtD,EAAMC,WACnCyN,EAAKlC,UAAUgF,IAAI,qBAGnB9C,EAAKlC,UAAU2V,OAAO,uBAIzBzT,EAAKlC,UAAUC,SAAS,kBAI7BiC,EAAKlC,UAAUgF,IAAI,eA9CnB9C,EAAKlC,UAAUgF,IAAI,cACnBlQ,GAAM,MAiDlBT,EAAapC,UAAUy/B,eAAiB,SAAU98B,GAE9C,IAAK,GADD+8B,IAAY,OAAQ,OAAQ,MAAO,OAAQ,QAAS,OAAQ,OAAQ,SAAU,SAAU,MAAO,UAAW,SAAU,WAC/Gp/B,EAAI,EAAGsJ,EAAM81B,EAASj/B,OAAQH,EAAIsJ,EAAKtJ,IAC5C,GAAIqC,EAAM8L,cAAcrJ,QAAQs6B,EAASp/B,KAAO,EAC5C,OAAO,CAGf,QAAO,GAEX8B,EAAapC,UAAU2/B,aAAe,SAAU14B,EAAO24B,EAAcC,EAAUC,GAC3E,GAAIv9B,GAAQzC,KACR2G,GAAS,CAQb,IAPKo5B,GAAyB,KAAbA,EAKbA,GAAY,KAJZA,EAAW,GACXp5B,GAAS,GAKTQ,EAAMpE,IAAK,CACX,GAAIk9B,GAAYD,EAAYhgC,KAAKwJ,KAAKC,YAAY,OAAOosB,cAAgB,IAAM,MAC/EkK,IAAYp5B,EAASs5B,EAAY,IAAM,IAAMA,EAAY,IAiG7D,MA/FI94B,GAAMA,OAASA,EAAMA,MAAMxG,SAC3Bo/B,GAAY54B,EAAMA,MAAM+4B,OAAO,SAAUp1B,EAAQ5D,EAAMyD,GACnD,GAAIw1B,GAAU,EACd,IAAIj5B,EAAKC,MACLg5B,EAAU19B,EAAMo9B,aAAa34B,EAAM44B,EAAc,GAAIE,GACjDv9B,EAAMuL,0BACN7G,EAAMnE,UAAYkE,EAAKlE,eAG1B,CACD,GAAIo9B,GAAcJ,EAAYv9B,EAAMmzB,aAAa1uB,EAAKyL,UAAYlQ,EAAMiH,UAAUxC,EAAKyL,UACnF0tB,EAAW,EACf,IAAIn5B,EAAKrE,gBAAiBjD,OACtB,GAAIsH,EAAKyL,SAAS8E,WAAWnS,QAAQ,YAAc,EAAG,CAClD,GAAIg7B,GAAgBN,EAAY,IAAMv9B,EAAM+G,KAAKC,YAAY,OAAOosB,cAAgB,IAAM,OAKtFwK,GAJc,SAAdn5B,EAAK+B,MAAoBxG,EAAMk9B,eAAez4B,EAAKrE,MAAM,IAI9C,GAAKqE,EAAKrE,MAAM,GAAKy9B,EAAgBp5B,EAAKrE,MAAM,GAHhD,IAAOqE,EAAKrE,MAAM,GAAK,IAAOy9B,EAAgB,IAAOp5B,EAAKrE,MAAM,GAAK,QAShFw9B,GAFyB,gBAAlBn5B,GAAKrE,MAAM,IAAkC,OAAfqE,EAAKrE,MAE/B,KADMqE,EAAKrE,MACO4I,KAAK,OAAS,KAGhC,IAAMvE,EAAKrE,MAAQ,QAMlCw9B,GADAn5B,EAAKyL,SAAS8E,WAAWnS,QAAQ,eAAiB,EACvC4B,EAAKrE,MAAQ,KAAQqE,EAAKrE,MAAQ,MAAS,IAAMqE,EAAKrE,MAAQ,IAEpEqE,EAAKyL,SAAS8E,WAAWnS,QAAQ,aAAe,EAC1C4B,EAAKrE,MAAQ,MAASqE,EAAKrE,MAAQ,KAAQ,IAAMqE,EAAKrE,MAAQ,IAEpEqE,EAAKyL,SAAS8E,WAAWnS,QAAQ,aAAe,EAC1C4B,EAAKrE,MAAQ,MAASqE,EAAKrE,MAAQ,MAAS,IAAMqE,EAAKrE,MAAQ,IAGxD,WAAdqE,EAAK+B,MAA2C,iBAAf/B,GAAKrE,OACtB,OAAfqE,EAAKrE,OAAmBqE,EAAKyL,SAAS8E,WAAWnS,QAAQ,UAAY,EAC3D,GAAK4B,EAAKrE,MAEhBqE,EAAKyL,SAAS8E,WAAWnS,QAAQ,UAAY,EACvC,KAGA,IAAO4B,EAAKrE,MAAQ,GAI3C,IAAI09B,GAAYr5B,EAAKW,KAOrB,IANIi4B,EACAS,EAAY,IAAMA,EAAY,IAEzBA,EAAUj7B,QAAQ,MAAQ,IAC/Bi7B,EAAY,IAAMA,EAAY,KAE9Br5B,EAAKyL,SAAS8E,WAAWnS,QAAQ,SAAW,EAC5C66B,EAAUI,EAAY,IAAMH,MAE3B,CACD,GAAII,GAAWJ,CACO,aAAlBl5B,EAAKyL,SACL6tB,EAAW,IAEY,eAAlBt5B,EAAKyL,WACV6tB,EAAW,MAEfL,EAAUI,EAAY,IAAMC,EAAW,IAAMH,GAGrD,GAAI11B,IAAMxD,EAAMA,MAAMxG,OAAS,EAAG,CAC9B,GAAIqC,GAAYmE,EAAMnE,WACJ,KAAdA,GAAqBkE,GAA2B,KAAnBA,EAAKlE,WAAoBkE,EAAK2Q,QAAU3Q,EAAK2Q,OAAO4oB,YACjFz9B,EAAYkE,EAAKlE,WAEjBA,IAEAm9B,GAAW,KADXn9B,EAAYg9B,EAAYv9B,EAAM+G,KAAKC,YAAYzG,EAAU6yB,eAAeA,cAAgB7yB,EAAU6yB,eACrE,KAGrC,MAAO/qB,GAASq1B,GACjB,KAEFx5B,IACDo5B,GAAY,KAEZ54B,EAAMpE,MACNg9B,GAAY,KAETA,GASXz9B,EAAapC,UAAUwgC,gBAAkB,SAAUC,EAAWX,GAC1DW,EAAYA,EAAUxyB,QAAQ,KAAM,GACpC,IAAIyyB,GAAY5gC,KAAK6gC,gBAAgBF,EAAWX,EAChDhgC,MAAKgxB,UAAWhuB,UAAW49B,EAAU59B,UAAWD,IAAK69B,EAAU79B,IAAKoE,MAAOy5B,EAAUz5B,SASzF7E,EAAapC,UAAU2gC,gBAAkB,SAAUF,EAAWX,GAC1DhgC,KAAKo0B,UACLp0B,KAAK8gC,UAAUH,EAAWX,GAC1BhgC,KAAKiH,eAAgBC,MAAQlE,UAAW,MAAOD,KAAK,EAAOoE,YAAe,EAC1E,IAAID,GAAOlH,KAAK+gC,cAAc/gC,KAAKo0B,OAAQp0B,KAAKkH,MAAO,GAAI84B,EAC3D,OAAIhgC,MAAK4G,oBACI5D,UAAWkE,EAAKlE,UAAWD,IAAKmE,EAAKnE,IAAKoE,MAAOD,EAAKC,QAGtDnE,UAAWkE,EAAKlE,UAAWmE,MAAOD,EAAKC,QAWxD7E,EAAapC,UAAU2M,gBAAkB,SAAU3F,EAAM85B,EAAahB,GAMlE,MALK94B,KACDA,EAAOlH,KAAK+O,iBAEhB7H,EAAOlH,KAAK8e,kBAAkB5X,GAAM,GACpBlH,KAAK6/B,aAAa7/B,KAAK+O,cAAc7H,GAAO85B,EAAa,KAAMhB,GAAW7xB,QAAQ,KAAM,MAS5G7L,EAAapC,UAAU+gC,oBAAsB,SAAU/5B,GAEnD,GAAIlH,KAAKkhC,aAAaC,cAAcxgC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAI8K,IAAQunB,IAAK,KAEjB,OADAphC,MAAKqhC,OAAO,iBAAmBC,KAAM,kBAAmBC,kBAAkB,EAAO1+B,OAASqE,KAAMA,EAAM2S,IAAKA,KACpGA,EAAS,IAKpB,MAFIjU,SAAQC,KAAK,+IAEV,MAQXvD,EAAapC,UAAUshC,oBAAsB,SAAUC,GAEnD,GAAIzhC,KAAKkhC,aAAaC,cAAcxgC,OAAQ,CACxC,GAAIkZ,IAAQunB,IAAK,KACjBphC,MAAKqhC,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAO1+B,OAASu+B,IAAKK,EAAU5nB,IAAKA,IACnH,IAAIunB,GAAMvnB,EAAS,GACnB,IAAIunB,EAAK,CACLA,EAAMA,EAAIjzB,QAAQ,KAAM,GACxB,IAAIyyB,GAAY5gC,KAAK6gC,gBAAgBO,EACrCphC,MAAKgxB,UAAWhuB,UAAW49B,EAAU59B,UAAWD,IAAK69B,EAAU79B,IAAKoE,MAAOy5B,EAAUz5B,aAIzFvB,SAAQC,KAAK,gJASrBvD,EAAapC,UAAUwhC,yBAA2B,SAAUx6B,GAExD,GAAIlH,KAAKkhC,aAAaC,cAAcxgC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAI8K,IAAQunB,IAAK,KAEjB,OADAphC,MAAKqhC,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAO1+B,OAASqE,KAAMA,EAAM2S,IAAKA,KACzGA,EAAS,IAKpB,MAFIjU,SAAQC,KAAK,+IAEV,MAQXvD,EAAapC,UAAUyhC,yBAA2B,SAAUF,GAExD,GAAIzhC,KAAKkhC,aAAaC,cAAcxgC,OAAQ,CACxC,GAAIkZ,IAAQunB,IAAK,KACjBphC,MAAKqhC,OAAO,iBAAmBC,KAAM,4BAA6BC,kBAAkB,EAAO1+B,OAASu+B,IAAKK,EAAU5nB,IAAKA,IACxH,IAAIunB,GAAMvnB,EAAS,GACnB,IAAIunB,EAAK,CACLA,EAAMA,EAAIjzB,QAAQ,KAAM,GACxB,IAAIyyB,GAAY5gC,KAAK6gC,gBAAgBO,EACrCphC,MAAKgxB,UAAWhuB,UAAW49B,EAAU59B,UAAWD,IAAK69B,EAAU79B,IAAKoE,MAAOy5B,EAAUz5B,aAIzFvB,SAAQC,KAAK,gJAUrBvD,EAAapC,UAAU0hC,cAAgB,SAAUC,EAAYC,GAErD9hC,KAAKkhC,aAAaC,cAAcxgC,QAChCX,KAAKkH,MAASlE,UAAW,MAAOD,KAAK,EAAOoE,UAC5CnH,KAAKqhC,OAAO,iBAAmBC,KAAM,cAAeC,kBAAkB,EAAO1+B,OAASg/B,WAAY3T,KAAK9kB,MAAMy4B,GAAa36B,KAAMlH,KAAKkH,KAAM46B,YAAaA,MAGxJl8B,QAAQC,KAAK,gJASrBvD,EAAapC,UAAU6hC,cAAgB,SAAU76B,GAE7C,GAAIlH,KAAKkhC,aAAaC,cAAcxgC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAI8K,IAAQgoB,WAAY,KAExB,OADA7hC,MAAKqhC,OAAO,iBAAmBC,KAAM,oBAAqBC,kBAAkB,EAAO1+B,OAASqE,KAAMA,EAAM26B,WAAY,GAAIhoB,IAAKA,KACtHA,EAAgB,WAK3B,MAFIjU,SAAQC,KAAK,+IAEV,IAUXvD,EAAapC,UAAUsQ,UAAY,SAAUrB,EAAQrD,EAAS2E,GAC1D,GAAIvB,GAAUlP,KAAKkP,QAAQC,EAAOhB,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAC7Dg7B,EAAchiC,KAAKyP,YAAYe,SACnC1E,GAAUA,EAAQqC,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjDhH,KAAK+D,UAAY0M,EACjBzQ,KAAKmE,mBAAoB,EACzBnE,KAAKyP,YAAYe,WAAY,EAC7BxQ,KAAKkvB,WACGnlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM0J,SAAYzD,EAAQyD,SAC1F9P,MAASqM,EAAQrM,MAAOG,UAAakM,EAAQlM,YAC7C8I,GACR9L,KAAK+D,WAAa,EAClB/D,KAAKmE,mBAAoB,EACzBnE,KAAKyP,YAAYe,UAAYwxB,EAC7BA,GAAc,GAUlB1/B,EAAapC,UAAU0R,WAAa,SAAU9F,EAASm2B,EAAexxB,GAClEwxB,EAAgBA,EAAc9zB,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC7D,IAAIoH,GAAQpO,KAAKqO,SAAS4zB,GACtBC,EAAeliC,KAAKyP,YAAYmC,UACpC9F,GAAUA,EAAQqC,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjDhH,KAAK8D,WAAa2M,EAClBzQ,KAAKiE,kBAAmB,EACxBjE,KAAKyP,YAAYmC,YAAa,EAC9B5R,KAAKkd,YAAala,UAAaoL,EAAMpL,UAAWD,IAAOqL,EAAMrL,IAAKoE,MAASiH,EAAMjH,QAAU2E,GAC3F9L,KAAK8D,YAAc,EACnB9D,KAAKiE,kBAAmB,EACxBjE,KAAKyP,YAAYmC,WAAaswB,EAC9BA,GAAe,GAQnB5/B,EAAapC,UAAUyR,SAAW,SAAUxC,GACpCA,EAAO7J,QAAQtF,KAAKwC,QAAQwE,IAAM,IAClCmI,EAASnP,KAAKwC,QAAQwE,GAAK,IAAMmI,EAErC,IAAInO,GAASiF,SAASqG,eAAe6C,GAAQnK,iBAAiB,oBAAoB,EAClFhF,MAAKmN,SAASnM,IAQlBsB,EAAapC,UAAUwR,UAAY,SAAU5F,GACrCA,EAAQxG,QAAQtF,KAAKwC,QAAQwE,IAAM,IACnC8E,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,EAEtC,IAAI9K,GAASiF,SAASqG,eAAeR,GAAS9G,iBAAiB,mBAAmB,EAClFhF,MAAKoN,UAAUpM,IAEnBsB,EAAapC,UAAU4gC,UAAY,SAAUH,EAAWX,GACpD,GACImC,GADAC,EAAK,CAET,IACID,EAAMxB,EAAUtmB,MAAM+nB,GACtBA,GAAMpiC,KAAKqiC,gBAAgBF,EAAKnC,SACnB,KAARmC,EACT,OAAOniC,MAAKo0B,QAEhB9xB,EAAapC,UAAUmiC,gBAAkB,SAAU1B,EAAWX,GAC1D,GACIsC,GADA54B,GAAa,IAAK,KAAM,KAAM,KAAM,IAAK,IAGzC44B,GADAtC,GACchgC,KAAKwJ,KAAKC,YAAY,OAAOosB,cAAe71B,KAAKwJ,KAAKC,YAAY,MAAMosB,cAAe71B,KAAKwJ,KAAKC,YAAY,OAAOosB,gBAGpH,MAAO,KAAM,MAE/B,IAAI0M,EAEAA,GADAvC,GACShgC,KAAKwJ,KAAKC,YAAY,MAAMosB,cAAe71B,KAAKwJ,KAAKC,YAAY,SAASosB,cAC/E71B,KAAKwJ,KAAKC,YAAY,QAAQosB,cAAe71B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAC9E71B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAAe71B,KAAKwJ,KAAKC,YAAY,cAAcosB,cACpF71B,KAAKwJ,KAAKC,YAAY,UAAUosB,cAAe71B,KAAKwJ,KAAKC,YAAY,aAAaosB,cAClF71B,KAAKwJ,KAAKC,YAAY,WAAWosB,cAAe71B,KAAKwJ,KAAKC,YAAY,cAAcosB,gBAG/E,KAAM,SAAU,OAAQ,WAAY,UAAW,cAAe,UAAW,cAAe,WAAY,eAKjH,KAAK,GAHD2M,GAEAC,EACKjiC,EAAI,EAAG2Z,EAAOzQ,EAAU/I,OAAQH,EAAI2Z,EAAM3Z,IAK/C,GAJAgiC,EAAW,QAAQE,KAAKh5B,EAAUlJ,IAAM,MAAQ,GAGxC,IADJmiC,EAASC,QACM,KAAOl5B,EAAUlJ,GAAK,IAAMgiC,EAAU,MAC/CK,KAAKlC,GAEX,MADA3gC,MAAKo0B,OAAO3sB,MAAM,YAAaiC,EAAUlJ,GAAGmO,gBACrCjF,EAAUlJ,GAAGG,MAG5B,IAAImiC,GAAc9iC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,EACnD,KAAKmiC,GAAgBA,GAAkC,YAAnBA,EAAY,GAC5C,IAAK,GAAItiC,GAAI,EAAG2Z,EAAOmoB,EAAW3hC,OAAQH,EAAI2Z,EAAM3Z,IAKhD,GAJAgiC,EAAW,QAAQE,KAAKJ,EAAW9hC,IAAM,MAAQ,GAGzC,IADJmiC,EAASC,QACM,KAAON,EAAW9hC,GAAK,IAAMgiC,EAAU,MAChDK,KAAKlC,GAEX,MADA3gC,MAAKo0B,OAAO3sB,MAAM,aAAc66B,EAAW9hC,GAAGmO,gBACvC2zB,EAAW9hC,GAAGG,MAIjC,KAAK,GAAIH,GAAI,EAAG2Z,EAAOooB,EAAM5hC,OAAQH,EAAI2Z,EAAM3Z,IAAK,CAChDgiC,EAAW,QAAQE,KAAKH,EAAM/hC,IAAM,MAAQ,EAE5C,IAAImiC,GAASC,MAEb,IADQ,GAAID,GAAO,KAAOJ,EAAM/hC,GAAK,IAAMgiC,EAAU,MAC3CK,KAAKlC,GAEX,MADA3gC,MAAKo0B,OAAO3sB,MAAM,eAAgB86B,EAAM/hC,GAAGmO,gBACpC4zB,EAAM/hC,GAAGG,OAGxB,GAAI,MAAMkiC,KAAKlC,GAEX,MADA3gC,MAAKo0B,OAAO3sB,MAAM,OAAQ,MACnB,CAEX,IAAI,MAAMo7B,KAAKlC,GAEX,MADA3gC,MAAKo0B,OAAO3sB,MAAM,QAAS,MACpB,CAEX,IAAI,gBAAgBo7B,KAAKlC,GAGrB,MAFA8B,GAAa,gBAAgBI,KAAKlC,GAAW,GAC7C3gC,KAAKo0B,OAAO3sB,MAAM,SAAUg7B,IACrBA,EAAW9hC,MAEtB,IAAI,QAAQkiC,KAAKlC,GAGb,MAFA8B,GAAa,QAAQI,KAAKlC,GAAW,GACrC3gC,KAAKo0B,OAAO3sB,MAAM,SAAU,OACrBg7B,EAAW9hC,MAEtB,IAAI,kFAAkFkiC,KAAKlC,GAGvF,MAFA8B,GAAa,kFAAkFI,KAAKlC,GAAW,GAC/G3gC,KAAKo0B,OAAO3sB,MAAM,UAAWg7B,IACtBA,EAAW9hC,MAEtB,IAAIX,KAAK+iC,gBAAkB,oFAAoFF,KAAKlC,GAGhH,MAFA8B,GAAa,oFAAoFI,KAAKlC,GAAW,GACjH3gC,KAAKo0B,OAAO3sB,MAAM,UAAWg7B,IACtBA,EAAW9hC,OAAS,CAE/B,IAAIX,KAAKgjC,mBAAmBrC,EAAWX,GAAY,CAE/C,GAAIiD,GAAa,qBAAqBJ,KAAKlC,EAC3C,IAAIsC,EAGA,MAFAR,GAAaQ,EAAW,GACxBjjC,KAAKo0B,OAAO3sB,MAAM,UAAWg7B,IACtBA,EAAW9hC,OAG1B,GAAIuiC,GAAeljC,KAAKmjC,qBAAqBxC,EAC7C,IAAqB,KAAjBuC,EAAqB,CAErB,GAA0C,OAD1CT,EAAaS,GACET,EAAW9hC,OAAS,GAE/B,IAAK,GADDyiC,IAAW,EACNz4B,EAAI83B,EAAW9hC,OAAQgK,EAAIg2B,EAAUhgC,SAC1C8hC,GAAc9B,EAAUh2B,GACH,MAAjBg2B,EAAUh2B,KACVy4B,GAAW,IAEXA,GAA6B,MAAjBzC,EAAUh2B,IALwBA,SAUjDg2B,GAAU8B,EAAW9hC,SAA6C,MAAjCggC,EAAU8B,EAAW9hC,UAC1DX,KAAKqjC,eAAe1C,EAAW8B,KAChCA,EAAaziC,KAAKsjC,yBAAyB3C,EAAW8B,GAG1D,OADAziC,MAAKo0B,OAAO3sB,MAAM,SAAUg7B,IACrBA,EAAW9hC,OAEtB,GAAI4iC,GAAevjC,KAAKwjC,qBAAqB7C,EAC7C,OAAqB,KAAjB4C,GACAd,EAAac,EACbvjC,KAAKo0B,OAAO3sB,MAAM,eAAgBg7B,IAC3BA,EAAW9hC,QAElB,aAAakiC,KAAKlC,IAClB8B,EAAa,aAAaI,KAAKlC,GAAW,GAC1C3gC,KAAKo0B,OAAO3sB,MAAM,SAAUg7B,IACrBA,EAAW9hC,QAElB,eAAekiC,KAAKlC,IACpB8B,EAAa,eAAeI,KAAKlC,GAAW,GAC5C3gC,KAAKo0B,OAAO3sB,MAAM,SAAUg7B,IACrBA,EAAW9hC,QAEf,GAEX2B,EAAapC,UAAUsjC,qBAAuB,SAAU7C,GACpD,GAAI8C,GAAQ9C,EAAUr7B,QAAQ,IAC9B,IAAc,IAAVm+B,EAAa,CACb,GAAIC,GAAM/C,EAAUr7B,QAAQ,IAAKm+B,EAAQ,EACzC,KAAa,IAATC,EACA,MAAO/C,GAAUtC,UAAUoF,EAAOC,EAAM,GAGhD,MAAO,IAEXphC,EAAapC,UAAUmjC,eAAiB,SAAU1C,EAAW8B,GACzD,MAAsE,QAAlE9B,EAAUtmB,MAAMooB,EAAW9hC,OAAS,EAAG8hC,EAAW9hC,OAAS,IACO,OAAlEggC,EAAUtmB,MAAMooB,EAAW9hC,OAAS,EAAG8hC,EAAW9hC,OAAS,IAKnE2B,EAAapC,UAAUijC,qBAAuB,SAAUxC,EAAWgD,GAC/D,GAAIF,GAAQ9C,EAAUr7B,QAAQ,IAC9B,KAAgB,IAAXm+B,GAAgBE,GAAyB,IAAVF,IAAgBE,EAAY,CAC5D,GAAID,GAAM/C,EAAUr7B,QAAQ,IAAMm+B,EAAQ,EAC1C,KAAa,IAATC,EACA,MAAO/C,GAAUtC,UAAUoF,EAAOC,EAAM,GAGhD,MAAO,IAEXphC,EAAapC,UAAUojC,yBAA2B,SAAU3C,EAAW8B,GACnE,GAAI9B,EAAU8B,EAAW9hC,SAA6C,MAAjCggC,EAAU8B,EAAW9hC,UACrDX,KAAKqjC,eAAe1C,EAAW8B,IAAgD,MAAjC9B,EAAU8B,EAAW9hC,QAAiB,CACrF,GAAIijC,GAAiBnB,EAAWpE,UAAU,EAAGoE,EAAW9hC,OAAS,GAC7DkjC,EAAUlD,EAAUxyB,QAAQy1B,EAAgB,IAC5CV,EAAeljC,KAAKmjC,qBAAqBU,GAAS,EACjC,MAAjBX,IAEAT,GADkBS,EAAa7E,UAAU,EAAG6E,EAAaviC,QAEzD8hC,EAAaziC,KAAKsjC,yBAAyB3C,EAAW8B,IAG9D,MAAOA,IAEXngC,EAAapC,UAAU6iC,aAAe,WAClC,GAAIe,GAAa9jC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,EAClD,KAAKmjC,EACD,OAAO,CAGP,IAAIC,GAAY/jC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,GAC7CqjC,EAAgBhkC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,EACrD,IAAsB,SAAlBmjC,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAGX,UAAsB,eAAlBD,EAAW,IAAwBE,GAAiBA,EAAc,GAAG1+B,QADnD,WAC8E,IAM5GhD,EAAapC,UAAU8iC,mBAAqB,SAAUrC,EAAWX,GAC7D,GAAI8D,GAAa9jC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,EAClD,KAAKmjC,EACD,OAAO,CAGP,IAAI,uBAAuBjB,KAAKlC,GAAY,CACxC,GAAIoD,GAAY/jC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,GAC7CqjC,EAAgBhkC,KAAKo0B,OAAOp0B,KAAKo0B,OAAOzzB,OAAS,EACrD,IAAsB,SAAlBmjC,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAEX,IAAIE,GAAkBjE,EAAYhgC,KAAKwJ,KAAKC,YAAY,WAAWkF,cAAgB,SACnF,IAAsB,eAAlBm1B,EAAW,IAAwBE,GAAiBA,EAAc,GAAG1+B,QAAQ2+B,GAAmB,EAChG,OAAO,EAInB,OAAO,GAEX3hC,EAAapC,UAAUgkC,YAAc,SAAUrhC,EAAO8P,EAAUqtB,GAC5D,GAAIt2B,IACAy6B,IAAK,QAASC,KAAM,WAAYC,IAAK,WAAYC,IAAK,cAAeC,KAAM,kBAC3EC,KAAM,qBAAsB1P,GAAM,KAAM2P,SAAU,QAAStP,QAAW,UAAWuP,cAAe,aAChGC,WAAY,UAAWC,UAAW,SAAUC,cAAe,YAAaC,eAAgB,aAE5F,IAAI9E,EAAW,CAEX,IAAK,GADD+E,GAAiBtlC,OAAO6I,KAAKtI,KAAK41B,cAC7Bp1B,EAAI,EAAGA,EAAIukC,EAAepkC,OAAQH,IACvC,GAAIR,KAAK41B,aAAamP,EAAevkC,MAAQmS,EAASkjB,cAClD,MAAIhzB,IAAgC,IAAvBA,EAAMyC,QAAQ,MAA0C,MAA5BzC,EAAMA,EAAMlC,OAAS,GACvB,aAA3BgS,EAASkjB,cAAgC,cAAgB,WAE5DhzB,GAAgC,IAAvBA,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EAC7C,aAA3BgS,EAASkjB,cAAgC,gBAAkB,aAE9DhzB,GAAgC,IAAvBA,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EAC7C,aAA3BgS,EAASkjB,cAAgC,cAAgB,WAE9DkP,EAAevkC,EAG9B,OAAO,MAEX,GAAIqC,EAAO,CACP,GAA2B,IAAvBA,EAAMyC,QAAQ,MAA0C,MAA5BzC,EAAMA,EAAMlC,OAAS,GACjD,MAAqB,aAAbgS,EAA2B,cAAgB,UAElD,IAA2B,IAAvB9P,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EACvE,MAAqB,aAAbgS,EAA2B,gBAAkB,YAEpD,IAA2B,IAAvB9P,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EACvE,MAAqB,aAAbgS,EAA2B,cAAgB,eAGtD,CACD,GAAiB,aAAbA,EACA,MAAO,UAEN,IAAiB,SAAbA,EACL,MAAO,QAGf,MAAOjJ,GAAU,GAAKiJ,IAE1BrQ,EAAapC,UAAU8kC,kBAAoB,SAAU79B,GACjD,GAAIoiB,GAAavpB,KAAKyS,UAAUtL,EAAMU,MACtC,OAAKC,qBAAkByhB,GAGhB,KAFIA,EAAWtgB,MAI1B3G,EAAapC,UAAU4V,mBAAqB,SAAUjO,GAClD,GAAIkC,GAAQ,GACRk7B,EAAI,CACR,IAAuB,KAAnBjlC,KAAK+H,UAAkB,CAEvB,IAAK,GADD4d,GAAY9d,EAAMG,MAAMhI,KAAK+H,WACxBvH,EAAI,EAAGA,EAAImlB,EAAUhlB,OAAQH,IAClCuJ,GAAS/J,KAAKklC,kBAAkBvf,EAAWnlB,EAAI,KAC/CykC,EACQtf,EAAUhlB,SACdoJ,GAAS/J,KAAK+H,UAGtB,OAAOgC,GAIP,MADgB/J,MAAKyS,UAAU5K,GAAOkC,OAI9CzH,EAAapC,UAAUglC,kBAAoB,SAAUr9B,EAAOs9B,GAGxD,IAAK,GAFD5E,GAAY,GACZ51B,EAAI,EACCqb,EAAI,EAAGA,EAAImf,EAAUnf,IAC1Bua,GAAa14B,EAAMme,KACnBrb,EACQw6B,IACJ5E,GAAavgC,KAAK+H,UAG1B,OAAO/H,MAAKyS,UAAU8tB,GAAavgC,KAAKyS,UAAU8tB,GAAWx2B,MAAQ,IAEzEzH,EAAapC,UAAU6gC,cAAgB,SAAU3M,EAAQjtB,EAAOJ,EAAWi5B,GAevE,IAAK,GAdDr1B,GACAgP,EACAzS,EACAk+B,EAGApf,EACA2E,EACAsa,EACAI,EACAC,EACA3yB,EAPA4yB,KACAC,KAOAC,GAAe,EACfC,GAAc,EACTllC,EAAI,EAAG2Z,EAAOia,EAAOzzB,OAAQH,EAAI2Z,EAAM3Z,IAC5C,GAAqB,YAAjB4zB,EAAO5zB,GAAG,GAAkB,CAC5B,GAAIuI,GAAS/I,KAAKyS,UAAU2hB,EAAO5zB,GAAG,GAEtC,IADA0G,GAAS6C,MAAQhB,GAAUA,EAAOgB,MAAShB,EAAOgB,MAAQqqB,EAAO5zB,GAAG,GAAIqH,MAAOusB,EAAO5zB,GAAG,IAChE,iBAArB4zB,EAAO5zB,EAAI,GAAG,GAAuB,CACrC,GAAI4zB,EAAO5zB,EAAI,GAAG,GAAG8E,QAAQ,SAAW,GAAK8uB,EAAO5zB,EAAI,GAAG,GAAG8E,QAAQ,UAAY,EAC9E4B,EAAKyL,SAAW3S,KAAKkkC,YAAY,IAAK9P,EAAO5zB,EAAI,GAAG,GAAIw/B,GACxD94B,EAAKrE,MAAQ,KACbqE,EAAK+B,KAAOjJ,KAAKglC,kBAAkB99B,OAGnC,IAAsB,IAAlBktB,EAAOzzB,QAAiC,WAAjByzB,EAAO,GAAG,KAAoD,IAAhCA,EAAO,GAAG,GAAI9uB,QAAQ,KAAa,CACpF+oB,EAAO+F,EAAO5zB,EAAI,GAAG,GAAK4zB,EAAO5zB,EAAI,GAAG,GAAG2N,QAAQ,KAAM,IAAMimB,EAAO5zB,EAAI,GAAG,EACjF0G,GAAKyL,SAAW3S,KAAKkkC,YAAY7V,EAAM+F,EAAO5zB,EAAI,GAAG,GAAIw/B,OAExD,CACD,GAAI3R,GAAO+F,EAAO5zB,EAAI,GAAG,GAAK4zB,EAAO5zB,EAAI,GAAG,GAAG2N,QAAQ,KAAM,IAAMimB,EAAO5zB,EAAI,GAAG,EACjF0G,GAAKyL,SAAW3S,KAAKkkC,YAAY7V,EAAM+F,EAAO5zB,EAAI,GAAG,GAAIw/B,GAgBjE,IAbArtB,EAAWyhB,EAAO5zB,EAAI,GAAG,GAEzBmK,IADAnK,EACQ,EACRmZ,EAAOQ,EACH6lB,GAA+B,aAAlB94B,EAAKyL,UAA6C,eAAlBzL,EAAKyL,UAA+C,aAAlBzL,EAAKyL,SACpFA,EAAW,OAENqtB,GAA+B,gBAAlB94B,EAAKyL,UAAgD,kBAAlBzL,EAAKyL,UAAkD,gBAAlBzL,EAAKyL,SAC/FA,EAAW,WAENqtB,IACLrtB,EAAWzL,EAAKyL,UAEfhI,EAAInK,EAAI,EAAGmK,EAAIgP,EAAMhP,IACtB,GAAIgI,EAASrN,QAAQ,WAAa,GAAsB,SAAjB8uB,EAAOzpB,GAAG,GAC7C86B,GAAe,MAEd,CAAA,GAAqB,UAAjBrR,EAAOzpB,GAAG,IAAkB86B,EAAc,CAC/CjlC,EAAImK,EACJ86B,GAAe,CACf,OAGA,GAAI9yB,EAASrN,QAAQ,SAAW,GAAKqN,EAASrN,QAAQ,UAAY,EAC9D,KAEJ,IAAIqN,EAASrN,QAAQ,SAAW,GAAsB,WAAjB8uB,EAAOzpB,GAAG,GAAiB,CACxD6iB,EAAM4G,EAAOzpB,GAAG,EAChBypB,GAAOzpB,GAAG,IAA0B,MAApBypB,EAAOzpB,GAAG,GAAG,KAC7B6iB,EAAM4G,EAAOzpB,GAAG,GAAG0zB,UAAU,EAAGjK,EAAOzpB,GAAG,GAAGhK,OAAS,IAE1D6sB,EAAMA,EAAMA,EAAIrf,QAAQ,KAAM,IAAMimB,EAAOzpB,GAAG,GAC9CzD,EAAKrE,MAAQ2qB,EACbtmB,EAAK+B,KAAO,aAEX,IAAI0J,EAASrN,QAAQ,YAAc,EAAG,CACvC,GAAqB,YAAjB8uB,EAAOzpB,GAAG,IAAqC,SAAjBypB,EAAOzpB,GAAG,GACxC,KAEJ,IAAqB,WAAjBypB,EAAOzpB,GAAG,GACV46B,EAAO99B,KAAK1F,OAAOqyB,EAAOzpB,GAAG,SAE5B,IAAqB,WAAjBypB,EAAOzpB,GAAG,GAAiB,CAC5B6iB,EAAM4G,EAAOzpB,GAAG,EAChBypB,GAAOzpB,GAAG,IAA0B,MAApBypB,EAAOzpB,GAAG,GAAG,KAC7B6iB,EAAM4G,EAAOzpB,GAAG,GAAG0zB,UAAU,EAAGjK,EAAOzpB,GAAG,GAAGhK,OAAS,IAE1D6kC,EAAO/9B,KAAK+lB,QAIhB,IAAqB,WAAjB4G,EAAOzpB,GAAG,GACV46B,EAAO99B,KAAK1F,OAAOqyB,EAAOzpB,GAAG,SAE5B,IAAqB,WAAjBypB,EAAOzpB,GAAG,GAAiB,CAChC,GAAI6iB,GAAM4G,EAAOzpB,GAAG,EAChBypB,GAAOzpB,GAAG,IAA0B,MAApBypB,EAAOzpB,GAAG,GAAG,KAC7B6iB,EAAM4G,EAAOzpB,GAAG,GAAG0zB,UAAU,EAAGjK,EAAOzpB,GAAG,GAAGhK,OAAS,IAE1D6kC,EAAO/9B,KAAK+lB,GAGpBtmB,EAAK+B,KAAOjJ,KAAKglC,kBAAkB99B,GAGvCyL,EAASrN,QAAQ,QAAU,IACF,WAArB8uB,EAAOzpB,EAAI,GAAG,IACdzD,EAAKrE,MAAQ0iC,EACbr+B,EAAK+B,KAAO,UAEc,WAArBmrB,EAAOzpB,EAAI,GAAG,IACnBzD,EAAKrE,MAAQ2iC,EACbt+B,EAAK+B,KAAO,UAEP0J,EAASrN,QAAQ,YAAc,GAA0B,eAArB8uB,EAAOzpB,EAAI,GAAG,KACjC,IAAlB66B,EAAO7kC,QACPuG,EAAKrE,MAAQ2iC,EACbt+B,EAAK+B,KAAO,WAGZ/B,EAAKrE,MAAQ0iC,EACbr+B,EAAK+B,KAAO,WAGpBs8B,KACAC,KACAt+B,EAAK+B,KAAOjJ,KAAKglC,kBAAkB99B,IAEnClH,KAAKgO,yBAAgD,eAArBomB,EAAO5zB,EAAI,GAAG,KAC9C0G,EAAKlE,UAAYoxB,EAAO5zB,EAAI,GAAG,QAGT,cAArB4zB,EAAO5zB,EAAI,GAAG,KACnB0G,EAAKyL,SAAW3S,KAAKkkC,YAAY9P,EAAO5zB,EAAI,GAAG,GAAI4zB,EAAO5zB,EAAI,GAAG,GAAIw/B,GAC/C,UAAlB94B,EAAKyL,UAA6C,WAArByhB,EAAO5zB,EAAI,GAAG,IAAwC,OAArB4zB,EAAO5zB,EAAI,GAAG,GAC5E0G,EAAKyL,SAAW,UAEO,aAAlBzL,EAAKyL,UAAgD,WAArByhB,EAAO5zB,EAAI,GAAG,IAAwC,OAArB4zB,EAAO5zB,EAAI,GAAG,KACpF0G,EAAKyL,SAAW,cAEK,WAArByhB,EAAO5zB,EAAI,GAAG,IACd0G,EAAK+B,KAAO,SACZ/B,EAAKrE,MAAQd,OAAOqyB,EAAO5zB,EAAI,GAAG,MAGlC0G,EAAK+B,KAAO,UACRukB,EAAM4G,EAAO5zB,EAAI,GAAG,KACF,MAAXgtB,EAAI,KACXA,EAAMA,EAAI6Q,UAAU,EAAG7Q,EAAI7sB,OAAS,IAExCuG,EAAKrE,MAAQ2qB,GAEbxtB,KAAKgO,yBAAgD,eAArBomB,EAAO5zB,EAAI,GAAG,KAC9C0G,EAAKlE,UAAYoxB,EAAO5zB,EAAI,GAAG,IAEnC0G,EAAK+B,KAAOjJ,KAAKglC,kBAAkB99B,GAEvCC,GAAMA,MAAMM,KAAKP,OAEhB,CAAA,GAAqB,SAAjBktB,EAAO5zB,GAAG,GAAe,CAC9B,GAAuB,SAAjB4zB,EAAO,GAAG,KAAwC,QAArBA,EAAO5zB,EAAI,GAAG,IAAgBw/B,GAAahgC,KAAKwJ,KAAKC,YAAY,OAAOkF,gBAAkBylB,EAAO5zB,EAAI,GAAG,IAAK,CAC5IklC,GAAc,CACd,UAWJ,IATA1lC,KAAKo0B,OAASA,EAAOtc,OAAOtX,EAAI,EAAG2Z,GAAQ3Z,EAAI,IAE3C4kC,EADAplC,KAAK4G,oBACQ5D,UAAW,MAAOmE,SAAWpE,KAAK,IAGlCC,UAAW,MAAOmE,UAEnCm+B,EAAW,EACX3a,EAAOxjB,EAAMA,MAAMxG,OACdqlB,EAAI,EAAGA,EAAI2E,EAAM3E,IACd7e,EAAMA,MAAM6e,GAAG7e,OACfm+B,GAMR,OAHAv+B,GAAUU,KAAK69B,GACfn+B,EAAMA,MAAMM,KAAK29B,GACjBA,EAAWplC,KAAK+gC,cAAc/gC,KAAKo0B,OAAQgR,EAAUr+B,EAAWi5B,GACzD74B,EAEN,GAAqB,eAAjBitB,EAAO5zB,GAAG,IAAwBR,KAAKgO,yBAQ3C,GAAqB,UAAjBomB,EAAO5zB,GAAG,GAAgB,CAC/B,GAAIklC,GAAoC,UAArBtR,EAAO5zB,EAAI,GAAG,GAAgB,CAC7CklC,GAAc,CACd,UAMJ,IAJA1lC,KAAKo0B,OAASA,EAAOtc,OAAOtX,EAAI,EAAG2Z,GAAQ3Z,EAAI,IAC/CuG,EAAU4+B,MACVx+B,EAAQnH,KAAKkH,KACbm+B,EAAOt+B,EAAUpG,OACZskC,EAAI,EAAGA,EAAII,EAAMJ,IAClB99B,EAAQnH,KAAK2uB,eAAe5nB,EAAUk+B,GAAI99B,EAAa,IAAN89B,EAErD,OAAOjlC,MAAK+gC,cAAc/gC,KAAKo0B,OAAQjtB,EAAOJ,EAAWi5B,QAnBpC,QAAjB5L,EAAO5zB,GAAG,IAAiBw/B,GAAahgC,KAAKwJ,KAAKC,YAAY,OAAOkF,gBAAkBylB,EAAO5zB,GAAG,GACjG2G,EAAMpE,KAAM,EAGZoE,EAAMnE,UAAYoxB,EAAO5zB,GAAG,GAkBxC,MAAO2G,IAQX7E,EAAapC,UAAUmN,WAAa,SAAUrM,GAC1C,GAAI0L,GAAY1L,EAAOsM,QAAQ,gBAAgBA,QAAQ,sBACnDs4B,EAAc5kC,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACvD2yB,EAAUjtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtDoH,EAAQpO,KAAKqO,SAASu3B,EAC1B5lC,MAAK8D,WAAalE,MAAMM,UAAUoF,QAAQ1E,KAAKI,EAAOsM,QAAQ,gBAAgBuC,SAAU7O,EAAOsM,QAAQ,uBACvGtN,KAAKkd,YAAala,UAAaoL,EAAMpL,UAAWD,IAAOqL,EAAMrL,IAAKoE,MAASiH,EAAMjH,QAAUwyB,GAC3F35B,KAAK8D,YAAc,GAEvBxB,EAAapC,UAAUgN,UAAY,SAAUlM,GAMzC,IAAK,GALDkP,GAAW5C,UAAQtM,EAAQ,qBAC3B0L,EAAY1L,EAAOsM,QAAQ,gBAAgBA,QAAQ,sBACnD4B,EAAUlP,KAAKkP,QAAQlO,GACvB24B,EAAUjtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtD6zB,EAAenuB,EAAU1H,iBAAiB,qBACrCxE,EAAI,EAAG2Z,EAAO0gB,EAAal6B,OAAQH,EAAI2Z,EAAM3Z,IAC9C0P,EAASlJ,KAAO6zB,EAAar6B,GAAGwG,KAChChH,KAAK+D,UAAYvD,EAGrBR,MAAKgO,wBACLhO,KAAKkvB,WACGnlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM0J,SAAYzD,EAAQyD,SAC1F9P,MAASqM,EAAQrM,MAAOG,UAAakM,EAAQlM,YAC7C22B,GAGR35B,KAAKkvB,WACGnlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM0J,SAAYzD,EAAQyD,SAC1F9P,MAASqM,EAAQrM,QACjB82B,GAEZ35B,KAAK+D,WAAa,GAEtBzB,EAAapC,UAAUiN,SAAW,SAAUnM,GACxC,GAAIkP,GAAW5C,UAAQtM,EAAQ,qBAC3BkG,EAAOlH,KAAKkP,QAAQgB,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAC/DkJ,GAASjC,UAAUC,SAAS,cAC5BhH,EAAKjE,UAAW,EAChBjD,KAAK6D,UAAY7D,KAAK6D,UAAUkT,OAAO,SAAU8uB,GAAY,MAAOA,KAAa31B,EAASlJ,KAC1FkJ,EAASjC,UAAU2V,OAAO,aAC1B5jB,KAAK8lC,oBAAoB9kC,EAAQkP,GAAU,GAC3ClP,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,YACjCjS,EAAO6O,SAAS,GAAG5B,UAAU2V,OAAO,UACpC5iB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,eAGnDvC,EAAKjE,UAAW,EACZjD,KAAK6D,UAAUyB,QAAQ4K,EAASlJ,IAAM,GACtChH,KAAK6D,UAAUiU,OAAO9X,KAAK6D,UAAUlD,OAAS,EAAG,EAAGuP,EAASlJ,IAEjEkJ,EAASjC,UAAUgF,IAAI,aACvBjT,KAAK8lC,oBAAoB9kC,EAAQkP,GAAU,GAC3ClP,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,UACjCjS,EAAO6O,SAAS,GAAG5B,UAAU2V,OAAO,YACpC5iB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,iBAG3DnH,EAAapC,UAAUkN,UAAY,SAAUpM,GACzC,GAAI0L,GAAYY,UAAQtM,EAAQ,sBAC5BoN,EAAQpO,KAAKqO,SAAS3B,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAClEL,EAAS+F,EAAU1F,GAAG1B,QAAQ,WAAa,CAC/C,IAAIoH,EAAUuB,UAAUC,SAAS,aACzBvH,IACIo/B,MACK/iC,UAAYoL,EAAMpL,UAC3B+iC,EAAShjC,IAAMqL,EAAMrL,IACrBgjC,EAAS9iC,UAAW,EACpBjD,KAAKiH,eAAgBC,KAAM6+B,IAAY,IAGvC33B,EAAMnL,UAAW,EAErBjD,KAAK6D,UAAY7D,KAAK6D,UAAUkT,OAAO,SAAU8uB,GAAY,MAAOA,KAAan5B,EAAU1F,KAC3F0F,EAAUuB,UAAU2V,OAAO,aAC3B5jB,KAAKgmC,sBAAsBhlC,EAAQ0L,GAAW,GAC9C1L,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,YACjCjS,EAAO6O,SAAS,GAAG5B,UAAU2V,OAAO,UACpC5iB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cACnDzJ,KAAKimC,sBAEJ,CACD,GAAIt/B,EAAQ,CACR,GAAIo/B,KACJA,GAAS/iC,UAAYoL,EAAMpL,UAC3B+iC,EAAShjC,IAAMqL,EAAMrL,IACrBgjC,EAAS9iC,UAAW,EACpBjD,KAAKiH,eAAgBC,KAAM6+B,IAAY,OAGvC33B,GAAMnL,UAAW,CAEjBjD,MAAK6D,UAAUyB,QAAQoH,EAAU1F,IAAM,GACvChH,KAAK6D,UAAUiU,OAAO9X,KAAK6D,UAAUlD,OAAS,EAAG,EAAG+L,EAAU1F,IAElE0F,EAAUuB,UAAUgF,IAAI,aACxBjT,KAAKgmC,sBAAsBhlC,EAAQ0L,GAAW,GAC9C1L,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,UACjCjS,EAAO6O,SAAS,GAAG5B,UAAU2V,OAAO,YACpC5iB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,kBAG3DnH,EAAapC,UAAU+lC,gBAAkB,WACrC,IAAK,GAAIzlC,GAAI,EAAGA,EAAIR,KAAK6D,UAAUlD,OAAQH,IAEvC,GADaR,KAAK6D,UAAUrD,GAAGwH,MAAM,KAC1BrH,OAAS,EAAG,CACnB,GAAIuP,GAAWlQ,KAAKwC,QAAQsC,cAAc,IAAM9E,KAAK6D,UAAUrD,IAC3DQ,EAASkP,EAASpL,cAAc,qBACpCoL,EAAW5C,UAAQtM,EAAQ,sBACbiN,UAAUC,SAAS,cAC7BlO,KAAKmN,SAASnM,OAGjB,CACD,GAAI0L,GAAY1M,KAAKwC,QAAQsC,cAAc,IAAM9E,KAAK6D,UAAUrD,IAC5DQ,EAAS0L,EAAU5H,cAAc,oBACrC4H,EAAYY,UAAQtM,EAAQ,uBACbiN,UAAUC,SAAS,cAC9BlO,KAAKoN,UAAUpM,KAK/BsB,EAAapC,UAAU8lC,sBAAwB,SAAUhlC,EAAQ0L,EAAWw5B,GAWxE,IAAK,GAVD72B,GAAU3C,EAAU1H,iBAAiB,mBACrCsK,EAAS5C,EAAU1H,iBAAiB,kBACpCuY,EAAU7Q,EAAU1H,iBAAiB,gBACrCmhC,EAAUz5B,EAAU1H,iBAAiB,cACrCohC,EAAgB15B,EAAU1H,iBAAiB,kBAC3CqhC,EAAW35B,EAAU1H,iBAAiB,mBACtCq6B,EAAY3yB,EAAU1H,iBAAiB,oBACvCshC,EAAgB55B,EAAU1H,iBAAiB,sBAC3CuhC,EAAe75B,EAAU1H,iBAAiB,wBAC1CwhC,EAAW95B,EAAU1H,iBAAiB,oBACjCxE,EAAI,EAAGA,EAAI6O,EAAQ1O,OAAQH,IAC5B0lC,GACII,EAAc9lC,IAAM8lC,EAAc9lC,GAAGyN,UAAUC,SAAS,cACxDo4B,EAAc9lC,GAAGyN,UAAUgF,IAAI,aAEnC5D,EAAQ7O,GAAGme,UAAW,EACtBrP,EAAO9O,GAAGme,UAAW,EACjBwnB,EAAQ3lC,KACR2lC,EAAQ3lC,GAAGme,UAAW,GAEtB4nB,EAAa/lC,KACb+lC,EAAa/lC,GAAGme,UAAW,GAE3B6nB,EAAShmC,KACTgmC,EAAShmC,GAAGme,UAAW,GAEvBpB,EAAQ/c,KACR+c,EAAQ/c,GAAGme,UAAW,GAEtBynB,EAAc5lC,KACd4lC,EAAc5lC,GAAGme,UAAW,GAE5B0gB,EAAU7+B,KACV6+B,EAAU7+B,GAAGme,UAAW,GAE5BtP,EAAQ7O,GAAGkF,cAAcuI,UAAUgF,IAAI,cACnCozB,EAAS7lC,IAAM6lC,EAAS7lC,KAAOQ,IAC/BqlC,EAAS7lC,GAAGme,UAAW,EACvB0nB,EAAS7lC,GAAGqP,SAAS,GAAG5B,UAAU2V,OAAO,YACzCyiB,EAAS7lC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,aAItCqzB,EAAc9lC,IACd8lC,EAAc9lC,GAAGyN,UAAU2V,OAAO,aAEtCvU,EAAQ7O,GAAGme,UAAW,EACtBrP,EAAO9O,GAAGme,UAAW,EACjBwnB,EAAQ3lC,KACR2lC,EAAQ3lC,GAAGme,UAAW,GAEtB4nB,EAAa/lC,KACb+lC,EAAa/lC,GAAGme,UAAW,GAE3B6nB,EAAShmC,KACTgmC,EAAShmC,GAAGme,UAAW,GAEvB0nB,EAAS7lC,KACT6lC,EAAS7lC,GAAGme,UAAW,GAEvBpB,EAAQ/c,KACR+c,EAAQ/c,GAAGme,UAAW,GAEtBynB,EAAc5lC,KACd4lC,EAAc5lC,GAAGme,UAAW,GAE5B0gB,EAAU7+B,KACV6+B,EAAU7+B,GAAGme,UAAW,GAE5BtP,EAAQ7O,GAAGkF,cAAcuI,UAAU2V,OAAO,cACtCyiB,EAAS7lC,IACT6lC,EAAS7lC,GAAGqP,SAAS,GAAG5B,UAAU2V,OAAO,UAEzCyiB,EAAS7lC,IACT6lC,EAAS7lC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,YAIlDjT,MAAK8lC,oBAAoB9kC,EAAQ0L,EAAWw5B,IAEhD5jC,EAAapC,UAAU4lC,oBAAsB,SAAU9kC,EAAQ0L,EAAWw5B,GACtE,GAAIO,GAAoB,SAAUjhB,EAAUkhB,EAAiBR,GACzD1gB,EAAS1c,QAAQ,SAAUtG,GACvB,GAAImkC,GAAYD,EAAgBlkC,EAC5B,YAAamkC,GACbA,EAAUC,SAAWV,EAEhB,YAAcS,KACnBA,EAAUhoB,SAAWunB,MAI7B1gB,GACA/D,IAAK/U,EAAU1H,iBAAiB,6BAChCslB,QAAS5d,EAAU1H,iBAAiB,+BACpCpC,KAAM8J,EAAU1H,iBAAiB,wBACjCu5B,KAAM7xB,EAAU1H,iBAAiB,2BACjC6hC,SAAUn6B,EAAU1H,iBAAiB,yBACrC8hC,MAAOp6B,EAAU1H,iBAAiB,sBAClC+hC,YAAar6B,EAAU1H,iBAAiB,4BACxCgiC,WAAYt6B,EAAU1H,iBAAiB,kBACvCqhC,SAAU35B,EAAU1H,iBAAiB,gBACrCq6B,UAAW3yB,EAAU1H,iBAAiB,iBACtCkL,SAAUxD,EAAU1H,iBAAiB,qBAEzCwgB,GAASwhB,WAAWl+B,QAAQ,SAAUqH,EAAM3P,GACpC0lC,GACI1gB,EAAStV,SAAS1P,IAAMglB,EAAStV,SAAS1P,GAAGyN,UAAUC,SAAS,cAChEsX,EAAStV,SAAS1P,GAAGyN,UAAUgF,IAAI,aAEvCuS,EAASwhB,WAAWxmC,GAAGme,UAAW,EAC9B6G,EAAS6Z,UAAU7+B,KACnBglB,EAAS6Z,UAAU7+B,GAAGme,UAAW,GAEjC6G,EAAS6gB,SAAS7lC,KAAOQ,IACzBwkB,EAAS6gB,SAAS7lC,GAAGme,UAAW,EAChC6G,EAAS6gB,SAAS7lC,GAAGqP,SAAS,GAAG5B,UAAU2V,OAAO,YAClD4B,EAAS6gB,SAAS7lC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,aAI/CuS,EAAStV,SAAS1P,IAClBglB,EAAStV,SAAS1P,GAAGyN,UAAU2V,OAAO,aAEtC4B,EAAS6Z,UAAU7+B,KACnBglB,EAAS6Z,UAAU7+B,GAAGme,UAAW,GAErC6G,EAASwhB,WAAWxmC,GAAGme,UAAW,EAClC6G,EAAS6gB,SAAS7lC,GAAGme,UAAW,EAChC6G,EAAS6gB,SAAS7lC,GAAGqP,SAAS,GAAG5B,UAAU2V,OAAO,UAClD4B,EAAS6gB,SAAS7lC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,eAGvDwzB,EAAkBjhB,EAAS/D,IAAK,SAAUtR,GAAQ,MAAO3K,gBAAa2K,EAAM,iBAAoB+1B,GAChGO,EAAkBjhB,EAAS8E,QAAS,SAAUna,GAAQ,MAAO3K,gBAAa2K,EAAM,mBAAsB+1B,GACtGO,EAAkBjhB,EAAS5iB,KAAM,SAAUuN,GAAQ,MAAO3K,gBAAa2K,EAAM,YAAe+1B,GAC5FO,EAAkBjhB,EAAS+Y,KAAM,SAAUpuB,GAAQ,MAAO3K,gBAAa2K,EAAM,eAAkB+1B,GAC/FO,EAAkBjhB,EAASqhB,SAAU,SAAU12B,GAAQ,MAAO3K,gBAAa2K,EAAM,aAAgB+1B,GACjGO,EAAkBjhB,EAASshB,MAAO,SAAU32B,GAAQ,MAAO3K,gBAAa2K,EAAM,UAAa+1B,GAC3FO,EAAkBjhB,EAASuhB,YAAa,SAAU52B,GAAQ,MAAO3K,gBAAa2K,EAAM,gBAAmB+1B,IAE3GplC,GACImmC,WACD3kC,EAAapC,UAAW,cAAW,IACtCY,GACImmC,WACD3kC,EAAapC,UAAW,kBAAe,IAC1CY,GACImmC,WACD3kC,EAAapC,UAAW,mBAAgB,IAC3CY,GACImmC,WACD3kC,EAAapC,UAAW,aAAU,IACrCY,GACImmC,WACD3kC,EAAapC,UAAW,gBAAa,IACxCY,GACImmC,WACD3kC,EAAapC,UAAW,iBAAc,IACzCY,GACImmC,WACD3kC,EAAapC,UAAW,gBAAa,IACxCY,GACImmC,WACD3kC,EAAapC,UAAW,WAAQ,IACnCY,GACImmC,WACD3kC,EAAapC,UAAW,WAAQ,IACnCY,GACIomC,aAAY7kC,IACbC,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,WAAS,YACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,gBACDW,EAAapC,UAAW,cAAW,IACtCY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,OACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,cACDW,EAAapC,UAAW,qBAAkB,IAC7CY,GACIa,WAAS,KACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,gBACDW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,eACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,wBAAqB,IAChDY,GACIa,WAAS,YACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,IACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,SACVW,EAAapC,UAAW,aAAU,IACrCY,GACIa,WAAS,SACVW,EAAapC,UAAW,YAAS,IACpCY,GACIa,YAAS,IACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,WAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,WAAS,KACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,YAAS,IACVW,EAAapC,UAAW,8BAA2B,IACtDY,GACIomC,WAAUlkC,UAAW,MAAOmE,UAAajF,IAC1CI,EAAapC,UAAW,WAAQ,IACnCY,GACIa,YAAS,IACVW,EAAapC,UAAW,uBAAoB,IAC/CoC,EAAexB,GACXqmC,yBACD7kC,IAEL8kC,aC32OEC,EAA8B,WAC9B,QAASA,GAAaC,GAClBtnC,KAAKsnC,OAASA,EACdtnC,KAAKo6B,mBAkrBT,MAhrBAiN,GAAannC,UAAUuF,QAAU,WACzBzF,KAAKsnC,OAAOC,aAGhBvnC,KAAKs6B,uBAET+M,EAAannC,UAAUk6B,iBAAmB,WAClCp6B,KAAKsnC,OAAOC,cAGhBvnC,KAAKsnC,OAAOE,GAAG,gBAAiBxnC,KAAKynC,aAAcznC,MACnDA,KAAKsnC,OAAOE,GAAG,YAAaxnC,KAAKyF,QAASzF,QAE9CqnC,EAAannC,UAAUo6B,oBAAsB,WACzCt6B,KAAKsnC,OAAOI,IAAI,gBAAiB1nC,KAAKynC,cACtCznC,KAAKsnC,OAAOI,IAAI,YAAa1nC,KAAKyF,UAEtC4hC,EAAannC,UAAUunC,aAAe,SAAU9/B,GAC5C,OAAQA,EAAK25B,MACT,IAAK,oBACD35B,EAAK9E,MAAW,IAAc,WAAI7C,KAAK2nC,kBAAkBhgC,EAAK9E,MAAY,KAAG8E,EAAK9E,MAAkB,WACpG,MACJ,KAAK,cACD7C,KAAK4nC,YAAYjgC,EAAK9E,MAAkB,WAAG8E,EAAK9E,MAAY,KAAG8E,EAAK9E,MAAmB,YACvF,MACJ,KAAK,kBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAK6nC,gBAAgBlgC,EAAK9E,MAAY,KACjE,MACJ,KAAK,uBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAK8nC,qBAAqBngC,EAAK9E,MAAY,KACtE,MACJ,KAAK,uBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAK+nC,qBAAqBpgC,EAAK9E,MAAW,IACrE,MACJ,KAAK,4BACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAKgoC,0BAA0BrgC,EAAK9E,MAAW,OAItFwkC,EAAannC,UAAUynC,kBAAoB,SAAUzgC,EAAM26B,GAWvD,MAVAA,GAAa,IACU,OAAnB36B,EAAKlE,WACL6+B,GAAc,UACdA,EAAa7hC,KAAKioC,kBAAkB/gC,EAAKC,MAAO06B,GAAc,MAG9DA,GAAc,WACdA,EAAa7hC,KAAKioC,kBAAkB/gC,EAAKC,MAAO06B,GAAc,KAElEA,GAAc,KAGlBwF,EAAannC,UAAUgoC,6BAA+B,SAAUv1B,GAC5D,GAAIw1B,EACJ,QAAQx1B,GACJ,IAAK,MACDw1B,EAAgB,UAChB,MACJ,KAAK,MACDA,EAAgB,aAChB,MACJ,KAAK,OACDA,EAAgB,oBAChB,MACJ,KAAK,MACDA,EAAgB,UAChB,MACJ,KAAK,OACDA,EAAgB,iBAChB,MACJ,KAAK,OACDA,EAAgB,QAGxB,MAAOA,IAGXd,EAAannC,UAAU+nC,kBAAoB,SAAU9gC,EAAO06B,GACxD,GAAIp/B,GAAQzC,KACRQ,EAAI,CA4KR,OA1KA2G,GAAM2B,QAAQ,SAAU4Y,GACpBlhB,IACAqhC,GAAc,QACK3rB,KAAfwL,EAAKva,QACkB,OAAnBua,EAAK1e,WACL6+B,GAAc,WACdA,EAAap/B,EAAMwlC,kBAAkBvmB,EAAKva,MAAO06B,GAAc,MAG/DA,GAAc,YACdA,EAAap/B,EAAMwlC,kBAAkBvmB,EAAKva,MAAO06B,GAAc,KAGvE,IAAIuG,GAAsB,WAAd1mB,EAAKzY,MAAuC,OAAlByY,EAAK/O,UAAuC,UAAlB+O,EAAK/O,UAAwB+O,EAAK7e,OAA+B,KAAtB6e,EAAK7e,MAAM4qB,OAAgB/L,EAAK7e,MAAMsL,QAAQ,KAAM,MAAQ,EACrJ,YAAduT,EAAKzY,MAAwC,OAAlByY,EAAK/O,UAAuC,UAAlB+O,EAAK/O,WAAyB+O,EAAK7e,OAA+B,IAAtB6e,EAAK7e,MAAMlC,SAC5GynC,EAAQ1mB,EAAK7e,MAAM,GAAGsL,QAAQ,KAAM,MAExC,IAAItG,GAAQ6Z,EAAK7Z,MAAQ6Z,EAAK7Z,MAAMw2B,UAAU,GAAK,EACnD,QAAQ3c,EAAK/O,UACT,IAAK,WACDkvB,GAAc,IAAMh6B,EAAQ,gBAAkBugC,EAAQ,IACtD,MACJ,KAAK,cACDvG,GAAc,IAAMh6B,EAAQ,wBAA0B6Z,EAAK7e,MAAQ,KACnE,MACJ,KAAK,aACDg/B,GAAc,IAAMh6B,EAAQ,iBAAmBugC,EAAQ,IACvD,MACJ,KAAK,gBACDvG,GAAc,IAAMh6B,EAAQ,yBAA2B6Z,EAAK7e,MAAQ,KACpE,MACJ,KAAK,WACDg/B,GAAc,IAAMh6B,EAAQ,gBAAkBugC,EAAQ,KACtD,MACJ,KAAK,cACDvG,GAAc,IAAMh6B,EAAQ,wBAA0B6Z,EAAK7e,MAAQ,MACnE,MACJ,KAAK,SACDg/B,GAAc,IAAMh6B,EAAQ,SAC5B,MACJ,KAAK,YACDg6B,GAAc,IAAMh6B,EAAQ,iBAC5B,MACJ,KAAK,UACDg6B,GAAc,IAAMh6B,EAAQ,OAC5B,MACJ,KAAK,aACDg6B,GAAc,IAAMh6B,EAAQ,eAC5B,MACJ,KAAK,QACiB,WAAd6Z,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,MAAQugC,EAAQ,IAEzB,SAAd1mB,EAAKzY,KACV44B,GAAc,IAAMh6B,EAAQ,MAAQ6Z,EAAK7e,MAAQ,KAE5C6e,EAAKzY,KACV44B,GAAc,IAAMh6B,EAAQ,KAAO6Z,EAAK7e,MAK5C,MACJ,KAAK,WACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,aAAeugC,EAAQ,KAEhC,SAAd1mB,EAAKzY,KACV44B,GAAc,IAAMh6B,EAAQ,aAAe6Z,EAAK7e,MAAQ,KAGxDg/B,GAAc,IAAMh6B,EAAQ,YAAc6Z,EAAK7e,MAAQ,GAE3D,MACJ,KAAK,KACiB,WAAd6e,EAAKzY,KACDyY,EAAK7e,MAAMlC,OAAS,GAGpBJ,GADIA,EAAImhB,EAAK7e,MAAM2I,IAAI,SAAU68B,EAAG19B,GAAK,MAAQA,GAAI+W,EAAK7e,MAAMlC,OAAS,IAAO0nC,EAAI,IAAO,KAAQ5wB,YAC7F6wB,SAAS,KAAO/nC,EAAE89B,UAAU,EAAG99B,EAAEI,OAAS,GAAKJ,EACrDshC,GAAc,IAAMh6B,EAAQ,gBAAkBtH,EAAI,MAGlDshC,GAAc,IAAMh6B,EAAQ,iBAAmBugC,EAAQ,MAGxC,WAAd1mB,EAAKzY,OACNyY,EAAK7e,MAAMlC,OAAS,EACpBkhC,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAM4U,WAAa,KAGtEoqB,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAQ,KAGnE,MACJ,KAAK,QACD,GAAkB,WAAd6e,EAAKzY,KACL,GAAIyY,EAAK7e,MAAMlC,OAAS,EAAG,CAEvB,GAAIJ,GAAImhB,EAAK7e,MAAM2I,IAAI,SAAU68B,EAAG19B,GAAK,MAAQA,GAAI+W,EAAK7e,MAAMlC,OAAS,IAAO0nC,EAAI,IAAO,KAAQ5wB,UACnGlX,GAAIA,EAAE+nC,SAAS,KAAO/nC,EAAE89B,UAAU,EAAG99B,EAAEI,OAAS,GAAKJ,EACrDshC,GAAc,IAAMh6B,EAAQ,iBAAmBtH,EAAI,SAGnDshC,IAAc,IAAMh6B,EAAQ,kBAAoBugC,EAAQ,UAGzC,WAAd1mB,EAAKzY,OACNyY,EAAK7e,MAAMlC,OAAS,EACpBkhC,GAAc,IAAMh6B,EAAQ,iBAAmB6Z,EAAK7e,MAAM4U,WAAa,KAGvEoqB,GAAc,IAAMh6B,EAAQ,iBAAmB6Z,EAAK7e,MAAQ,KAGpE,MACJ,KAAK,cACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,eAAiB6Z,EAAK7e,MAAQ,IAG1Dg/B,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAQ,IAE/D,MACJ,KAAK,qBACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAQ,IAG3Dg/B,GAAc,IAAMh6B,EAAQ,iBAAmB6Z,EAAK7e,MAAQ,IAEhE,MACJ,KAAK,UACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,cAAgB6Z,EAAK7e,MAAM,GAAK,YAAc6e,EAAK7e,MAAM,GAAK,IAG1Fg/B,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAM,GAAK,eAAiB6e,EAAK7e,MAAM,GAAK,IAEnG,MACJ,KAAK,aACiB,WAAd6e,EAAKzY,KACL44B,GAAc,YAAch6B,EAAQ,aAAe6Z,EAAK7e,MAAM,GAAK,SAAWgF,EAAQ,aAAe6Z,EAAK7e,MAAM,GAAK,MAGrHg/B,GAAc,YAAch6B,EAAQ,eAAiB6Z,EAAK7e,MAAM,GAAK,UAAYgF,EAAQ,eAAiB6Z,EAAK7e,MAAM,GAAK,MAE9H,MACJ,KAAK,WACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,eAAiB6Z,EAAK7e,MAAQ,IAG1Dg/B,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAQ,IAE/D,MACJ,KAAK,kBACiB,WAAd6e,EAAKzY,KACL44B,GAAc,IAAMh6B,EAAQ,gBAAkB6Z,EAAK7e,MAAQ,IAG3Dg/B,GAAc,IAAMh6B,EAAQ,iBAAmB6Z,EAAK7e,MAAQ,KAIxEg/B,GAAc,IACV16B,EAAMxG,SAAWH,IACjBqhC,GAAc,OAGfA,GAEXwF,EAAannC,UAAU0nC,YAAc,SAAU/F,EAAY36B,EAAM46B,GAC7D,GAAIyG,EACA9oC,QAAO6I,KAAKu5B,GAAYv8B,QAAQ,SAAW,GAC3CijC,EAAY1G,EAAiB,KAC7B36B,EAAKlE,UAAY,OAEZvD,OAAO6I,KAAKu5B,GAAYv8B,QAAQ,QAAU,IAC/CijC,EAAY1G,EAAgB,IAC5B36B,EAAKlE,UAAY,MAErBkE,EAAKC,SACLnH,KAAKwoC,eAAeD,EAAWrhC,EAAKC,MAAO26B,IAE/CuF,EAAannC,UAAUsoC,eAAiB,SAAUD,EAAWphC,EAAO26B,GAchE,IAAK,GAbDqG,GACAl/B,EAEAw/B,EACAxnC,EACAynC,EACAC,EACA3lC,EACAH,EACAuiC,EACAl+B,EACA0hC,EACAvL,EACK78B,EAAI,EAAGsJ,EAAMy+B,EAAU5nC,OAAQH,EAAIsJ,EAAKtJ,IAAK,CAClD,GAAIqoC,MACAC,IAGJ,IAFA9lC,EAAYvD,OAAO6I,KAAKigC,EAAU/nC,IAAI,GACtCqC,EAAQ0lC,EAAU/nC,GAAGwC,GACH,SAAdA,EAEIoiC,EADAplC,KAAKsnC,OAAO1gC,oBACC5D,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,SAAWpE,KAAK,IAGvDC,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,UAExDA,EAAMM,KAAK29B,GACXplC,KAAKwoC,eAAeD,EAAU/nC,GAAGwC,GAAYmE,EAAMA,EAAMxG,OAAS,GAAGwG,MAAO26B,OAE3E,IAAkB,QAAd9+B,EAAqB,CAC1B,GAAI+lC,OAAa,GAEbC,KACA1gC,KACA2gC,KACAC,KAGAC,KAEAC,KACAC,IACAzpC,OAAM28B,QAAQ15B,IAA2B,IAAjBA,EAAMlC,SAE9ByoC,EAAkBvmC,GADlByF,EAAO7I,OAAO6I,KAAKzF,IACU,IAC7BwmC,EAAmBxmC,EAAMyF,EAAK,IACC,gBAApB8gC,KACPJ,EAAcvpC,OAAO6I,KAAK8gC,GAAiB,GAE3CH,EADYxpC,OAAO6I,KAAK8gC,EAAgB3pC,OAAO6I,KAAK8gC,GAAiB,KAChD,GACrBF,EAAYzpC,OAAO6I,KAAK+gC,EAAiB5pC,OAAO6I,KAAK+gC,GAAkB,KAAK,GAC3D,QAAbJ,GAAoC,QAAdC,IACtBf,EAAgB,aAOhBjhC,GAASW,MAAOmhC,EAAaj/B,MAAOi/B,EAAanmC,MADjDw6B,GAJA8L,EAAaC,EAAgBJ,GAAaC,GAE5BI,EAAiBL,GAAaE,IAGuBv2B,SAAUw1B,EAAel/B,KAF5FA,EAA6B,gBAAfkgC,GAA0B,SAAW,QAGnDhiC,EAAMM,KAAKP,GACX6hC,GAAa,KAIpBA,IAEG3D,EADAplC,KAAKsnC,OAAO1gC,oBACC5D,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,SAAWpE,KAAK,IAGvDC,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,UAExDA,EAAMM,KAAK29B,GACXplC,KAAKwoC,eAAeD,EAAU/nC,GAAGwC,GAAYmE,EAAMA,EAAMxG,OAAS,GAAGwG,MAAO26B,QAG/E,CAUD,GARc,QADdj/B,EAAQ0lC,EAAU/nC,GAAGwC,MAEjBmlC,EAAgB,UAEC,iBAAVtlC,KACPslC,EAAgB,QAChBl/B,EAAO,UACPo0B,EAAYx6B,GAEO,mBACnBw6B,EAAYx6B,EACZoG,EAAO,SACPk/B,EAAgB,YAEf,IAAuB,oBAAsB,OAAVtlC,EAAgB,CACpD+lC,EAASnpC,OAAO6I,KAAKzF,EACrB,KAAK,GAAIgrB,GAAM,EAAGA,EAAM+a,EAAOjoC,OAAQktB,IAuDnC,GAtDA5sB,EAAM2nC,EAAO/a,GACb4a,EAAc,EAAQG,EAAO/a,IACjB,QAAR5sB,GAAiB6G,oBAAkB2gC,KACnCN,EAAgB,YAChB9K,EAAY,MAEJ,QAARp8B,GAAwC,iBAAhBwnC,KACxBN,EAAgB,WAChB9K,EAAYoL,EACZx/B,EAAO,WAEP2/B,EAAOjoC,QAAU,GAAKioC,EAAO/a,IACD,oBACxBsa,EAAgB,aAChBnlC,EAAYvD,OAAO6I,KAAKmgC,GAAa,GACrCC,GAAgBjpC,OAAO6I,KAAKmgC,EAAYzlC,IAAY,IAEpD6lC,EAAqBphC,KAAKghC,EAAYzlC,GAAW0lC,IACjDz/B,EAAO,WAGPk/B,EAAgB,UAChBU,EAAqBphC,KAAKghC,IAED,qBACzBx/B,EAAO,WAGmB,oBAA4B,OAAhBw/B,EAC9B,SAARxnC,GAAkD,WAAhCxB,OAAO6I,KAAKmgC,GAAa,GACvCA,EAAoB,OAAEnjC,QAAQ,MAAQ,GACtC6iC,EAAgB,gBAChB9K,EAAYoL,EAAoB,OAAEt6B,QAAQ,IAAK,KAE1Cs6B,EAAoB,OAAEnjC,QAAQ,MAAQ,GAC3C6iC,EAAgB,cAChB9K,EAAYoL,EAAoB,OAAEt6B,QAAQ,IAAK,MAG/Cg6B,EAAgB,cAChB9K,EAAYoL,EAAoB,SAIpCN,EAAwB,QAARlnC,EAAgB,KAAO,QACvC6nC,EAAkBL,EAClBx/B,EAAmC,gBAApBw/B,GAAY,GAAmB,SAAW,UAG/B,qBAC9BN,EAAgBnoC,KAAKkoC,6BAA6BjnC,GAClDgI,EAAO,SACPo0B,EAAYoL,GAEa,mBAAU,CACvB,WAARxnC,IACAknC,EAAgB,WAChB9K,EAAYoL,EACZx/B,EAAO,UAEC,QAARhI,IACoB,OAAhBwnC,GAAwBA,EAAY9nC,OAAS,GAAKuI,MAAMC,KAAKC,MAAMq/B,KACnEN,EAAgB,WAChB9K,EAAYoL,GAEP3gC,oBAAkB2gC,IACvBN,EAAgB,YAChB9K,EAAYoL,GAES,KAAhBA,IACLN,EAAgB,aAChB9K,EAAYoL,GAEhBx/B,EAAO,UAEPw/B,EAAYnjC,QAAQ,MAAQ,IAC5B6iC,EAAgB,aAChB9K,EAAYoL,EAAYt6B,QAAQ,IAAK,IACrClF,EAAO,UAEPw/B,EAAYnjC,QAAQ,MAAQ,GAAa,SAARrE,IACjCknC,EAAgB,WAChB9K,EAAYoL,EAAYt6B,QAAQ,IAAK,IACrClF,EAAO,SAEX,KAAK,GAAI4nB,GAAK,EAAGyY,EAAKtpC,KAAKsnC,OAAO1+B,QAASioB,EAAKyY,EAAG3oC,OAAQkwB,IAAM,CAC7D,GAAI9nB,GAASugC,EAAGzY,EAChB,IAAI9nB,EAAOlB,QAAU7E,EAAW,CAC5B2lC,EAAY5/B,EAAOE,IACnB,QAGHC,MAAMC,KAAKC,MAAMq/B,KAA+B,SAAdE,IACnCR,EAAgBA,GAAiBnoC,KAAKkoC,6BAA6BjnC,GACnEgI,EAAO,OACPo0B,EAAYoL,QAKnB5lC,IAA4B,qBAAaqG,MAAMC,KAAKC,MAAMvG,KAC/DslC,EAAgB,QAChB9K,EAAYx6B,EACZoG,EAAO,QAEiB,oBAAsB,KAAVpG,GAA0B,SAAVA,GAA8B,UAAVA,GACxEslC,EAAgB,QAChB9K,EAAYx6B,EACZoG,EAAO,UAEiB,oBAAsB,KAAVpG,IACpCslC,EAAgB,UAChB9K,EAAYx6B,EACZoG,EAAO,SAGP/B,GADA2hC,GAAwBA,EAAqBloC,OAAS,GAC7CkH,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAOgmC,EAAsBl2B,SAAUw1B,EAAel/B,KAAMA,GAEpG6/B,GAAmBA,EAAgBnoC,OAAS,GACxCkH,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAOimC,EAAiBn2B,SAAUw1B,EAAel/B,KAAMA,IAG3FpB,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAOw6B,EAAW1qB,SAAUw1B,EAAel/B,KAAMA,GAElG9B,EAAMM,KAAKP,GACXihC,EAAgB,MAI5Bd,EAAannC,UAAU6nC,qBAAuB,SAAU3G,GAKpD,IAAK,GAJDmI,GAAWnI,EAAIA,IACfoI,EAAcpI,EAAIqI,OAClBC,EAAQH,EAASvhC,MAAM,KACvB2hC,EAAYD,EAAM,GACblpC,EAAI,EAAGA,EAAIgpC,EAAY7oC,OAAQH,IACpCmpC,GAA0C,gBAApBH,GAAYhpC,GAAmB,IAAMgpC,EAAYhpC,GAAK,IAAMkpC,EAAMlpC,EAAI,GAAKgpC,EAAYhpC,GAAKkpC,EAAMlpC,EAAI,EAMhI,OAJImpC,GAAUhpC,QAAU,GAAsB,MAAjBgpC,EAAU,IAAkD,MAApCA,EAAUA,EAAUhpC,OAAS,KAC9EgpC,EAAYA,EAAUtvB,MAAM,GAAI,IAEpCsvB,EAAYA,EAAUx7B,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnFk5B,EAAannC,UAAU8nC,0BAA4B,SAAU5G,GACzD,GAAIwI,GAAgBxI,EAAIA,IACpBqI,EAASrI,EAAIqI,OACbE,EAAYC,CAUhB,OATAnqC,QAAO6I,KAAKmhC,GAAQ3gC,QAAQ,SAAU+gC,GAClC,GAAIC,GAAaL,EAAOI,EACxBA,GAAY,IAAMA,EAClBF,EAAYA,EAAUx7B,QAAQ07B,EAAmC,mBAAW,IAAMC,EAAa,IAAMC,OAAOD,MAE5GH,EAAUhpC,QAAU,GAAsB,MAAjBgpC,EAAU,IAAkD,MAApCA,EAAUA,EAAUhpC,OAAS,KAC9EgpC,EAAYA,EAAUtvB,MAAM,GAAI,IAEpCsvB,EAAYA,EAAUx7B,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnFk5B,EAAannC,UAAU2nC,gBAAkB,SAAUmC,GAC/C,GAAIC,GAASv8B,YAAWs8B,EAAQ,MAAM,GAElCnnC,EAAQ7C,KAAKkqC,gBAAgBD,GAAQ,EACzC,OAAOjqC,MAAKmqC,mBAAmBnqC,KAAKsnC,OAAOz6B,gBAAgBo9B,GAASpnC,EAAe,UAEvFwkC,EAAannC,UAAU4nC,qBAAuB,SAAUkC,GACpD,GAAIC,GAASv8B,YAAWs8B,EAAQ,MAAM,GAElCnnC,EAAQ7C,KAAKkqC,gBAAgBD,GAAQ,EACzC,OAAOjqC,MAAKoqC,wBAAwBpqC,KAAKsnC,OAAOz6B,gBAAgBo9B,GAASpnC,EAAoB,eAEjGwkC,EAAannC,UAAUiqC,mBAAqB,SAAU5xB,EAAS8kB,GAE3D,OAAS+D,IAAK,IADO7oB,EAAQpK,QAAQ,QAAS,IACT,IAAKs7B,OAAQpM,IAEtDgK,EAAannC,UAAUkqC,wBAA0B,SAAU7xB,EAAS8kB,GAEhE,OAAS+D,IAAK,IADO7oB,EAAQpK,QAAQ,QAAS,IACT,IAAKs7B,OAAQpM,IAGtDgK,EAAannC,UAAUgqC,gBAAkB,SAAUhjC,EAAMmjC,GACrD,GAAIC,MACAC,KACAC,IACJ,OAAOxqC,MAAKyqC,YAAYvjC,EAAKC,MAAOkjC,EAAkBC,EAASC,EAAcC,IAEjFnD,EAAannC,UAAUuqC,YAAc,SAAUtjC,EAAOkjC,EAAkBC,EAExEC,EAAcC,GACV,GAAI1iC,oBAAkBX,GAClB,OAASmjC,QAASA,EAASC,aAAcA,EAE7C,KAAK,GAAI/pC,GAAI,EAAGA,EAAI2G,EAAMxG,OAAQH,IAC9B,GAAI2G,EAAM3G,GAAG2G,MAGTmjC,GADIznC,EAAQ7C,KAAKyqC,YAAYtjC,EAAM3G,GAAG2G,MAAOkjC,EAAkBC,EAASC,EAAcC,IAC7D,QACzBD,EAAe1nC,EAAoB,iBAElC,CACD,GAAI6nC,OAAa,EACjB,IAAIvjC,EAAM3G,GAAGqC,gBAAiBjD,OAE1B,IAAK,GAAI+K,GAAI,EAAGA,EAAKxD,EAAM3G,SAAUG,OAAQgK,IACrC0/B,IACAK,EAAa1qC,KAAK2qC,kBAAkBxjC,EAAM3G,GAAGqH,MAAO2iC,IAEnD1iC,oBAAkBX,EAAM3G,GAAGqC,MAAM8H,MACZ,WAAlBxD,EAAM3G,GAAGyI,MAAqB9B,EAAM3G,GAAGyI,KACnCohC,EACAE,EAAaG,GAAcvjC,EAAM3G,GAAGqC,MAAM8H,GAG1C2/B,EAAQ7iC,KAAKN,EAAM3G,GAAGqC,MAAM8H,KAapCxD,EAAM3G,GAAGqC,MAAM8H,GADf0/B,EACoB,IAAMK,EAGN,QAQ5B,IAHIL,IACAK,EAAa1qC,KAAK2qC,kBAAkBxjC,EAAM3G,GAAGqH,MAAO2iC,IAEpDrjC,EAAM3G,GAAGmS,SAASrN,QAAQ,QAAU,IACd,WAAlB6B,EAAM3G,GAAGyI,MAAwC,WAAlB9B,EAAM3G,GAAGyI,OAAyC,KAAnB9B,EAAM3G,GAAGqC,OAAmC,IAAnBsE,EAAM3G,GAAGqC,QAAe,CAC/G,GAAsB,WAAlBsE,EAAM3G,GAAGyI,MAAuC,SAAlB9B,EAAM3G,GAAGyI,KACvC,GAAI9B,EAAM3G,GAAGmS,SAASrN,QAAQ,SAAW,EAAG,CACxC,GAAIzC,GAAQsE,EAAM3G,GAAGqC,MAAM4U,UAC3B,QAAQtQ,EAAM3G,GAAGmS,UACb,IAAK,aACL,IAAK,gBACD9P,GAAgB,GAChB,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,CACd,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,EAAQ,IAG1BwnC,EAEAE,EAAaG,GAAc7nC,EAI3BynC,EAAQ7iC,KAAK5E,OAIbwnC,GAEAE,EAAaG,GAAc,GAI3BJ,EAAQ7iC,KAAK,IAES,YAAtBN,EAAM3G,GAAGmS,SACTxL,EAAM3G,GAAGmS,SAAW,QAGpBxL,EAAM3G,GAAGmS,SAAW,eAKvB7K,qBAAkBX,EAAM3G,GAAGqC,SACxBwnC,EAEAE,EAAaG,GAAcvjC,EAAM3G,GAAGqC,MAIpCynC,EAAQ7iC,KAAKN,EAAM3G,GAAGqC,OAK9BsE,GAAM3G,GAAGqC,MADTwnC,EACiB,IAAMK,EAGN,KAOzC,OAASJ,QAASA,EAASC,aAAcA,IAE7ClD,EAAannC,UAAUyqC,kBAAoB,SAAU9iC,EAAO2iC,GACxD,GAAII,GAAW,IACf,IAAIJ,EAAgB7pC,OAAS,EACzB,IAAK,GAAIH,GAAIgqC,EAAgB7pC,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAClD,GAAIqqC,GAAYL,EAAgBhqC,EAChC,IAAIqqC,EAAUvlC,QAAQuC,IAAU,EAAG,CAE/B+iC,EAAW/iC,EAAQ,KADT2P,SAASqzB,EAAU7iC,MAAM,KAAK,GAAI,IAAM,GAElDwiC,EAAgB/iC,KAAKmjC,EACrB,QAQZ,MAJKA,KACDA,EAAW/iC,EAAQ,KACnB2iC,EAAgB/iC,KAAKmjC,IAElBA,GAEXvD,EAAannC,UAAUoH,cAAgB,WACnC,MAAO,iBAEJ+/B,cCrrBQ9iC,OAAOumC"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.isPropChange = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\n _this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = _this.l10n.getConstant('OtherFields');\n }\n _this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; i++) {\n if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {\n col[i].field = field ? field + _this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n _this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = _this.customOperators[col[i].type + 'Operator'];\n }\n }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target && target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule_1 = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule_1\n };\n this.trigger('actionBegin', actionArgs);\n setTimeout(function () {\n var createArgs = {\n requestType: 'template-create',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: _this.fields,\n rule: passedRule_1\n };\n _this.trigger('actionBegin', createArgs);\n }, 0);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n }\n });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = grpElem && this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules && rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = rule && this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({\n elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n window.removeEventListener('resize', this.windowResizeHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';\n if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {\n valueStr = \"\\\"\" + rule.value[0] + \"\\\"\" + ruleCondition + \"\\\"\" + rule.value[1] + \"\\\"\";\n }\n else {\n valueStr = \"\" + rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\n }\n else {\n valueStr = \"(\" + rule.value + \")\";\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr = rule.value ? \"(\\\"\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr = \"\" + rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr = '\"\"';\n }\n else {\n valueStr = \"\\\"\" + rule.value + \"\\\"\";\n }\n }\n }\n var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\n }, '');\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule_1","actionArgs","createArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","innerHTML","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","addEventListener","windowResizeHandler","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}
|