{"version":3,"file":"vue-form-B6ORwZRc.js","sources":["../../../node_modules/vue-form/dist/vue-form.js"],"sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.VueForm = factory());\n}(this, (function () { 'use strict';\n\nvar emailRegExp = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; // from angular\nvar urlRegExp = /^(http\\:\\/\\/|https\\:\\/\\/)(.{4,})$/;\n\nvar email = function email(value, attrValue, vnode) {\n  return emailRegExp.test(value);\n};\nemail._allowNulls = true;\n\nvar number = function number(value, attrValue, vnode) {\n  return !isNaN(value);\n};\nnumber._allowNulls = true;\n\nvar url = function url(value, attrValue, vnode) {\n  return urlRegExp.test(value);\n};\nurl._allowNulls = true;\n\nvar validators = {\n  email: email,\n  number: number,\n  url: url,\n  required: function required(value, attrValue, vnode) {\n    if (attrValue === false) {\n      return true;\n    }\n\n    if (value === 0) {\n      return true;\n    }\n\n    if (vnode.data.attrs && typeof vnode.data.attrs.bool !== 'undefined' || vnode.componentOptions && vnode.componentOptions.propsData && typeof vnode.componentOptions.propsData.bool !== 'undefined') {\n      // bool attribute is present, allow false pass validation\n      if (value === false) {\n        return true;\n      }\n    }\n\n    if (Array.isArray(value)) {\n      return !!value.length;\n    }\n    return !!value;\n  },\n  minlength: function minlength(value, length) {\n    return value.length >= length;\n  },\n  maxlength: function maxlength(value, length) {\n    return length >= value.length;\n  },\n  pattern: function pattern(value, _pattern) {\n    var patternRegExp = new RegExp('^' + _pattern + '$');\n    return patternRegExp.test(value);\n  },\n  min: function min(value, _min, vnode) {\n    if ((vnode.data.attrs.type || '').toLowerCase() == 'number') {\n      return +value >= +_min;\n    }\n    return value >= _min;\n  },\n  max: function max(value, _max, vnode) {\n    if ((vnode.data.attrs.type || '').toLowerCase() == 'number') {\n      return +_max >= +value;\n    }\n    return _max >= value;\n  }\n};\n\nvar config = {\n  validators: validators,\n  formComponent: 'VueForm',\n  formTag: 'form',\n  messagesComponent: 'FieldMessages',\n  messagesTag: 'div',\n  showMessages: '',\n  validateComponent: 'Validate',\n  validateTag: 'div',\n  fieldComponent: 'Field',\n  fieldTag: 'div',\n  formClasses: {\n    dirty: 'vf-form-dirty',\n    pristine: 'vf-form-pristine',\n    valid: 'vf-form-valid',\n    invalid: 'vf-form-invalid',\n    touched: 'vf-form-touched',\n    untouched: 'vf-form-untouched',\n    focused: 'vf-form-focused',\n    submitted: 'vf-form-submitted',\n    pending: 'vf-form-pending'\n  },\n  validateClasses: {\n    dirty: 'vf-field-dirty',\n    pristine: 'vf-field-pristine',\n    valid: 'vf-field-valid',\n    invalid: 'vf-field-invalid',\n    touched: 'vf-field-touched',\n    untouched: 'vf-field-untouched',\n    focused: 'vf-field-focused',\n    submitted: 'vf-field-submitted',\n    pending: 'vf-field-pending'\n  },\n  inputClasses: {\n    dirty: 'vf-dirty',\n    pristine: 'vf-pristine',\n    valid: 'vf-valid',\n    invalid: 'vf-invalid',\n    touched: 'vf-touched',\n    untouched: 'vf-untouched',\n    focused: 'vf-focused',\n    submitted: 'vf-submitted',\n    pending: 'vf-pending'\n  },\n  Promise: typeof Promise === 'function' ? Promise : null\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nfunction getClasses(classConfig, state) {\n  var _ref;\n\n  return _ref = {}, defineProperty(_ref, classConfig.dirty, state.$dirty), defineProperty(_ref, classConfig.pristine, state.$pristine), defineProperty(_ref, classConfig.valid, state.$valid), defineProperty(_ref, classConfig.invalid, state.$invalid), defineProperty(_ref, classConfig.touched, state.$touched), defineProperty(_ref, classConfig.untouched, state.$untouched), defineProperty(_ref, classConfig.focused, state.$focused), defineProperty(_ref, classConfig.pending, state.$pending), defineProperty(_ref, classConfig.submitted, state.$submitted), _ref;\n}\n\nfunction addClass(el, className) {\n  if (el.classList) {\n    el.classList.add(className);\n  } else {\n    el.className += ' ' + className;\n  }\n}\n\nfunction removeClass(el, className) {\n  if (el.classList) {\n    el.classList.remove(className);\n  } else {\n    el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n  }\n}\n\nfunction vModelValue(data) {\n  if (data.model) {\n    return data.model.value;\n  }\n  return data.directives.filter(function (v) {\n    return v.name === 'model';\n  })[0].value;\n}\n\nfunction getVModelAndLabel(nodes, config) {\n  var foundVnodes = {\n    vModel: [],\n    label: null,\n    messages: null\n  };\n\n  if (!nodes) {\n    return foundVnodes;\n  }\n\n  function traverse(nodes) {\n    for (var i = 0; i < nodes.length; i++) {\n      var node = nodes[i];\n\n      if (node.componentOptions) {\n        if (node.componentOptions.tag === hyphenate(config.messagesComponent)) {\n          foundVnodes.messages = node;\n        }\n      }\n\n      if (node.tag === 'label' && !foundVnodes.label) {\n        foundVnodes.label = node;\n      }\n\n      if (node.data) {\n        if (node.data.model) {\n          // model check has to come first. If a component has\n          // a directive and v-model, the directive will be in .directives\n          // and v-modelstored in .model\n          foundVnodes.vModel.push(node);\n        } else if (node.data.directives) {\n          var match = node.data.directives.filter(function (v) {\n            return v.name === 'model';\n          });\n          if (match.length) {\n            foundVnodes.vModel.push(node);\n          }\n        }\n      }\n      if (node.children) {\n        traverse(node.children);\n      } else if (node.componentOptions && node.componentOptions.children) {\n        traverse(node.componentOptions.children);\n      }\n    }\n  }\n\n  traverse(nodes);\n\n  return foundVnodes;\n}\n\nfunction getName(vnode) {\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.name) {\n    return vnode.data.attrs.name;\n  } else if (vnode.componentOptions && vnode.componentOptions.propsData && vnode.componentOptions.propsData.name) {\n    return vnode.componentOptions.propsData.name;\n  }\n}\n\nvar hyphenateRE = /([^-])([A-Z])/g;\nfunction hyphenate(str) {\n  return str.replace(hyphenateRE, '$1-$2').replace(hyphenateRE, '$1-$2').toLowerCase();\n}\n\nfunction randomId() {\n  return Math.random().toString(36).substr(2, 10);\n}\n\n// https://davidwalsh.name/javascript-debounce-function\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this,\n        args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) func.apply(context, args);\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) func.apply(context, args);\n  };\n}\n\nfunction isShallowObjectDifferent(a, b) {\n  var aValue = '';\n  var bValue = '';\n  Object.keys(a).sort().filter(function (v) {\n    return typeof a[v] !== 'function';\n  }).forEach(function (v) {\n    return aValue += a[v];\n  });\n  Object.keys(b).sort().filter(function (v) {\n    return typeof a[v] !== 'function';\n  }).forEach(function (v) {\n    return bValue += b[v];\n  });\n  return aValue !== bValue;\n}\n\nvar vueFormConfig = 'VueFormProviderConfig' + randomId();\nvar vueFormState = 'VueFormProviderState' + randomId();\nvar vueFormParentForm = 'VueFormProviderParentForm' + randomId();\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty$1 = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty$1 && options.name === '__proto__') {\n\t\tdefineProperty$1(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nvar extend = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\nvar vueForm = {\n  render: function render(h) {\n    var _this = this;\n\n    var attrs = {};\n\n    if (typeof window !== 'undefined') {\n      attrs.novalidate = '';\n    }\n\n    return h(this.tag || this.vueFormConfig.formTag, {\n      on: {\n        submit: function submit(event) {\n          if (_this.state.$pending) {\n            event.preventDefault();\n            _this.vueFormConfig.Promise.all(_this.promises).then(function () {\n              _this.state._submit();\n              _this.$emit('submit', event);\n              _this.promises = [];\n            });\n          } else {\n            _this.state._submit();\n            _this.$emit('submit', event);\n          }\n        },\n        reset: function reset(event) {\n          _this.state._reset();\n          _this.$emit('reset', event);\n        }\n      },\n      class: this.className,\n      attrs: attrs\n    }, [this.$slots.default]);\n  },\n\n  props: {\n    state: {\n      type: Object,\n      required: true\n    },\n    tag: String,\n    showMessages: String\n  },\n  inject: { vueFormConfig: vueFormConfig },\n  provide: function provide() {\n    var _ref;\n\n    return _ref = {}, defineProperty(_ref, vueFormState, this.state), defineProperty(_ref, vueFormParentForm, this), _ref;\n  },\n\n  data: function data() {\n    return {\n      promises: []\n    };\n  },\n  created: function created() {\n    var _this2 = this;\n\n    if (!this.state) {\n      return;\n    }\n    var controls = {};\n    var state = this.state;\n    var formstate = {\n      $dirty: false,\n      $pristine: true,\n      $valid: true,\n      $invalid: false,\n      $submitted: false,\n      $touched: false,\n      $untouched: true,\n      $focused: false,\n      $pending: false,\n      $error: {},\n      $submittedState: {},\n      _id: '',\n      _submit: function _submit() {\n        _this2.state.$submitted = true;\n        _this2.state._cloneState();\n      },\n      _cloneState: function _cloneState() {\n        var cloned = JSON.parse(JSON.stringify(state));\n        delete cloned.$submittedState;\n        Object.keys(cloned).forEach(function (key) {\n          _this2.$set(_this2.state.$submittedState, key, cloned[key]);\n        });\n      },\n      _addControl: function _addControl(ctrl) {\n        controls[ctrl.$name] = ctrl;\n        _this2.$set(state, ctrl.$name, ctrl);\n      },\n      _removeControl: function _removeControl(ctrl) {\n        delete controls[ctrl.$name];\n        _this2.$delete(_this2.state, ctrl.$name);\n        _this2.$delete(_this2.state.$error, ctrl.$name);\n      },\n      _validate: function _validate() {\n        Object.keys(controls).forEach(function (key) {\n          controls[key]._validate();\n        });\n      },\n      _reset: function _reset() {\n        state.$submitted = false;\n        state.$pending = false;\n        state.$submittedState = {};\n        Object.keys(controls).forEach(function (key) {\n          var control = controls[key];\n          control._hasFocused = false;\n          control._setUntouched();\n          control._setPristine();\n          control.$submitted = false;\n          control.$pending = false;\n        });\n      }\n    };\n\n    Object.keys(formstate).forEach(function (key) {\n      _this2.$set(_this2.state, key, formstate[key]);\n    });\n\n    this.$watch('state', function () {\n      var isDirty = false;\n      var isValid = true;\n      var isTouched = false;\n      var isFocused = false;\n      var isPending = false;\n      Object.keys(controls).forEach(function (key) {\n        var control = controls[key];\n\n        control.$submitted = state.$submitted;\n\n        if (control.$dirty) {\n          isDirty = true;\n        }\n        if (control.$touched) {\n          isTouched = true;\n        }\n        if (control.$focused) {\n          isFocused = true;\n        }\n        if (control.$pending) {\n          isPending = true;\n        }\n        if (!control.$valid) {\n          isValid = false;\n          // add control to errors\n          _this2.$set(state.$error, control.$name, control);\n        } else {\n          _this2.$delete(state.$error, control.$name);\n        }\n      });\n\n      state.$dirty = isDirty;\n      state.$pristine = !isDirty;\n      state.$touched = isTouched;\n      state.$untouched = !isTouched;\n      state.$focused = isFocused;\n      state.$valid = isValid;\n      state.$invalid = !isValid;\n      state.$pending = isPending;\n    }, {\n      deep: true,\n      immediate: true\n    });\n\n    /* watch pristine? if set to true, set all children to pristine\r\n    Object.keys(controls).forEach((ctrl) => {\r\n      controls[ctrl].setPristine();\r\n    });*/\n  },\n\n  computed: {\n    className: function className() {\n      var classes = getClasses(this.vueFormConfig.formClasses, this.state);\n      return classes;\n    }\n  },\n  methods: {\n    reset: function reset() {\n      this.state._reset();\n    },\n    validate: function validate() {\n      this.state._validate();\n    }\n  }\n};\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar scope_eval = createCommonjsModule(function (module) {\n// Generated by CoffeeScript 1.10.0\n(function() {\n  var hasProp = {}.hasOwnProperty,\n    slice = [].slice;\n\n  module.exports = function(source, scope) {\n    var key, keys, value, values;\n    keys = [];\n    values = [];\n    for (key in scope) {\n      if (!hasProp.call(scope, key)) continue;\n      value = scope[key];\n      if (key === 'this') {\n        continue;\n      }\n      keys.push(key);\n      values.push(value);\n    }\n    return Function.apply(null, slice.call(keys).concat([\"return eval(\" + (JSON.stringify(source)) + \")\"])).apply(scope[\"this\"], values);\n  };\n\n}).call(commonjsGlobal);\n});\n\nfunction findLabel(nodes) {\n  if (!nodes) {\n    return;\n  }\n  for (var i = 0; i < nodes.length; i++) {\n    var vnode = nodes[i];\n    if (vnode.tag === 'label') {\n      return nodes[i];\n    } else if (nodes[i].children) {\n      return findLabel(nodes[i].children);\n    }\n  }\n}\n\nvar messages = {\n  inject: { vueFormConfig: vueFormConfig, vueFormState: vueFormState, vueFormParentForm: vueFormParentForm },\n  render: function render(h) {\n    var _this = this;\n\n    var children = [];\n    var field = this.formstate[this.fieldname];\n    if (field && field.$error && this.isShown) {\n      Object.keys(field.$error).forEach(function (key) {\n        if (_this.$slots[key] || _this.$scopedSlots[key]) {\n          var out = _this.$slots[key] || _this.$scopedSlots[key](field);\n          if (_this.autoLabel) {\n            var label = findLabel(out);\n            if (label) {\n              label.data = label.data || {};\n              label.data.attrs = label.data.attrs || {};\n              label.data.attrs.for = field._id;\n            }\n          }\n          children.push(out);\n        }\n      });\n      if (!children.length && field.$valid) {\n        if (this.$slots.default || this.$scopedSlots.default) {\n          var out = this.$slots.default || this.$scopedSlots.default(field);\n          if (this.autoLabel) {\n            var label = findLabel(out);\n            if (label) {\n              label.data = label.data || {};\n              label.data.attrs = label.data.attrs || {};\n              label.data.attrs.for = field._id;\n            }\n          }\n          children.push(out);\n        }\n      }\n    }\n    return h(this.tag || this.vueFormConfig.messagesTag, children);\n  },\n\n  props: {\n    state: Object,\n    name: String,\n    show: {\n      type: String,\n      default: ''\n    },\n    tag: {\n      type: String\n    },\n    autoLabel: Boolean\n  },\n  data: function data() {\n    return {\n      formstate: null,\n      fieldname: ''\n    };\n  },\n  created: function created() {\n    this.fieldname = this.name;\n    this.formstate = this.state || this.vueFormState;\n  },\n\n  computed: {\n    isShown: function isShown() {\n      var field = this.formstate[this.fieldname];\n      var show = this.show || this.vueFormParentForm.showMessages || this.vueFormConfig.showMessages;\n\n      if (!show || !field) {\n        return true;\n      }\n\n      return scope_eval(show, field);\n    }\n  }\n};\n\nvar validate = {\n  render: function render(h) {\n    var _this = this;\n\n    var foundVnodes = getVModelAndLabel(this.$slots.default, this.vueFormConfig);\n    var vModelnodes = foundVnodes.vModel;\n    var attrs = {\n      for: null\n    };\n    if (vModelnodes.length) {\n      this.name = getName(vModelnodes[0]);\n\n      if (foundVnodes.messages) {\n        this.$nextTick(function () {\n          var messagesVm = foundVnodes.messages.componentInstance;\n          if (messagesVm) {\n            messagesVm.fieldname = messagesVm.fieldname || _this.name;\n          }\n        });\n      }\n\n      if (this.autoLabel) {\n        var id = vModelnodes[0].data.attrs.id || this.fieldstate._id;\n        this.fieldstate._id = id;\n        vModelnodes[0].data.attrs.id = id;\n        if (foundVnodes.label) {\n          foundVnodes.label.data = foundVnodes.label.data || {};\n          foundVnodes.label.data.attrs = foundVnodes.label.data.attrs || {};\n          foundVnodes.label.data.attrs.for = id;\n        } else if (this.tag === 'label') {\n          attrs.for = id;\n        }\n      }\n      vModelnodes.forEach(function (vnode) {\n        if (!vnode.data.directives) {\n          vnode.data.directives = [];\n        }\n        vnode.data.directives.push({ name: 'vue-form-validator', value: { fieldstate: _this.fieldstate, config: _this.vueFormConfig } });\n        vnode.data.attrs['vue-form-validator'] = '';\n        vnode.data.attrs['debounce'] = _this.debounce;\n      });\n    } else {\n      //console.warn('Element with v-model not found');\n    }\n    return h(this.tag || this.vueFormConfig.validateTag, { 'class': this.className, attrs: attrs }, this.$slots.default);\n  },\n\n  props: {\n    state: Object,\n    custom: null,\n    autoLabel: Boolean,\n    tag: {\n      type: String\n    },\n    debounce: Number\n  },\n  inject: { vueFormConfig: vueFormConfig, vueFormState: vueFormState, vueFormParentForm: vueFormParentForm },\n  data: function data() {\n    return {\n      name: '',\n      formstate: null,\n      fieldstate: {}\n    };\n  },\n\n  methods: {\n    getClasses: function getClasses$$1(classConfig) {\n      var s = this.fieldstate;\n      return Object.keys(s.$error).reduce(function (classes, error) {\n        classes[classConfig.invalid + '-' + hyphenate(error)] = true;\n        return classes;\n      }, getClasses(classConfig, s));\n    }\n  },\n  computed: {\n    className: function className() {\n      return this.getClasses(this.vueFormConfig.validateClasses);\n    },\n    inputClassName: function inputClassName() {\n      return this.getClasses(this.vueFormConfig.inputClasses);\n    }\n  },\n  mounted: function mounted() {\n    var _this2 = this;\n\n    this.fieldstate.$name = this.name;\n    this.formstate._addControl(this.fieldstate);\n\n    var vModelEls = this.$el.querySelectorAll('[vue-form-validator]');\n\n    // add classes to the input element\n    this.$watch('inputClassName', function (value, oldValue) {\n      var out = void 0;\n\n      var _loop = function _loop(i, el) {\n        if (oldValue) {\n          Object.keys(oldValue).filter(function (k) {\n            return oldValue[k];\n          }).forEach(function (k) {\n            return removeClass(el, k);\n          });\n        }\n        out = [];\n        Object.keys(value).filter(function (k) {\n          return value[k];\n        }).forEach(function (k) {\n          out.push(k);\n          addClass(el, k);\n        });\n      };\n\n      for (var i = 0, el; el = vModelEls[i++];) {\n        _loop(i, el);\n      }\n      _this2.fieldstate._className = out;\n    }, {\n      deep: true,\n      immediate: true\n    });\n\n    this.$watch('name', function (value, oldValue) {\n      _this2.formstate._removeControl(_this2.fieldstate);\n      _this2.fieldstate.$name = value;\n      _this2.formstate._addControl(_this2.fieldstate);\n    });\n  },\n  created: function created() {\n    var _this4 = this;\n\n    this.formstate = this.state || this.vueFormState;\n    var vm = this;\n    var pendingValidators = [];\n    var _val = void 0;\n    var prevVnode = void 0;\n    this.fieldstate = {\n      $name: '',\n      $dirty: false,\n      $pristine: true,\n      $valid: true,\n      $invalid: false,\n      $touched: false,\n      $untouched: true,\n      $focused: false,\n      $pending: false,\n      $submitted: false,\n      $error: {},\n      $attrs: {},\n      _className: null,\n      _id: 'vf' + randomId(),\n      _setValidatorValidity: function _setValidatorValidity(validator, isValid) {\n        if (isValid) {\n          vm.$delete(this.$error, validator);\n        } else {\n          vm.$set(this.$error, validator, true);\n        }\n      },\n      _setValidity: function _setValidity(isValid) {\n        this.$valid = isValid;\n        this.$invalid = !isValid;\n      },\n      _setDirty: function _setDirty() {\n        this.$dirty = true;\n        this.$pristine = false;\n      },\n      _setPristine: function _setPristine() {\n        this.$dirty = false;\n        this.$pristine = true;\n      },\n      _setTouched: function _setTouched() {\n        this.$touched = true;\n        this.$untouched = false;\n      },\n      _setUntouched: function _setUntouched() {\n        this.$touched = false;\n        this.$untouched = true;\n      },\n      _setFocused: function _setFocused(value) {\n        this.$focused = typeof value === 'boolean' ? value : false;\n        if (this.$focused) {\n          this._setHasFocused();\n        } else {\n          this._setTouched();\n        }\n      },\n      _setHasFocused: function _setHasFocused() {\n        this._hasFocused = true;\n      },\n\n      _hasFocused: false,\n      _validators: {},\n      _validate: function _validate(vnode) {\n        var _this3 = this;\n\n        if (!vnode) {\n          vnode = prevVnode;\n        } else {\n          prevVnode = vnode;\n        }\n        this.$pending = true;\n        var isValid = true;\n        var emptyAndRequired = false;\n        var value = vModelValue(vnode.data);\n        _val = value;\n\n        var pending = {\n          promises: [],\n          names: []\n        };\n\n        pendingValidators.push(pending);\n\n        var attrs = vnode.data.attrs || {};\n        var childvm = vnode.componentInstance;\n        if (childvm && childvm._vfValidationData_) {\n          attrs = extend({}, attrs, childvm._vfValidationData_);\n        }\n\n        var propsData = vnode.componentOptions && vnode.componentOptions.propsData ? vnode.componentOptions.propsData : {};\n\n        Object.keys(this._validators).forEach(function (validator) {\n          // when value is empty and current validator is not the required validator, the field is valid\n          if ((value === '' || value === undefined || value === null) && validator !== 'required') {\n            _this3._setValidatorValidity(validator, true);\n            emptyAndRequired = true;\n            // return early, required validator will\n            // fall through if it is present\n            return;\n          }\n\n          var attrValue = typeof attrs[validator] !== 'undefined' ? attrs[validator] : propsData[validator];\n          var isFunction = typeof _this3._validators[validator] === 'function';\n\n          // match vue behaviour, ignore if attribute is null or undefined. But for type=email|url|number and custom validators, the value will be null, so allow with _allowNulls\n          if (isFunction && (attrValue === null || typeof attrValue === 'undefined') && !_this3._validators[validator]._allowNulls) {\n            return;\n          }\n\n          if (attrValue) {\n            _this3.$attrs[validator] = attrValue;\n          }\n\n          var result = isFunction ? _this3._validators[validator](value, attrValue, vnode) : vm.custom[validator];\n\n          if (typeof result === 'boolean') {\n            if (result) {\n              _this3._setValidatorValidity(validator, true);\n            } else {\n              isValid = false;\n              _this3._setValidatorValidity(validator, false);\n            }\n          } else {\n            pending.promises.push(result);\n            pending.names.push(validator);\n            vm.vueFormParentForm.promises.push(result);\n          }\n        });\n\n        if (pending.promises.length) {\n          vm.vueFormConfig.Promise.all(pending.promises).then(function (results) {\n\n            // only concerned with the last promise results, in case\n            // async responses return out of order\n            if (pending !== pendingValidators[pendingValidators.length - 1]) {\n              //console.log('ignoring old promise', pending.promises);\n              return;\n            }\n\n            pendingValidators = [];\n\n            results.forEach(function (result, i) {\n              var name = pending.names[i];\n              if (result) {\n                _this3._setValidatorValidity(name, true);\n              } else {\n                isValid = false;\n                _this3._setValidatorValidity(name, false);\n              }\n            });\n            _this3._setValidity(isValid);\n            _this3.$pending = false;\n          });\n        } else {\n          this._setValidity(isValid);\n          this.$pending = false;\n        }\n      }\n    };\n\n    // add custom validators\n    if (this.custom) {\n      Object.keys(this.custom).forEach(function (prop) {\n        if (typeof _this4.custom[prop] === 'function') {\n          _this4.custom[prop]._allowNulls = true;\n          _this4.fieldstate._validators[prop] = _this4.custom[prop];\n        } else {\n          _this4.fieldstate._validators[prop] = _this4.custom[prop];\n        }\n      });\n    }\n\n    this.$watch('custom', function (v, oldV) {\n      if (!oldV || !v) {\n        return;\n      }\n      if (isShallowObjectDifferent(v, oldV)) {\n        _this4.fieldstate._validate();\n      }\n    }, {\n      deep: true\n    });\n  },\n  destroyed: function destroyed() {\n    this.formstate._removeControl(this.fieldstate);\n  }\n};\n\nvar field = {\n  inject: { vueFormConfig: vueFormConfig },\n  render: function render(h) {\n    var foundVnodes = getVModelAndLabel(this.$slots.default, this.vueFormConfig);\n    var vModelnodes = foundVnodes.vModel;\n    var attrs = {\n      for: null\n    };\n    if (vModelnodes.length) {\n      if (this.autoLabel) {\n        var id = vModelnodes[0].data.attrs && vModelnodes[0].data.attrs.id || 'vf' + randomId();\n        vModelnodes[0].data.attrs.id = id;\n        if (foundVnodes.label) {\n          foundVnodes.label.data = foundVnodes.label.data || {};\n          foundVnodes.label.data.attrs = foundVnodes.label.data.attrs = {};\n          foundVnodes.label.data.attrs.for = id;\n        } else if (this.tag === 'label') {\n          attrs.for = id;\n        }\n      }\n    }\n    return h(this.tag || this.vueFormConfig.fieldTag, { attrs: attrs }, this.$slots.default);\n  },\n\n  props: {\n    tag: {\n      type: String\n    },\n    autoLabel: {\n      type: Boolean,\n      default: true\n    }\n  }\n};\n\nvar debouncedValidators = {};\n\nfunction addValidators(attrs, validators, fieldValidators) {\n  Object.keys(attrs).forEach(function (attr) {\n    var prop = attr === 'type' ? attrs[attr].toLowerCase() : attr.toLowerCase();\n\n    if (validators[prop] && !fieldValidators[prop]) {\n      fieldValidators[prop] = validators[prop];\n    }\n  });\n}\n\nfunction compareChanges(vnode, oldvnode, validators) {\n\n  var hasChanged = false;\n  var attrs = vnode.data.attrs || {};\n  var oldAttrs = oldvnode.data.attrs || {};\n  var out = {};\n\n  if (vModelValue(vnode.data) !== vModelValue(oldvnode.data)) {\n    out.vModel = true;\n    hasChanged = true;\n  }\n\n  Object.keys(validators).forEach(function (validator) {\n    if (attrs[validator] !== oldAttrs[validator]) {\n      out[validator] = true;\n      hasChanged = true;\n    }\n  });\n\n  // if is a component\n  if (vnode.componentOptions && vnode.componentOptions.propsData) {\n    var _attrs = vnode.componentOptions.propsData;\n    var _oldAttrs = oldvnode.componentOptions.propsData;\n    Object.keys(validators).forEach(function (validator) {\n      if (_attrs[validator] !== _oldAttrs[validator]) {\n        out[validator] = true;\n        hasChanged = true;\n      }\n    });\n  }\n\n  if (hasChanged) {\n    return out;\n  }\n}\n\nvar vueFormValidator = {\n  name: 'vue-form-validator',\n  bind: function bind(el, binding, vnode) {\n    var fieldstate = binding.value.fieldstate;\n    var validators = binding.value.config.validators;\n\n    var attrs = vnode.data.attrs || {};\n    var inputName = getName(vnode);\n\n    if (!inputName) {\n      console.warn('vue-form: name attribute missing');\n      return;\n    }\n\n    if (attrs.debounce) {\n      debouncedValidators[fieldstate._id] = debounce(function (fieldstate, vnode) {\n        if (fieldstate._hasFocused) {\n          fieldstate._setDirty();\n        }\n        fieldstate._validate(vnode);\n      }, attrs.debounce);\n    }\n\n    // add validators\n    addValidators(attrs, validators, fieldstate._validators);\n\n    // if is a component, a validator attribute could be a prop this component uses\n    if (vnode.componentOptions && vnode.componentOptions.propsData) {\n      addValidators(vnode.componentOptions.propsData, validators, fieldstate._validators);\n    }\n\n    fieldstate._validate(vnode);\n\n    // native listeners\n    el.addEventListener('blur', function () {\n      fieldstate._setFocused(false);\n    }, false);\n    el.addEventListener('focus', function () {\n      fieldstate._setFocused(true);\n    }, false);\n\n    // component listeners\n    var vm = vnode.componentInstance;\n    if (vm) {\n      vm.$on('blur', function () {\n        fieldstate._setFocused(false);\n      });\n      vm.$on('focus', function () {\n        fieldstate._setFocused(true);\n      });\n\n      vm.$once('vf:addFocusListeners', function () {\n        el.addEventListener('focusout', function () {\n          fieldstate._setFocused(false);\n        }, false);\n        el.addEventListener('focusin', function () {\n          fieldstate._setFocused(true);\n        }, false);\n      });\n\n      vm.$on('vf:validate', function (data) {\n        if (!vm._vfValidationData_) {\n          addValidators(data, validators, fieldstate._validators);\n        }\n        vm._vfValidationData_ = data;\n        fieldstate._validate(vm.$vnode);\n      });\n    }\n  },\n  update: function update(el, binding, vnode, oldVNode) {\n    var validators = binding.value.config.validators;\n\n    var changes = compareChanges(vnode, oldVNode, validators);\n    var fieldstate = binding.value.fieldstate;\n\n\n    var attrs = vnode.data.attrs || {};\n    var vm = vnode.componentInstance;\n    if (vm && vm._vfValidationData_) {\n      attrs = extend({}, attrs, vm[vm._vfValidationData_]);\n    }\n\n    if (vnode.elm.className.indexOf(fieldstate._className[0]) === -1) {\n      vnode.elm.className = vnode.elm.className + ' ' + fieldstate._className.join(' ');\n    }\n\n    if (!changes) {\n      return;\n    }\n\n    if (changes.vModel) {\n      // re-validate all\n      if (attrs.debounce) {\n        fieldstate.$pending = true;\n        debouncedValidators[fieldstate._id](fieldstate, vnode);\n      } else {\n        if (fieldstate._hasFocused) {\n          fieldstate._setDirty();\n        }\n        fieldstate._validate(vnode);\n      }\n    } else {\n      // attributes have changed\n      // to do: loop through them and re-validate changed ones\n      //for(let prop in changes) {\n      //  fieldstate._validate(vnode, validator);\n      //}\n      // for now\n      fieldstate._validate(vnode);\n    }\n  }\n};\n\nfunction VueFormBase(options) {\n  var _components;\n\n  var c = extend(true, {}, config, options);\n  this.provide = function () {\n    return defineProperty({}, vueFormConfig, c);\n  };\n  this.components = (_components = {}, defineProperty(_components, c.formComponent, vueForm), defineProperty(_components, c.messagesComponent, messages), defineProperty(_components, c.validateComponent, validate), defineProperty(_components, c.fieldComponent, field), _components);\n  this.directives = { vueFormValidator: vueFormValidator };\n}\n\nvar VueForm = function (_VueFormBase) {\n  inherits(VueForm, _VueFormBase);\n\n  function VueForm() {\n    classCallCheck(this, VueForm);\n    return possibleConstructorReturn(this, (VueForm.__proto__ || Object.getPrototypeOf(VueForm)).apply(this, arguments));\n  }\n\n  createClass(VueForm, null, [{\n    key: 'install',\n    value: function install(Vue, options) {\n      Vue.mixin(new this(options));\n    }\n  }, {\n    key: 'installed',\n    get: function get$$1() {\n      return !!this.install.done;\n    },\n    set: function set$$1(val) {\n      this.install.done = val;\n    }\n  }]);\n  return VueForm;\n}(VueFormBase);\n\nVueFormBase.call(VueForm);\n// temp fix for vue 2.3.0\nVueForm.options = new VueForm();\n\nreturn VueForm;\n\n})));\n"],"names":["global","factory","module","this","emailRegExp","urlRegExp","email","value","attrValue","vnode","number","url","validators","length","_pattern","patternRegExp","_min","_max","config","classCallCheck","instance","Constructor","createClass","defineProperties","target","props","i","descriptor","protoProps","staticProps","defineProperty","obj","key","inherits","subClass","superClass","possibleConstructorReturn","self","call","getClasses","classConfig","state","_ref","addClass","el","className","removeClass","vModelValue","data","v","getVModelAndLabel","nodes","foundVnodes","traverse","node","hyphenate","match","getName","hyphenateRE","str","randomId","debounce","func","wait","immediate","timeout","context","args","later","isShallowObjectDifferent","a","b","aValue","bValue","vueFormConfig","vueFormState","vueFormParentForm","hasOwn","toStr","defineProperty$1","gOPD","isArray","arr","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","setProperty","options","getProperty","name","extend","src","copy","copyIsArray","clone","deep","vueForm","h","_this","attrs","event","_this2","controls","formstate","cloned","ctrl","control","isDirty","isValid","isTouched","isFocused","isPending","classes","commonjsGlobal","createCommonjsModule","fn","scope_eval","hasProp","slice","source","scope","keys","values","findLabel","messages","children","field","out","label","show","validate","vModelnodes","messagesVm","id","s","error","vModelEls","oldValue","_loop","k","_this4","vm","pendingValidators","prevVnode","validator","_this3","pending","childvm","propsData","isFunction","result","results","prop","oldV","debouncedValidators","addValidators","fieldValidators","attr","compareChanges","oldvnode","hasChanged","oldAttrs","_attrs","_oldAttrs","vueFormValidator","binding","fieldstate","inputName","oldVNode","changes","VueFormBase","_components","c","VueForm","_VueFormBase","Vue","val"],"mappings":"wFAAC,SAAUA,EAAQC,EAAS,CACoCC,EAAiB,QAAAD,EAAO,CAGxF,GAAEE,EAAO,UAAY,CAErB,IAAIC,EAAc,oGACdC,EAAY,oCAEZC,EAAQ,SAAeC,EAAOC,EAAWC,EAAO,CAClD,OAAOL,EAAY,KAAKG,CAAK,CAC/B,EACAD,EAAM,YAAc,GAEpB,IAAII,EAAS,SAAgBH,EAAOC,EAAWC,EAAO,CACpD,MAAO,CAAC,MAAMF,CAAK,CACrB,EACAG,EAAO,YAAc,GAErB,IAAIC,EAAM,SAAaJ,EAAOC,EAAWC,EAAO,CAC9C,OAAOJ,EAAU,KAAKE,CAAK,CAC7B,EACAI,EAAI,YAAc,GAElB,IAAIC,EAAa,CACf,MAAON,EACP,OAAQI,EACR,IAAKC,EACL,SAAU,SAAkBJ,EAAOC,EAAWC,EAAO,CASnD,OARID,IAAc,IAIdD,IAAU,IAIVE,EAAM,KAAK,OAAS,OAAOA,EAAM,KAAK,MAAM,KAAS,KAAeA,EAAM,kBAAoBA,EAAM,iBAAiB,WAAa,OAAOA,EAAM,iBAAiB,UAAU,KAAS,MAEjLF,IAAU,GACL,GAIP,MAAM,QAAQA,CAAK,EACd,CAAC,CAACA,EAAM,OAEV,CAAC,CAACA,CACV,EACD,UAAW,SAAmBA,EAAOM,EAAQ,CAC3C,OAAON,EAAM,QAAUM,CACxB,EACD,UAAW,SAAmBN,EAAOM,EAAQ,CAC3C,OAAOA,GAAUN,EAAM,MACxB,EACD,QAAS,SAAiBA,EAAOO,EAAU,CACzC,IAAIC,EAAgB,IAAI,OAAO,IAAMD,EAAW,GAAG,EACnD,OAAOC,EAAc,KAAKR,CAAK,CAChC,EACD,IAAK,SAAaA,EAAOS,EAAMP,EAAO,CACpC,OAAKA,EAAM,KAAK,MAAM,MAAQ,IAAI,YAAa,GAAI,SAC1C,CAACF,GAAS,CAACS,EAEbT,GAASS,CACjB,EACD,IAAK,SAAaT,EAAOU,EAAMR,EAAO,CACpC,OAAKA,EAAM,KAAK,MAAM,MAAQ,IAAI,YAAa,GAAI,SAC1C,CAACQ,GAAQ,CAACV,EAEZU,GAAQV,CAChB,CACH,EAEIW,EAAS,CACX,WAAYN,EACZ,cAAe,UACf,QAAS,OACT,kBAAmB,gBACnB,YAAa,MACb,aAAc,GACd,kBAAmB,WACnB,YAAa,MACb,eAAgB,QAChB,SAAU,MACV,YAAa,CACX,MAAO,gBACP,SAAU,mBACV,MAAO,gBACP,QAAS,kBACT,QAAS,kBACT,UAAW,oBACX,QAAS,kBACT,UAAW,oBACX,QAAS,iBACV,EACD,gBAAiB,CACf,MAAO,iBACP,SAAU,oBACV,MAAO,iBACP,QAAS,mBACT,QAAS,mBACT,UAAW,qBACX,QAAS,mBACT,UAAW,qBACX,QAAS,kBACV,EACD,aAAc,CACZ,MAAO,WACP,SAAU,cACV,MAAO,WACP,QAAS,aACT,QAAS,aACT,UAAW,eACX,QAAS,aACT,UAAW,eACX,QAAS,YACV,EACD,QAAS,OAAO,SAAY,WAAa,QAAU,IACrD,EAEIO,EAAiB,SAAUC,EAAUC,EAAa,CACpD,GAAI,EAAED,aAAoBC,GACxB,MAAM,IAAI,UAAU,mCAAmC,CAE3D,EAEIC,EAAc,UAAY,CAC5B,SAASC,EAAiBC,EAAQC,EAAO,CACvC,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,IAAIC,EAAaF,EAAMC,CAAC,EACxBC,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAeH,EAAQG,EAAW,IAAKA,CAAU,CACzD,CACF,CAED,OAAO,SAAUN,EAAaO,EAAYC,EAAa,CACrD,OAAID,GAAYL,EAAiBF,EAAY,UAAWO,CAAU,EAC9DC,GAAaN,EAAiBF,EAAaQ,CAAW,EACnDR,CACX,CACA,IAMIS,EAAiB,SAAUC,EAAKC,EAAKzB,EAAO,CAC9C,OAAIyB,KAAOD,EACT,OAAO,eAAeA,EAAKC,EAAK,CAC9B,MAAOzB,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EAEDwB,EAAIC,CAAG,EAAIzB,EAGNwB,CACT,EAIIE,GAAW,SAAUC,EAAUC,EAAY,CAC7C,GAAI,OAAOA,GAAe,YAAcA,IAAe,KACrD,MAAM,IAAI,UAAU,2DAA6D,OAAOA,CAAU,EAGpGD,EAAS,UAAY,OAAO,OAAOC,GAAcA,EAAW,UAAW,CACrE,YAAa,CACX,MAAOD,EACP,WAAY,GACZ,SAAU,GACV,aAAc,EACf,CACL,CAAG,EACGC,IAAY,OAAO,eAAiB,OAAO,eAAeD,EAAUC,CAAU,EAAID,EAAS,UAAYC,EAC7G,EAYIC,GAA4B,SAAUC,EAAMC,EAAM,CACpD,GAAI,CAACD,EACH,MAAM,IAAI,eAAe,2DAA2D,EAGtF,OAAOC,IAAS,OAAOA,GAAS,UAAY,OAAOA,GAAS,YAAcA,EAAOD,CACnF,EAEA,SAASE,EAAWC,EAAaC,EAAO,CACtC,IAAIC,EAEJ,OAAOA,EAAO,CAAE,EAAEZ,EAAeY,EAAMF,EAAY,MAAOC,EAAM,MAAM,EAAGX,EAAeY,EAAMF,EAAY,SAAUC,EAAM,SAAS,EAAGX,EAAeY,EAAMF,EAAY,MAAOC,EAAM,MAAM,EAAGX,EAAeY,EAAMF,EAAY,QAASC,EAAM,QAAQ,EAAGX,EAAeY,EAAMF,EAAY,QAASC,EAAM,QAAQ,EAAGX,EAAeY,EAAMF,EAAY,UAAWC,EAAM,UAAU,EAAGX,EAAeY,EAAMF,EAAY,QAASC,EAAM,QAAQ,EAAGX,EAAeY,EAAMF,EAAY,QAASC,EAAM,QAAQ,EAAGX,EAAeY,EAAMF,EAAY,UAAWC,EAAM,UAAU,EAAGC,CACxiB,CAED,SAASC,GAASC,EAAIC,EAAW,CAC3BD,EAAG,UACLA,EAAG,UAAU,IAAIC,CAAS,EAE1BD,EAAG,WAAa,IAAMC,CAEzB,CAED,SAASC,GAAYF,EAAIC,EAAW,CAC9BD,EAAG,UACLA,EAAG,UAAU,OAAOC,CAAS,EAE7BD,EAAG,UAAYA,EAAG,UAAU,QAAQ,IAAI,OAAO,UAAYC,EAAU,MAAM,GAAG,EAAE,KAAK,GAAG,EAAI,UAAW,IAAI,EAAG,GAAG,CAEpH,CAED,SAASE,EAAYC,EAAM,CACzB,OAAIA,EAAK,MACAA,EAAK,MAAM,MAEbA,EAAK,WAAW,OAAO,SAAUC,EAAG,CACzC,OAAOA,EAAE,OAAS,OACtB,CAAG,EAAE,CAAC,EAAE,KACP,CAED,SAASC,EAAkBC,EAAOjC,EAAQ,CACxC,IAAIkC,EAAc,CAChB,OAAQ,CAAE,EACV,MAAO,KACP,SAAU,IACd,EAEE,GAAI,CAACD,EACH,OAAOC,EAGT,SAASC,EAASF,EAAO,CACvB,QAASzB,EAAI,EAAGA,EAAIyB,EAAM,OAAQzB,IAAK,CACrC,IAAI4B,EAAOH,EAAMzB,CAAC,EAYlB,GAVI4B,EAAK,kBACHA,EAAK,iBAAiB,MAAQC,EAAUrC,EAAO,iBAAiB,IAClEkC,EAAY,SAAWE,GAIvBA,EAAK,MAAQ,SAAW,CAACF,EAAY,QACvCA,EAAY,MAAQE,GAGlBA,EAAK,MACP,GAAIA,EAAK,KAAK,MAIZF,EAAY,OAAO,KAAKE,CAAI,UACnBA,EAAK,KAAK,WAAY,CAC/B,IAAIE,EAAQF,EAAK,KAAK,WAAW,OAAO,SAAUL,EAAG,CACnD,OAAOA,EAAE,OAAS,OAC9B,CAAW,EACGO,EAAM,QACRJ,EAAY,OAAO,KAAKE,CAAI,CAE/B,EAECA,EAAK,SACPD,EAASC,EAAK,QAAQ,EACbA,EAAK,kBAAoBA,EAAK,iBAAiB,UACxDD,EAASC,EAAK,iBAAiB,QAAQ,CAE1C,CACF,CAED,OAAAD,EAASF,CAAK,EAEPC,CACR,CAED,SAASK,EAAQhD,EAAO,CACtB,GAAIA,EAAM,MAAQA,EAAM,KAAK,OAASA,EAAM,KAAK,MAAM,KACrD,OAAOA,EAAM,KAAK,MAAM,KACnB,GAAIA,EAAM,kBAAoBA,EAAM,iBAAiB,WAAaA,EAAM,iBAAiB,UAAU,KACxG,OAAOA,EAAM,iBAAiB,UAAU,IAE3C,CAED,IAAIiD,EAAc,iBAClB,SAASH,EAAUI,EAAK,CACtB,OAAOA,EAAI,QAAQD,EAAa,OAAO,EAAE,QAAQA,EAAa,OAAO,EAAE,aACxE,CAED,SAASE,GAAW,CAClB,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,EAAG,EAAE,CAC/C,CAGD,SAASC,GAASC,EAAMC,EAAMC,EAAW,CACvC,IAAIC,EACJ,OAAO,UAAY,CACjB,IAAIC,EAAU,KACVC,EAAO,UACPC,EAAQ,UAAiB,CAC3BH,EAAU,KACMH,EAAK,MAAMI,EAASC,CAAI,CAC9C,EAEI,aAAaF,CAAO,EACpBA,EAAU,WAAWG,EAAOL,CAAI,CAEpC,CACC,CAED,SAASM,GAAyBC,EAAGC,EAAG,CACtC,IAAIC,EAAS,GACTC,EAAS,GACb,cAAO,KAAKH,CAAC,EAAE,KAAI,EAAG,OAAO,SAAUrB,EAAG,CACxC,OAAO,OAAOqB,EAAErB,CAAC,GAAM,UAC3B,CAAG,EAAE,QAAQ,SAAUA,EAAG,CACtB,OAAOuB,GAAUF,EAAErB,CAAC,CACxB,CAAG,EACD,OAAO,KAAKsB,CAAC,EAAE,KAAI,EAAG,OAAO,SAAUtB,EAAG,CACxC,OAAO,OAAOqB,EAAErB,CAAC,GAAM,UAC3B,CAAG,EAAE,QAAQ,SAAUA,EAAG,CACtB,OAAOwB,GAAUF,EAAEtB,CAAC,CACxB,CAAG,EACMuB,IAAWC,CACnB,CAED,IAAIC,EAAgB,wBAA0Bd,IAC1Ce,EAAe,uBAAyBf,IACxCgB,EAAoB,4BAA8BhB,IAElDiB,EAAS,OAAO,UAAU,eAC1BC,EAAQ,OAAO,UAAU,SACzBC,EAAmB,OAAO,eAC1BC,EAAO,OAAO,yBAEdC,EAAU,SAAiBC,EAAK,CACnC,OAAI,OAAO,MAAM,SAAY,WACrB,MAAM,QAAQA,CAAG,EAGlBJ,EAAM,KAAKI,CAAG,IAAM,gBAC5B,EAEIC,EAAgB,SAAuBpD,EAAK,CAC/C,GAAI,CAACA,GAAO+C,EAAM,KAAK/C,CAAG,IAAM,kBAC/B,MAAO,GAGR,IAAIqD,EAAoBP,EAAO,KAAK9C,EAAK,aAAa,EAClDsD,EAAmBtD,EAAI,aAAeA,EAAI,YAAY,WAAa8C,EAAO,KAAK9C,EAAI,YAAY,UAAW,eAAe,EAE7H,GAAIA,EAAI,aAAe,CAACqD,GAAqB,CAACC,EAC7C,MAAO,GAKR,IAAIrD,EACJ,IAAKA,KAAOD,EAAK,CAEjB,OAAO,OAAOC,EAAQ,KAAe6C,EAAO,KAAK9C,EAAKC,CAAG,CAC1D,EAGIsD,EAAc,SAAqB9D,EAAQ+D,EAAS,CACnDR,GAAoBQ,EAAQ,OAAS,YACxCR,EAAiBvD,EAAQ+D,EAAQ,KAAM,CACtC,WAAY,GACZ,aAAc,GACd,MAAOA,EAAQ,SACf,SAAU,EACb,CAAG,EAED/D,EAAO+D,EAAQ,IAAI,EAAIA,EAAQ,QAEjC,EAGIC,EAAc,SAAqBzD,EAAK0D,EAAM,CACjD,GAAIA,IAAS,YACZ,GAAKZ,EAAO,KAAK9C,EAAK0D,CAAI,GAEnB,GAAIT,EAGV,OAAOA,EAAKjD,EAAK0D,CAAI,EAAE,UAJvB,QAQF,OAAO1D,EAAI0D,CAAI,CAChB,EAEIC,EAAS,SAASA,GAAS,CAC9B,IAAIH,EAASE,EAAME,EAAKC,EAAMC,EAAaC,EACvCtE,EAAS,UAAU,CAAC,EACpBE,EAAI,EACJb,EAAS,UAAU,OACnBkF,EAAO,GAaX,IAVI,OAAOvE,GAAW,YACrBuE,EAAOvE,EACPA,EAAS,UAAU,CAAC,GAAK,GAEzBE,EAAI,IAEDF,GAAU,MAAS,OAAOA,GAAW,UAAY,OAAOA,GAAW,cACtEA,EAAS,CAAA,GAGHE,EAAIb,EAAQ,EAAEa,EAGpB,GAFA6D,EAAU,UAAU7D,CAAC,EAEjB6D,GAAW,KAEd,IAAKE,KAAQF,EACZI,EAAMH,EAAYhE,EAAQiE,CAAI,EAC9BG,EAAOJ,EAAYD,EAASE,CAAI,EAG5BjE,IAAWoE,IAEVG,GAAQH,IAAST,EAAcS,CAAI,IAAMC,EAAcZ,EAAQW,CAAI,KAClEC,GACHA,EAAc,GACdC,EAAQH,GAAOV,EAAQU,CAAG,EAAIA,EAAM,CAAA,GAEpCG,EAAQH,GAAOR,EAAcQ,CAAG,EAAIA,EAAM,CAAA,EAI3CL,EAAY9D,EAAQ,CAAE,KAAMiE,EAAM,SAAUC,EAAOK,EAAMD,EAAOF,CAAI,CAAG,CAAA,GAG7D,OAAOA,EAAS,KAC1BN,EAAY9D,EAAQ,CAAE,KAAMiE,EAAM,SAAUG,CAAI,CAAE,GAQvD,OAAOpE,CACR,EAEIwE,GAAU,CACZ,OAAQ,SAAgBC,EAAG,CACzB,IAAIC,EAAQ,KAERC,EAAQ,CAAA,EAEZ,OAAI,OAAO,OAAW,MACpBA,EAAM,WAAa,IAGdF,EAAE,KAAK,KAAO,KAAK,cAAc,QAAS,CAC/C,GAAI,CACF,OAAQ,SAAgBG,EAAO,CACzBF,EAAM,MAAM,UACdE,EAAM,eAAc,EACpBF,EAAM,cAAc,QAAQ,IAAIA,EAAM,QAAQ,EAAE,KAAK,UAAY,CAC/DA,EAAM,MAAM,UACZA,EAAM,MAAM,SAAUE,CAAK,EAC3BF,EAAM,SAAW,EAC/B,CAAa,IAEDA,EAAM,MAAM,UACZA,EAAM,MAAM,SAAUE,CAAK,EAE9B,EACD,MAAO,SAAeA,EAAO,CAC3BF,EAAM,MAAM,SACZA,EAAM,MAAM,QAASE,CAAK,CAC3B,CACF,EACD,MAAO,KAAK,UACZ,MAAOD,CACR,EAAE,CAAC,KAAK,OAAO,OAAO,CAAC,CACzB,EAED,MAAO,CACL,MAAO,CACL,KAAM,OACN,SAAU,EACX,EACD,IAAK,OACL,aAAc,MACf,EACD,OAAQ,CAAE,cAAezB,CAAe,EACxC,QAAS,UAAmB,CAC1B,IAAIhC,EAEJ,OAAOA,EAAO,CAAE,EAAEZ,EAAeY,EAAMiC,EAAc,KAAK,KAAK,EAAG7C,EAAeY,EAAMkC,EAAmB,IAAI,EAAGlC,CAClH,EAED,KAAM,UAAgB,CACpB,MAAO,CACL,SAAU,CAAE,CAClB,CACG,EACD,QAAS,UAAmB,CAC1B,IAAI2D,EAAS,KAEb,GAAK,KAAK,MAGV,KAAIC,EAAW,CAAA,EACX7D,EAAQ,KAAK,MACb8D,EAAY,CACd,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,SAAU,GACV,WAAY,GACZ,SAAU,GACV,WAAY,GACZ,SAAU,GACV,SAAU,GACV,OAAQ,CAAE,EACV,gBAAiB,CAAE,EACnB,IAAK,GACL,QAAS,UAAmB,CAC1BF,EAAO,MAAM,WAAa,GAC1BA,EAAO,MAAM,aACd,EACD,YAAa,UAAuB,CAClC,IAAIG,EAAS,KAAK,MAAM,KAAK,UAAU/D,CAAK,CAAC,EAC7C,OAAO+D,EAAO,gBACd,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAUxE,EAAK,CACzCqE,EAAO,KAAKA,EAAO,MAAM,gBAAiBrE,EAAKwE,EAAOxE,CAAG,CAAC,CACpE,CAAS,CACF,EACD,YAAa,SAAqByE,EAAM,CACtCH,EAASG,EAAK,KAAK,EAAIA,EACvBJ,EAAO,KAAK5D,EAAOgE,EAAK,MAAOA,CAAI,CACpC,EACD,eAAgB,SAAwBA,EAAM,CAC5C,OAAOH,EAASG,EAAK,KAAK,EAC1BJ,EAAO,QAAQA,EAAO,MAAOI,EAAK,KAAK,EACvCJ,EAAO,QAAQA,EAAO,MAAM,OAAQI,EAAK,KAAK,CAC/C,EACD,UAAW,UAAqB,CAC9B,OAAO,KAAKH,CAAQ,EAAE,QAAQ,SAAUtE,EAAK,CAC3CsE,EAAStE,CAAG,EAAE,WACxB,CAAS,CACF,EACD,OAAQ,UAAkB,CACxBS,EAAM,WAAa,GACnBA,EAAM,SAAW,GACjBA,EAAM,gBAAkB,GACxB,OAAO,KAAK6D,CAAQ,EAAE,QAAQ,SAAUtE,EAAK,CAC3C,IAAI0E,EAAUJ,EAAStE,CAAG,EAC1B0E,EAAQ,YAAc,GACtBA,EAAQ,cAAa,EACrBA,EAAQ,aAAY,EACpBA,EAAQ,WAAa,GACrBA,EAAQ,SAAW,EAC7B,CAAS,CACF,CACP,EAEI,OAAO,KAAKH,CAAS,EAAE,QAAQ,SAAUvE,EAAK,CAC5CqE,EAAO,KAAKA,EAAO,MAAOrE,EAAKuE,EAAUvE,CAAG,CAAC,CACnD,CAAK,EAED,KAAK,OAAO,QAAS,UAAY,CAC/B,IAAI2E,EAAU,GACVC,EAAU,GACVC,EAAY,GACZC,EAAY,GACZC,EAAY,GAChB,OAAO,KAAKT,CAAQ,EAAE,QAAQ,SAAUtE,EAAK,CAC3C,IAAI0E,EAAUJ,EAAStE,CAAG,EAE1B0E,EAAQ,WAAajE,EAAM,WAEvBiE,EAAQ,SACVC,EAAU,IAERD,EAAQ,WACVG,EAAY,IAEVH,EAAQ,WACVI,EAAY,IAEVJ,EAAQ,WACVK,EAAY,IAETL,EAAQ,OAKXL,EAAO,QAAQ5D,EAAM,OAAQiE,EAAQ,KAAK,GAJ1CE,EAAU,GAEVP,EAAO,KAAK5D,EAAM,OAAQiE,EAAQ,MAAOA,CAAO,EAI1D,CAAO,EAEDjE,EAAM,OAASkE,EACflE,EAAM,UAAY,CAACkE,EACnBlE,EAAM,SAAWoE,EACjBpE,EAAM,WAAa,CAACoE,EACpBpE,EAAM,SAAWqE,EACjBrE,EAAM,OAASmE,EACfnE,EAAM,SAAW,CAACmE,EAClBnE,EAAM,SAAWsE,CACvB,EAAO,CACD,KAAM,GACN,UAAW,EACjB,CAAK,EAMF,EAED,SAAU,CACR,UAAW,UAAqB,CAC9B,IAAIC,EAAUzE,EAAW,KAAK,cAAc,YAAa,KAAK,KAAK,EACnE,OAAOyE,CACR,CACF,EACD,QAAS,CACP,MAAO,UAAiB,CACtB,KAAK,MAAM,QACZ,EACD,SAAU,UAAoB,CAC5B,KAAK,MAAM,WACZ,CACF,CACH,EAEIC,GAAiB,OAAO,OAAW,IAAc,OAAS,OAAOjH,EAAW,IAAcA,EAAS,OAAO,KAAS,IAAc,KAAO,CAAA,EAM5I,SAASkH,GAAqBC,EAAIjH,EAAQ,CACzC,OAAOA,EAAS,CAAE,QAAS,CAAA,GAAMiH,EAAGjH,EAAQA,EAAO,OAAO,EAAGA,EAAO,OACpE,CAED,IAAIkH,GAAaF,GAAqB,SAAUhH,EAAQ,EAEvD,UAAW,CACV,IAAImH,EAAU,CAAA,EAAG,eACfC,EAAQ,CAAE,EAAC,MAEbpH,EAAO,QAAU,SAASqH,EAAQC,EAAO,CACvC,IAAIxF,EAAKyF,EAAMlH,EAAOmH,EACtBD,EAAO,CAAA,EACPC,EAAS,CAAA,EACT,IAAK1F,KAAOwF,EACLH,EAAQ,KAAKG,EAAOxF,CAAG,IAC5BzB,EAAQiH,EAAMxF,CAAG,EACbA,IAAQ,SAGZyF,EAAK,KAAKzF,CAAG,EACb0F,EAAO,KAAKnH,CAAK,IAEnB,OAAO,SAAS,MAAM,KAAM+G,EAAM,KAAKG,CAAI,EAAE,OAAO,CAAC,eAAkB,KAAK,UAAUF,CAAM,EAAK,GAAG,CAAC,CAAC,EAAE,MAAMC,EAAM,KAASE,CAAM,CACvI,CAEA,GAAG,KAAKT,EAAc,CACtB,CAAC,EAED,SAASU,EAAUxE,EAAO,CACxB,GAAKA,EAGL,QAASzB,EAAI,EAAGA,EAAIyB,EAAM,OAAQzB,IAAK,CACrC,IAAIjB,EAAQ0C,EAAMzB,CAAC,EACnB,GAAIjB,EAAM,MAAQ,QAChB,OAAO0C,EAAMzB,CAAC,EACT,GAAIyB,EAAMzB,CAAC,EAAE,SAClB,OAAOiG,EAAUxE,EAAMzB,CAAC,EAAE,QAAQ,CAErC,CACF,CAED,IAAIkG,GAAW,CACb,OAAQ,CAAE,cAAelD,EAAe,aAAcC,EAAc,kBAAmBC,CAAmB,EAC1G,OAAQ,SAAgBqB,EAAG,CACzB,IAAIC,EAAQ,KAER2B,EAAW,CAAA,EACXC,EAAQ,KAAK,UAAU,KAAK,SAAS,EACzC,GAAIA,GAASA,EAAM,QAAU,KAAK,UAChC,OAAO,KAAKA,EAAM,MAAM,EAAE,QAAQ,SAAU9F,EAAK,CAC/C,GAAIkE,EAAM,OAAOlE,CAAG,GAAKkE,EAAM,aAAalE,CAAG,EAAG,CAChD,IAAI+F,EAAM7B,EAAM,OAAOlE,CAAG,GAAKkE,EAAM,aAAalE,CAAG,EAAE8F,CAAK,EAC5D,GAAI5B,EAAM,UAAW,CACnB,IAAI8B,EAAQL,EAAUI,CAAG,EACrBC,IACFA,EAAM,KAAOA,EAAM,MAAQ,CAAA,EAC3BA,EAAM,KAAK,MAAQA,EAAM,KAAK,OAAS,GACvCA,EAAM,KAAK,MAAM,IAAMF,EAAM,IAEhC,CACDD,EAAS,KAAKE,CAAG,CAClB,CACT,CAAO,EACG,CAACF,EAAS,QAAUC,EAAM,SACxB,KAAK,OAAO,SAAW,KAAK,aAAa,UAAS,CACpD,IAAIC,EAAM,KAAK,OAAO,SAAW,KAAK,aAAa,QAAQD,CAAK,EAChE,GAAI,KAAK,UAAW,CAClB,IAAIE,EAAQL,EAAUI,CAAG,EACrBC,IACFA,EAAM,KAAOA,EAAM,MAAQ,CAAA,EAC3BA,EAAM,KAAK,MAAQA,EAAM,KAAK,OAAS,GACvCA,EAAM,KAAK,MAAM,IAAMF,EAAM,IAEhC,CACDD,EAAS,KAAKE,CAAG,CAClB,CAGL,OAAO9B,EAAE,KAAK,KAAO,KAAK,cAAc,YAAa4B,CAAQ,CAC9D,EAED,MAAO,CACL,MAAO,OACP,KAAM,OACN,KAAM,CACJ,KAAM,OACN,QAAS,EACV,EACD,IAAK,CACH,KAAM,MACP,EACD,UAAW,OACZ,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,UAAW,KACX,UAAW,EACjB,CACG,EACD,QAAS,UAAmB,CAC1B,KAAK,UAAY,KAAK,KACtB,KAAK,UAAY,KAAK,OAAS,KAAK,YACrC,EAED,SAAU,CACR,QAAS,UAAmB,CAC1B,IAAIC,EAAQ,KAAK,UAAU,KAAK,SAAS,EACrCG,EAAO,KAAK,MAAQ,KAAK,kBAAkB,cAAgB,KAAK,cAAc,aAElF,MAAI,CAACA,GAAQ,CAACH,EACL,GAGFV,GAAWa,EAAMH,CAAK,CAC9B,CACF,CACH,EAEII,GAAW,CACb,OAAQ,SAAgBjC,EAAG,CACzB,IAAIC,EAAQ,KAER9C,EAAcF,EAAkB,KAAK,OAAO,QAAS,KAAK,aAAa,EACvEiF,EAAc/E,EAAY,OAC1B+C,EAAQ,CACV,IAAK,IACX,EACI,GAAIgC,EAAY,OAAQ,CAYtB,GAXA,KAAK,KAAO1E,EAAQ0E,EAAY,CAAC,CAAC,EAE9B/E,EAAY,UACd,KAAK,UAAU,UAAY,CACzB,IAAIgF,EAAahF,EAAY,SAAS,kBAClCgF,IACFA,EAAW,UAAYA,EAAW,WAAalC,EAAM,KAEjE,CAAS,EAGC,KAAK,UAAW,CAClB,IAAImC,EAAKF,EAAY,CAAC,EAAE,KAAK,MAAM,IAAM,KAAK,WAAW,IACzD,KAAK,WAAW,IAAME,EACtBF,EAAY,CAAC,EAAE,KAAK,MAAM,GAAKE,EAC3BjF,EAAY,OACdA,EAAY,MAAM,KAAOA,EAAY,MAAM,MAAQ,GACnDA,EAAY,MAAM,KAAK,MAAQA,EAAY,MAAM,KAAK,OAAS,GAC/DA,EAAY,MAAM,KAAK,MAAM,IAAMiF,GAC1B,KAAK,MAAQ,UACtBlC,EAAM,IAAMkC,EAEf,CACDF,EAAY,QAAQ,SAAU1H,EAAO,CAC9BA,EAAM,KAAK,aACdA,EAAM,KAAK,WAAa,IAE1BA,EAAM,KAAK,WAAW,KAAK,CAAE,KAAM,qBAAsB,MAAO,CAAE,WAAYyF,EAAM,WAAY,OAAQA,EAAM,aAAe,CAAA,CAAE,EAC/HzF,EAAM,KAAK,MAAM,oBAAoB,EAAI,GACzCA,EAAM,KAAK,MAAM,SAAcyF,EAAM,QAC7C,CAAO,CAGF,CACD,OAAOD,EAAE,KAAK,KAAO,KAAK,cAAc,YAAa,CAAE,MAAS,KAAK,UAAW,MAAOE,CAAK,EAAI,KAAK,OAAO,OAAO,CACpH,EAED,MAAO,CACL,MAAO,OACP,OAAQ,KACR,UAAW,QACX,IAAK,CACH,KAAM,MACP,EACD,SAAU,MACX,EACD,OAAQ,CAAE,cAAezB,EAAe,aAAcC,EAAc,kBAAmBC,CAAmB,EAC1G,KAAM,UAAgB,CACpB,MAAO,CACL,KAAM,GACN,UAAW,KACX,WAAY,CAAE,CACpB,CACG,EAED,QAAS,CACP,WAAY,SAAuBpC,EAAa,CAC9C,IAAI8F,EAAI,KAAK,WACb,OAAO,OAAO,KAAKA,EAAE,MAAM,EAAE,OAAO,SAAUtB,EAASuB,EAAO,CAC5D,OAAAvB,EAAQxE,EAAY,QAAU,IAAMe,EAAUgF,CAAK,CAAC,EAAI,GACjDvB,CACR,EAAEzE,EAAWC,EAAa8F,CAAC,CAAC,CAC9B,CACF,EACD,SAAU,CACR,UAAW,UAAqB,CAC9B,OAAO,KAAK,WAAW,KAAK,cAAc,eAAe,CAC1D,EACD,eAAgB,UAA0B,CACxC,OAAO,KAAK,WAAW,KAAK,cAAc,YAAY,CACvD,CACF,EACD,QAAS,UAAmB,CAC1B,IAAIjC,EAAS,KAEb,KAAK,WAAW,MAAQ,KAAK,KAC7B,KAAK,UAAU,YAAY,KAAK,UAAU,EAE1C,IAAImC,EAAY,KAAK,IAAI,iBAAiB,sBAAsB,EAGhE,KAAK,OAAO,iBAAkB,SAAUjI,EAAOkI,EAAU,CAoBvD,QAnBIV,EAAM,OAENW,EAAQ,SAAehH,EAAGkB,EAAI,CAC5B6F,GACF,OAAO,KAAKA,CAAQ,EAAE,OAAO,SAAUE,EAAG,CACxC,OAAOF,EAASE,CAAC,CAC7B,CAAW,EAAE,QAAQ,SAAUA,EAAG,CACtB,OAAO7F,GAAYF,EAAI+F,CAAC,CACpC,CAAW,EAEHZ,EAAM,CAAA,EACN,OAAO,KAAKxH,CAAK,EAAE,OAAO,SAAUoI,EAAG,CACrC,OAAOpI,EAAMoI,CAAC,CACxB,CAAS,EAAE,QAAQ,SAAUA,EAAG,CACtBZ,EAAI,KAAKY,CAAC,EACVhG,GAASC,EAAI+F,CAAC,CACxB,CAAS,CACT,EAEejH,EAAI,EAAGkB,EAAIA,EAAK4F,EAAU9G,GAAG,GACpCgH,EAAMhH,EAAGkB,CAAE,EAEbyD,EAAO,WAAW,WAAa0B,CACrC,EAAO,CACD,KAAM,GACN,UAAW,EACjB,CAAK,EAED,KAAK,OAAO,OAAQ,SAAUxH,EAAOkI,EAAU,CAC7CpC,EAAO,UAAU,eAAeA,EAAO,UAAU,EACjDA,EAAO,WAAW,MAAQ9F,EAC1B8F,EAAO,UAAU,YAAYA,EAAO,UAAU,CACpD,CAAK,CACF,EACD,QAAS,UAAmB,CAC1B,IAAIuC,EAAS,KAEb,KAAK,UAAY,KAAK,OAAS,KAAK,aACpC,IAAIC,EAAK,KACLC,EAAoB,CAAA,EAEpBC,EAAY,OAChB,KAAK,WAAa,CAChB,MAAO,GACP,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,SAAU,GACV,SAAU,GACV,WAAY,GACZ,SAAU,GACV,SAAU,GACV,WAAY,GACZ,OAAQ,CAAE,EACV,OAAQ,CAAE,EACV,WAAY,KACZ,IAAK,KAAOnF,EAAU,EACtB,sBAAuB,SAA+BoF,EAAWpC,EAAS,CACpEA,EACFiC,EAAG,QAAQ,KAAK,OAAQG,CAAS,EAEjCH,EAAG,KAAK,KAAK,OAAQG,EAAW,EAAI,CAEvC,EACD,aAAc,SAAsBpC,EAAS,CAC3C,KAAK,OAASA,EACd,KAAK,SAAW,CAACA,CAClB,EACD,UAAW,UAAqB,CAC9B,KAAK,OAAS,GACd,KAAK,UAAY,EAClB,EACD,aAAc,UAAwB,CACpC,KAAK,OAAS,GACd,KAAK,UAAY,EAClB,EACD,YAAa,UAAuB,CAClC,KAAK,SAAW,GAChB,KAAK,WAAa,EACnB,EACD,cAAe,UAAyB,CACtC,KAAK,SAAW,GAChB,KAAK,WAAa,EACnB,EACD,YAAa,SAAqBrG,EAAO,CACvC,KAAK,SAAW,OAAOA,GAAU,UAAYA,EAAQ,GACjD,KAAK,SACP,KAAK,eAAc,EAEnB,KAAK,YAAW,CAEnB,EACD,eAAgB,UAA0B,CACxC,KAAK,YAAc,EACpB,EAED,YAAa,GACb,YAAa,CAAE,EACf,UAAW,SAAmBE,EAAO,CACnC,IAAIwI,EAAS,KAERxI,EAGHsI,EAAYtI,EAFZA,EAAQsI,EAIV,KAAK,SAAW,GAChB,IAAInC,EAAU,GAEVrG,EAAQwC,EAAYtC,EAAM,IAAI,EAG9ByI,EAAU,CACZ,SAAU,CAAE,EACZ,MAAO,CAAE,CACnB,EAEQJ,EAAkB,KAAKI,CAAO,EAE9B,IAAI/C,EAAQ1F,EAAM,KAAK,OAAS,CAAA,EAC5B0I,EAAU1I,EAAM,kBAChB0I,GAAWA,EAAQ,qBACrBhD,EAAQT,EAAO,CAAE,EAAES,EAAOgD,EAAQ,kBAAkB,GAGtD,IAAIC,GAAY3I,EAAM,kBAAoBA,EAAM,iBAAiB,UAAYA,EAAM,iBAAiB,UAAY,GAEhH,OAAO,KAAK,KAAK,WAAW,EAAE,QAAQ,SAAUuI,EAAW,CAEzD,IAAKzI,IAAU,IAAMA,IAAU,QAAaA,IAAU,OAASyI,IAAc,WAAY,CACvFC,EAAO,sBAAsBD,EAAW,EAAI,EAI5C,MACD,CAED,IAAIxI,EAAY,OAAO2F,EAAM6C,CAAS,EAAM,IAAc7C,EAAM6C,CAAS,EAAII,GAAUJ,CAAS,EAC5FK,EAAa,OAAOJ,EAAO,YAAYD,CAAS,GAAM,WAG1D,GAAI,EAAAK,IAAe7I,IAAc,MAAQ,OAAOA,EAAc,MAAgB,CAACyI,EAAO,YAAYD,CAAS,EAAE,aAI7G,CAAIxI,IACFyI,EAAO,OAAOD,CAAS,EAAIxI,GAG7B,IAAI8I,EAASD,EAAaJ,EAAO,YAAYD,CAAS,EAAEzI,EAAOC,EAAWC,CAAK,EAAIoI,EAAG,OAAOG,CAAS,EAElG,OAAOM,GAAW,UAChBA,EACFL,EAAO,sBAAsBD,EAAW,EAAI,GAE5CpC,EAAU,GACVqC,EAAO,sBAAsBD,EAAW,EAAK,IAG/CE,EAAQ,SAAS,KAAKI,CAAM,EAC5BJ,EAAQ,MAAM,KAAKF,CAAS,EAC5BH,EAAG,kBAAkB,SAAS,KAAKS,CAAM,GAErD,CAAS,EAEGJ,EAAQ,SAAS,OACnBL,EAAG,cAAc,QAAQ,IAAIK,EAAQ,QAAQ,EAAE,KAAK,SAAUK,EAAS,CAIjEL,IAAYJ,EAAkBA,EAAkB,OAAS,CAAC,IAK9DA,EAAoB,CAAA,EAEpBS,EAAQ,QAAQ,SAAUD,EAAQ5H,EAAG,CACnC,IAAI+D,EAAOyD,EAAQ,MAAMxH,CAAC,EACtB4H,EACFL,EAAO,sBAAsBxD,EAAM,EAAI,GAEvCmB,EAAU,GACVqC,EAAO,sBAAsBxD,EAAM,EAAK,EAExD,CAAa,EACDwD,EAAO,aAAarC,CAAO,EAC3BqC,EAAO,SAAW,GAC9B,CAAW,GAED,KAAK,aAAarC,CAAO,EACzB,KAAK,SAAW,GAEnB,CACP,EAGQ,KAAK,QACP,OAAO,KAAK,KAAK,MAAM,EAAE,QAAQ,SAAU4C,EAAM,CAC3C,OAAOZ,EAAO,OAAOY,CAAI,GAAM,aACjCZ,EAAO,OAAOY,CAAI,EAAE,YAAc,IAClCZ,EAAO,WAAW,YAAYY,CAAI,EAAIZ,EAAO,OAAOY,CAAI,CAIlE,CAAO,EAGH,KAAK,OAAO,SAAU,SAAUvG,EAAGwG,EAAM,CACnC,CAACA,GAAQ,CAACxG,GAGVoB,GAAyBpB,EAAGwG,CAAI,GAClCb,EAAO,WAAW,WAE1B,EAAO,CACD,KAAM,EACZ,CAAK,CACF,EACD,UAAW,UAAqB,CAC9B,KAAK,UAAU,eAAe,KAAK,UAAU,CAC9C,CACH,EAEId,GAAQ,CACV,OAAQ,CAAE,cAAepD,CAAe,EACxC,OAAQ,SAAgBuB,EAAG,CACzB,IAAI7C,EAAcF,EAAkB,KAAK,OAAO,QAAS,KAAK,aAAa,EACvEiF,EAAc/E,EAAY,OAC1B+C,EAAQ,CACV,IAAK,IACX,EACI,GAAIgC,EAAY,QACV,KAAK,UAAW,CAClB,IAAIE,EAAKF,EAAY,CAAC,EAAE,KAAK,OAASA,EAAY,CAAC,EAAE,KAAK,MAAM,IAAM,KAAOvE,EAAQ,EACrFuE,EAAY,CAAC,EAAE,KAAK,MAAM,GAAKE,EAC3BjF,EAAY,OACdA,EAAY,MAAM,KAAOA,EAAY,MAAM,MAAQ,GACnDA,EAAY,MAAM,KAAK,MAAQA,EAAY,MAAM,KAAK,MAAQ,GAC9DA,EAAY,MAAM,KAAK,MAAM,IAAMiF,GAC1B,KAAK,MAAQ,UACtBlC,EAAM,IAAMkC,EAEf,CAEH,OAAOpC,EAAE,KAAK,KAAO,KAAK,cAAc,SAAU,CAAE,MAAOE,CAAO,EAAE,KAAK,OAAO,OAAO,CACxF,EAED,MAAO,CACL,IAAK,CACH,KAAM,MACP,EACD,UAAW,CACT,KAAM,QACN,QAAS,EACV,CACF,CACH,EAEIuD,EAAsB,CAAA,EAE1B,SAASC,EAAcxD,EAAOvF,EAAYgJ,EAAiB,CACzD,OAAO,KAAKzD,CAAK,EAAE,QAAQ,SAAU0D,EAAM,CACzC,IAAIL,EAAOK,IAAS,OAAS1D,EAAM0D,CAAI,EAAE,YAAa,EAAGA,EAAK,cAE1DjJ,EAAW4I,CAAI,GAAK,CAACI,EAAgBJ,CAAI,IAC3CI,EAAgBJ,CAAI,EAAI5I,EAAW4I,CAAI,EAE7C,CAAG,CACF,CAED,SAASM,GAAerJ,EAAOsJ,EAAUnJ,EAAY,CAEnD,IAAIoJ,EAAa,GACb7D,EAAQ1F,EAAM,KAAK,OAAS,CAAA,EAC5BwJ,EAAWF,EAAS,KAAK,OAAS,CAAA,EAClChC,EAAM,CAAA,EAeV,GAbIhF,EAAYtC,EAAM,IAAI,IAAMsC,EAAYgH,EAAS,IAAI,IACvDhC,EAAI,OAAS,GACbiC,EAAa,IAGf,OAAO,KAAKpJ,CAAU,EAAE,QAAQ,SAAUoI,EAAW,CAC/C7C,EAAM6C,CAAS,IAAMiB,EAASjB,CAAS,IACzCjB,EAAIiB,CAAS,EAAI,GACjBgB,EAAa,GAEnB,CAAG,EAGGvJ,EAAM,kBAAoBA,EAAM,iBAAiB,UAAW,CAC9D,IAAIyJ,EAASzJ,EAAM,iBAAiB,UAChC0J,EAAYJ,EAAS,iBAAiB,UAC1C,OAAO,KAAKnJ,CAAU,EAAE,QAAQ,SAAUoI,EAAW,CAC/CkB,EAAOlB,CAAS,IAAMmB,EAAUnB,CAAS,IAC3CjB,EAAIiB,CAAS,EAAI,GACjBgB,EAAa,GAErB,CAAK,CACF,CAED,GAAIA,EACF,OAAOjC,CAEV,CAED,IAAIqC,GAAmB,CACrB,KAAM,qBACN,KAAM,SAAcxH,EAAIyH,EAAS5J,EAAO,CACtC,IAAI6J,EAAaD,EAAQ,MAAM,WAC3BzJ,EAAayJ,EAAQ,MAAM,OAAO,WAElClE,EAAQ1F,EAAM,KAAK,OAAS,CAAA,EAC5B8J,EAAY9G,EAAQhD,CAAK,EAE7B,GAAI,CAAC8J,EAAW,CACd,QAAQ,KAAK,kCAAkC,EAC/C,MACD,CAEGpE,EAAM,WACRuD,EAAoBY,EAAW,GAAG,EAAIzG,GAAS,SAAUyG,EAAY7J,EAAO,CACtE6J,EAAW,aACbA,EAAW,UAAS,EAEtBA,EAAW,UAAU7J,CAAK,CAClC,EAAS0F,EAAM,QAAQ,GAInBwD,EAAcxD,EAAOvF,EAAY0J,EAAW,WAAW,EAGnD7J,EAAM,kBAAoBA,EAAM,iBAAiB,WACnDkJ,EAAclJ,EAAM,iBAAiB,UAAWG,EAAY0J,EAAW,WAAW,EAGpFA,EAAW,UAAU7J,CAAK,EAG1BmC,EAAG,iBAAiB,OAAQ,UAAY,CACtC0H,EAAW,YAAY,EAAK,CAC7B,EAAE,EAAK,EACR1H,EAAG,iBAAiB,QAAS,UAAY,CACvC0H,EAAW,YAAY,EAAI,CAC5B,EAAE,EAAK,EAGR,IAAIzB,EAAKpI,EAAM,kBACXoI,IACFA,EAAG,IAAI,OAAQ,UAAY,CACzByB,EAAW,YAAY,EAAK,CACpC,CAAO,EACDzB,EAAG,IAAI,QAAS,UAAY,CAC1ByB,EAAW,YAAY,EAAI,CACnC,CAAO,EAEDzB,EAAG,MAAM,uBAAwB,UAAY,CAC3CjG,EAAG,iBAAiB,WAAY,UAAY,CAC1C0H,EAAW,YAAY,EAAK,CAC7B,EAAE,EAAK,EACR1H,EAAG,iBAAiB,UAAW,UAAY,CACzC0H,EAAW,YAAY,EAAI,CAC5B,EAAE,EAAK,CAChB,CAAO,EAEDzB,EAAG,IAAI,cAAe,SAAU7F,EAAM,CAC/B6F,EAAG,oBACNc,EAAc3G,EAAMpC,EAAY0J,EAAW,WAAW,EAExDzB,EAAG,mBAAqB7F,EACxBsH,EAAW,UAAUzB,EAAG,MAAM,CACtC,CAAO,EAEJ,EACD,OAAQ,SAAgBjG,EAAIyH,EAAS5J,EAAO+J,EAAU,CACpD,IAAI5J,EAAayJ,EAAQ,MAAM,OAAO,WAElCI,EAAUX,GAAerJ,EAAO+J,EAAU5J,CAAU,EACpD0J,EAAaD,EAAQ,MAAM,WAG3BlE,EAAQ1F,EAAM,KAAK,OAAS,CAAA,EAC5BoI,EAAKpI,EAAM,kBACXoI,GAAMA,EAAG,qBACX1C,EAAQT,EAAO,GAAIS,EAAO0C,EAAGA,EAAG,kBAAkB,CAAC,GAGjDpI,EAAM,IAAI,UAAU,QAAQ6J,EAAW,WAAW,CAAC,CAAC,IAAM,KAC5D7J,EAAM,IAAI,UAAYA,EAAM,IAAI,UAAY,IAAM6J,EAAW,WAAW,KAAK,GAAG,GAG7EG,IAIDA,EAAQ,OAENtE,EAAM,UACRmE,EAAW,SAAW,GACtBZ,EAAoBY,EAAW,GAAG,EAAEA,EAAY7J,CAAK,IAEjD6J,EAAW,aACbA,EAAW,UAAS,EAEtBA,EAAW,UAAU7J,CAAK,GAS5B6J,EAAW,UAAU7J,CAAK,EAE7B,CACH,EAEA,SAASiK,EAAYnF,EAAS,CAC5B,IAAIoF,EAEAC,EAAIlF,EAAO,GAAM,CAAA,EAAIxE,EAAQqE,CAAO,EACxC,KAAK,QAAU,UAAY,CACzB,OAAOzD,EAAe,CAAA,EAAI4C,EAAekG,CAAC,CAC9C,EACE,KAAK,YAAcD,EAAc,CAAE,EAAE7I,EAAe6I,EAAaC,EAAE,cAAe5E,EAAO,EAAGlE,EAAe6I,EAAaC,EAAE,kBAAmBhD,EAAQ,EAAG9F,EAAe6I,EAAaC,EAAE,kBAAmB1C,EAAQ,EAAGpG,EAAe6I,EAAaC,EAAE,eAAgB9C,EAAK,EAAG6C,GAC1Q,KAAK,WAAa,CAAE,iBAAkBP,EAAgB,CACvD,CAED,IAAIS,EAAU,SAAUC,EAAc,CACpC7I,GAAS4I,EAASC,CAAY,EAE9B,SAASD,GAAU,CACjB,OAAA1J,EAAe,KAAM0J,CAAO,EACrBzI,GAA0B,MAAOyI,EAAQ,WAAa,OAAO,eAAeA,CAAO,GAAG,MAAM,KAAM,SAAS,CAAC,CACpH,CAED,OAAAvJ,EAAYuJ,EAAS,KAAM,CAAC,CAC1B,IAAK,UACL,MAAO,SAAiBE,EAAKxF,EAAS,CACpCwF,EAAI,MAAM,IAAI,KAAKxF,CAAO,CAAC,CAC5B,CACL,EAAK,CACD,IAAK,YACL,IAAK,UAAkB,CACrB,MAAO,CAAC,CAAC,KAAK,QAAQ,IACvB,EACD,IAAK,SAAgByF,EAAK,CACxB,KAAK,QAAQ,KAAOA,CACrB,CACF,CAAA,CAAC,EACKH,CACR,EAACH,CAAW,EAEb,OAAAA,EAAY,KAAKG,CAAO,EAExBA,EAAQ,QAAU,IAAIA,EAEfA,CAEP","x_google_ignoreList":[0]}