{"version":3,"file":"imask.min.js","sources":["../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/engine-v8-version.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/native-symbol.js","../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../node_modules/core-js/internals/is-symbol.js","../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/has.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/well-known-symbol.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/to-property-key.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/to-integer.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/object-assign.js","../../../node_modules/core-js/modules/es.object.assign.js","../../../node_modules/core-js/internals/to-string.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/modules/es.string.repeat.js","../../../node_modules/core-js/internals/string-pad.js","../../../node_modules/core-js/internals/string-pad-webkit-bug.js","../../../node_modules/core-js/modules/es.string.pad-start.js","../../../node_modules/core-js/modules/es.string.pad-end.js","../src/core/utils.js","../../../node_modules/core-js/modules/es.global-this.js","../src/core/action-details.js","../src/core/change-details.js","../src/core/continuous-tail-details.js","../src/core/holder.js","../src/masked/base.js","../src/masked/factory.js","../src/masked/pattern/input-definition.js","../src/masked/pattern/fixed-definition.js","../src/masked/pattern/chunk-tail-details.js","../src/masked/regexp.js","../src/masked/pattern.js","../src/masked/range.js","../src/masked/date.js","../src/controls/mask-element.js","../src/controls/html-mask-element.js","../src/controls/html-contenteditable-mask-element.js","../src/controls/input.js","../src/masked/enum.js","../src/masked/number.js","../src/masked/function.js","../src/masked/dynamic.js","../src/masked/pipe.js","../src/index.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return typeof $Symbol == 'function' && Object(it) instanceof $Symbol;\n};\n","var isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (pref !== 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (key, value) {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.17.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = input[TO_PRIMITIVE];\n var result;\n if (exoticToPrim !== undefined) {\n if (pref === undefined) pref = 'default';\n result = exoticToPrim.call(input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : String(key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var isSymbol = require('../internals/is-symbol');\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex -- safe\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// @flow\n\n\n/** Checks if value is string */\nexport\nfunction isString (str: mixed): boolean %checks {\n return typeof str === 'string' || str instanceof String;\n}\n\n/**\n Direction\n @prop {string} NONE\n @prop {string} LEFT\n @prop {string} FORCE_LEFT\n @prop {string} RIGHT\n @prop {string} FORCE_RIGHT\n*/\nexport\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT',\n}\n/**\n Direction\n @enum {string}\n*/\nexport\ntype Direction = $Values;\n\n/** Returns next char index in direction */\nexport\nfunction indexInDirection (pos: number, direction: Direction): number {\n if (direction === DIRECTION.LEFT) --pos;\n return pos;\n}\n\n/** Returns next char position in direction */\nexport\nfunction posInDirection (pos: number, direction: Direction): number {\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return --pos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return ++pos;\n default:\n return pos;\n }\n}\n\n/** */\nexport\nfunction forceDirection (direction: Direction): Direction {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nexport\nfunction escapeRegExp (str: string): string {\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n}\n\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nexport\nfunction objectIncludes (b: any, a: any): boolean {\n if (a === b) return true;\n\n var arrA = Array.isArray(a)\n , arrB = Array.isArray(b)\n , i;\n\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++)\n if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n\n if (arrA != arrB) return false;\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n var dateA = a instanceof Date\n , dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n\n var regexpA = a instanceof RegExp\n , regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n\n var keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = 0; i < keys.length; i++)\n if(!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString()\n }\n\n return false;\n}\n\n/** Selection range */\nexport\ntype Selection = {\n start: number;\n end: number;\n};\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","// @flow\nimport {type Direction, type Selection, DIRECTION} from './utils.js';\n\n\n/** Provides details of changing input */\nexport default\nclass ActionDetails {\n /** Current input value */\n value: string;\n /** Current cursor position */\n cursorPos: number;\n /** Old input value */\n oldValue: string;\n /** Old selection */\n oldSelection: Selection;\n\n constructor (\n value: string,\n cursorPos: number,\n oldValue: string,\n oldSelection: Selection\n ) {\n this.value = value;\n this.cursorPos = cursorPos;\n this.oldValue = oldValue;\n this.oldSelection = oldSelection;\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n\n /**\n Start changing position\n @readonly\n */\n get startChangePos (): number {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /**\n Inserted symbols count\n @readonly\n */\n get insertedCount (): number {\n return this.cursorPos - this.startChangePos;\n }\n\n /**\n Inserted symbols\n @readonly\n */\n get inserted (): string {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /**\n Removed symbols count\n @readonly\n */\n get removedCount (): number {\n // Math.max for opposite operation\n return Math.max((this.oldSelection.end - this.startChangePos) ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /**\n Removed symbols\n @readonly\n */\n get removed (): string {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /**\n Unchanged head symbols\n @readonly\n */\n get head (): string {\n return this.value.substring(0, this.startChangePos);\n }\n\n /**\n Unchanged tail symbols\n @readonly\n */\n get tail (): string {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /**\n Remove direction\n @readonly\n */\n get removeDirection (): Direction {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right or if range removed (event with backspace)\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) ?\n DIRECTION.RIGHT :\n DIRECTION.LEFT;\n }\n}\n","// @flow\n\n\n/**\n Provides details of changing model value\n @param {Object} [details]\n @param {string} [details.inserted] - Inserted symbols\n @param {boolean} [details.skip] - Can skip chars\n @param {number} [details.removeCount] - Removed symbols count\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n*/\nexport default\nclass ChangeDetails {\n /** Inserted symbols */\n inserted: string;\n /** Can skip chars */\n skip: boolean;\n /** Additional offset if any changes occurred before tail */\n tailShift: number;\n /** Raw inserted is used by dynamic mask */\n rawInserted: string;\n\n constructor (details?: {\n inserted?: $PropertyType,\n rawInserted?: $PropertyType,\n skip?: $PropertyType,\n tailShift?: $PropertyType,\n }) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0,\n }, details);\n }\n\n /**\n Aggregate changes\n @returns {ChangeDetails} `this`\n */\n aggregate (details: ChangeDetails): ChangeDetails {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset (): number {\n return this.tailShift + this.inserted.length;\n }\n}\n","// @flow\nimport type { TailDetails, AppendTail } from './tail-details.js';\nimport type ChangeDetails from './change-details.js';\n\n\ntype ContinuousTailState = {\n value: $PropertyType,\n from: $PropertyType,\n stop?: $PropertyType,\n};\n\n/** Provides details of continuous extracted tail */\nexport default\nclass ContinuousTailDetails implements TailDetails {\n /** Tail value as string */\n value: string;\n /** Tail start position */\n from: number;\n /** Start position */\n stop: ?number;\n\n constructor (value?: string='', from?: number=0, stop?: number) {\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n\n toString (): string { return this.value; }\n\n extend (tail: string | TailDetails): void {\n this.value += String(tail);\n }\n\n appendTo (masked: AppendTail): ChangeDetails {\n return masked.append(this.toString(), { tail: true })\n .aggregate(masked._appendPlaceholder());\n }\n\n get state (): ContinuousTailState {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop,\n };\n }\n\n set state (state: ContinuousTailState) {\n Object.assign(this, state);\n }\n\n shiftBefore (pos: number): string {\n if (this.from >= pos || !this.value.length) return '';\n\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n}\n","/**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\nexport default\nfunction IMask (el, opts={}) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n","// @flow\nimport ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { type Direction, DIRECTION, isString } from '../core/utils.js';\nimport { type TailDetails } from '../core/tail-details.js';\nimport IMask from '../core/holder.js';\n\n\n/** Supported mask type */\nexport\ntype Mask =\n string |\n String |\n RegExp |\n Class |\n Class |\n Array |\n $PropertyType, 'validate'> |\n Masked<*> |\n Class>;\n\nexport\ntype MaskedState = {|\n _value: string,\n|};\n\n/** Append flags */\nexport\ntype AppendFlags = {\n input?: boolean,\n tail?: boolean,\n raw?: boolean,\n _beforeTailState?: any, // TODO types...\n};\n\n/** Extract flags */\nexport\ntype ExtractFlags = {\n raw?: boolean\n};\n\nexport\ntype MaskedOptions = {\n mask: $PropertyType, 'mask'>,\n parent?: $PropertyType, 'parent'>,\n prepare?: $PropertyType, 'prepare'>,\n validate?: $PropertyType, 'validate'>,\n commit?: $PropertyType, 'commit'>,\n overwrite?: $PropertyType, 'overwrite'>,\n format?: $PropertyType, 'format'>,\n parse?: $PropertyType, 'parse'>,\n};\n\n\n/** Provides common masking stuff */\nexport default\nclass Masked {\n static DEFAULTS: any; // $Shape; TODO after fix https://github.com/facebook/flow/issues/4773\n\n /** @type {Mask} */\n mask: MaskType;\n /** */ // $FlowFixMe no ideas\n parent: ?Masked<*>;\n /** Transforms value before mask processing */\n prepare: (string, Masked, AppendFlags) => string;\n /** Validates if value is acceptable */\n validate: (string, Masked, AppendFlags) => boolean;\n /** Does additional processing in the end of editing */\n commit: (string, Masked) => void;\n /** Format typed value to string */\n format: (any, Masked) => string;\n /** Parse strgin to get typed value */\n parse: (string, Masked) => any;\n /** Enable characters overwriting */\n overwrite: ?boolean;\n /** */\n isInitialized: boolean;\n _value: string;\n _refreshing: ?boolean;\n _isolated: ?boolean;\n\n constructor (opts: {[string]: any}) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts,\n });\n this.isInitialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions (opts: {[string]: any}) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /**\n Sets new options\n @protected\n */\n _update (opts: {[string]: any}) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state (): any {\n return {\n _value: this.value,\n };\n }\n\n set state (state: any) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset () {\n this._value = '';\n }\n\n /** */\n get value (): string {\n return this._value;\n }\n\n set value (value: string) {\n this.resolve(value);\n }\n\n /** Resolve new value */\n resolve (value: string): string {\n this.reset();\n this.append(value, {input: true}, '');\n this.doCommit();\n return this.value;\n }\n\n /** */\n get unmaskedValue (): string {\n return this.value;\n }\n\n set unmaskedValue (value: string) {\n this.reset();\n this.append(value, {}, '');\n this.doCommit();\n }\n\n /** */\n get typedValue (): any {\n return this.doParse(this.value);\n }\n\n set typedValue (value: any) {\n this.value = this.doFormat(value);\n }\n\n /** Value that includes raw user input */\n get rawInputValue (): string {\n return this.extractInput(0, this.value.length, {raw: true});\n }\n\n set rawInputValue (value: string) {\n this.reset();\n this.append(value, {raw: true}, '');\n this.doCommit();\n }\n\n /** */\n get isComplete (): boolean {\n return true;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos (cursorPos: number, direction?: Direction): number {\n return cursorPos;\n }\n\n /** Extracts value in range considering flags */\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\n return this.value.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): TailDetails {\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n // $FlowFixMe no ideas\n appendTail (tail: string | String | TailDetails): ChangeDetails {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\n if (!ch) return new ChangeDetails();\n\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch,\n });\n }\n\n /** Appends char */\n _appendChar (ch: string, flags: AppendFlags={}, checkTail?: TailDetails): ChangeDetails {\n const consistentState: MaskedState = this.state;\n let details: ChangeDetails = this._appendCharRaw(this.doPrepare(ch, flags), flags);\n\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite) {\n consistentTail = checkTail.state;\n checkTail.shiftBefore(this.value.length);\n }\n\n const tailDetails = this.appendTail(checkTail);\n\n appended = tailDetails.rawInserted === checkTail.toString();\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at end */\n _appendPlaceholder (): ChangeDetails {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n // $FlowFixMe no ideas\n append (str: string, flags?: AppendFlags, tail?: string | String | TailDetails): ChangeDetails {\n if (!isString(str)) throw new Error('value should be string');\n const details = new ChangeDetails();\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags && flags.tail) flags._beforeTailState = this.state;\n\n for (let ci=0; ci(fn: () => T): T {\n if (this._refreshing || !this.isInitialized) return fn();\n this._refreshing = true;\n\n const rawInput = this.rawInputValue;\n const value = this.value;\n\n const ret = fn();\n\n this.rawInputValue = rawInput;\n // append lost trailing chars at end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.value.length), {}, '');\n }\n\n delete this._refreshing;\n return ret;\n }\n\n /** */\n runIsolated(fn: (masked: any) => T): T {\n if (this._isolated || !this.isInitialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n\n const ret = fn(this);\n\n this.state = state;\n delete this._isolated;\n\n return ret;\n }\n\n /**\n Prepares string before mask processing\n @protected\n */\n doPrepare (str: string, flags: AppendFlags={}): string {\n return this.prepare ?\n this.prepare(str, this, flags) :\n str;\n }\n\n /**\n Validates if value is acceptable\n @protected\n */\n doValidate (flags: AppendFlags): boolean {\n return (!this.validate || this.validate(this.value, this, flags)) &&\n (!this.parent || this.parent.doValidate(flags));\n }\n\n /**\n Does additional processing in the end of editing\n @protected\n */\n doCommit () {\n if (this.commit) this.commit(this.value, this);\n }\n\n /** */\n doFormat (value: any): string {\n return this.format ? this.format(value, this) : value;\n }\n\n /** */\n doParse (str: string): string {\n return this.parse ? this.parse(str, this) : str;\n }\n\n /** */\n splice (start: number, deleteCount: number, inserted: string, removeDirection: Direction): ChangeDetails {\n const tailPos: number = start + deleteCount;\n const tail: TailDetails = this.extractTail(tailPos);\n\n let startChangePos: number = this.nearestInputPos(start, removeDirection);\n const changeDetails: ChangeDetails = new ChangeDetails({\n tailShift: startChangePos - start // adjust tailShift if start was aligned\n }).aggregate(this.remove(startChangePos))\n .aggregate(this.append(inserted, {input: true}, tail));\n\n return changeDetails;\n }\n}\nMasked.DEFAULTS = {\n format: v => v,\n parse: v => v,\n};\n\n\nIMask.Masked = Masked;\n","// @flow\nimport { isString } from '../core/utils.js';\nimport type Masked from './base.js';\nimport { type Mask } from './base.js';\nimport IMask from '../core/holder.js';\n\n\n/** Get Masked class by mask type */\nexport\nfunction maskedClass (mask: Mask): Class> {\n if (mask == null) {\n throw new Error('mask property should be defined');\n }\n\n // $FlowFixMe\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n // $FlowFixMe\n if (isString(mask)) return IMask.MaskedPattern;\n // $FlowFixMe\n if (mask instanceof Date || mask === Date) return IMask.MaskedDate;\n // $FlowFixMe\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber;\n // $FlowFixMe\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n // $FlowFixMe\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n // $FlowFixMe\n if (mask instanceof Function) return IMask.MaskedFunction;\n // $FlowFixMe\n if (mask instanceof IMask.Masked) return mask.constructor;\n\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n // $FlowFixMe\n return IMask.Masked;\n}\n\n/** Creates new {@link Masked} depending on mask type */\nexport default\nfunction createMask (opts: {mask: Mask} | Masked<*>): Masked<*> {\n // $FlowFixMe\n if (IMask.Masked && (opts instanceof IMask.Masked)) return opts;\n\n opts = {...opts};\n const mask = opts.mask;\n\n // $FlowFixMe\n if (IMask.Masked && (mask instanceof IMask.Masked)) return mask;\n\n const MaskedClass = maskedClass(mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n return new MaskedClass(opts);\n}\n\n\nIMask.createMask = createMask;\n","// @flow\nimport createMask from '../factory.js';\nimport type Masked from '../base.js';\nimport type MaskedPattern from '../pattern.js';\nimport {type TailDetails} from '../../core/tail-details.js';\nimport {type Mask, type ExtractFlags, type AppendFlags} from '../base.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport {DIRECTION, type Direction} from '../../core/utils.js';\nimport {type PatternBlock} from './block.js';\n\n\nexport\ntype Definitions = {[string]: Mask};\n\n/** */\ntype PatternInputDefinitionOptions = {\n parent: $PropertyType,\n mask: Mask,\n isOptional: $PropertyType,\n lazy: $PropertyType,\n placeholderChar: $PropertyType,\n};\n\ntype PatternInputDefinitionState = {\n masked: *,\n _isFilled: boolean,\n};\n\nexport\nconst DEFAULT_INPUT_DEFINITIONS: { [string]: RegExp } = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/, // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\n\n/** */\nexport default\nclass PatternInputDefinition implements PatternBlock {\n /** */\n +masked: Masked<*>;\n /** */\n parent: Masked<*>;\n /** */\n isOptional: boolean;\n /** */\n _isFilled: boolean;\n /** */\n lazy: $PropertyType;\n /** */\n placeholderChar: $PropertyType;\n\n\n constructor(opts: PatternInputDefinitionOptions) {\n const {mask, ...blockOpts} = opts;\n\n this.masked = createMask({mask});\n Object.assign(this, blockOpts);\n }\n\n reset () {\n this._isFilled = false;\n this.masked.reset();\n }\n\n remove (fromPos?: number=0, toPos?: number=this.value.length): ChangeDetails {\n if (fromPos === 0 && toPos >= 1) {\n this._isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n\n return new ChangeDetails();\n }\n\n get value (): string {\n return this.masked.value ||\n (this._isFilled && !this.isOptional ?\n this.placeholderChar :\n '');\n }\n\n get unmaskedValue (): string {\n return this.masked.unmaskedValue;\n }\n\n get isComplete (): boolean {\n return Boolean(this.masked.value) || this.isOptional;\n }\n\n _appendChar (str: string, flags: AppendFlags={}): ChangeDetails {\n if (this._isFilled) return new ChangeDetails();\n\n const state = this.masked.state;\n // simulate input\n const details = this.masked._appendChar(str, flags);\n\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this._isFilled = Boolean(details.inserted);\n\n return details;\n }\n\n append (...args: *): ChangeDetails {\n return this.masked.append(...args);\n }\n\n _appendPlaceholder (): ChangeDetails {\n const details = new ChangeDetails();\n\n if (this._isFilled || this.isOptional) return details;\n\n this._isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n\n extractTail (...args: *): TailDetails {\n return this.masked.extractTail(...args);\n }\n\n appendTail (...args: *): ChangeDetails {\n return this.masked.appendTail(...args);\n }\n\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default: return boundPos;\n }\n }\n\n doValidate (...args: *): boolean {\n return this.masked.doValidate(...args) && (\n !this.parent || this.parent.doValidate(...args));\n }\n\n doCommit () {\n this.masked.doCommit();\n }\n\n get state (): PatternInputDefinitionState {\n return {\n masked: this.masked.state,\n _isFilled: this._isFilled,\n };\n }\n\n set state (state: PatternInputDefinitionState) {\n this.masked.state = state.masked;\n this._isFilled = state._isFilled;\n }\n}\n","// @flow\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, type Direction, isString } from '../../core/utils.js';\nimport { type TailDetails } from '../../core/tail-details.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport { type ExtractFlags, type AppendFlags, type MaskedState } from '../base.js';\nimport { type PatternBlock } from './block.js';\n\n\n/** */\ntype PatternFixedDefinitionOptions = {\n char: $PropertyType,\n isUnmasking?: $PropertyType,\n};\n\ntype PatternFixedDefinitionState = {|\n ...MaskedState,\n _isRawInput: ?boolean,\n|};\n\nexport default\nclass PatternFixedDefinition implements PatternBlock {\n /** */\n _value: string;\n /** */\n char: string;\n /** */\n isUnmasking: ?boolean;\n /** */\n _isRawInput: ?boolean;\n\n constructor(opts: PatternFixedDefinitionOptions) {\n Object.assign(this, opts);\n this._value = '';\n }\n\n get value (): string {\n return this._value;\n }\n\n get unmaskedValue (): string {\n return this.isUnmasking ? this.value : '';\n }\n\n reset () {\n this._isRawInput = false;\n this._value = '';\n }\n\n remove (fromPos?: number=0, toPos?: number=this._value.length): ChangeDetails {\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n\n return new ChangeDetails();\n }\n\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\n const minPos = 0;\n const maxPos = this._value.length;\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default: return maxPos;\n }\n }\n\n extractInput (fromPos?: number=0, toPos?: number=this._value.length, flags?: ExtractFlags={}): string {\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n\n get isComplete (): boolean {\n return true;\n }\n\n _appendChar (str: string, flags?: AppendFlags={}): ChangeDetails {\n const details = new ChangeDetails();\n\n if (this._value) return details;\n\n const appended = this.char === str[0];\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n\n return details;\n }\n\n _appendPlaceholder (): ChangeDetails {\n const details = new ChangeDetails();\n if (this._value) return details;\n\n this._value = details.inserted = this.char;\n return details;\n }\n\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): TailDetails {\n return new ContinuousTailDetails('');\n }\n\n // $FlowFixMe no ideas\n appendTail (tail: string | String | TailDetails): ChangeDetails {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n\n return tail.appendTo(this);\n }\n\n append (str: string, flags?: AppendFlags, tail?: TailDetails): ChangeDetails {\n const details = this._appendChar(str, flags);\n\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n\n return details;\n }\n\n doCommit () {}\n\n get state (): PatternFixedDefinitionState {\n return {\n _value: this._value,\n _isRawInput: this._isRawInput,\n };\n }\n\n set state (state: PatternFixedDefinitionState) {\n Object.assign(this, state);\n }\n}\n","// @flow\nimport type { TailDetails, AppendTail } from '../../core/tail-details.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\n\ntype ChunksTailState = {\n chunks: $PropertyType,\n from: $PropertyType,\n stop?: $PropertyType,\n blockIndex?: $PropertyType,\n};\n\nexport default\nclass ChunksTailDetails implements TailDetails {\n chunks: Array;\n from: number;\n stop: ?number;\n /** */\n blockIndex: ?number;\n\n constructor (chunks?: Array=[], from?: number=0) {\n this.chunks = chunks;\n this.from = from;\n }\n\n toString (): string {\n return this.chunks.map(String).join('');\n }\n\n // $FlowFixMe no ideas\n extend (tailChunk: string | String | TailDetails): void {\n if (!String(tailChunk)) return;\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n\n const lastChunk = this.chunks[this.chunks.length-1];\n const extendLast = lastChunk &&\n // if stops are same or tail has no stop\n (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === (lastChunk.from + lastChunk.toString().length);\n\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift();\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n\n appendTo (masked: AppendTail): ChangeDetails {\n // $FlowFixMe\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n\n const details = new ChangeDetails();\n\n for (let ci=0; ci < this.chunks.length && !details.skip; ++ci) {\n const chunk = this.chunks[ci];\n\n const lastBlockIter = masked._mapPosToBlock(masked.value.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null &&\n // if block not found or stop is behind lastBlock\n (!lastBlockIter || lastBlockIter.index <= stop)\n ) {\n if (\n chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0\n ) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted;\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, { tail: true }));\n } else {\n details.aggregate(masked.append(chunk.toString(), { tail: true }));\n }\n };\n\n return details;\n }\n\n get state (): ChunksTailState {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex,\n };\n }\n\n set state (state: ChunksTailState) {\n const { chunks, ...props } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ?\n new ChunksTailDetails() :\n new ContinuousTailDetails();\n // $FlowFixMe already checked above\n chunk.state = cstate;\n return chunk;\n });\n }\n\n shiftBefore (pos: number): string {\n if (this.from >= pos || !this.chunks.length) return '';\n\n const chunkShiftPos = pos - this.from;\n let ci=0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shiftBefore(chunkShiftPos);\n\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n\n if (shiftChar) return shiftChar;\n }\n\n return '';\n }\n}\n","// @flow\nimport Masked, {type MaskedOptions} from './base.js';\nimport IMask from '../core/holder.js';\n\n\n/** Masking by RegExp */\nexport default\nclass MaskedRegExp extends Masked {\n /**\n @override\n @param {Object} opts\n */\n _update (opts: $Shape>) {\n if (opts.mask) opts.validate = (value) => value.search(opts.mask) >= 0;\n super._update(opts);\n }\n}\n\n\nIMask.MaskedRegExp = MaskedRegExp;\n","// @flow\nimport {DIRECTION, type Direction, forceDirection} from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked, {type AppendFlags, type ExtractFlags, type MaskedOptions, type MaskedState} from './base.js';\nimport PatternInputDefinition, {DEFAULT_INPUT_DEFINITIONS, type Definitions} from './pattern/input-definition.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport { type TailDetails } from '../core/tail-details.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport {type PatternBlock} from './pattern/block.js';\nimport createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport './regexp.js'; // support for default definitions which are regexp's\n\n\ntype MaskedPatternOptions = {\n ...MaskedOptions,\n definitions?: $PropertyType,\n blocks?: $PropertyType,\n placeholderChar?: $PropertyType,\n lazy?: $PropertyType,\n};\n\ntype MaskedPatternState = {|\n ...MaskedState,\n _blocks: Array<*>,\n|};\n\ntype BlockPosData = {\n index: number,\n offset: number,\n};\n\n/**\n Pattern mask\n @param {Object} opts\n @param {Object} opts.blocks\n @param {Object} opts.definitions\n @param {string} opts.placeholderChar\n @param {boolean} opts.lazy\n*/\nexport default\nclass MaskedPattern extends Masked {\n static DEFAULTS: any;\n static STOP_CHAR: string;\n static ESCAPE_CHAR: string;\n static InputDefinition: Class;\n static FixedDefinition: Class;\n\n /** */\n blocks: {[string]: MaskedOptions};\n /** */\n definitions: Definitions;\n /** Single char for empty input */\n placeholderChar: string;\n /** Show placeholder only when needed */\n lazy: boolean;\n _blocks: Array;\n _maskedBlocks: {[string]: Array};\n _stops: Array;\n\n constructor (opts: any={}) { // TODO type $Shape={} does not work\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n });\n }\n\n /**\n @override\n @param {Object} opts\n */\n _update (opts: $Shape={}) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n\n /** */\n _rebuildMask () {\n const defs = this.definitions;\n this._blocks = [];\n this._stops = [];\n this._maskedBlocks = {};\n\n let pattern = this.mask;\n if (!pattern || !defs) return;\n\n let unmaskingBlock = false;\n let optionalBlock = false;\n\n for (let i=0; i p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n // $FlowFixMe no ideas\n const maskedBlock = createMask({\n parent: this,\n lazy: this.lazy,\n placeholderChar: this.placeholderChar,\n overwrite: this.overwrite,\n ...this.blocks[bName],\n });\n\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n\n i += bName.length - 1;\n continue;\n }\n }\n\n let char = pattern[i];\n let isInput = char in defs;\n\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n\n const def = isInput ?\n new PatternInputDefinition({\n parent: this,\n lazy: this.lazy,\n placeholderChar: this.placeholderChar,\n mask: defs[char],\n isOptional: optionalBlock,\n }) :\n new PatternFixedDefinition({\n char,\n isUnmasking: unmaskingBlock,\n });\n\n this._blocks.push(def);\n }\n }\n\n /**\n @override\n */\n get state (): MaskedPatternState {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state),\n };\n }\n\n set state (state: MaskedPatternState) {\n const {_blocks, ...maskedState} = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n\n /**\n @override\n */\n reset () {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n\n /**\n @override\n */\n get isComplete (): boolean {\n return this._blocks.every(b => b.isComplete);\n }\n\n /**\n @override\n */\n doCommit () {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n\n /**\n @override\n */\n get unmaskedValue (): string {\n return this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n\n set unmaskedValue (unmaskedValue: string) {\n super.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get value (): string {\n // TODO return _value when not in change?\n return this._blocks.reduce((str, b) => str += b.value, '');\n }\n\n set value (value: string) {\n super.value = value;\n }\n\n /**\n @override\n */\n appendTail (tail: string | String | TailDetails): ChangeDetails {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n\n /**\n @override\n */\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\n const blockIter = this._mapPosToBlock(this.value.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n\n for (let bi=blockIter.index; ; ++bi) {\n const block = this._blocks[bi];\n if (!block) break;\n\n const blockDetails = block._appendChar(ch, flags);\n\n const skip = blockDetails.skip;\n details.aggregate(blockDetails);\n\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n\n /**\n @override\n */\n extractTail (fromPos?: number=0, toPos?: number=this.value.length): ChunksTailDetails {\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n\n chunkTail.extend(blockChunk);\n });\n\n return chunkTail;\n }\n\n /**\n @override\n */\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags: ExtractFlags={}): string {\n if (fromPos === toPos) return '';\n\n let input = '';\n\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n\n return input;\n }\n\n _findStopBefore (blockIndex: number): ?number {\n let stopBefore;\n for (let si=0; si {\n if (!b.lazy || toBlockIndex != null) {\n // $FlowFixMe `_blocks` may not be present\n const args = b._blocks != null ? [b._blocks.length] : [];\n const bDetails = b._appendPlaceholder(...args);\n this._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock (pos: number): ?BlockPosData {\n let accVal = '';\n for (let bi=0; bi pos += b.value.length, 0);\n }\n\n /** */\n _forEachBlocksInRange (fromPos: number, toPos: number=this.value.length, fn: (block: PatternBlock, blockIndex: number, fromPos: number, toPos: number) => void) {\n const fromBlockIter = this._mapPosToBlock(fromPos);\n\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ?\n toBlockIter.offset :\n this._blocks[fromBlockIter.index].value.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi=fromBlockIter.index+1; bi {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n\n /**\n @override\n */\n nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {\n // TODO refactor - extract alignblock\n\n const beginBlockData = this._mapPosToBlock(cursorPos) || {index: 0, offset: 0};\n const {\n offset: beginBlockOffset,\n index: beginBlockIndex,\n } = beginBlockData;\n const beginBlock = this._blocks[beginBlockIndex];\n\n if (!beginBlock) return cursorPos;\n\n let beginBlockCursorPos = beginBlockOffset;\n // if position inside block - try to adjust it\n if (beginBlockCursorPos !== 0 && beginBlockCursorPos < beginBlock.value.length) {\n beginBlockCursorPos = beginBlock.nearestInputPos(beginBlockOffset, forceDirection(direction));\n }\n\n const cursorAtRight = beginBlockCursorPos === beginBlock.value.length;\n const cursorAtLeft = beginBlockCursorPos === 0;\n\n // cursor is INSIDE first block (not at bounds)\n if (!cursorAtLeft && !cursorAtRight) return this._blockStartPos(beginBlockIndex) + beginBlockCursorPos;\n\n const searchBlockIndex = cursorAtRight ? beginBlockIndex + 1 : beginBlockIndex;\n\n if (direction === DIRECTION.NONE) {\n // NONE direction used to calculate start input position if no chars were removed\n // FOR NONE:\n // -\n // input|any\n // ->\n // any|input\n // <-\n // filled-input|any\n\n // check if first block at left is input\n if (searchBlockIndex > 0) {\n const blockIndexAtLeft = searchBlockIndex-1;\n const blockAtLeft = this._blocks[blockIndexAtLeft];\n const blockInputPos = blockAtLeft.nearestInputPos(0, DIRECTION.NONE);\n // is input\n if (!blockAtLeft.value.length || blockInputPos !== blockAtLeft.value.length) {\n return this._blockStartPos(searchBlockIndex);\n }\n }\n\n // ->\n let firstInputAtRight = searchBlockIndex;\n for (let bi=firstInputAtRight; bi < this._blocks.length; ++bi) {\n const blockAtRight = this._blocks[bi];\n const blockInputPos = blockAtRight.nearestInputPos(0, DIRECTION.NONE);\n if (!blockAtRight.value.length || blockInputPos !== blockAtRight.value.length) {\n return this._blockStartPos(bi) + blockInputPos;\n }\n }\n\n // <-\n // find first non-fixed symbol\n for (let bi=searchBlockIndex-1; bi >= 0; --bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\n // is input\n if (!block.value.length || blockInputPos !== block.value.length) {\n return this._blockStartPos(bi) + block.value.length;\n }\n }\n\n return cursorPos;\n }\n\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // -\n // any|filled-input\n // <-\n // any|first not empty is not-len-aligned\n // not-0-aligned|any\n // ->\n // any|not-len-aligned or end\n\n // check if first block at right is filled input\n let firstFilledBlockIndexAtRight;\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\n if (this._blocks[bi].value) {\n firstFilledBlockIndexAtRight = bi;\n break;\n }\n }\n if (firstFilledBlockIndexAtRight != null) {\n const filledBlock = this._blocks[firstFilledBlockIndexAtRight];\n const blockInputPos = filledBlock.nearestInputPos(0, DIRECTION.RIGHT);\n if (blockInputPos === 0 && filledBlock.unmaskedValue.length) {\n // filled block is input\n return this._blockStartPos(firstFilledBlockIndexAtRight) + blockInputPos;\n }\n }\n\n // <-\n // find this vars\n let firstFilledInputBlockIndex = -1;\n let firstEmptyInputBlockIndex; // TODO consider nested empty inputs\n for (let bi=searchBlockIndex-1; bi >= 0; --bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(block.value.length, DIRECTION.FORCE_LEFT);\n if (!block.value || blockInputPos !== 0) firstEmptyInputBlockIndex = bi;\n if (blockInputPos !== 0) {\n if (blockInputPos !== block.value.length) {\n // aligned inside block - return immediately\n return this._blockStartPos(bi) + blockInputPos;\n } else {\n // found filled\n firstFilledInputBlockIndex = bi;\n break;\n }\n }\n }\n\n if (direction === DIRECTION.LEFT) {\n // try find first empty input before start searching position only when not forced\n for (let bi=firstFilledInputBlockIndex+1; bi <= Math.min(searchBlockIndex, this._blocks.length-1); ++bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\n const blockAlignedPos = this._blockStartPos(bi) + blockInputPos;\n\n if (blockAlignedPos > cursorPos) break;\n // if block is not lazy input\n if (blockInputPos !== block.value.length) return blockAlignedPos;\n }\n }\n\n // process overflow\n if (firstFilledInputBlockIndex >= 0) {\n return this._blockStartPos(firstFilledInputBlockIndex) + this._blocks[firstFilledInputBlockIndex].value.length;\n }\n\n // for lazy if has aligned left inside fixed and has came to the start - use start position\n if (\n direction === DIRECTION.FORCE_LEFT ||\n this.lazy && !this.extractInput() && !isInput(this._blocks[searchBlockIndex])\n ) {\n return 0;\n }\n\n if (firstEmptyInputBlockIndex != null) {\n return this._blockStartPos(firstEmptyInputBlockIndex);\n }\n\n // find first input\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\n // is input\n if (!block.value.length || blockInputPos !== block.value.length) {\n return this._blockStartPos(bi) + blockInputPos;\n }\n }\n\n return 0;\n }\n\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // ->\n // any|not-len-aligned and filled\n // any|not-len-aligned\n // <-\n // not-0-aligned or start|any\n let firstInputBlockAlignedIndex: ?number;\n let firstInputBlockAlignedPos: ?number;\n for (let bi=searchBlockIndex; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(0, DIRECTION.NONE);\n if (blockInputPos !== block.value.length) {\n firstInputBlockAlignedPos = this._blockStartPos(bi) + blockInputPos;\n firstInputBlockAlignedIndex = bi;\n break;\n }\n }\n\n if (firstInputBlockAlignedIndex != null && firstInputBlockAlignedPos != null) {\n for (let bi=firstInputBlockAlignedIndex; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(0, DIRECTION.FORCE_RIGHT);\n if (blockInputPos !== block.value.length) {\n return this._blockStartPos(bi) + blockInputPos;\n }\n }\n return direction === DIRECTION.FORCE_RIGHT ?\n this.value.length :\n firstInputBlockAlignedPos;\n }\n\n for (let bi=Math.min(searchBlockIndex, this._blocks.length-1); bi >= 0; --bi) {\n const block = this._blocks[bi];\n const blockInputPos = block.nearestInputPos(block.value.length, DIRECTION.LEFT);\n if (blockInputPos !== 0) {\n const alignedPos = this._blockStartPos(bi) + blockInputPos;\n if (alignedPos >= cursorPos) return alignedPos;\n break;\n }\n }\n }\n\n return cursorPos;\n }\n\n /** Get block by name */\n maskedBlock (name: string): ?PatternBlock {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks (name: string): Array {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n}\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\n\nfunction isInput (block: PatternBlock): boolean {\n if (!block) return false;\n\n const value = block.value;\n return !value || block.nearestInputPos(0, DIRECTION.NONE) !== value.length;\n}\n\n\nIMask.MaskedPattern = MaskedPattern;\n","// @flow\nimport MaskedPattern from './pattern.js';\nimport { type AppendFlags } from './base.js';\nimport IMask from '../core/holder.js';\n\n\n/** Pattern which accepts ranges */\nexport default\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n maxLength: number;\n /** Min bound */\n from: number;\n /** Max bound */\n to: number;\n /** */\n autofix: boolean;\n\n get _matchFrom (): number {\n return this.maxLength - String(this.from).length;\n }\n\n /**\n @override\n */\n _update (opts: any) { // TODO type\n opts = {\n to: this.to || 0,\n from: this.from || 0,\n ...opts,\n };\n\n let maxLength = String(opts.to).length;\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n opts.maxLength = maxLength;\n\n const fromStr = String(opts.from).padStart(maxLength, '0');\n const toStr = String(opts.to).padStart(maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n\n super._update(opts);\n }\n\n /**\n @override\n */\n get isComplete (): boolean {\n return super.isComplete && Boolean(this.value);\n }\n\n boundaries (str: string): [string, string] {\n let minstr = '';\n let maxstr = '';\n\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n\n return [minstr, maxstr];\n }\n\n /**\n @override\n */\n doPrepare (str: string, flags: AppendFlags={}): string {\n str = super.doPrepare(str, flags).replace(/\\D/g, '');\n if (!this.autofix) return str;\n\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n\n const val = this.value;\n let prepStr = '';\n for (let ci=0; ci this.to) prepStr += toStr[nextVal.length - 1];\n else prepStr += str[ci];\n }\n\n return prepStr;\n }\n\n /**\n @override\n */\n doValidate (...args: *): boolean {\n const str = this.value;\n\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n\n const [minstr, maxstr] = this.boundaries(str);\n\n return this.from <= Number(maxstr) && Number(minstr) <= this.to &&\n super.doValidate(...args);\n }\n}\n\n\nIMask.MaskedRange = MaskedRange;\n","// @flow\nimport MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\n\n\n/** Date mask */\nexport default\nclass MaskedDate extends MaskedPattern {\n static GET_DEFAULT_BLOCKS: () => {[string]: any};\n static DEFAULTS: any;\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n pattern: string;\n /** Start date */\n min: ?Date;\n /** End date */\n max: ?Date;\n /** */\n autofix: boolean;\n\n /**\n @param {Object} opts\n */\n constructor (opts: any) {\n super({\n ...MaskedDate.DEFAULTS,\n ...opts\n });\n }\n\n /**\n @override\n */\n _update (opts: any) {\n if (opts.mask === Date) delete opts.mask;\n if (opts.pattern) opts.mask = opts.pattern;\n\n const blocks = opts.blocks;\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to\n ) {\n opts.blocks.m.from = opts.min.getMonth() + 1;\n opts.blocks.m.to = opts.max.getMonth() + 1;\n\n if (opts.blocks.m.from === opts.blocks.m.to) {\n opts.blocks.d.from = opts.min.getDate();\n opts.blocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(opts.blocks, blocks);\n\n // add autofix\n Object.keys(opts.blocks).forEach(bk => {\n const b = opts.blocks[bk];\n if (!('autofix' in b)) b.autofix = opts.autofix;\n });\n\n super._update(opts);\n }\n\n /**\n @override\n */\n doValidate (...args: *): boolean {\n const date = this.date;\n\n return super.doValidate(...args) &&\n (!this.isComplete ||\n this.isDateExist(this.value) && date != null &&\n (this.min == null || this.min <= date) &&\n (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist (str: string): boolean {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date (): ?Date {\n return this.typedValue;\n }\n set date (date: Date) {\n this.typedValue = date;\n }\n\n /**\n @override\n */\n get typedValue (): ?Date {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue (value: Date) {\n super.typedValue = value;\n }\n}\nMaskedDate.DEFAULTS = {\n pattern: 'd{.}`m{.}`Y',\n format: date => {\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n return [day, month, year].join('.');\n },\n parse: str => {\n const [day, month, year] = str.split('.');\n return new Date(year, month - 1, day);\n },\n};\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2,\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2,\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999,\n }\n});\n\n\nIMask.MaskedDate = MaskedDate;\n","// @flow\nimport IMask from '../core/holder.js';\n\n\nexport\ntype ElementEvent =\n 'selectionChange' |\n 'input' |\n 'drop' |\n 'click' |\n 'focus' |\n 'commit';\n\n/**\n Generic element API to use with mask\n @interface\n*/\nexport default\nclass MaskElement {\n /** */\n +_unsafeSelectionStart: number;\n /** */\n +_unsafeSelectionEnd: number;\n /** */\n value: string;\n\n /** Safely returns selection start */\n get selectionStart (): number {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch (e) {}\n\n return start != null ?\n start :\n this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd (): number {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch (e) {}\n\n return end != null ?\n end :\n this.value.length;\n }\n\n /** Safely sets element selection */\n select (start: number, end: number) {\n if (start == null || end == null ||\n start === this.selectionStart && end === this.selectionEnd) return;\n\n try {\n this._unsafeSelect(start, end);\n } catch (e) {}\n }\n\n /** Should be overriden in subclasses */\n _unsafeSelect (start: number, end: number): void {}\n /** Should be overriden in subclasses */\n get isActive (): boolean { return false; }\n /** Should be overriden in subclasses */\n bindEvents (handlers: {[ElementEvent]: Function}) {}\n /** Should be overriden in subclasses */\n unbindEvents (): void {}\n}\n\n\nIMask.MaskElement = MaskElement;\n","// @flow\nimport MaskElement, {type ElementEvent} from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n\n/** Bridge between HTMLElement and {@link Masked} */\nexport default\nclass HTMLMaskElement extends MaskElement {\n /** Mapping between HTMLElement events and mask internal events */\n static EVENTS_MAP: {[ElementEvent]: string};\n /** HTMLElement to use mask on */\n input: HTMLTextAreaElement | HTMLInputElement;\n _handlers: {[string]: Function};\n\n /**\n @param {HTMLInputElement|HTMLTextAreaElement} input\n */\n constructor (input: HTMLTextAreaElement | HTMLInputElement) {\n super();\n this.input = input;\n this._handlers = {};\n }\n\n /** */\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\n get rootElement (): HTMLDocument {\n return this.input.getRootNode\n ? this.input.getRootNode()\n : document;\n }\n\n /**\n Is element in focus\n @readonly\n */\n get isActive (): boolean {\n //$FlowFixMe\n return this.input === this.rootElement.activeElement;\n }\n\n /**\n Returns HTMLElement selection start\n @override\n */\n get _unsafeSelectionStart (): number {\n return this.input.selectionStart;\n }\n\n /**\n Returns HTMLElement selection end\n @override\n */\n get _unsafeSelectionEnd (): number {\n return this.input.selectionEnd;\n }\n\n /**\n Sets HTMLElement selection\n @override\n */\n _unsafeSelect (start: number, end: number) {\n this.input.setSelectionRange(start, end);\n }\n\n /**\n HTMLElement value\n @override\n */\n get value (): string {\n return this.input.value;\n }\n set value (value: string) {\n this.input.value = value;\n }\n\n /**\n Binds HTMLElement events to mask internal events\n @override\n */\n bindEvents (handlers: {[ElementEvent]: Function}) {\n Object.keys(handlers)\n .forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n }\n\n /**\n Unbinds HTMLElement events to mask internal events\n @override\n */\n unbindEvents () {\n Object.keys(this._handlers)\n .forEach(event => this._toggleEventHandler(event));\n }\n\n /** */\n _toggleEventHandler (event: string, handler?: Function): void {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n}\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur',\n};\n\n\nIMask.HTMLMaskElement = HTMLMaskElement;\n","// @flow\nimport HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\n\n\nexport default\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /**\n Returns HTMLElement selection start\n @override\n */\n get _unsafeSelectionStart (): number {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n return selection && selection.anchorOffset;\n }\n\n /**\n Returns HTMLElement selection end\n @override\n */\n get _unsafeSelectionEnd (): number {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n return selection && (this._unsafeSelectionStart + String(selection).length);\n }\n\n /**\n Sets HTMLElement selection\n @override\n */\n _unsafeSelect (start: number, end: number) {\n if (!this.rootElement.createRange) return;\n\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /**\n HTMLElement value\n @override\n */\n get value (): string {\n // $FlowFixMe\n return this.input.textContent;\n }\n set value (value: string) {\n this.input.textContent = value;\n }\n}\n\n\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n","// @flow\nimport {objectIncludes, DIRECTION, type Selection} from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport MaskedDate from '../masked/date.js';\nimport createMask, {maskedClass} from '../masked/factory.js';\nimport type Masked from '../masked/base.js';\nimport {type Mask} from '../masked/base.js';\nimport MaskElement from './mask-element.js';\nimport HTMLMaskElement from './html-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\n\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nexport default\nclass InputMask {\n /**\n View element\n @readonly\n */\n el: MaskElement;\n\n /**\n Internal {@link Masked} model\n @readonly\n */\n masked: Masked<*>;\n alignCursor: () => void;\n alignCursorFriendly: () => void;\n\n _listeners: {[string]: Array};\n _value: string;\n _changingCursorPos: number;\n _unmaskedValue: string;\n _saveSelection: (?Event) => void;\n _selection: Selection;\n _onInput: () => void;\n _onChange: () => void;\n _onDrop: (Event) => void;\n _onFocus: (Event) => void;\n _onClick: (Event) => void;\n _cursorChanging: ?TimeoutID;\n _inputEvent: ?InputEvent;\n\n /**\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n @param {Object} opts\n */\n constructor (el: MaskElement | HTMLTextAreaElement | HTMLInputElement, opts: {[string]: any} | Masked<*>) {\n this.el =\n (el instanceof MaskElement) ? el :\n (el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA') ? new HTMLContenteditableMaskElement(el) :\n new HTMLMaskElement(el);\n this.masked = createMask(opts);\n\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n\n /** Read or update mask */\n get mask (): Mask {\n return this.masked.mask;\n }\n\n maskEquals (mask: Mask): boolean {\n return mask == null ||\n mask === this.masked.mask ||\n mask === Date && this.masked instanceof MaskedDate;\n }\n\n set mask (mask: Mask) {\n if (this.maskEquals(mask)) return;\n\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n this.masked.updateOptions({mask});\n return;\n }\n\n const masked = createMask({mask});\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value (): string {\n return this._value;\n }\n\n set value (str: string) {\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Unmasked value */\n get unmaskedValue (): string {\n return this._unmaskedValue;\n }\n\n set unmaskedValue (str: string) {\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue (): any {\n return this.masked.typedValue;\n }\n\n set typedValue (val: any) {\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n\n /**\n Starts listening to element events\n @protected\n */\n _bindEvents () {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n });\n }\n\n /**\n Stops listening to element events\n @protected\n */\n _unbindEvents () {\n if (this.el) this.el.unbindEvents();\n }\n\n /**\n Fires custom event\n @protected\n */\n _fireEvent (ev: string, ...args: *) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n\n listeners.forEach(l => l(...args));\n }\n\n /**\n Current selection start\n @readonly\n */\n get selectionStart (): number {\n return this._cursorChanging ?\n this._changingCursorPos :\n\n this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos (): number {\n return this._cursorChanging ?\n this._changingCursorPos :\n\n this.el.selectionEnd;\n }\n set cursorPos (pos: number) {\n if (!this.el || !this.el.isActive) return;\n\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /**\n Stores current selection\n @protected\n */\n _saveSelection (/* ev */) {\n if (this.value !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue () {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl () {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const isChanged = (this.unmaskedValue !== newUnmaskedValue ||\n this.value !== newValue);\n\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n\n if (this.el.value !== newValue) this.el.value = newValue;\n if (isChanged) this._fireChangeEvents();\n }\n\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n updateOptions (opts: {[string]: any}) {\n const { mask, ...restOpts } = opts;\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = !objectIncludes(this.masked, restOpts);\n\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts);\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor (cursorPos: number) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /**\n Delays cursor update to support mobile browsers\n @private\n */\n _delayUpdateCursor (cursorPos: number) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /**\n Fires custom events\n @protected\n */\n _fireChangeEvents () {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /**\n Aborts delayed cursor update\n @private\n */\n _abortUpdateCursor () {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor () {\n this.cursorPos = this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT);\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly () {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on (ev: string, handler: Function): this {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off (ev: string, handler: Function): this {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput (e: InputEvent): void {\n this._inputEvent = e;\n this._abortUpdateCursor();\n\n // fix strange IE behavior\n if (!this._selection) return this.updateValue();\n\n const details = new ActionDetails(\n // new state\n this.el.value, this.cursorPos,\n // old state\n this.value, this._selection);\n\n const oldRawValue = this.masked.rawInputValue;\n\n const offset = this.masked.splice(\n details.startChangePos,\n details.removed.length,\n details.inserted,\n details.removeDirection).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ?\n details.removeDirection :\n DIRECTION.NONE;\n\n const cursorPos = this.masked.nearestInputPos(\n details.startChangePos + offset,\n removeDirection,\n );\n\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange () {\n if (this.value !== this.el.value) {\n this.updateValue();\n }\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop (ev: Event) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus (ev: Event) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick (ev: Event) {\n this.alignCursorFriendly();\n }\n\n /** Unbind view events and removes element reference */\n destroy () {\n this._unbindEvents();\n // $FlowFixMe why not do so?\n this._listeners.length = 0;\n // $FlowFixMe\n delete this.el;\n }\n}\n\n\nIMask.InputMask = InputMask;\n","// @flow\nimport MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\n\n\n/** Pattern which validates enum values */\nexport default\nclass MaskedEnum extends MaskedPattern {\n enum: Array;\n\n /**\n @override\n @param {Object} opts\n */\n _update (opts: any) { // TODO type\n if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\n\n super._update(opts);\n }\n\n /**\n @override\n */\n doValidate (...args: *): boolean {\n return this.enum.some(e => e.indexOf(this.unmaskedValue) >= 0) &&\n super.doValidate(...args);\n }\n}\n\n\nIMask.MaskedEnum = MaskedEnum;\n","// @flow\nimport {escapeRegExp, indexInDirection, posInDirection, type Direction, DIRECTION} from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\n\nimport Masked, {type MaskedOptions, type ExtractFlags, type AppendFlags} from './base.js';\nimport IMask from '../core/holder.js';\n\n\ntype MaskedNumberOptions = {\n ...MaskedOptions>,\n radix: $PropertyType,\n thousandsSeparator: $PropertyType,\n mapToRadix: $PropertyType,\n scale: $PropertyType,\n signed: $PropertyType,\n normalizeZeros: $PropertyType,\n padFractionalZeros: $PropertyType,\n};\n\n/**\n Number mask\n @param {Object} opts\n @param {string} opts.radix - Single char\n @param {string} opts.thousandsSeparator - Single char\n @param {Array} opts.mapToRadix - Array of single chars\n @param {number} opts.min\n @param {number} opts.max\n @param {number} opts.scale - Digits after point\n @param {boolean} opts.signed - Allow negative\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n*/\nexport default\nclass MaskedNumber extends Masked> {\n static DEFAULTS: $Shape;\n\n /** Single char */\n radix: string;\n /** Single char */\n thousandsSeparator: string;\n /** Array of single chars */\n mapToRadix: Array;\n /** */\n min: number;\n /** */\n max: number;\n /** Digits after point */\n scale: number;\n /** */\n signed: boolean;\n /** Flag to remove leading and trailing zeros in the end of editing */\n normalizeZeros: boolean;\n /** Flag to pad trailing zeros after point in the end of editing */\n padFractionalZeros: boolean;\n\n _numberRegExp: RegExp;\n _numberRegExpInput: RegExp;\n _thousandsSeparatorRegExp: RegExp;\n _mapToRadixRegExp: RegExp;\n _separatorsProcessed: boolean;\n\n constructor (opts: $Shape) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n\n /**\n @override\n */\n _update (opts: MaskedNumberOptions) {\n super._update(opts);\n this._updateRegExps();\n }\n\n /** */\n _updateRegExps () {\n // use different regexp to process user input (more strict, input suffix) and tail shifting\n let start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n let midInput = '(0|([1-9]+\\\\d*))?';\n let mid = '\\\\d*';\n\n let end = (this.scale ?\n '(' + escapeRegExp(this.radix) + '\\\\d{0,' + this.scale + '})?' :\n '') + '$';\n\n this._numberRegExpInput = new RegExp(start + midInput + end);\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp('[' +\n this.mapToRadix.map(escapeRegExp).join('') +\n ']', 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n\n /** */\n _removeThousandsSeparators (value: string): string {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n\n /** */\n _insertThousandsSeparators (value: string): string {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n\n /**\n @override\n */\n doPrepare (str: string, ...args: *): string {\n return super.doPrepare(this._removeThousandsSeparators(str.replace(this._mapToRadixRegExp, this.radix)), ...args);\n }\n\n /** */\n _separatorsCount (to: number, extendOnSeparators: boolean=false): number {\n let count = 0;\n\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n\n return count;\n }\n\n /** */\n _separatorsCountFromSlice (slice: string=this._value): number {\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n\n /**\n @override\n */\n extractInput (fromPos?: number=0, toPos?: number=this.value.length, flags?: ExtractFlags): string {\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n\n /**\n @override\n */\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ?\n flags._beforeTailState._value :\n this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n\n const appendDetails = super._appendCharRaw(ch, flags);\n\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ?\n flags._beforeTailState._value :\n this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n\n /** */\n _findSeparatorAround (pos: number): number {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n\n return -1;\n }\n\n _adjustRangeWithSeparators (from: number, to: number): [number, number] {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n\n /**\n @override\n */\n remove (fromPos?: number=0, toPos?: number=this.value.length): ChangeDetails {\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length,\n });\n }\n\n /**\n @override\n */\n nearestInputPos (cursorPos: number, direction?: Direction): number {\n if (!this.thousandsSeparator) return cursorPos;\n\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT: {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos ||\n this.value.length <= separatorAtLeftEndPos ||\n direction === DIRECTION.FORCE_LEFT\n ) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT: {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n\n return cursorPos;\n }\n\n /**\n @override\n */\n doValidate (flags: AppendFlags): boolean {\n const regexp = flags.input ? this._numberRegExpInput : this._numberRegExp;\n\n // validate as string\n let valid = regexp.test(this._removeThousandsSeparators(this.value));\n\n if (valid) {\n // validate as number\n const number = this.number;\n valid = valid && !isNaN(number) &&\n // check min bound for negative values\n (this.min == null || this.min >= 0 || this.min <= this.number) &&\n // check max bound for positive values\n (this.max == null || this.max <= 0 || this.number <= this.max);\n }\n\n return valid && super.doValidate(flags);\n }\n\n /**\n @override\n */\n doCommit () {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n\n if (validnum !== number) this.unmaskedValue = String(validnum);\n\n let formatted = this.value;\n\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros) formatted = this._padFractionalZeros(formatted);\n\n this._value = formatted;\n }\n\n super.doCommit();\n }\n\n /** */\n _normalizeZeros (value: string): string {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n\n /** */\n _padFractionalZeros (value: string): string {\n if (!value) return value;\n\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n\n /**\n @override\n */\n get unmaskedValue (): string {\n return this._removeThousandsSeparators(\n this._normalizeZeros(\n this.value))\n .replace(this.radix, '.');\n }\n\n set unmaskedValue (unmaskedValue: string) {\n super.unmaskedValue = unmaskedValue.replace('.', this.radix);\n }\n\n /**\n @override\n */\n get typedValue (): number {\n return Number(this.unmaskedValue);\n }\n\n set typedValue (n: number) {\n super.unmaskedValue = String(n);\n }\n\n /** Parsed Number */\n get number (): number {\n return this.typedValue;\n }\n\n set number (number: number) {\n this.typedValue = number;\n }\n\n /**\n Is negative allowed\n @readonly\n */\n get allowNegative (): boolean {\n return this.signed ||\n (this.min != null && this.min < 0) ||\n (this.max != null && this.max < 0);\n }\n}\nMaskedNumber.DEFAULTS = {\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: ['.'],\n scale: 2,\n signed: false,\n normalizeZeros: true,\n padFractionalZeros: false,\n};\n\n\nIMask.MaskedNumber = MaskedNumber;\n","// @flow\nimport Masked, {type MaskedOptions} from './base.js';\nimport IMask from '../core/holder.js';\n\n\n/** Masking by custom Function */\nexport default\nclass MaskedFunction extends Masked {\n /**\n @override\n @param {Object} opts\n */\n _update (opts: MaskedOptions) {\n if (opts.mask) opts.validate = opts.mask;\n super._update(opts);\n }\n}\n\n\nIMask.MaskedFunction = MaskedFunction;\n","// @flow\nimport ChangeDetails from '../core/change-details.js';\nimport createMask from './factory.js';\nimport Masked, {type AppendFlags, type MaskedState} from './base.js';\nimport { type TailDetails } from '../core/tail-details.js';\nimport IMask from '../core/holder.js';\n\n\ntype MaskedDynamicState = {|\n ...MaskedState,\n _rawInputValue: string,\n compiledMasks: Array<*>,\n currentMaskRef: ?Masked<*>,\n currentMask: *,\n|};\n\ntype DynamicMaskType = Array<{[string]: any}>;\n/** Dynamic mask for choosing apropriate mask in run-time */\nexport default\nclass MaskedDynamic extends Masked {\n /** Currently chosen mask */\n currentMask: ?Masked<*>;\n /** Compliled {@link Masked} options */\n compiledMasks: Array>;\n /** Chooses {@link Masked} depending on input value */\n dispatch: (string, Masked<*>, AppendFlags) => Masked<*>;\n\n /**\n @param {Object} opts\n */\n constructor (opts: any) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n\n this.currentMask = null;\n }\n\n /**\n @override\n */\n _update (opts: any) {\n super._update(opts);\n if ('mask' in opts) {\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ?\n opts.mask.map(m => createMask(m)) :\n [];\n }\n }\n\n /**\n @override\n */\n _appendCharRaw (ch: string, flags: AppendFlags={}): ChangeDetails {\n const details = this._applyDispatch(ch, flags);\n\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, flags));\n }\n\n return details;\n }\n\n _applyDispatch (appended: string='', flags: AppendFlags={}): ChangeDetails {\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ?\n flags._beforeTailState._value :\n this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ?\n // $FlowFixMe - tired to fight with type system\n flags._beforeTailState._rawInputValue :\n inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n\n const prevMaskState = prevMask && prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, { ...flags });\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n\n if (insertValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n const d = this.currentMask.append(insertValue, {raw: true});\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n\n if (tailValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n details.tailShift += this.currentMask.append(tailValue, {raw: true, tail: true}).tailShift;\n }\n } else {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n\n return details;\n }\n\n _appendPlaceholder (...args: *): ChangeDetails {\n const details = this._applyDispatch(...args);\n\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n\n return details;\n }\n\n /**\n @override\n */\n doDispatch(appended: string, flags: AppendFlags={}): ?Masked<*> {\n return this.dispatch(appended, this, flags);\n }\n\n /**\n @override\n */\n doValidate (...args: *): boolean {\n return super.doValidate(...args) && (\n !this.currentMask || this.currentMask.doValidate(...args));\n }\n\n /**\n @override\n */\n reset () {\n if (this.currentMask) this.currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n\n /**\n @override\n */\n get value (): string {\n return this.currentMask ? this.currentMask.value : '';\n }\n\n set value (value: string) {\n super.value = value;\n }\n\n /**\n @override\n */\n get unmaskedValue (): string {\n return this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n\n set unmaskedValue (unmaskedValue: string) {\n super.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get typedValue (): any {\n return this.currentMask ? this.currentMask.typedValue : '';\n }\n\n // probably typedValue should not be used with dynamic\n set typedValue (value: any) {\n let unmaskedValue = String(value);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = value;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get isComplete (): boolean {\n return !!this.currentMask && this.currentMask.isComplete;\n }\n\n /**\n @override\n */\n remove (...args: *): ChangeDetails {\n const details: ChangeDetails = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(...args))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n\n return details;\n }\n\n /**\n @override\n */\n get state (): MaskedDynamicState {\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: this.currentMask && this.currentMask.state,\n };\n }\n\n set state (state: MaskedDynamicState) {\n const {compiledMasks, currentMaskRef, currentMask, ...maskedState} = state;\n this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n\n /**\n @override\n */\n extractInput (...args: *): string {\n return this.currentMask ?\n this.currentMask.extractInput(...args) :\n '';\n }\n\n /**\n @override\n */\n extractTail (...args: *): TailDetails {\n return this.currentMask ?\n this.currentMask.extractTail(...args) :\n super.extractTail(...args);\n }\n\n /**\n @override\n */\n doCommit () {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n\n /**\n @override\n */\n nearestInputPos(...args: *): number {\n return this.currentMask ?\n this.currentMask.nearestInputPos(...args) :\n super.nearestInputPos(...args);\n }\n\n get overwrite (): ?boolean {\n return this.currentMask ?\n this.currentMask.overwrite :\n super.overwrite;\n }\n\n set overwrite (overwrite: *) {\n console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\n }\n}\n\nMaskedDynamic.DEFAULTS = {\n dispatch: (appended, masked, flags) => {\n if (!masked.compiledMasks.length) return;\n\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n m.reset();\n m.append(inputValue, { raw: true });\n m.append(appended, flags);\n const weight = m.rawInputValue.length;\n\n return {weight, index};\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight);\n\n return masked.compiledMasks[inputs[0].index];\n }\n};\n\n\nIMask.MaskedDynamic = MaskedDynamic;\n","import createMask from './factory';\nimport IMask from '../core/holder.js';\n\n\n/** Mask pipe source and destination types */\nexport\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue',\n};\n\n/** Creates new pipe function depending on mask type, source and destination options */\nexport\nfunction createPipe (mask, from=PIPE_TYPE.MASKED, to=PIPE_TYPE.MASKED) {\n const masked = createMask(mask);\n return (value) => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nexport\nfunction pipe (value, ...pipeArgs) {\n return createPipe(...pipeArgs)(value);\n}\n\n\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n","import IMask from './imask.js';\nexport { default as InputMask } from './controls/input.js';\n\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as createMask } from './masked/factory.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { createPipe, pipe, PIPE_TYPE } from './masked/pipe.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch(e) {}\nexport default IMask;\n"],"names":["check","it","Math","module","globalThis","window","self","global","this","Function","exec","error","require","Object","defineProperty","get","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","call","V","descriptor","enumerable","match","version","bitmap","value","configurable","writable","toString","classof","slice","split","undefined","TypeError","IndexedObject","requireObjectCoercible","aFunction","variable","namespace","method","arguments","length","userAgent","process","Deno","versions","v8","V8_VERSION","fails","getOwnPropertySymbols","symbol","Symbol","String","sham","iterator","getBuiltIn","$Symbol","isObject","key","setGlobal","SHARED","store","push","mode","copyright","argument","toObject","hasOwnProperty","hasOwn","id","postfix","random","shared","has","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","isSymbol","ordinaryToPrimitive","input","pref","fn","val","valueOf","TO_PRIMITIVE","name","wellKnownSymbol","toPrimitive","result","exoticToPrim","document","EXISTS","createElement","a","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPropertyKey","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","O","P","f","anObject","$defineProperty","Attributes","definePropertyModule","object","functionToString","inspectSource","set","WeakMap","test","keys","NATIVE_WEAK_MAP","createNonEnumerableProperty","objectHas","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","TYPE","type","getInternalState","enforceInternalState","TEMPLATE","options","unsafe","simple","noTargetGet","source","join","prototype","ceil","floor","isNaN","toInteger","min","max","toLength","toAbsoluteIndex","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","names","i","internalObjectKeys","concat","getOwnPropertyNames","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","redefine","copyConstructorProperties","target","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","enumBugKeys","objectKeys","$assign","assign","b","A","B","alphabet","forEach","chr","T","argumentsLength","S","j","count","str","n","Infinity","RangeError","proto","repeat","IS_END","maxLength","fillString","fillLen","stringFiller","stringLength","fillStr","intMaxLength","start","end","$padStart","padStart","$padEnd","isString","padEnd","DIRECTION","forceDirection","direction","escapeRegExp","objectIncludes","arrA","Array","isArray","arrB","_typeof","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","ActionDetails","cursorPos","oldValue","oldSelection","startChangePos","substr","insertedCount","removedCount","substring","ChangeDetails","details","inserted","rawInserted","skip","tailShift","ContinuousTailDetails","from","stop","tail","masked","append","aggregate","_appendPlaceholder","pos","shiftChar","IMask","opts","InputMask","Masked","_value","_update","DEFAULTS","isInitialized","withValueRefresh","bind","resolve","reset","doCommit","doParse","doFormat","extractInput","raw","fromPos","toPos","appendTo","ch","flags","checkTail","consistentState","_appendCharRaw","doPrepare","consistentTail","appended","doValidate","beforeTailState","overwrite","shiftBefore","tailDetails","appendTail","Error","_beforeTailState","ci","_appendChar","_refreshing","rawInput","rawInputValue","ret","_isolated","prepare","validate","parent","commit","format","parse","deleteCount","removeDirection","tailPos","extractTail","nearestInputPos","remove","maskedClass","mask","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","MaskedFunction","constructor","console","warn","createMask","MaskedClass","v","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","blockOpts","_isFilled","isOptional","placeholderChar","unmaskedValue","Boolean","lazy","minPos","maxPos","boundPos","isComplete","PatternFixedDefinition","isUnmasking","_isRawInput","char","isResolved","ChunksTailDetails","chunks","map","tailChunk","lastChunk","extendLast","extend","firstTailChunk","shift","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","_blocks","remainChars","c","props","cstate","chunkShiftPos","splice","search","definitions","_rebuildMask","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","_this","filter","bName","sort","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","reduce","_get","blockIter","block","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_this2","_findStopBefore","_blockStartPos","_","stopBefore","si","toBlockIndex","startBlockIter","startBlockIndex","endBlockIndex","args","bDetails","_this3","accVal","blockStartPos","offset","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","beginBlockData","beginBlockOffset","beginBlockIndex","beginBlock","beginBlockCursorPos","cursorAtRight","cursorAtLeft","searchBlockIndex","blockIndexAtLeft","blockAtLeft","blockInputPos","firstInputAtRight","blockAtRight","firstFilledBlockIndexAtRight","filledBlock","firstEmptyInputBlockIndex","firstFilledInputBlockIndex","blockAlignedPos","firstInputBlockAlignedIndex","firstInputBlockAlignedPos","alignedPos","maskedBlocks","indices","gi","_this4","InputDefinition","FixedDefinition","MaskedRange","to","fromStr","toStr","sameCharsCount","minstr","maxstr","placeholder","num","autofix","prepStr","nextVal","boundaries","firstNonZero","_matchFrom","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","d","getDate","bk","date","isDateExist","typedValue","day","month","year","MaskElement","_unsafeSelectionStart","e","_unsafeSelectionEnd","selectionStart","selectionEnd","_unsafeSelect","handlers","HTMLMaskElement","_handlers","getRootNode","rootElement","activeElement","setSelectionRange","event","_toggleEventHandler","EVENTS_MAP","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","HTMLContenteditableMaskElement","root","selection","getSelection","anchorOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","isContentEditable","tagName","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","updateOptions","updateControl","bindEvents","unbindEvents","ev","listeners","l","_cursorChanging","_changingCursorPos","isActive","select","_selection","newUnmaskedValue","newValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_fireEvent","_inputEvent","clearTimeout","hIndex","oldRawValue","removed","updateCursor","preventDefault","stopPropagation","_unbindEvents","MaskedEnum","enum","some","_updateRegExps","allowNegative","scale","radix","_numberRegExpInput","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","parts","_removeThousandsSeparators","extendOnSeparators","_separatorsCount","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","_separatorsCountFromSlice","appendDetails","_insertThousandsSeparators","beforeTailValue","beforeTailSeparatorsCount","searchFrom","separatorPos","separatorAroundFromPos","_findSeparatorAround","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","number","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","signed","currentMask","compiledMasks","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","dispatch","currentMaskRef","mi","inputs","weight","i1","i2","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","runIsolated","pipe","pipeArgs"],"mappings":"kYAAIA,EAAQ,SAAUC,UACbA,GAAMA,EAAGC,MAAQA,MAAQD,GAIlCE,EAEEH,EAA2B,iBAAdI,YAA0BA,aACvCJ,EAAuB,iBAAVK,QAAsBA,SAEnCL,EAAqB,iBAARM,MAAoBA,OACjCN,EAAuB,iBAAVO,GAAsBA,IAElC,kBAAqBC,KAArB,IAAmCC,SAAS,cAATA,QCbtCN,EAAiB,SAAUO,eAEdA,IACT,MAAOC,UACA,ICDXR,GAHYS,GAGY,kBAEwD,GAAvEC,OAAOC,eAAe,GAAI,EAAG,CAAEC,IAAK,kBAAqB,KAAQ,WCJtEC,EAAwB,GAAGC,qBAE3BC,EAA2BL,OAAOK,yBAGlCC,EAAcD,IAA6BF,EAAsBI,KAAK,GAAK,GAAK,OAIxED,EAAc,SAA8BE,OAClDC,EAAaJ,EAAyBV,KAAMa,WACvCC,GAAcA,EAAWC,YAChCP,MCNAQ,EAAOC,ECPXtB,EAAiB,SAAUuB,EAAQC,SAC1B,CACLJ,aAAuB,EAATG,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZC,MAAOA,ICLPG,EAAW,GAAGA,SCCdC,EDCa,SAAU9B,UAClB6B,EAASV,KAAKnB,GAAI+B,MAAM,GAAI,ICAjCC,EAAQ,GAAGA,MAGf9B,EANYS,GAMW,kBAGbC,OAAO,KAAKI,qBAAqB,MACtC,SAAUhB,SACS,UAAf8B,EAAQ9B,GAAkBgC,EAAMb,KAAKnB,EAAI,IAAMY,OAAOZ,IAC3DY,OCVJV,EAAiB,SAAUF,MACfiC,MAANjC,EAAiB,MAAMkC,UAAU,wBAA0BlC,UACxDA,GCHLmC,EAAgBxB,EAChByB,EAAyBzB,EAE7BT,EAAiB,SAAUF,UAClBmC,EAAcC,EAAuBpC,KCL9CE,EAAiB,SAAUF,SACJ,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,GCDnDM,EAASK,EAET0B,EAAY,SAAUC,SACE,mBAAZA,EAAyBA,OAAWL,GAGpD/B,EAAiB,SAAUqC,EAAWC,UAC7BC,UAAUC,OAAS,EAAIL,EAAU/B,EAAOiC,IAAcjC,EAAOiC,IAAcjC,EAAOiC,GAAWC,ICLtGtC,EAFiBS,EAEW,YAAa,cAAgB,GRFrDL,EAASK,EACTgC,EAAYhC,EAEZiC,EAAUtC,EAAOsC,QACjBC,EAAOvC,EAAOuC,KACdC,EAAWF,GAAWA,EAAQE,UAAYD,GAAQA,EAAKrB,QACvDuB,EAAKD,GAAYA,EAASC,GAG1BA,EAEFvB,GADAD,EAAQwB,EAAGf,MAAM,MACD,GAAK,EAAI,EAAIT,EAAM,GAAKA,EAAM,GACrCoB,MACTpB,EAAQoB,EAAUpB,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQoB,EAAUpB,MAAM,oBACbC,EAAUD,EAAM,QSf3ByB,ETmBaxB,IAAYA,ESlBzByB,EAAQtC,EAGZT,IAAmBU,OAAOsC,wBAA0BD,GAAM,eACpDE,EAASC,gBAGLC,OAAOF,MAAavC,OAAOuC,aAAmBC,UAEnDA,OAAOE,MAAQN,GAAcA,EAAa,MCR/C9C,EAFoBS,IAGdyC,OAAOE,MACkB,iBAAnBF,OAAOG,SCLfC,EAAa7C,EAGjBT,EAFwBS,EAEa,SAAUX,SACzB,iBAANA,GACZ,SAAUA,OACRyD,EAAUD,EAAW,gBACA,mBAAXC,GAAyB7C,OAAOZ,aAAeyD,GCP3DC,EAAW/C,iBCAXL,EAASK,EAEbT,EAAiB,SAAUyD,EAAKjC,OAG5Bd,OAAOC,eAAeP,EAAQqD,EAAK,CAAEjC,MAAOA,EAAOC,cAAc,EAAMC,UAAU,IACjF,MAAOlB,GACPJ,EAAOqD,GAAOjC,SACPA,GCPPkC,EAAYjD,EAEZkD,EAAS,qBAGb3D,EANaS,EAIMkD,IAAWD,EAAUC,EAAQ,ICH5CC,EAAQnD,GAEXT,UAAiB,SAAUyD,EAAKjC,UACxBoC,EAAMH,KAASG,EAAMH,QAAiB1B,IAAVP,EAAsBA,EAAQ,MAChE,WAAY,IAAIqC,KAAK,CACtBvC,QAAS,SACTwC,KAAyB,SACzBC,UAAW,yCCRb,IAAI7B,EAAyBzB,EAI7BT,EAAiB,SAAUgE,UAClBtD,OAAOwB,EAAuB8B,KCLnCC,EAAWxD,EAEXyD,EAAiB,GAAGA,eAExBlE,EAAiBU,OAAOyD,QAAU,SAAgBrE,EAAI2D,UAC7CS,EAAejD,KAAKgD,EAASnE,GAAK2D,ICLvCW,EAAK,EACLC,EAAUtE,KAAKuE,SAEnBtE,GAAiB,SAAUyD,SAClB,UAAYN,YAAepB,IAAR0B,EAAoB,GAAKA,GAAO,QAAUW,EAAKC,GAAS1C,SAAS,KCJzFvB,GAASK,EACT8D,GAAS9D,UACT+D,GAAM/D,EACNgE,GAAMhE,GACNiE,GAAgBjE,EAChBkE,GAAoBlE,EAEpBmE,GAAwBL,GAAO,OAC/BrB,GAAS9C,GAAO8C,OAChB2B,GAAwBF,GAAoBzB,GAASA,IAAUA,GAAO4B,eAAiBL,GCTvFjB,GAAW/C,EACXsE,GAAWtE,EACXuE,GREa,SAAUC,EAAOC,OAC5BC,EAAIC,KACK,WAATF,GAAqD,mBAAxBC,EAAKF,EAAMtD,YAA4B6B,EAAS4B,EAAMD,EAAGlE,KAAKgE,IAAS,OAAOG,KAC5E,mBAAvBD,EAAKF,EAAMI,WAA2B7B,EAAS4B,EAAMD,EAAGlE,KAAKgE,IAAS,OAAOG,KAC5E,WAATF,GAAqD,mBAAxBC,EAAKF,EAAMtD,YAA4B6B,EAAS4B,EAAMD,EAAGlE,KAAKgE,IAAS,OAAOG,QACzGpD,UAAU,4CQJdsD,GDMa,SAAUC,UACpBf,GAAII,GAAuBW,KAAWb,IAAuD,iBAA/BE,GAAsBW,MACnFb,IAAiBF,GAAItB,GAAQqC,GAC/BX,GAAsBW,GAAQrC,GAAOqC,GAErCX,GAAsBW,GAAQV,GAAsB,UAAYU,IAE3DX,GAAsBW,GCbdC,CAAgB,eCL/BC,GDSa,SAAUR,EAAOC,OAC3B1B,GAASyB,IAAUF,GAASE,GAAQ,OAAOA,MAE5CS,EADAC,EAAeV,EAAMK,YAEJvD,IAAjB4D,EAA4B,SACjB5D,IAATmD,IAAoBA,EAAO,WAC/BQ,EAASC,EAAa1E,KAAKgE,EAAOC,IAC7B1B,GAASkC,IAAWX,GAASW,GAAS,OAAOA,QAC5C1D,UAAU,uDAELD,IAATmD,IAAoBA,EAAO,UACxBF,GAAoBC,EAAOC,ICnBhCH,GAAWtE,EAIfT,GAAiB,SAAUgE,OACrBP,EAAMgC,GAAYzB,EAAU,iBACzBe,GAAStB,GAAOA,EAAMN,OAAOM,ICNlCD,GAAW/C,EAEXmF,GAHSnF,EAGSmF,SAElBC,GAASrC,GAASoC,KAAapC,GAASoC,GAASE,eCHjDA,GDKa,SAAUhG,UAClB+F,GAASD,GAASE,cAAchG,GAAM,ICH/CE,IALkBS,IACNA,GAI4B,kBAI9B,GAFDC,OAAOC,eAAemF,GAAc,OAAQ,IAAK,CACtDlF,IAAK,kBAAqB,KACzBmF,KCTDC,GAAcvF,EACdwF,GAA6BxF,EAC7ByF,GAA2BzF,EAC3B0F,GAAkB1F,EAClB2F,GAAgB3F,GAChB+D,GAAM/D,EACN4F,GAAiB5F,GAGjB6F,GAA4B5F,OAAOK,6BAI3BiF,GAAcM,GAA4B,SAAkCC,EAAGC,MACzFD,EAAIJ,GAAgBI,GACpBC,EAAIJ,GAAcI,GACdH,GAAgB,WACXC,GAA0BC,EAAGC,GACpC,MAAOhG,OACLgE,GAAI+B,EAAGC,GAAI,OAAON,IAA0BD,GAA2BQ,EAAExF,KAAKsF,EAAGC,GAAID,EAAEC,eCnBzFhD,GAAW/C,EAEfT,GAAiB,SAAUF,OACpB0D,GAAS1D,SACNkC,UAAUmB,OAAOrD,GAAM,4BACtBA,GCLPkG,GAAcvF,EACd4F,GAAiB5F,GACjBiG,GAAWjG,GACX2F,GAAgB3F,GAGhBkG,GAAkBjG,OAAOC,oBAIjBqF,GAAcW,GAAkB,SAAwBJ,EAAGC,EAAGI,MACxEF,GAASH,GACTC,EAAIJ,GAAcI,GAClBE,GAASE,GACLP,GAAgB,WACXM,GAAgBJ,EAAGC,EAAGI,GAC7B,MAAOpG,OACL,QAASoG,GAAc,QAASA,EAAY,MAAM5E,UAAU,iCAC5D,UAAW4E,IAAYL,EAAEC,GAAKI,EAAWpF,OACtC+E,GCnBT,IACIM,GAAuBpG,GACvByF,GAA2BzF,EAE/BT,GAJkBS,EAIa,SAAUqG,EAAQrD,EAAKjC,UAC7CqF,GAAqBJ,EAAEK,EAAQrD,EAAKyC,GAAyB,EAAG1E,KACrE,SAAUsF,EAAQrD,EAAKjC,UACzBsF,EAAOrD,GAAOjC,EACPsF,mBCRLlD,GAAQnD,EAERsG,GAAmBzG,SAASqB,SAGE,mBAAvBiC,GAAMoD,gBACfpD,GAAMoD,cAAgB,SAAUlH,UACvBiH,GAAiB9F,KAAKnB,SCI7BmH,GAAKrG,GAAK4D,GDAdxE,GAAiB4D,GAAMoD,cEVnBA,GAAgBvG,GAEhByG,GAHSzG,EAGQyG,QAErBlH,GAAoC,mBAAZkH,IAA0B,cAAcC,KAAKH,GAAcE,KCL/E3C,GAAS9D,UACTgE,GAAMhE,GAEN2G,GAAO7C,GAAO,QCHlBvE,GAAiB,GHAbqH,GAAkB5G,GAElB+C,GAAW/C,EACX6G,GAA8B7G,GAC9B8G,GAAY9G,EACZ8D,GAAS9D,EACT+G,GEDa,SAAU/D,UAClB2D,GAAK3D,KAAS2D,GAAK3D,GAAOgB,GAAIhB,KFCnCgE,GAAahH,GAEbiH,GAA6B,6BAC7BR,GATSzG,EASQyG,QAgBrB,GAAIG,IAAmB9C,GAAOoD,MAAO,KAC/B/D,GAAQW,GAAOoD,QAAUpD,GAAOoD,MAAQ,IAAIT,IAC5CU,GAAQhE,GAAMhD,IACdiH,GAAQjE,GAAMY,IACdsD,GAAQlE,GAAMqD,IAClBA,GAAM,SAAUnH,EAAIiI,MACdF,GAAM5G,KAAK2C,GAAO9D,GAAK,MAAM,IAAIkC,UAAU0F,WAC/CK,EAASC,OAASlI,EAClBgI,GAAM7G,KAAK2C,GAAO9D,EAAIiI,GACfA,GAETnH,GAAM,SAAUd,UACP8H,GAAM3G,KAAK2C,GAAO9D,IAAO,IAElC0E,GAAM,SAAU1E,UACP+H,GAAM5G,KAAK2C,GAAO9D,QAEtB,KACDmI,GAAQT,GAAU,SACtBC,GAAWQ,KAAS,EACpBhB,GAAM,SAAUnH,EAAIiI,MACdR,GAAUzH,EAAImI,IAAQ,MAAM,IAAIjG,UAAU0F,WAC9CK,EAASC,OAASlI,EAClBwH,GAA4BxH,EAAImI,GAAOF,GAChCA,GAETnH,GAAM,SAAUd,UACPyH,GAAUzH,EAAImI,IAASnI,EAAGmI,IAAS,IAE5CzD,GAAM,SAAU1E,UACPyH,GAAUzH,EAAImI,SAIzBjI,GAAiB,CACfiH,IAAKA,GACLrG,IAAKA,GACL4D,IAAKA,GACL0D,QAnDY,SAAUpI,UACf0E,GAAI1E,GAAMc,GAAId,GAAMmH,GAAInH,EAAI,KAmDnCqI,UAhDc,SAAUC,UACjB,SAAUtI,OACX6H,MACCnE,GAAS1D,KAAQ6H,EAAQ/G,GAAId,IAAKuI,OAASD,QACxCpG,UAAU,0BAA4BoG,EAAO,oBAC5CT,KItBTvH,GAASK,EACT6G,GAA8B7G,GAC9B+D,GAAM/D,EACNiD,GAAYjD,EACZuG,GAAgBvG,GAGhB6H,GAFsB7H,GAEiBG,IACvC2H,GAHsB9H,GAGqByH,QAC3CM,GAAWrF,OAAOA,QAAQrB,MAAM,WAEnC9B,WAAiB,SAAUuG,EAAG9C,EAAKjC,EAAOiH,OAIrCd,EAHAe,IAASD,KAAYA,EAAQC,OAC7BC,IAASF,KAAYA,EAAQrH,WAC7BwH,IAAcH,KAAYA,EAAQG,YAElB,mBAATpH,IACS,iBAAPiC,GAAoBe,GAAIhD,EAAO,SACxC8F,GAA4B9F,EAAO,OAAQiC,IAE7CkE,EAAQY,GAAqB/G,IAClBqH,SACTlB,EAAMkB,OAASL,GAASM,KAAmB,iBAAPrF,EAAkBA,EAAM,MAG5D8C,IAAMnG,IAIEsI,GAEAE,GAAerC,EAAE9C,KAC3BkF,GAAS,UAFFpC,EAAE9C,GAIPkF,EAAQpC,EAAE9C,GAAOjC,EAChB8F,GAA4Bf,EAAG9C,EAAKjC,IATnCmH,EAAQpC,EAAE9C,GAAOjC,EAChBkC,GAAUD,EAAKjC,KAUrBlB,SAASyI,UAAW,YAAY,iBACX,mBAAR1I,MAAsBiI,GAAiBjI,MAAMwI,QAAU7B,GAAc3G,mBCtCjF2I,GAAOjJ,KAAKiJ,KACZC,GAAQlJ,KAAKkJ,MAIjBjJ,GAAiB,SAAUgE,UAClBkF,MAAMlF,GAAYA,GAAY,GAAKA,EAAW,EAAIiF,GAAQD,IAAMhF,ICNrEmF,GAAY1I,GAEZ2I,GAAMrJ,KAAKqJ,IAIfpJ,GAAiB,SAAUgE,UAClBA,EAAW,EAAIoF,GAAID,GAAUnF,GAAW,kBAAoB,GCPjEmF,GAAY1I,GAEZ4I,GAAMtJ,KAAKsJ,IACXD,GAAMrJ,KAAKqJ,ICHXjD,GAAkB1F,EAClB6I,GAAW7I,GACX8I,GDMa,SAAUC,EAAOhH,OAC5BiH,EAAUN,GAAUK,UACjBC,EAAU,EAAIJ,GAAII,EAAUjH,EAAQ,GAAK4G,GAAIK,EAASjH,ICL3DkH,GAAe,SAAUC,UACpB,SAAUC,EAAOC,EAAIC,OAItBtI,EAHA+E,EAAIJ,GAAgByD,GACpBpH,EAAS8G,GAAS/C,EAAE/D,QACpBgH,EAAQD,GAAgBO,EAAWtH,MAInCmH,GAAeE,GAAMA,GAAI,KAAOrH,EAASgH,OAC3ChI,EAAQ+E,EAAEiD,OAEGhI,EAAO,OAAO,OAEtB,KAAMgB,EAASgH,EAAOA,QACtBG,GAAeH,KAASjD,IAAMA,EAAEiD,KAAWK,EAAI,OAAOF,GAAeH,GAAS,SAC3EG,IAAgB,IAI9B3J,GAAiB,CAGf+J,SAAUL,IAAa,GAGvBM,QAASN,IAAa,IC9BpBlF,GAAM/D,EACN0F,GAAkB1F,EAClBuJ,GAAUvJ,GAAuCuJ,QACjDvC,GAAahH,GAEjBT,GAAiB,SAAU8G,EAAQmD,OAI7BxG,EAHA8C,EAAIJ,GAAgBW,GACpBoD,EAAI,EACJxE,EAAS,OAERjC,KAAO8C,GAAI/B,GAAIiD,GAAYhE,IAAQe,GAAI+B,EAAG9C,IAAQiC,EAAO7B,KAAKJ,QAE5DwG,EAAMzH,OAAS0H,GAAO1F,GAAI+B,EAAG9C,EAAMwG,EAAMC,SAC7CF,GAAQtE,EAAQjC,IAAQiC,EAAO7B,KAAKJ,WAEhCiC,GCdT1F,GAAiB,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,WCREmK,GAAqB1J,GAGrBgH,GAFchH,GAEW2J,OAAO,SAAU,kBAKlC1J,OAAO2J,qBAAuB,SAA6B9D,UAC9D4D,GAAmB5D,EAAGkB,oBCRnB/G,OAAOsC,sBCDnB,IACIsH,GAA4B7J,GAC5B8J,GAA8B9J,GAC9BiG,GAAWjG,GAGfT,GANiBS,EAMW,UAAW,YAAc,SAAiBX,OAChEsH,EAAOkD,GAA0B7D,EAAEC,GAAS5G,IAC5CkD,EAAwBuH,GAA4B9D,SACjDzD,EAAwBoE,EAAKgD,OAAOpH,EAAsBlD,IAAOsH,GCTtE5C,GAAM/D,EACN+J,GAAU/J,GACVgK,GAAiChK,EACjCoG,GAAuBpG,GCHvBsC,GAAQtC,EAERiK,GAAc,kBAEdC,GAAW,SAAUC,EAASC,OAC5BrJ,EAAQsJ,GAAKC,GAAUH,WACpBpJ,GAASwJ,IACZxJ,GAASyJ,KACW,mBAAbJ,EAA0B9H,GAAM8H,KACrCA,IAGJE,GAAYJ,GAASI,UAAY,SAAUG,UACtC/H,OAAO+H,GAAQC,QAAQT,GAAa,KAAKU,eAG9CN,GAAOH,GAASG,KAAO,GACvBG,GAASN,GAASM,OAAS,IAC3BD,GAAWL,GAASK,SAAW,IAEnChL,GAAiB2K,GCpBbvK,GAASK,EACTM,GAA2BN,EAA2DgG,EACtFa,GAA8B7G,GAC9B4K,GAAW5K,WACXiD,GAAYjD,EACZ6K,GFAa,SAAUC,EAAQ1C,WAC7BzB,EAAOoD,GAAQ3B,GACflI,EAAiBkG,GAAqBJ,EACtC1F,EAA2B0J,GAA+BhE,EACrDyD,EAAI,EAAGA,EAAI9C,EAAK5E,OAAQ0H,IAAK,KAChCzG,EAAM2D,EAAK8C,GACV1F,GAAI+G,EAAQ9H,IAAM9C,EAAe4K,EAAQ9H,EAAK1C,EAAyB8H,EAAQpF,MELpFkH,GAAWlK,GAgBfT,GAAiB,SAAUyI,EAASI,OAItB0C,EAAQ9H,EAAK+H,EAAgBC,EAAgBtK,EAHrDuK,EAASjD,EAAQ8C,OACjBI,EAASlD,EAAQrI,OACjBwL,EAASnD,EAAQoD,QAGnBN,EADEI,EACOvL,GACAwL,EACAxL,GAAOsL,IAAWhI,GAAUgI,EAAQ,KAEnCtL,GAAOsL,IAAW,IAAI3C,UAEtB,IAAKtF,KAAOoF,EAAQ,IAC9B4C,EAAiB5C,EAAOpF,GAGtB+H,EAFE/C,EAAQG,aACVzH,EAAaJ,GAAyBwK,EAAQ9H,KACftC,EAAWK,MACpB+J,EAAO9H,IACtBkH,GAASgB,EAASlI,EAAMiI,GAAUE,EAAS,IAAM,KAAOnI,EAAKgF,EAAQqD,cAE5C/J,IAAnByJ,EAA8B,WAChCC,UAA0BD,EAAgB,SACrDF,GAA0BG,EAAgBD,IAGxC/C,EAAQrF,MAASoI,GAAkBA,EAAepI,OACpDkE,GAA4BmE,EAAgB,QAAQ,GAGtDJ,GAASE,EAAQ9H,EAAKgI,EAAgBhD,KCnDtC0B,GAAqB1J,GACrBsL,GAActL,GAKlBT,GAAiBU,OAAO0G,MAAQ,SAAcb,UACrC4D,GAAmB5D,EAAGwF,KCN3B/F,GAAcvF,EACdsC,GAAQtC,EACRuL,GAAavL,GACb8J,GAA8B9J,GAC9BwF,GAA6BxF,EAC7BwD,GAAWxD,EACXwB,GAAgBxB,EAGhBwL,GAAUvL,OAAOwL,OAEjBvL,GAAiBD,OAAOC,eAI5BX,IAAkBiM,IAAWlJ,IAAM,cAE7BiD,IAQiB,IARFiG,GAAQ,CAAEE,EAAG,GAAKF,GAAQtL,GAAe,GAAI,IAAK,CACnES,YAAY,EACZR,IAAK,WACHD,GAAeN,KAAM,IAAK,CACxBmB,MAAO,EACPJ,YAAY,OAGd,CAAE+K,EAAG,KAAMA,EAAS,OAAO,MAE3BC,EAAI,GACJC,EAAI,GAEJpJ,EAASC,SACToJ,EAAW,8BACfF,EAAEnJ,GAAU,EACZqJ,EAASxK,MAAM,IAAIyK,SAAQ,SAAUC,GAAOH,EAAEG,GAAOA,KACpB,GAA1BP,GAAQ,GAAIG,GAAGnJ,IAAgB+I,GAAWC,GAAQ,GAAII,IAAIvD,KAAK,KAAOwD,KAC1E,SAAgBf,EAAQ1C,WACvB4D,EAAIxI,GAASsH,GACbmB,EAAkBnK,UAAUC,OAC5BgH,EAAQ,EACRxG,EAAwBuH,GAA4B9D,EACpD3F,EAAuBmF,GAA2BQ,EAC/CiG,EAAkBlD,WAKnB/F,EAJAkJ,EAAI1K,GAAcM,UAAUiH,MAC5BpC,EAAOpE,EAAwBgJ,GAAWW,GAAGvC,OAAOpH,EAAsB2J,IAAMX,GAAWW,GAC3FnK,EAAS4E,EAAK5E,OACdoK,EAAI,EAEDpK,EAASoK,GACdnJ,EAAM2D,EAAKwF,KACN5G,KAAelF,EAAqBG,KAAK0L,EAAGlJ,KAAMgJ,EAAEhJ,GAAOkJ,EAAElJ,WAE7DgJ,GACPR,GCpDAC,GAASzL,GADLA,GAMN,CAAE8K,OAAQ,SAAUM,MAAM,EAAMC,OAAQpL,OAAOwL,SAAWA,IAAU,CACpEA,OAAQA,KCPV,IAAInH,GAAWtE,EAEfT,GAAiB,SAAUgE,MACrBe,GAASf,GAAW,MAAMhC,UAAU,oDACjCmB,OAAOa,ICHZmF,GAAY1I,GACZkB,GAAWlB,GACXyB,GAAyBzB,EAI7BT,GAAiB,SAAgB6M,OAC3BC,EAAMnL,GAASO,GAAuB7B,OACtCqF,EAAS,GACTqH,EAAI5D,GAAU0D,MACdE,EAAI,GAAKA,GAAKC,EAAAA,EAAU,MAAMC,WAAW,oCACvCF,EAAI,GAAIA,KAAO,KAAOD,GAAOA,GAAc,EAAJC,IAAOrH,GAAUoH,UACvDpH,GCbDjF,GAKN,CAAE8K,OAAQ,SAAU2B,OAAO,GAAQ,CACnCC,OALW1M,KCAb,IAAI6I,GAAW7I,GACXkB,GAAWlB,GACX0M,GAAS1M,GACTyB,GAAyBzB,EAEzBuI,GAAOjJ,KAAKiJ,KAGZU,GAAe,SAAU0D,UACpB,SAAUxD,EAAOyD,EAAWC,OAK7BC,EAASC,EAJTb,EAAIhL,GAASO,GAAuB0H,IACpC6D,EAAed,EAAEnK,OACjBkL,OAAyB3L,IAAfuL,EAA2B,IAAM3L,GAAS2L,GACpDK,EAAerE,GAAS+D,UAExBM,GAAgBF,GAA2B,IAAXC,EAAsBf,GAC1DY,EAAUI,EAAeF,GACzBD,EAAeL,GAAOlM,KAAKyM,EAAS1E,GAAKuE,EAAUG,EAAQlL,UAC1CA,OAAS+K,IAASC,EAAeA,EAAa3L,MAAM,EAAG0L,IACjEH,EAAST,EAAIa,EAAeA,EAAeb,KAItD3M,GAAiB,CAGf4N,MAAOlE,IAAa,GAGpBmE,IAAKnE,IAAa,IC1BpB1J,GAAiB,mEAAmEmH,KAHpE1G,GCCZqN,GAAYrN,GAAmCmN,MAD3CnN,GAMN,CAAE8K,OAAQ,SAAU2B,OAAO,EAAMpB,OAJlBrL,IAIwC,CACvDsN,SAAU,SAAkBV,UACnBS,GAAUzN,KAAMgN,EAAW9K,UAAUC,OAAS,EAAID,UAAU,QAAKR,MCR5E,IACIiM,GAAUvN,GAAmCoN,o4HCGjD,SAASI,GAAUnB,SACK,iBAARA,GAAoBA,aAAe3J,ODL3C1C,GAMN,CAAE8K,OAAQ,SAAU2B,OAAO,EAAMpB,OAJlBrL,IAIwC,CACvDyN,OAAQ,SAAgBb,UACfW,GAAQ3N,KAAMgN,EAAW9K,UAAUC,OAAS,EAAID,UAAU,QAAKR,METlEtB,GAKN,CAAEL,QAAQ,GAAQ,CAClBH,WALWQ,IDiBb,IAAM0N,GACE,OADFA,GAEE,OAFFA,GAGQ,aAHRA,GAIG,QAJHA,GAKS,cAiCf,SAASC,GAAgBC,UACfA,QACDF,UACIA,QACJA,UACIA,kBAEAE,GAMb,SAASC,GAAcxB,UACdA,EAAI3B,QAAQ,6BAA8B,QAMnD,SAASoD,GAAgBpC,EAAQpG,MAC3BA,IAAMoG,EAAG,OAAO,MAIhBjC,EAFAsE,EAAOC,MAAMC,QAAQ3I,GACrB4I,EAAOF,MAAMC,QAAQvC,MAGrBqC,GAAQG,EAAM,IACZ5I,EAAEvD,QAAU2J,EAAE3J,OAAQ,OAAO,MAC5B0H,EAAI,EAAGA,EAAInE,EAAEvD,OAAQ0H,QACnBqE,GAAexI,EAAEmE,GAAIiC,EAAEjC,IAAK,OAAO,SACnC,KAGLsE,GAAQG,EAAM,OAAO,KAErB5I,GAAKoG,GAAkB,WAAbyC,GAAO7I,IAA+B,WAAb6I,GAAOzC,GAAgB,KACxD0C,EAAQ9I,aAAa+I,KACrBC,EAAQ5C,aAAa2C,QACrBD,GAASE,EAAO,OAAOhJ,EAAEiJ,WAAa7C,EAAE6C,aACxCH,GAASE,EAAO,OAAO,MAEvBE,EAAUlJ,aAAamJ,OACvBC,EAAUhD,aAAa+C,UACvBD,GAAWE,EAAS,OAAOpJ,EAAEpE,YAAcwK,EAAExK,cAC7CsN,GAAWE,EAAS,OAAO,MAE3B/H,EAAO1G,OAAO0G,KAAKrB,OAGlBmE,EAAI,EAAGA,EAAI9C,EAAK5E,OAAQ0H,QACtBxJ,OAAOqI,UAAU7E,eAAejD,KAAKkL,EAAG/E,EAAK8C,IAAK,OAAO,MAE3DA,EAAI,EAAGA,EAAI9C,EAAK5E,OAAQ0H,QACvBqE,GAAepC,EAAE/E,EAAK8C,IAAKnE,EAAEqB,EAAK8C,KAAM,OAAO,SAE9C,EACF,SAAInE,IAAKoG,GAAkB,mBAANpG,GAAiC,mBAANoG,IAC5CpG,EAAEpE,aAAewK,EAAExK,eE5G1ByN,yBAWF5N,EACA6N,EACAC,EACAC,uBAEK/N,MAAQA,OACR6N,UAAYA,OACZC,SAAWA,OACXC,aAAeA,EAGblP,KAAKmB,MAAMK,MAAM,EAAGxB,KAAKmP,kBAAoBnP,KAAKiP,SAASzN,MAAM,EAAGxB,KAAKmP,mBAC5EnP,KAAKkP,aAAa3B,6CAQxB,kBACS7N,KAAKqJ,IAAI/I,KAAKgP,UAAWhP,KAAKkP,aAAa3B,kCAOpD,kBACSvN,KAAKgP,UAAYhP,KAAKmP,qCAO/B,kBACSnP,KAAKmB,MAAMiO,OAAOpP,KAAKmP,eAAgBnP,KAAKqP,yCAOrD,kBAES3P,KAAKsJ,IAAKhJ,KAAKkP,aAAa1B,IAAMxN,KAAKmP,qBAEvCF,SAAS9M,OAASnC,KAAKmB,MAAMgB,OAAQ,wBAO9C,kBACSnC,KAAKiP,SAASG,OAAOpP,KAAKmP,eAAgBnP,KAAKsP,gCAOxD,kBACStP,KAAKmB,MAAMoO,UAAU,EAAGvP,KAAKmP,kCAOtC,kBACSnP,KAAKmB,MAAMoO,UAAUvP,KAAKmP,eAAiBnP,KAAKqP,4CAOzD,kBACOrP,KAAKsP,cAAgBtP,KAAKqP,cAAsBvB,GAG7C9N,KAAKkP,aAAa1B,MAAQxN,KAAKgP,WAAahP,KAAKkP,aAAa3B,QAAUvN,KAAKgP,UACnFlB,GACAA,YC1FA0B,yBAUSC,cAMXpP,OAAOwL,OAAO7L,KAAM,CAClB0P,SAAU,GACVC,YAAa,GACbC,MAAM,EACNC,UAAW,GACVJ,uCAOL,SAAWA,eACJE,aAAeF,EAAQE,iBACvBC,KAAO5P,KAAK4P,MAAQH,EAAQG,UAC5BF,UAAYD,EAAQC,cACpBG,WAAaJ,EAAQI,UACnB7P,yBAIT,kBACSA,KAAK6P,UAAY7P,KAAK0P,SAASvN,gBCrCpC2N,+BAQS3O,yDAAe,GAAI4O,yDAAc,EAAGC,yDAC1C7O,MAAQA,OACR4O,KAAOA,OACPC,KAAOA,qCAGd,kBAA6BhQ,KAAKmB,4BAElC,SAAQ8O,QACD9O,OAAS2B,OAAOmN,2BAGvB,SAAUC,UACDA,EAAOC,OAAOnQ,KAAKsB,WAAY,CAAE2O,MAAM,IAC3CG,UAAUF,EAAOG,yCAGtB,iBACS,CACLlP,MAAOnB,KAAKmB,MACZ4O,KAAM/P,KAAK+P,KACXC,KAAMhQ,KAAKgQ,WAIf,SAAW1I,GACTjH,OAAOwL,OAAO7L,KAAMsH,8BAGtB,SAAagJ,MACPtQ,KAAK+P,MAAQO,IAAQtQ,KAAKmB,MAAMgB,OAAQ,MAAO,OAE7CoO,EAAYvQ,KAAKmB,MAAM,eACxBA,MAAQnB,KAAKmB,MAAMK,MAAM,GACvB+O,WC/CX,SAASC,GAAOhH,OAAIiH,yDAAK,UAEhB,IAAID,GAAME,UAAUlH,EAAIiH,OC8C3BE,yBAyBSF,mBACNG,OAAS,QACTC,yBACAF,EAAOG,SACPL,SAEAM,eAAgB,0CAIvB,SAAeN,GACRpQ,OAAO0G,KAAK0J,GAAMtO,aAClB6O,iBAAiBhR,KAAK6Q,QAAQI,KAAKjR,KAAMyQ,2BAOhD,SAASA,GACPpQ,OAAOwL,OAAO7L,KAAMyQ,sBAItB,iBACS,CACLG,OAAQ5Q,KAAKmB,YAIjB,SAAWmG,QACJsJ,OAAStJ,EAAMsJ,4BAItB,gBACOA,OAAS,sBAIhB,kBACS5Q,KAAK4Q,YAGd,SAAWzP,QACJ+P,QAAQ/P,0BAIf,SAASA,eACFgQ,aACAhB,OAAOhP,EAAO,CAACyD,OAAO,GAAO,SAC7BwM,WACEpR,KAAKmB,iCAId,kBACSnB,KAAKmB,WAGd,SAAmBA,QACZgQ,aACAhB,OAAOhP,EAAO,GAAI,SAClBiQ,mCAIP,kBACSpR,KAAKqR,QAAQrR,KAAKmB,YAG3B,SAAgBA,QACTA,MAAQnB,KAAKsR,SAASnQ,8BAI7B,kBACSnB,KAAKuR,aAAa,EAAGvR,KAAKmB,MAAMgB,OAAQ,CAACqP,KAAK,SAGvD,SAAmBrQ,QACZgQ,aACAhB,OAAOhP,EAAO,CAACqQ,KAAK,GAAO,SAC3BJ,mCAIP,kBACS,iCAIT,SAAiBpC,EAAmBhB,UAC3BgB,8BAIT,eAAcyC,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,cACnDnC,KAAKmB,MAAMK,MAAMiQ,EAASC,8BAInC,eAAaD,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,cAClD,IAAI2N,GAAsB9P,KAAKuR,aAAaE,EAASC,GAAQD,6BAKtE,SAAYxB,UACNrC,GAASqC,KAAOA,EAAO,IAAIH,GAAsBhN,OAAOmN,KAErDA,EAAK0B,SAAS3R,oCAIvB,SAAgB4R,UACTA,QAEAhB,QAAUgB,EACR,IAAIpC,GAAc,CACvBE,SAAUkC,EACVjC,YAAaiC,KALC,IAAIpC,8BAUtB,SAAaoC,OAAYC,yDAAmB,GAAIC,yCACxCC,EAA+B/R,KAAKsH,MACtCmI,EAAyBzP,KAAKgS,eAAehS,KAAKiS,UAAUL,EAAIC,GAAQA,MAExEpC,EAAQC,SAAU,KAChBwC,EACAC,GAAsC,IAA3BnS,KAAKoS,WAAWP,MAE3BM,GAAyB,MAAbL,EAAmB,KAE3BO,EAAkBrS,KAAKsH,MACzBtH,KAAKsS,YACPJ,EAAiBJ,EAAUxK,MAC3BwK,EAAUS,YAAYvS,KAAKmB,MAAMgB,aAG7BqQ,EAAcxS,KAAKyS,WAAWX,IAEpCK,EAAWK,EAAY7C,cAAgBmC,EAAUxQ,aAGjCkR,EAAY9C,WAAU1P,KAAKsH,MAAQ+K,GAIhDF,IACH1C,EAAU,IAAID,QACTlI,MAAQyK,EACTD,GAAaI,IAAgBJ,EAAUxK,MAAQ4K,WAGhDzC,oCAIT,kBACS,IAAID,yBAKb,SAAQ/C,EAAaoF,EAAqB5B,OACnCrC,GAASnB,GAAM,MAAM,IAAIiG,MAAM,8BAC9BjD,EAAU,IAAID,GACdsC,EAAYlE,GAASqC,GAAQ,IAAIH,GAAsBhN,OAAOmN,IAASA,EACzE4B,GAASA,EAAM5B,OAAM4B,EAAMc,iBAAmB3S,KAAKsH,WAElD,IAAIsL,EAAG,EAAGA,EAAGnG,EAAItK,SAAUyQ,EAC9BnD,EAAQW,UAAUpQ,KAAK6S,YAAYpG,EAAImG,GAAKf,EAAOC,WAIpC,MAAbA,IACFrC,EAAQI,WAAa7P,KAAKyS,WAAWX,GAAWjC,WAM3CJ,wBAIT,eAAQgC,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,mBAC/CyO,OAAS5Q,KAAKmB,MAAMK,MAAM,EAAGiQ,GAAWzR,KAAKmB,MAAMK,MAAMkQ,GACvD,IAAIlC,mCAIb,SAAoB1K,MACd9E,KAAK8S,cAAgB9S,KAAK+Q,cAAe,OAAOjM,SAC/CgO,aAAc,MAEbC,EAAW/S,KAAKgT,cAChB7R,EAAQnB,KAAKmB,MAEb8R,EAAMnO,gBAEPkO,cAAgBD,EAEjB/S,KAAKmB,OAASnB,KAAKmB,QAAUA,GAAuC,IAA9BA,EAAMwI,QAAQ3J,KAAKmB,aACtDgP,OAAOhP,EAAMK,MAAMxB,KAAKmB,MAAMgB,QAAS,GAAI,WAG3CnC,KAAK8S,YACLG,6BAIT,SAAenO,MACT9E,KAAKkT,YAAclT,KAAK+Q,cAAe,OAAOjM,EAAG9E,WAChDkT,WAAY,MACX5L,EAAQtH,KAAKsH,MAEb2L,EAAMnO,EAAG9E,kBAEVsH,MAAQA,SACNtH,KAAKkT,UAELD,2BAOT,SAAWxG,OAAaoF,yDAAmB,UAClC7R,KAAKmT,QACVnT,KAAKmT,QAAQ1G,EAAKzM,KAAM6R,GACxBpF,4BAOJ,SAAYoF,WACD7R,KAAKoT,UAAYpT,KAAKoT,SAASpT,KAAKmB,MAAOnB,KAAM6R,OACtD7R,KAAKqT,QAAUrT,KAAKqT,OAAOjB,WAAWP,4BAO5C,WACM7R,KAAKsT,QAAQtT,KAAKsT,OAAOtT,KAAKmB,MAAOnB,8BAI3C,SAAUmB,UACDnB,KAAKuT,OAASvT,KAAKuT,OAAOpS,EAAOnB,MAAQmB,yBAIlD,SAASsL,UACAzM,KAAKwT,MAAQxT,KAAKwT,MAAM/G,EAAKzM,MAAQyM,wBAI9C,SAAQc,EAAekG,EAAqB/D,EAAkBgE,OACtDC,EAAkBpG,EAAQkG,EAC1BxD,EAAoBjQ,KAAK4T,YAAYD,GAEvCxE,EAAyBnP,KAAK6T,gBAAgBtG,EAAOmG,UACpB,IAAIlE,GAAc,CACrDK,UAAWV,EAAiB5B,IAC3B6C,UAAUpQ,KAAK8T,OAAO3E,IACtBiB,UAAUpQ,KAAKmQ,OAAOT,EAAU,CAAC9K,OAAO,GAAOqL,aC3VtD,SAAS8D,GAAaC,MACR,MAARA,QACI,IAAItB,MAAM,0CAIdsB,aAAgBnF,OAAe2B,GAAMyD,aAErCrG,GAASoG,GAAcxD,GAAM0D,cAE7BF,aAAgBvF,MAAQuF,IAASvF,KAAa+B,GAAM2D,WAEpDH,aAAgBI,QAA0B,iBAATJ,GAAqBA,IAASI,OAAe5D,GAAM6D,aAEpFjG,MAAMC,QAAQ2F,IAASA,IAAS5F,MAAcoC,GAAM8D,cAEpD9D,GAAMG,QAAUqD,EAAKtL,qBAAqB8H,GAAMG,OAAeqD,EAE/DA,aAAgB/T,SAAiBuQ,GAAM+D,eAEvCP,aAAgBxD,GAAMG,OAAeqD,EAAKQ,aAE9CC,QAAQC,KAAK,0BAA2BV,GAEjCxD,GAAMG,QAKf,SAASgE,GAAYlE,MAEfD,GAAMG,QAAWF,aAAgBD,GAAMG,OAAS,OAAOF,MAGrDuD,GADNvD,mBAAWA,IACOuD,QAGdxD,GAAMG,QAAWqD,aAAgBxD,GAAMG,OAAS,OAAOqD,MAErDY,EAAcb,GAAYC,OAC3BY,EAAa,MAAM,IAAIlC,MAAM,4HAC3B,IAAIkC,EAAYnE,GDuTzBE,GAAOG,SAAW,CAChByC,OAAQ,SAAAsB,UAAKA,GACbrB,MAAO,SAAAqB,UAAKA,IAIdrE,GAAMG,OAASA,GCzTfH,GAAMmE,WAAaA,mBCzBbG,GAAkD,GACjD,OACA,0nIACA,KAMDC,yBAeQtE,kBACHuD,EAAsBvD,EAAtBuD,KAASgB,KAAavE,WAExBP,OAASyE,GAAW,CAACX,KAAAA,IAC1B3T,OAAOwL,OAAO7L,KAAMgV,mCAGtB,gBACOC,WAAY,OACZ/E,OAAOiB,8BAGd,eAAQM,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,cACpC,IAAZsP,GAAiBC,GAAS,QACvBuD,WAAY,EACVjV,KAAKkQ,OAAO4D,OAAOrC,EAASC,IAG9B,IAAIlC,sBAGb,kBACSxP,KAAKkQ,OAAO/O,QAChBnB,KAAKiV,YAAcjV,KAAKkV,WACvBlV,KAAKmV,gBACL,+BAGN,kBACSnV,KAAKkQ,OAAOkF,sCAGrB,kBACSC,QAAQrV,KAAKkQ,OAAO/O,QAAUnB,KAAKkV,sCAG5C,SAAazI,OAAaoF,yDAAmB,MACvC7R,KAAKiV,UAAW,OAAO,IAAIzF,OAEzBlI,EAAQtH,KAAKkQ,OAAO5I,MAEpBmI,EAAUzP,KAAKkQ,OAAO2C,YAAYpG,EAAKoF,UAEzCpC,EAAQC,WAAuC,IAA3B1P,KAAKoS,WAAWP,KACtCpC,EAAQC,SAAWD,EAAQE,YAAc,QACpCO,OAAO5I,MAAQA,GAGjBmI,EAAQC,UAAa1P,KAAKkV,YAAelV,KAAKsV,MAASzD,EAAMjN,QAChE6K,EAAQC,SAAW1P,KAAKmV,iBAE1B1F,EAAQG,MAAQH,EAAQC,WAAa1P,KAAKkV,gBACrCD,UAAYI,QAAQ5F,EAAQC,UAE1BD,wBAGT,+BACcS,QAAOC,4DAGrB,eACQV,EAAU,IAAID,UAEhBxP,KAAKiV,WAAajV,KAAKkV,kBAEtBD,WAAY,EACjBxF,EAAQC,SAAW1P,KAAKmV,iBAHsB1F,6BAOhD,+BACcS,QAAO0D,yDAGrB,+BACc1D,QAAOuC,0DAGrB,eAAchB,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,OAAQ0P,gDAC3D7R,KAAKkQ,OAAOqB,aAAaE,EAASC,EAAOG,kCAGlD,SAAiB7C,OAAmBhB,yDAAqBF,GACjDyH,EAAS,EACTC,EAASxV,KAAKmB,MAAMgB,OACpBsT,EAAW/V,KAAKqJ,IAAIrJ,KAAKsJ,IAAIgG,EAAWuG,GAASC,UAE/CxH,QACDF,QACAA,UACI9N,KAAK0V,WAAaD,EAAWF,OACjCzH,QACAA,UACI9N,KAAK0V,WAAaD,EAAWD,iBAEtBC,6BAIpB,iCACcvF,QAAOkC,iCAChBpS,KAAKqT,gBAAeA,QAAOjB,uDAGhC,gBACOlC,OAAOkB,8BAGd,iBACS,CACLlB,OAAQlQ,KAAKkQ,OAAO5I,MACpB2N,UAAWjV,KAAKiV,gBAIpB,SAAW3N,QACJ4I,OAAO5I,MAAQA,EAAM4I,YACrB+E,UAAY3N,EAAM2N,mBCtJrBU,yBAUQlF,cACVpQ,OAAOwL,OAAO7L,KAAMyQ,QACfG,OAAS,iCAGhB,kBACS5Q,KAAK4Q,kCAGd,kBACS5Q,KAAK4V,YAAc5V,KAAKmB,MAAQ,wBAGzC,gBACO0U,aAAc,OACdjF,OAAS,yBAGhB,eAAQa,yDAAiB,EAAGC,yDAAe1R,KAAK4Q,OAAOzO,mBAChDyO,OAAS5Q,KAAK4Q,OAAOpP,MAAM,EAAGiQ,GAAWzR,KAAK4Q,OAAOpP,MAAMkQ,GAC3D1R,KAAK4Q,SAAQ5Q,KAAK6V,aAAc,GAE9B,IAAIrG,kCAGb,SAAiBR,OAAmBhB,yDAAqBF,GACjDyH,EAAS,EACTC,EAASxV,KAAK4Q,OAAOzO,cAEnB6L,QACDF,QACAA,UACIyH,iBAIOC,+BAIpB,eAAc/D,yDAAiB,EAAGC,yDAAe1R,KAAK4Q,OAAOzO,OAAQ0P,yDAAqB,UACjFA,EAAML,KAAOxR,KAAK6V,aAAe7V,KAAK4Q,OAAOpP,MAAMiQ,EAASC,IAAU,2BAG/E,kBACS,6BAGT,SAAajF,OAAaoF,yDAAoB,GACtCpC,EAAU,IAAID,MAEhBxP,KAAK4Q,OAAQ,OAAOnB,MAElB0C,EAAWnS,KAAK8V,OAASrJ,EAAI,GAC7BsJ,EAAa5D,IAAanS,KAAK4V,aAAe/D,EAAMjN,OAASiN,EAAML,OAASK,EAAM5B,YACpF8F,IAAYtG,EAAQE,YAAc3P,KAAK8V,WACtClF,OAASnB,EAAQC,SAAW1P,KAAK8V,UACjCD,YAAcE,IAAelE,EAAML,KAAOK,EAAMjN,OAE9C6K,oCAGT,eACQA,EAAU,IAAID,UAChBxP,KAAK4Q,cAEJA,OAASnB,EAAQC,SAAW1P,KAAK8V,MAFdrG,6BAM1B,6DAAgDzP,KAAKmB,MAAMgB,OAClD,IAAI2N,GAAsB,8BAInC,SAAYG,UACNrC,GAASqC,KAAOA,EAAO,IAAIH,GAAsBhN,OAAOmN,KAErDA,EAAK0B,SAAS3R,4BAGvB,SAAQyM,EAAaoF,EAAqB5B,OAClCR,EAAUzP,KAAK6S,YAAYpG,EAAKoF,UAE1B,MAAR5B,IACFR,EAAQI,WAAa7P,KAAKyS,WAAWxC,GAAMJ,WAGtCJ,0BAGT,+BAEA,iBACS,CACLmB,OAAQ5Q,KAAK4Q,OACbiF,YAAa7V,KAAK6V,kBAItB,SAAWvO,GACTjH,OAAOwL,OAAO7L,KAAMsH,0BCpHlB0O,+BAOSC,yDAA4B,GAAIlG,yDAAc,kBACpDkG,OAASA,OACTlG,KAAOA,qCAGd,kBACS/P,KAAKiW,OAAOC,IAAIpT,QAAQ2F,KAAK,0BAItC,SAAQ0N,MACDrT,OAAOqT,IACRvI,GAASuI,KAAYA,EAAY,IAAIrG,GAAsBhN,OAAOqT,SAEhEC,EAAYpW,KAAKiW,OAAOjW,KAAKiW,OAAO9T,OAAO,GAC3CkU,EAAaD,IAEhBA,EAAUpG,OAASmG,EAAUnG,MAA0B,MAAlBmG,EAAUnG,OAEhDmG,EAAUpG,OAAUqG,EAAUrG,KAAOqG,EAAU9U,WAAWa,UAExDgU,aAAqBrG,GAEnBuG,EAEFD,EAAUE,OAAOH,EAAU7U,iBAGtB2U,OAAOzS,KAAK2S,QAEd,GAAIA,aAAqBH,EAAmB,IAC3B,MAAlBG,EAAUnG,aAERuG,EACGJ,EAAUF,OAAO9T,QAAsC,MAA5BgU,EAAUF,OAAO,GAAGjG,OACpDuG,EAAiBJ,EAAUF,OAAOO,SACnBzG,MAAQoG,EAAUpG,UAC5BuG,OAAOC,GAKZJ,EAAU7U,aAEZ6U,EAAUnG,KAAOmG,EAAUM,gBACtBR,OAAOzS,KAAK2S,8BAKvB,SAAUjG,QAEFA,aAAkBM,GAAM0D,sBACf,IAAIpE,GAAsB9P,KAAKsB,YAChCqQ,SAASzB,WAGjBT,EAAU,IAAID,GAEXoD,EAAG,EAAGA,EAAK5S,KAAKiW,OAAO9T,SAAWsN,EAAQG,OAAQgD,EAAI,KACvD8D,EAAQ1W,KAAKiW,OAAOrD,GAEpB+D,EAAgBzG,EAAO0G,eAAe1G,EAAO/O,MAAMgB,QACnD6N,EAAO0G,EAAM1G,KACf6G,YACQ,MAAR7G,KAEA2G,GAAiBA,EAAcxN,OAAS6G,MAGxC0G,aAAiBV,GAEjB9F,EAAO4G,OAAOnN,QAAQqG,IAAS,IAE/BP,EAAQW,UAAUF,EAAOG,mBAAmBL,IAE9C6G,EAAaH,aAAiBV,GAAqB9F,EAAO6G,QAAQ/G,IAGhE6G,EAAY,KACRrE,EAAcqE,EAAWpE,WAAWiE,GAC1ClE,EAAY5C,MAAO,EACnBH,EAAQW,UAAUoC,GAClBtC,EAAOU,QAAU4B,EAAY9C,aAGvBsH,EAAcN,EAAMpV,WAAWE,MAAMgR,EAAY7C,YAAYxN,QAC/D6U,GAAavH,EAAQW,UAAUF,EAAOC,OAAO6G,EAAa,CAAE/G,MAAM,UAEtER,EAAQW,UAAUF,EAAOC,OAAOuG,EAAMpV,WAAY,CAAE2O,MAAM,YAIvDR,qBAGT,iBACS,CACLwG,OAAQjW,KAAKiW,OAAOC,KAAI,SAAAe,UAAKA,EAAE3P,SAC/ByI,KAAM/P,KAAK+P,KACXC,KAAMhQ,KAAKgQ,KACXyG,WAAYzW,KAAKyW,iBAIrB,SAAWnP,OACD2O,EAAqB3O,EAArB2O,OAAWiB,KAAU5P,MAC7BjH,OAAOwL,OAAO7L,KAAMkX,QACfjB,OAASA,EAAOC,KAAI,SAAAiB,OACjBT,EAAQ,WAAYS,EACxB,IAAInB,EACJ,IAAIlG,UAEN4G,EAAMpP,MAAQ6P,EACPT,gCAIX,SAAapG,MACPtQ,KAAK+P,MAAQO,IAAQtQ,KAAKiW,OAAO9T,OAAQ,MAAO,WAE9CiV,EAAgB9G,EAAMtQ,KAAK+P,KAC7B6C,EAAG,EACAA,EAAK5S,KAAKiW,OAAO9T,QAAQ,KACxBuU,EAAQ1W,KAAKiW,OAAOrD,GACpBrC,EAAYmG,EAAMnE,YAAY6E,MAEhCV,EAAMpV,WAAY,KAGfiP,EAAW,QACdqC,YAGGqD,OAAOoB,OAAOzE,EAAI,MAGrBrC,EAAW,OAAOA,QAGjB,YC5JL0D,qIAKKxD,GACHA,EAAKuD,OAAMvD,EAAK2C,SAAW,SAACjS,UAAUA,EAAMmW,OAAO7G,EAAKuD,OAAS,iDACvDvD,UAPSE,IAY3BH,GAAMyD,aAAeA,sBCuBfC,oDAmBSzD,yDAAU,qBACrBA,EAAK8G,YAAclX,OAAOwL,OAAO,GAAIiJ,GAA2BrE,EAAK8G,0CAEhErD,EAAcpD,SACdL,sCAQP,eAASA,yDAAmC,GAC1CA,EAAK8G,YAAclX,OAAOwL,OAAO,GAAI7L,KAAKuX,YAAa9G,EAAK8G,0DAC9C9G,QACT+G,2CAIP,sBACQC,EAAOzX,KAAKuX,iBACbR,QAAU,QACVD,OAAS,QACTY,cAAgB,OAEjBC,EAAU3X,KAAKgU,QACd2D,GAAYF,UAEbG,GAAiB,EACjBC,GAAgB,EAEXhO,EAAE,EAAGA,EAAE8N,EAAQxV,SAAU0H,EAAG,IAC/B7J,KAAK8X,sCACDC,EAAIJ,EAAQnW,MAAMqI,GAClBmO,EAAS3X,OAAO0G,KAAKkR,EAAKH,QAAQI,QAAO,SAAAC,UAA8B,IAArBJ,EAAEpO,QAAQwO,MAElEH,EAAOI,MAAK,SAAC1S,EAAGoG,UAAMA,EAAE3J,OAASuD,EAAEvD,cAE7BgW,EAAQH,EAAO,MACjBG,EAAO,KAEHE,EAAc1D,kBAClBtB,OAAQ4E,EACR3C,KAAM2C,EAAK3C,KACXH,gBAAiB8C,EAAK9C,gBACtB7C,UAAW2F,EAAK3F,WACb2F,EAAKH,OAAOK,YAGbE,IACFJ,EAAKlB,QAAQvT,KAAK6U,GAGbJ,EAAKP,cAAcS,KAAQF,EAAKP,cAAcS,GAAS,IAC5DF,EAAKP,cAAcS,GAAO3U,KAAKyU,EAAKlB,QAAQ5U,OAAS,IAGvD0H,GAAKsO,EAAMhW,OAAS,iBACpB,aAIA2T,EAAO6B,EAAQ9N,GACfyO,EAAUxC,KAAQ2B,KAElB3B,IAAS5B,EAAcqE,aAKd,MAATzC,GAAyB,MAATA,KAKP,MAATA,GAAyB,MAATA,MAKhBA,IAAS5B,EAAcsE,YAAa,MACpC3O,IACFiM,EAAO6B,EAAQ9N,IACJ,MACXyO,GAAU,MAGNG,EAAMH,EACV,IAAIvD,GAAuB,CACzB1B,OAAQrT,KACRsV,KAAMtV,KAAKsV,KACXH,gBAAiBnV,KAAKmV,gBACtBnB,KAAMyD,EAAK3B,GACXZ,WAAY2C,IAEd,IAAIlC,GAAuB,CACzBG,KAAAA,EACAF,YAAagC,SAGZb,QAAQvT,KAAKiV,QAxBhBZ,GAAiBA,OALjBD,GAAkBA,YALbd,OAAOtT,KAAKxD,KAAK+W,QAAQ5U,4BAyCpC,qEAGI4U,QAAS/W,KAAK+W,QAAQb,KAAI,SAAApK,UAAKA,EAAExE,gBAIrC,SAAWA,OACFyP,EAA2BzP,EAA3ByP,QAAY2B,KAAepR,WAC7ByP,QAAQ7K,SAAQ,SAACJ,EAAG6M,UAAO7M,EAAExE,MAAQyP,EAAQ4B,iCACpCD,gCAMhB,4DAEO3B,QAAQ7K,SAAQ,SAAAJ,UAAKA,EAAEqF,mCAM9B,kBACSnR,KAAK+W,QAAQ6B,OAAM,SAAA9M,UAAKA,EAAE4J,sCAMnC,gBACOqB,QAAQ7K,SAAQ,SAAAJ,UAAKA,EAAEsF,wFAO9B,kBACSpR,KAAK+W,QAAQ8B,QAAO,SAACpM,EAAKX,UAAMW,EAAOX,EAAEsJ,gBAAe,SAGjE,SAAmBA,sCACKA,8BAMxB,kBAESpV,KAAK+W,QAAQ8B,QAAO,SAACpM,EAAKX,UAAMW,EAAOX,EAAE3K,QAAO,SAGzD,SAAWA,8BACKA,qCAMhB,SAAY8O,UACH6I,gDAAiB7I,GAAMG,UAAUpQ,KAAKqQ,oDAM/C,SAAgBuB,OAAYC,yDAAmB,GACvCkH,EAAY/Y,KAAK4W,eAAe5W,KAAKmB,MAAMgB,QAC3CsN,EAAU,IAAID,OACfuJ,EAAW,OAAOtJ,MAElB,IAAIkJ,EAAGI,EAAU5P,SAAWwP,EAAI,KAC7BK,EAAQhZ,KAAK+W,QAAQ4B,OACtBK,EAAO,UAENC,EAAeD,EAAMnG,YAAYjB,EAAIC,GAErCjC,EAAOqJ,EAAarJ,QAC1BH,EAAQW,UAAU6I,GAEdrJ,GAAQqJ,EAAatJ,YAAa,aAGjCF,6BAMT,sBAAagC,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,OACnD+W,EAAY,IAAIlD,UAClBvE,IAAYC,QAEXyH,sBAAsB1H,EAASC,GAAO,SAAC5F,EAAG6M,EAAIS,EAAUC,OACrDC,EAAaxN,EAAE8H,YAAYwF,EAAUC,GAC3CC,EAAWtJ,KAAOuJ,EAAKC,gBAAgBb,GACvCW,EAAWvJ,KAAOwJ,EAAKE,eAAed,GAClCW,aAAsBtD,KAAmBsD,EAAW7C,WAAakC,GAErEO,EAAU5C,OAAOgD,MARWJ,8BAiBhC,eAAczH,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,OAAQ0P,yDAAoB,MAClFJ,IAAYC,EAAO,MAAO,OAE1B9M,EAAQ,eAEPuU,sBAAsB1H,EAASC,GAAO,SAAC5F,EAAG4N,EAAGjI,EAASC,GACzD9M,GAASkH,EAAEyF,aAAaE,EAASC,EAAOG,MAGnCjN,iCAGT,SAAiB6R,WACXkD,EACKC,EAAG,EAAGA,EAAG5Z,KAAK8W,OAAO3U,SAAUyX,EAAI,KACpC5J,EAAOhQ,KAAK8W,OAAO8C,QACrB5J,GAAQyG,GACP,MADmBkD,EAAa3J,SAGhC2J,oCAIT,SAAoBE,cACZpK,EAAU,IAAID,MAChBxP,KAAKsV,MAAwB,MAAhBuE,EAAsB,OAAOpK,MAExCqK,EAAiB9Z,KAAK4W,eAAe5W,KAAKmB,MAAMgB,YACjD2X,EAAgB,OAAOrK,MAEtBsK,EAAkBD,EAAe3Q,MACjC6Q,EAAgC,MAAhBH,EAAuBA,EAAe7Z,KAAK+W,QAAQ5U,mBAEpE4U,QAAQvV,MAAMuY,EAAiBC,GACjC9N,SAAQ,SAAAJ,OACFA,EAAEwJ,MAAwB,MAAhBuE,EAAsB,KAE7BI,EAAoB,MAAbnO,EAAEiL,QAAkB,CAACjL,EAAEiL,QAAQ5U,QAAU,GAChD+X,EAAWpO,EAAEuE,yBAAFvE,EAAwBmO,GACzCE,EAAKvJ,QAAUsJ,EAASxK,SACxBD,EAAQW,UAAU8J,OAIjBzK,gCAIT,SAAgBa,WACV8J,EAAS,GACJzB,EAAG,EAAGA,EAAG3Y,KAAK+W,QAAQ5U,SAAUwW,EAAI,KACrCK,EAAQhZ,KAAK+W,QAAQ4B,GACrB0B,EAAgBD,EAAOjY,UAIzBmO,IAFJ8J,GAAUpB,EAAM7X,OAEEgB,aACT,CACLgH,MAAOwP,EACP2B,OAAQhK,EAAM+J,kCAOtB,SAAgB5D,UACPzW,KAAK+W,QACTvV,MAAM,EAAGiV,GACToC,QAAO,SAACvI,EAAKxE,UAAMwE,EAAOxE,EAAE3K,MAAMgB,SAAQ,wCAI/C,SAAuBsP,OAAiBC,yDAAc1R,KAAKmB,MAAMgB,OAAQ2C,yCACjEyV,EAAgBva,KAAK4W,eAAenF,MAEtC8I,EAAe,KACXC,EAAcxa,KAAK4W,eAAelF,GAElC+I,EAAcD,GAAeD,EAAcpR,QAAUqR,EAAYrR,MACjEuR,EAAoBH,EAAcD,OAClCK,EAAkBH,GAAeC,EACrCD,EAAYF,OACZta,KAAK+W,QAAQwD,EAAcpR,OAAOhI,MAAMgB,UAC1C2C,EAAG9E,KAAK+W,QAAQwD,EAAcpR,OAAQoR,EAAcpR,MAAOuR,EAAmBC,GAE1EH,IAAgBC,EAAa,KAE1B,IAAI9B,EAAG4B,EAAcpR,MAAM,EAAGwP,EAAG6B,EAAYrR,QAASwP,EACzD7T,EAAG9E,KAAK+W,QAAQ4B,GAAKA,EAAI,EAAG3Y,KAAK+W,QAAQ4B,GAAIxX,MAAMgB,QAIrD2C,EAAG9E,KAAK+W,QAAQyD,EAAYrR,OAAQqR,EAAYrR,MAAO,EAAGqR,EAAYF,gCAQ5E,eAAQ7I,yDAAgB,EAAGC,yDAAc1R,KAAKmB,MAAMgB,OAC5CyY,8CAA6BnJ,EAASC,eACvCyH,sBAAsB1H,EAASC,GAAO,SAAC5F,EAAG4N,EAAGN,EAAUC,GAC1DuB,EAAcxK,UAAUtE,EAAEgI,OAAOsF,EAAUC,OAEtCuB,iCAMT,SAAiB5L,OAAmBhB,yDAAqBF,GAGjD+M,EAAiB7a,KAAK4W,eAAe5H,IAAc,CAAC7F,MAAO,EAAGmR,OAAQ,GAElEQ,EAEND,EAFFP,OACOS,EACLF,EADF1R,MAEI6R,EAAahb,KAAK+W,QAAQgE,OAE3BC,EAAY,OAAOhM,MAEpBiM,EAAsBH,EAEE,IAAxBG,GAA6BA,EAAsBD,EAAW7Z,MAAMgB,SACtE8Y,EAAsBD,EAAWnH,gBAAgBiH,EAAkB/M,GAAeC,SAG9EkN,EAAgBD,IAAwBD,EAAW7Z,MAAMgB,OACzDgZ,EAAuC,IAAxBF,MAGhBE,IAAiBD,EAAe,OAAOlb,KAAKyZ,eAAesB,GAAmBE,MAE7EG,EAAmBF,EAAgBH,EAAkB,EAAIA,KAE3D/M,IAAcF,GAAgB,IAW5BsN,EAAmB,EAAG,KAClBC,EAAmBD,EAAiB,EACpCE,EAActb,KAAK+W,QAAQsE,GAC3BE,EAAgBD,EAAYzH,gBAAgB,EAAG/F,QAEhDwN,EAAYna,MAAMgB,QAAUoZ,IAAkBD,EAAYna,MAAMgB,cAC5DnC,KAAKyZ,eAAe2B,WAK3BI,EAAoBJ,EACfzC,EAAG6C,EAAmB7C,EAAK3Y,KAAK+W,QAAQ5U,SAAUwW,EAAI,KACvD8C,EAAezb,KAAK+W,QAAQ4B,GAC5B4C,EAAgBE,EAAa5H,gBAAgB,EAAG/F,QACjD2N,EAAata,MAAMgB,QAAUoZ,IAAkBE,EAAata,MAAMgB,cAC9DnC,KAAKyZ,eAAed,GAAM4C,MAMhC,IAAI5C,EAAGyC,EAAiB,EAAGzC,GAAM,IAAKA,EAAI,KACvCK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgB,EAAG/F,QAE1CkL,EAAM7X,MAAMgB,QAAUoZ,IAAkBvC,EAAM7X,MAAMgB,cAChDnC,KAAKyZ,eAAed,GAAMK,EAAM7X,MAAMgB,cAI1C6M,KAGLhB,IAAcF,IAAkBE,IAAcF,GAAsB,SAUlE4N,EACK/C,EAAGyC,EAAkBzC,EAAK3Y,KAAK+W,QAAQ5U,SAAUwW,KACpD3Y,KAAK+W,QAAQ4B,GAAIxX,MAAO,CAC1Bua,EAA+B/C,WAIC,MAAhC+C,EAAsC,KAClCC,EAAc3b,KAAK+W,QAAQ2E,GAC3BH,EAAgBI,EAAY9H,gBAAgB,EAAG/F,OAC/B,IAAlByN,GAAuBI,EAAYvG,cAAcjT,cAE5CnC,KAAKyZ,eAAeiC,GAAgCH,UAO3DK,EADAC,GAA8B,EAEzBlD,EAAGyC,EAAiB,EAAGzC,GAAM,IAAKA,EAAI,KACvCK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgBmF,EAAM7X,MAAMgB,OAAQ2L,OAC3DkL,EAAM7X,OAA2B,IAAlBoa,IAAqBK,EAA4BjD,GAC/C,IAAlB4C,EAAqB,IACnBA,IAAkBvC,EAAM7X,MAAMgB,cAEzBnC,KAAKyZ,eAAed,GAAM4C,EAGjCM,EAA6BlD,YAM/B3K,IAAcF,OAEX,IAAI6K,EAAGkD,EAA2B,EAAGlD,GAAMjZ,KAAKqJ,IAAIqS,EAAkBpb,KAAK+W,QAAQ5U,OAAO,KAAMwW,EAAI,KACjGK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgB,EAAG/F,IACzCgO,EAAkB9b,KAAKyZ,eAAed,GAAM4C,KAE9CO,EAAkB9M,EAAW,SAE7BuM,IAAkBvC,EAAM7X,MAAMgB,OAAQ,OAAO2Z,KAKjDD,GAA8B,SACzB7b,KAAKyZ,eAAeoC,GAA8B7b,KAAK+W,QAAQ8E,GAA4B1a,MAAMgB,UAKxG6L,IAAcF,IACd9N,KAAKsV,OAAStV,KAAKuR,iBAAmB+G,GAAQtY,KAAK+W,QAAQqE,WAEpD,KAGwB,MAA7BQ,SACK5b,KAAKyZ,eAAemC,OAIxB,IAAIjD,EAAGyC,EAAkBzC,EAAK3Y,KAAK+W,QAAQ5U,SAAUwW,EAAI,KACtDK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgB,EAAG/F,QAE1CkL,EAAM7X,MAAMgB,QAAUoZ,IAAkBvC,EAAM7X,MAAMgB,cAChDnC,KAAKyZ,eAAed,GAAM4C,SAI9B,KAGLvN,IAAcF,IAAmBE,IAAcF,GAAuB,SAMpEiO,EACAC,EACKrD,EAAGyC,EAAkBzC,EAAK3Y,KAAK+W,QAAQ5U,SAAUwW,EAAI,KACtDK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgB,EAAG/F,OAC3CyN,IAAkBvC,EAAM7X,MAAMgB,OAAQ,CACxC6Z,EAA4Bhc,KAAKyZ,eAAed,GAAM4C,EACtDQ,EAA8BpD,YAKC,MAA/BoD,GAAoE,MAA7BC,EAAmC,KACvE,IAAIrD,EAAGoD,EAA6BpD,EAAK3Y,KAAK+W,QAAQ5U,SAAUwW,EAAI,KACjEK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgB,EAAG/F,OAC3CyN,IAAkBvC,EAAM7X,MAAMgB,cACzBnC,KAAKyZ,eAAed,GAAM4C,SAG9BvN,IAAcF,GACnB9N,KAAKmB,MAAMgB,OACX6Z,MAGC,IAAIrD,EAAGjZ,KAAKqJ,IAAIqS,EAAkBpb,KAAK+W,QAAQ5U,OAAO,GAAIwW,GAAM,IAAKA,EAAI,KACtEK,EAAQhZ,KAAK+W,QAAQ4B,GACrB4C,EAAgBvC,EAAMnF,gBAAgBmF,EAAM7X,MAAMgB,OAAQ2L,OAC1C,IAAlByN,EAAqB,KACjBU,EAAajc,KAAKyZ,eAAed,GAAM4C,KACzCU,GAAcjN,EAAW,OAAOiN,iBAMnCjN,6BAIT,SAAa9J,UACJlF,KAAKkc,aAAahX,GAAM,+BAIjC,SAAcA,cACNiX,EAAUnc,KAAK0X,cAAcxS,UAC9BiX,EACEA,EAAQjG,KAAI,SAAAkG,UAAMC,EAAKtF,QAAQqF,MADjB,UAljBGzL,IA+jB5B,SAAS2H,GAASU,OACXA,EAAO,OAAO,MAEb7X,EAAQ6X,EAAM7X,aACZA,GAAS6X,EAAMnF,gBAAgB,EAAG/F,MAAoB3M,EAAMgB,OAbtE+R,GAAcpD,SAAW,CACvBwE,MAAM,EACNH,gBAAiB,KAEnBjB,GAAcqE,UAAY,IAC1BrE,GAAcsE,YAAc,KAC5BtE,GAAcoI,gBAAkBvH,GAChCb,GAAcqI,gBAAkB5G,GAUhCnF,GAAM0D,cAAgBA,OCzmBhBsI,+IAcKxc,KAAKgN,UAAYlK,OAAO9C,KAAK+P,MAAM5N,8BAM5C,SAASsO,GACPA,iBACEgM,GAAIzc,KAAKyc,IAAM,EACf1M,KAAM/P,KAAK+P,MAAQ,GAChBU,OAGDzD,EAAYlK,OAAO2N,EAAKgM,IAAIta,OACV,MAAlBsO,EAAKzD,YAAmBA,EAAYtN,KAAKsJ,IAAIgE,EAAWyD,EAAKzD,YACjEyD,EAAKzD,UAAYA,UAEX0P,EAAU5Z,OAAO2N,EAAKV,MAAMrC,SAASV,EAAW,KAChD2P,EAAQ7Z,OAAO2N,EAAKgM,IAAI/O,SAASV,EAAW,KAC9C4P,EAAiB,EACdA,EAAiBD,EAAMxa,QAAUwa,EAAMC,KAAoBF,EAAQE,MAAmBA,EAC7FnM,EAAKuD,KAAO2I,EAAMnb,MAAM,EAAGob,GAAgB9R,QAAQ,KAAM,OAAS,IAAIgC,OAAOE,EAAY4P,gDAE3EnM,2BAMhB,kBACSqI,uCAAoBzD,QAAQrV,KAAKmB,iCAG1C,SAAYsL,OACNoQ,EAAS,GACTC,EAAS,QAEgBrQ,EAAIzL,MAAM,qBAAuB,MAArD+b,OAAaC,cAClBA,IACFH,EAAS,IAAI/P,OAAOiQ,EAAY5a,QAAU6a,EAC1CF,EAAS,IAAIhQ,OAAOiQ,EAAY5a,QAAU6a,GAKrC,CAHPH,EAASA,EAAOhP,OAAO7N,KAAKgN,UAAW,KACvC8P,EAASA,EAAOjP,OAAO7N,KAAKgN,UAAW,+BAQzC,SAAWP,OAAaoF,yDAAmB,MACzCpF,EAAMqM,+CAAgBrM,EAAKoF,GAAO/G,QAAQ,MAAO,KAC5C9K,KAAKid,QAAS,OAAOxQ,UAEpBiQ,EAAU5Z,OAAO9C,KAAK+P,MAAMrC,SAAS1N,KAAKgN,UAAW,KACrD2P,EAAQ7Z,OAAO9C,KAAKyc,IAAI/O,SAAS1N,KAAKgN,UAAW,KAEjDjI,EAAM/E,KAAKmB,MACb+b,EAAU,GACLtK,EAAG,EAAGA,EAAGnG,EAAItK,SAAUyQ,EAAI,KAC5BuK,EAAUpY,EAAMmY,EAAUzQ,EAAImG,KACX5S,KAAKod,WAAWD,aAAlCN,OAAQC,OAEX1I,OAAO0I,GAAU9c,KAAK+P,KAAMmN,GAAWR,EAAQS,EAAQhb,OAAS,GAC3DiS,OAAOyI,GAAU7c,KAAKyc,GAAIS,GAAWP,EAAMQ,EAAQhb,OAAS,GAChE+a,GAAWzQ,EAAImG,UAGfsK,4BAMT,iBACQzQ,EAAMzM,KAAKmB,MAEXkc,EAAe5Q,EAAI6K,OAAO,YACV,IAAlB+F,GAAuB5Q,EAAItK,QAAUnC,KAAKsd,WAAY,OAAO,YAExCtd,KAAKod,WAAW3Q,aAAlCoQ,OAAQC,0BANF7C,2BAAAA,yBAQNja,KAAK+P,MAAQqE,OAAO0I,IAAW1I,OAAOyI,IAAW7c,KAAKyc,yEACvCxC,WAlGA/F,IAuG1B1D,GAAMgM,YAAcA,OCvGdrI,8CAgBS1D,kDAEN0D,EAAWrD,SACXL,sCAOP,SAASA,GACHA,EAAKuD,OAASvF,aAAagC,EAAKuD,KAChCvD,EAAKkH,UAASlH,EAAKuD,KAAOvD,EAAKkH,aAE7BG,EAASrH,EAAKqH,OACpBrH,EAAKqH,OAASzX,OAAOwL,OAAO,GAAIsI,EAAWoJ,sBAEvC9M,EAAK1H,MAAK0H,EAAKqH,OAAO0F,EAAEzN,KAAOU,EAAK1H,IAAI0U,eACxChN,EAAKzH,MAAKyH,EAAKqH,OAAO0F,EAAEf,GAAKhM,EAAKzH,IAAIyU,eACtChN,EAAK1H,KAAO0H,EAAKzH,KAAOyH,EAAKqH,OAAO0F,EAAEzN,OAASU,EAAKqH,OAAO0F,EAAEf,KAE/DhM,EAAKqH,OAAO4F,EAAE3N,KAAOU,EAAK1H,IAAI4U,WAAa,EAC3ClN,EAAKqH,OAAO4F,EAAEjB,GAAKhM,EAAKzH,IAAI2U,WAAa,EAErClN,EAAKqH,OAAO4F,EAAE3N,OAASU,EAAKqH,OAAO4F,EAAEjB,KACvChM,EAAKqH,OAAO8F,EAAE7N,KAAOU,EAAK1H,IAAI8U,UAC9BpN,EAAKqH,OAAO8F,EAAEnB,GAAKhM,EAAKzH,IAAI6U,YAGhCxd,OAAOwL,OAAO4E,EAAKqH,OAAQA,GAG3BzX,OAAO0G,KAAK0J,EAAKqH,QAAQ5L,SAAQ,SAAA4R,OACzBhS,EAAI2E,EAAKqH,OAAOgG,GAChB,YAAahS,IAAIA,EAAEmR,QAAUxM,EAAKwM,yDAG5BxM,6BAMhB,qBACQsN,EAAO/d,KAAK+d,wBADL9D,2BAAAA,6FAGcA,OACvBja,KAAK0V,YACL1V,KAAKge,YAAYhe,KAAKmB,QAAkB,MAAR4c,IACnB,MAAZ/d,KAAK+I,KAAe/I,KAAK+I,KAAOgV,KACpB,MAAZ/d,KAAKgJ,KAAe+U,GAAQ/d,KAAKgJ,iCAIxC,SAAayD,UACJzM,KAAKuT,OAAOvT,KAAKwT,MAAM/G,EAAKzM,MAAOA,MAAM2J,QAAQ8C,IAAQ,oBAIlE,kBACSzM,KAAKie,gBAEd,SAAUF,QACHE,WAAaF,0BAMpB,kBACS/d,KAAK0V,iDAAgC,UAE9C,SAAgBvU,mCACKA,kBAzFE+S,IA4FzBC,GAAWrD,SAAW,CACpB6G,QAAS,cACTpE,OAAQ,SAAAwK,SAKC,CAJKjb,OAAOib,EAAKF,WAAWnQ,SAAS,EAAG,KACjC5K,OAAOib,EAAKJ,WAAa,GAAGjQ,SAAS,EAAG,KACzCqQ,EAAKN,eAEQhV,KAAK,MAEjC+K,MAAO,SAAA/G,YACsBA,EAAIhL,MAAM,QAA9Byc,OAAKC,OAAOC,cACZ,IAAI3P,KAAK2P,EAAMD,EAAQ,EAAGD,KAGrC/J,GAAWoJ,mBAAqB,iBAAO,CACrCK,EAAG,CACD5J,KAAMwI,GACNzM,KAAM,EACN0M,GAAI,GACJzP,UAAW,GAEb0Q,EAAG,CACD1J,KAAMwI,GACNzM,KAAM,EACN0M,GAAI,GACJzP,UAAW,GAEbwQ,EAAG,CACDxJ,KAAMwI,GACNzM,KAAM,KACN0M,GAAI,QAKRjM,GAAM2D,WAAaA,OCrHbkK,4FAUE9Q,MAEFA,EAAQvN,KAAKse,sBACb,MAAOC,WAEO,MAAThR,EACLA,EACAvN,KAAKmB,MAAMgB,iCAIf,eACMqL,MAEFA,EAAMxN,KAAKwe,oBACX,MAAOD,WAEK,MAAP/Q,EACLA,EACAxN,KAAKmB,MAAMgB,6BAIf,SAAQoL,EAAeC,MACR,MAATD,GAAwB,MAAPC,IACnBD,IAAUvN,KAAKye,gBAAkBjR,IAAQxN,KAAK0e,uBAGzCC,cAAcpR,EAAOC,GAC1B,MAAO+Q,kCAIX,SAAehR,EAAeC,0BAE9B,kBAAkC,4BAElC,SAAYoR,gCAEZ,qBAIFpO,GAAM6N,YAAcA,OChEdQ,8CAUSja,4CAENA,MAAQA,IACRka,UAAY,yCAKnB,kBACS9e,KAAK4E,MAAMma,YACd/e,KAAK4E,MAAMma,cACXxZ,+BAON,kBAESvF,KAAK4E,QAAU5E,KAAKgf,YAAYC,iDAOzC,kBACSjf,KAAK4E,MAAM6Z,gDAOpB,kBACSze,KAAK4E,MAAM8Z,0CAOpB,SAAenR,EAAeC,QACvB5I,MAAMsa,kBAAkB3R,EAAOC,sBAOtC,kBACSxN,KAAK4E,MAAMzD,WAEpB,SAAWA,QACJyD,MAAMzD,MAAQA,4BAOrB,SAAYyd,cACVve,OAAO0G,KAAK6X,GACT1S,SAAQ,SAAAiT,UAAS5F,EAAK6F,oBAAoBP,EAAgBQ,WAAWF,GAAQP,EAASO,mCAO3F,sBACE9e,OAAO0G,KAAK/G,KAAK8e,WACd5S,SAAQ,SAAAiT,UAAShF,EAAKiF,oBAAoBD,yCAI/C,SAAqBA,EAAeG,GAC9Btf,KAAK8e,UAAUK,UACZva,MAAM2a,oBAAoBJ,EAAOnf,KAAK8e,UAAUK,WAC9Cnf,KAAK8e,UAAUK,IAGpBG,SACG1a,MAAM4a,iBAAiBL,EAAOG,QAC9BR,UAAUK,GAASG,UA/FAjB,IAmG9BQ,GAAgBQ,WAAa,CAC3BI,gBAAiB,UACjB7a,MAAO,QACP8a,KAAM,OACNC,MAAO,QACPC,MAAO,QACPtM,OAAQ,QAIV9C,GAAMqO,gBAAkBA,OC9GlBgB,uJAMIC,EAAO9f,KAAKgf,YACZe,EAAYD,EAAKE,cAAgBF,EAAKE,sBACrCD,GAAaA,EAAUE,8CAOhC,eACQH,EAAO9f,KAAKgf,YACZe,EAAYD,EAAKE,cAAgBF,EAAKE,sBACrCD,GAAc/f,KAAKse,sBAAwBxb,OAAOid,GAAW5d,oCAOtE,SAAeoL,EAAeC,MACvBxN,KAAKgf,YAAYkB,iBAEhBC,EAAQngB,KAAKgf,YAAYkB,cAC/BC,EAAMC,SAASpgB,KAAK4E,MAAMyb,YAAcrgB,KAAK4E,MAAO2I,GACpD4S,EAAMG,OAAOtgB,KAAK4E,MAAM2b,WAAavgB,KAAK4E,MAAO4I,OAC3CsS,EAAO9f,KAAKgf,YACZe,EAAYD,EAAKE,cAAgBF,EAAKE,eACxCD,IACFA,EAAUS,kBACVT,EAAUU,SAASN,wBAQvB,kBAESngB,KAAK4E,MAAM8b,iBAEpB,SAAWvf,QACJyD,MAAM8b,YAAcvf,SAhDgB0d,IAqD7CrO,GAAMqP,+BAAiCA,mBC5CjCnP,yBAiCSlH,EAA0DiH,mBAChEjH,GACFA,aAAc6U,GAAe7U,EAC7BA,EAAGmX,mBAAoC,UAAfnX,EAAGoX,SAAsC,aAAfpX,EAAGoX,QAA0B,IAAIf,GAA+BrW,GACnH,IAAIqV,GAAgBrV,QACjB0G,OAASyE,GAAWlE,QAEpBoQ,WAAa,QACbjQ,OAAS,QACTkQ,eAAiB,QAEjBC,eAAiB/gB,KAAK+gB,eAAe9P,KAAKjR,WAC1CghB,SAAWhhB,KAAKghB,SAAS/P,KAAKjR,WAC9BihB,UAAYjhB,KAAKihB,UAAUhQ,KAAKjR,WAChCkhB,QAAUlhB,KAAKkhB,QAAQjQ,KAAKjR,WAC5BmhB,SAAWnhB,KAAKmhB,SAASlQ,KAAKjR,WAC9BohB,SAAWphB,KAAKohB,SAASnQ,KAAKjR,WAC9BqhB,YAAcrhB,KAAKqhB,YAAYpQ,KAAKjR,WACpCshB,oBAAsBthB,KAAKshB,oBAAoBrQ,KAAKjR,WAEpDuhB,mBAGAC,mBACAP,yCAIP,kBACSjhB,KAAKkQ,OAAO8D,UASrB,SAAUA,OACJhU,KAAKyhB,WAAWzN,MAEdA,aAAgBxD,GAAMG,QAAW3Q,KAAKkQ,OAAOsE,cAAgBT,GAAYC,QAKzE9D,EAASyE,GAAW,CAACX,KAAAA,IAC3B9D,EAAOkF,cAAgBpV,KAAKkQ,OAAOkF,mBAC9BlF,OAASA,YANPA,OAAOwR,cAAc,CAAC1N,KAAAA,8BAV/B,SAAYA,UACK,MAARA,GACLA,IAAShU,KAAKkQ,OAAO8D,MACrBA,IAASvF,MAAQzO,KAAKkQ,kBAAkBiE,sBAiB5C,kBACSnU,KAAK4Q,YAGd,SAAWnE,QACJyD,OAAO/O,MAAQsL,OACfkV,qBACAN,yCAIP,kBACSrhB,KAAK8gB,oBAGd,SAAmBrU,QACZyD,OAAOkF,cAAgB3I,OACvBkV,qBACAN,sCAIP,kBACSrhB,KAAKkQ,OAAO+N,gBAGrB,SAAgBlZ,QACTmL,OAAO+N,WAAalZ,OACpB4c,qBACAN,yCAOP,gBACO7X,GAAGoY,WAAW,CACjBnC,gBAAiBzf,KAAK+gB,eACtBnc,MAAO5E,KAAKghB,SACZtB,KAAM1f,KAAKkhB,QACXvB,MAAO3f,KAAKohB,SACZxB,MAAO5f,KAAKmhB,SACZ7N,OAAQtT,KAAKihB,yCAQjB,WACMjhB,KAAKwJ,IAAIxJ,KAAKwJ,GAAGqY,yCAOvB,SAAYC,8BAAe7H,mCAAAA,wBACnB8H,EAAY/hB,KAAK6gB,WAAWiB,GAC7BC,GAELA,EAAU7V,SAAQ,SAAA8V,UAAKA,eAAK/H,kCAO9B,kBACSja,KAAKiiB,gBACVjiB,KAAKkiB,mBAELliB,KAAKwJ,GAAGiV,sCAIZ,kBACSze,KAAKiiB,gBACVjiB,KAAKkiB,mBAELliB,KAAKwJ,GAAGkV,kBAEZ,SAAepO,GACRtQ,KAAKwJ,IAAOxJ,KAAKwJ,GAAG2Y,gBAEpB3Y,GAAG4Y,OAAO9R,EAAKA,QACfyQ,gDAOP,WACM/gB,KAAKmB,QAAUnB,KAAKwJ,GAAGrI,OACzBsT,QAAQC,KAAK,gHAEV2N,WAAa,CAChB9U,MAAOvN,KAAKye,eACZjR,IAAKxN,KAAKgP,sCAKd,gBACOkB,OAAO/O,MAAQnB,KAAKwJ,GAAGrI,WACvByP,OAAS5Q,KAAKkQ,OAAO/O,mCAI5B,eACQmhB,EAAmBtiB,KAAKkQ,OAAOkF,cAC/BmN,EAAWviB,KAAKkQ,OAAO/O,MACvBqhB,EAAaxiB,KAAKoV,gBAAkBkN,GACxCtiB,KAAKmB,QAAUohB,OAEZzB,eAAiBwB,OACjB1R,OAAS2R,EAEVviB,KAAKwJ,GAAGrI,QAAUohB,IAAUviB,KAAKwJ,GAAGrI,MAAQohB,GAC5CC,GAAWxiB,KAAKyiB,iDAItB,SAAehS,OACLuD,EAAsBvD,EAAtBuD,KAAS0O,KAAajS,MAExBkS,GAAc3iB,KAAKyhB,WAAWzN,GAC9B4O,GAAc1U,GAAelO,KAAKkQ,OAAQwS,GAE5CC,IAAY3iB,KAAKgU,KAAOA,GACxB4O,GAAY5iB,KAAKkQ,OAAOwR,cAAcgB,IAEtCC,GAAcC,IAAY5iB,KAAK2hB,4CAIrC,SAAc3S,GACK,MAAbA,SACCA,UAAYA,OAGZ6T,mBAAmB7T,sCAO1B,SAAoBA,mBACb8T,0BACAZ,mBAAqBlT,OACrBiT,gBAAkBc,YAAW,WAC3B9K,EAAKzO,KACVyO,EAAKjJ,UAAYiJ,EAAKiK,mBACtBjK,EAAK6K,wBACJ,qCAOL,gBACOE,WAAW,SAAUhjB,KAAKijB,aAC3BjjB,KAAKkQ,OAAOwF,YAAY1V,KAAKgjB,WAAW,WAAYhjB,KAAKijB,+CAO/D,WACMjjB,KAAKiiB,kBACPiB,aAAaljB,KAAKiiB,wBACXjiB,KAAKiiB,4CAKhB,gBACOjT,UAAYhP,KAAKkQ,OAAO2D,gBAAgB7T,KAAKgP,UAAWlB,uCAI/D,WACM9N,KAAKye,iBAAmBze,KAAKgP,gBAC5BqS,gCAIP,SAAIS,EAAYxC,UACTtf,KAAK6gB,WAAWiB,KAAK9hB,KAAK6gB,WAAWiB,GAAM,SAC3CjB,WAAWiB,GAAIte,KAAK8b,GAClBtf,wBAIT,SAAK8hB,EAAYxC,OACVtf,KAAK6gB,WAAWiB,GAAK,OAAO9hB,SAC5Bsf,gBACItf,KAAK6gB,WAAWiB,GAChB9hB,SAEHmjB,EAASnjB,KAAK6gB,WAAWiB,GAAInY,QAAQ2V,UACvC6D,GAAU,GAAGnjB,KAAK6gB,WAAWiB,GAAIzK,OAAO8L,EAAQ,GAC7CnjB,6BAIT,SAAUue,WACH0E,YAAc1E,OACduE,sBAGA9iB,KAAKqiB,WAAY,OAAOriB,KAAKwhB,kBAE5B/R,EAAU,IAAIV,QAEbvF,GAAGrI,MAAOnB,KAAKgP,eAEf7N,MAAOnB,KAAKqiB,YAEbe,EAAcpjB,KAAKkQ,OAAO8C,cAE1BsH,EAASta,KAAKkQ,OAAOmH,OACzB5H,EAAQN,eACRM,EAAQ4T,QAAQlhB,OAChBsN,EAAQC,SACRD,EAAQiE,iBAAiB4G,OAIrB5G,EAAkB0P,IAAgBpjB,KAAKkQ,OAAO8C,cAClDvD,EAAQiE,gBACR5F,GAEIkB,EAAYhP,KAAKkQ,OAAO2D,gBAC5BpE,EAAQN,eAAiBmL,EACzB5G,QAGGiO,qBACA2B,aAAatU,UACXhP,KAAKijB,qCAId,WACMjjB,KAAKmB,QAAUnB,KAAKwJ,GAAGrI,YACpBqgB,mBAEFtR,OAAOkB,gBACPuQ,qBACAZ,wCAIP,SAASe,GACPA,EAAGyB,iBACHzB,EAAG0B,0CAIL,SAAU1B,QACHR,8CAIP,SAAUQ,QACHR,6CAIP,gBACOmC,qBAEA5C,WAAW1e,OAAS,SAElBnC,KAAKwJ,YAKhBgH,GAAME,UAAYA,OC3XZgT,qIAOKjT,GACHA,EAAKkT,OAAMlT,EAAKuD,KAAO,IAAIlH,OAAO2D,EAAKkT,KAAK,GAAGxhB,sDAErCsO,6BAMhB,+CAAewJ,2BAAAA,yBACNja,KAAK2jB,KAAKC,MAAK,SAAArF,UAAKA,EAAE5U,QAAQsO,EAAK7C,gBAAkB,2EACtC6E,WAlBD/F,IAuBzB1D,GAAMkT,WAAaA,OCGbrP,8CA4BS5D,kDAEN4D,EAAavD,SACbL,sCAOP,SAASA,gDACOA,QACToT,+CAIP,eAEMtW,EAAQ,KAAOvN,KAAK8jB,cAAgB,WAAa,IAIjDtW,GAAOxN,KAAK+jB,MACd,IAAM9V,GAAajO,KAAKgkB,OAAS,SAAWhkB,KAAK+jB,MAAQ,MACzD,IAAM,SAEHE,mBAAqB,IAAIpV,OAAOtB,EAPtB,oBAOyCC,QACnD0W,cAAgB,IAAIrV,OAAOtB,EAPtB,OAOoCC,QACzC2W,kBAAoB,IAAItV,OAAO,IAClC7O,KAAKokB,WAAWlO,IAAIjI,IAAcxF,KAAK,IACzC,IAAK,UACA4b,0BAA4B,IAAIxV,OAAOZ,GAAajO,KAAKskB,oBAAqB,+CAIrF,SAA4BnjB,UACnBA,EAAM2J,QAAQ9K,KAAKqkB,0BAA2B,8CAIvD,SAA4BljB,OAEpBojB,EAAQpjB,EAAMM,MAAMzB,KAAKgkB,cAC/BO,EAAM,GAAKA,EAAM,GAAGzZ,QAAQ,wBAAyB9K,KAAKskB,oBACnDC,EAAM9b,KAAKzI,KAAKgkB,gCAMzB,SAAWvX,gCAAgBwN,mCAAAA,sFACFja,KAAKwkB,2BAA2B/X,EAAI3B,QAAQ9K,KAAKmkB,kBAAmBnkB,KAAKgkB,gBAAY/J,oCAI9G,SAAkBwC,WAAYgI,0DACxBjY,EAAQ,EAEH8D,EAAM,EAAGA,EAAMmM,IAAMnM,EACxBtQ,KAAK4Q,OAAOjH,QAAQ3J,KAAKskB,mBAAoBhU,KAASA,MACtD9D,EACEiY,IAAoBhI,GAAMzc,KAAKskB,mBAAmBniB,gBAInDqK,2CAIT,eAA2BhL,yDAAcxB,KAAK4Q,cACrC5Q,KAAK0kB,iBAAiB1kB,KAAKwkB,2BAA2BhjB,GAAOW,QAAQ,+BAM9E,eAAcsP,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,OAAQ0P,2CAC/C7R,KAAK2kB,2BAA2BlT,EAASC,oBAA3DD,OAASC,OAEH1R,KAAKwkB,6EAA8C/S,EAASC,EAAOG,kCAM5E,SAAgBD,OAAYC,yDAAmB,OACxC7R,KAAKskB,mBAAoB,2DAA4B1S,EAAIC,OAExD+S,EAAsB/S,EAAM5B,MAAQ4B,EAAMc,iBAC9Cd,EAAMc,iBAAiB/B,OACvB5Q,KAAK4Q,OACDiU,EAAgC7kB,KAAK8kB,0BAA0BF,QAChEhU,OAAS5Q,KAAKwkB,2BAA2BxkB,KAAKmB,WAE7C4jB,sDAAqCnT,EAAIC,QAE1CjB,OAAS5Q,KAAKglB,2BAA2BhlB,KAAK4Q,YAC7CqU,EAAkBpT,EAAM5B,MAAQ4B,EAAMc,iBAC1Cd,EAAMc,iBAAiB/B,OACvB5Q,KAAK4Q,OACDsU,EAA4BllB,KAAK8kB,0BAA0BG,UAEjEF,EAAclV,YAAcqV,EAA4BL,GAAiC7kB,KAAKskB,mBAAmBniB,OACjH4iB,EAAcnV,MAAQmV,EAAcpV,aAAeiC,IAAO5R,KAAKskB,mBACxDS,sCAIT,SAAsBzU,MAChBtQ,KAAKskB,mBAAoB,KACrBa,EAAa7U,EAAMtQ,KAAKskB,mBAAmBniB,OAAS,EACpDijB,EAAeplB,KAAKmB,MAAMwI,QAAQ3J,KAAKskB,mBAAoBa,MAC7DC,GAAgB9U,EAAK,OAAO8U,SAG1B,4CAGV,SAA4BrV,EAAc0M,OAClC4I,EAAyBrlB,KAAKslB,qBAAqBvV,GACrDsV,GAA0B,IAAGtV,EAAOsV,OAElCE,EAAuBvlB,KAAKslB,qBAAqB7I,UACnD8I,GAAwB,IAAG9I,EAAK8I,EAAuBvlB,KAAKskB,mBAAmBniB,QAC5E,CAAC4N,EAAM0M,yBAMhB,eAAQhL,yDAAiB,EAAGC,yDAAe1R,KAAKmB,MAAMgB,SACjCnC,KAAK2kB,2BAA2BlT,EAASC,aAA3DD,OAASC,WAEJ8T,EAAiBxlB,KAAKmB,MAAMK,MAAM,EAAGiQ,GACrCgU,EAAgBzlB,KAAKmB,MAAMK,MAAMkQ,GAEjCmT,EAAgC7kB,KAAK0kB,iBAAiBc,EAAerjB,aACtEyO,OAAS5Q,KAAKglB,2BAA2BhlB,KAAKwkB,2BAA2BgB,EAAiBC,QACzFP,EAA4BllB,KAAK8kB,0BAA0BU,UAE1D,IAAIhW,GAAc,CACvBK,WAAYqV,EAA4BL,GAAiC7kB,KAAKskB,mBAAmBniB,wCAOrG,SAAiB6M,EAAmBhB,OAC7BhO,KAAKskB,mBAAoB,OAAOtV,SAE7BhB,QACDF,QACAA,QACAA,OACG4X,EAAqB1lB,KAAKslB,qBAAqBtW,EAAY,MAC7D0W,GAAsB,EAAG,KACrBC,EAAwBD,EAAqB1lB,KAAKskB,mBAAmBniB,UACvE6M,EAAY2W,GACd3lB,KAAKmB,MAAMgB,QAAUwjB,GACrB3X,IAAcF,UAEP4X,aAKR5X,QACAA,OACG8X,EAAsB5lB,KAAKslB,qBAAqBtW,MAClD4W,GAAuB,SAClBA,EAAsB5lB,KAAKskB,mBAAmBniB,cAKpD6M,4BAMT,SAAY6C,OAINgU,GAHWhU,EAAMjN,MAAQ5E,KAAKikB,mBAAqBjkB,KAAKkkB,eAGzCpd,KAAK9G,KAAKwkB,2BAA2BxkB,KAAKmB,WAEzD0kB,EAAO,KAEHC,EAAS9lB,KAAK8lB,OACpBD,EAAQA,IAAUhd,MAAMid,KAET,MAAZ9lB,KAAK+I,KAAe/I,KAAK+I,KAAO,GAAK/I,KAAK+I,KAAO/I,KAAK8lB,UAE1C,MAAZ9lB,KAAKgJ,KAAehJ,KAAKgJ,KAAO,GAAKhJ,KAAK8lB,QAAU9lB,KAAKgJ,YAGvD6c,mDAA0BhU,2BAMnC,cACM7R,KAAKmB,MAAO,KACR2kB,EAAS9lB,KAAK8lB,OAChBC,EAAWD,EAGC,MAAZ9lB,KAAK+I,MAAagd,EAAWrmB,KAAKsJ,IAAI+c,EAAU/lB,KAAK+I,MACzC,MAAZ/I,KAAKgJ,MAAa+c,EAAWrmB,KAAKqJ,IAAIgd,EAAU/lB,KAAKgJ,MAErD+c,IAAaD,IAAQ9lB,KAAKoV,cAAgBtS,OAAOijB,QAEjDC,EAAYhmB,KAAKmB,MAEjBnB,KAAKimB,iBAAgBD,EAAYhmB,KAAKkmB,gBAAgBF,IACtDhmB,KAAKmmB,qBAAoBH,EAAYhmB,KAAKomB,oBAAoBJ,SAE7DpV,OAASoV,gFAOlB,SAAiB7kB,OACTojB,EAAQvkB,KAAKwkB,2BAA2BrjB,GAAOM,MAAMzB,KAAKgkB,cAGhEO,EAAM,GAAKA,EAAM,GAAGzZ,QAAQ,mBAAmB,SAAC9J,EAAOqlB,EAAMC,EAAOtJ,UAAQqJ,EAAOrJ,KAE/E7b,EAAMgB,SAAW,MAAM2E,KAAKyd,EAAM,MAAKA,EAAM,GAAKA,EAAM,GAAK,KAE7DA,EAAMpiB,OAAS,IACjBoiB,EAAM,GAAKA,EAAM,GAAGzZ,QAAQ,MAAO,IAC9ByZ,EAAM,GAAGpiB,SAAQoiB,EAAMpiB,OAAS,IAGhCnC,KAAKglB,2BAA2BT,EAAM9b,KAAKzI,KAAKgkB,2CAIzD,SAAqB7iB,OACdA,EAAO,OAAOA,MAEbojB,EAAQpjB,EAAMM,MAAMzB,KAAKgkB,cAC3BO,EAAMpiB,OAAS,GAAGoiB,EAAM/gB,KAAK,IACjC+gB,EAAM,GAAKA,EAAM,GAAG1W,OAAO7N,KAAK+jB,MAAO,KAChCQ,EAAM9b,KAAKzI,KAAKgkB,kCAMzB,kBACShkB,KAAKwkB,2BACVxkB,KAAKkmB,gBACHlmB,KAAKmB,QACN2J,QAAQ9K,KAAKgkB,MAAO,UAGzB,SAAmB5O,sCACKA,EAActK,QAAQ,IAAK9K,KAAKgkB,wCAMxD,kBACS5P,OAAOpU,KAAKoV,oBAGrB,SAAgB1I,sCACQ5J,OAAO4J,gCAI/B,kBACS1M,KAAKie,gBAGd,SAAY6H,QACL7H,WAAa6H,6BAOpB,kBACS9lB,KAAKumB,QACG,MAAZvmB,KAAK+I,KAAe/I,KAAK+I,IAAM,GACnB,MAAZ/I,KAAKgJ,KAAehJ,KAAKgJ,IAAM,SAlUX2H,IAqU3B0D,GAAavD,SAAW,CACtBkT,MAAO,IACPM,mBAAoB,GACpBF,WAAY,CAAC,KACbL,MAAO,EACPwC,QAAQ,EACRN,gBAAgB,EAChBE,oBAAoB,GAItB3V,GAAM6D,aAAeA,OC1WfE,qIAKK9D,GACHA,EAAKuD,OAAMvD,EAAK2C,SAAW3C,EAAKuD,mDACtBvD,UAPWE,IAY7BH,GAAM+D,eAAiBA,2DCAjBD,8CAWS7D,2DAEN6D,EAAcxD,SACdL,KAGA+V,YAAc,yCAMrB,SAAS/V,gDACOA,GACV,SAAUA,SAEPgW,cAAgBrY,MAAMC,QAAQoC,EAAKuD,MACtCvD,EAAKuD,KAAKkC,KAAI,SAAAwH,UAAK/I,GAAW+I,MAC9B,kCAON,SAAgB9L,OAAYC,yDAAmB,GACvCpC,EAAUzP,KAAK0mB,eAAe9U,EAAIC,UAEpC7R,KAAKwmB,aACP/W,EAAQW,UAAUpQ,KAAKwmB,YAAY3T,YAAYjB,EAAIC,IAG9CpC,gCAGT,eAAgB0C,yDAAiB,GAAIN,yDAAmB,GAChD8U,EAAsB9U,EAAM5B,MAAkC,MAA1B4B,EAAMc,iBAC9Cd,EAAMc,iBAAiB/B,OACvB5Q,KAAKmB,MACDylB,EAAa5mB,KAAKgT,cAClB6T,EAAchV,EAAM5B,MAAkC,MAA1B4B,EAAMc,iBAEtCd,EAAMc,iBAAiBmU,eACvBF,EACIG,EAAYH,EAAWplB,MAAMqlB,EAAY1kB,QACzC6kB,EAAWhnB,KAAKwmB,YAChB/W,EAAU,IAAID,GAEdyX,EAAgBD,GAAYA,EAAS1f,cAGtCkf,YAAcxmB,KAAKknB,WAAW/U,mBAAeN,IAG9C7R,KAAKwmB,eACHxmB,KAAKwmB,cAAgBQ,EAAU,SAE5BR,YAAYrV,QAEb0V,EAAa,KAETjJ,EAAI5d,KAAKwmB,YAAYrW,OAAO0W,EAAa,CAACrV,KAAK,IACrD/B,EAAQI,UAAY+N,EAAElO,SAASvN,OAASwkB,EAAoBxkB,OAG1D4kB,IAEFtX,EAAQI,WAAa7P,KAAKwmB,YAAYrW,OAAO4W,EAAW,CAACvV,KAAK,EAAMvB,MAAM,IAAOJ,qBAK9E2W,YAAYlf,MAAQ2f,SAItBxX,oCAGT,eACQA,EAAUzP,KAAK0mB,4CAEjB1mB,KAAKwmB,aACP/W,EAAQW,UAAUpQ,KAAKwmB,YAAYnW,sBAG9BZ,4BAMT,SAAW0C,OAAkBN,yDAAmB,UACvC7R,KAAKmnB,SAAShV,EAAUnS,KAAM6R,6BAMvC,0CAAeoI,2BAAAA,6FACcA,OACxBja,KAAKwmB,qBAAoBA,aAAYpU,mBAAc6H,yBAMxD,WACMja,KAAKwmB,aAAaxmB,KAAKwmB,YAAYrV,aAClCsV,cAAcva,SAAQ,SAAAwR,UAAKA,EAAEvM,8BAMpC,kBACSnR,KAAKwmB,YAAcxmB,KAAKwmB,YAAYrlB,MAAQ,QAGrD,SAAWA,8BACKA,sCAMhB,kBACSnB,KAAKwmB,YAAcxmB,KAAKwmB,YAAYpR,cAAgB,QAG7D,SAAmBA,sCACKA,mCAMxB,kBACSpV,KAAKwmB,YAAcxmB,KAAKwmB,YAAYvI,WAAa,QAI1D,SAAgB9c,OACViU,EAAgBtS,OAAO3B,GAGvBnB,KAAKwmB,mBACFA,YAAYvI,WAAa9c,EAC9BiU,EAAgBpV,KAAKwmB,YAAYpR,oBAE9BA,cAAgBA,0BAMvB,mBACWpV,KAAKwmB,aAAexmB,KAAKwmB,YAAY9Q,iCAMhD,iBACQjG,EAAyB,IAAID,GAC/BxP,KAAKwmB,aACP/W,EAAQW,kBAAeoW,aAAY1S,2BAEhC1D,UAAUpQ,KAAK0mB,yBAGbjX,qBAMT,qEAGIqX,eAAgB9mB,KAAKgT,cACrByT,cAAezmB,KAAKymB,cAAcvQ,KAAI,SAAAwH,UAAKA,EAAEpW,SAC7C8f,eAAgBpnB,KAAKwmB,YACrBA,YAAaxmB,KAAKwmB,aAAexmB,KAAKwmB,YAAYlf,aAItD,SAAWA,OACFmf,EAA8Dnf,EAA9Dmf,cAAeW,EAA+C9f,EAA/C8f,eAAgBZ,EAA+Blf,EAA/Bkf,YAAgB9N,KAAepR,WAChEmf,cAAcva,SAAQ,SAACwR,EAAG2J,UAAO3J,EAAEpW,MAAQmf,EAAcY,MACxC,MAAlBD,SACGZ,YAAcY,OACdZ,YAAYlf,MAAQkf,8BAEb9N,uCAMhB,wBACS1Y,KAAKwmB,oBACLA,aAAYjV,gCACjB,8BAMJ,0CAAgB0I,2BAAAA,yBACPja,KAAKwmB,oBACLA,aAAY5S,oBAAeqG,yEACXA,4BAMzB,WACMja,KAAKwmB,aAAaxmB,KAAKwmB,YAAYpV,yFAOzC,0CAAmB6I,2BAAAA,yBACVja,KAAKwmB,oBACLA,aAAY3S,wBAAmBoG,6EACXA,2BAG7B,kBACSja,KAAKwmB,YACVxmB,KAAKwmB,YAAYlU,oDAIrB,SAAeA,GACbmC,QAAQC,KAAK,2FA1PW/D,IA8P5B2D,GAAcxD,SAAW,CACvBqW,SAAU,SAAChV,EAAUjC,EAAQ2B,MACtB3B,EAAOuW,cAActkB,YAEpBykB,EAAa1W,EAAO8C,cAGpBsU,EAASpX,EAAOuW,cAAcvQ,KAAI,SAACwH,EAAGvU,UAC1CuU,EAAEvM,QACFuM,EAAEvN,OAAOyW,EAAY,CAAEpV,KAAK,IAC5BkM,EAAEvN,OAAOgC,EAAUN,GAGZ,CAAC0V,OAFO7J,EAAE1K,cAAc7Q,OAEfgH,MAAAA,aAIlBme,EAAOlP,MAAK,SAACoP,EAAIC,UAAOA,EAAGF,OAASC,EAAGD,UAEhCrX,EAAOuW,cAAca,EAAO,GAAGne,UAK1CqH,GAAM8D,cAAgBA,OCnShBoT,GAAY,CAChBC,OAAQ,QACRC,SAAU,gBACVC,MAAO,cAKT,SAASC,GAAY9T,OAAMjE,yDAAK2X,GAAUC,OAAQlL,yDAAGiL,GAAUC,OACvDzX,EAASyE,GAAWX,UACnB,SAAC7S,UAAU+O,EAAO6X,aAAY,SAAArK,UACnCA,EAAE3N,GAAQ5O,EACHuc,EAAEjB,OAMb,SAASuL,GAAM7mB,8BAAU8mB,mCAAAA,2BAChBH,gBAAcG,EAAdH,CAAwB3mB,GAIjCqP,GAAMkX,UAAYA,GAClBlX,GAAMsX,WAAaA,GACnBtX,GAAMwX,KAAOA,GCbb"}